(function (window, $, undefined) {
	var disappear_timeout, appear_timeout;
	var previous, currentId = null;
	
	var card = $('<div id="hovercard-wrapper"><span class="hovercard-pointer"></span><div class="hovercard-content"></div></div>').css({
		'z-index': '9000',
		'display': 'none'
	});
	
	$.fn.hovercard = function (settings) {
		var defaults = {
			width: "360",
			load: '/ajax/hovercard.php',
			wait_disappear: 300,
			wait_appear: 0,
			data: {}
		};
		var options = $.extend({}, defaults, settings);
		
		return this.each(function () { Hovercard($(this), options); });
	}
	
	function Hovercard (orig, options) {
		orig.bind('mouseover', function (event) {
			var content = card.find('.hovercard-content');
			if (disappear_timeout) { clearTimeout(disappear_timeout); }
			/*
			var href = unescape(orig.parent('a').attr('href'));
			var parts = href.split('.');
			var page = parts[0];	
			*/
			var prod_id = orig.parents('div.listing, div.pkg').find('form input[name="product"]').val();
			if (prod_id.substr(0, 3) == 'PKG') { page = 'package'; }
			else { page = 'product'; }

			if (page != 'product' && page != 'package') { return; }	
			
			/*
			var raw_qs = href.substr(href.indexOf('?')+1).split('&');
			var qs = {}; 
			for (var i = 0, len = raw_qs.length; i < len; i++) {
				var parts = raw_qs[i].split('=');	
				qs[parts.shift()] = parts.join('=');
			}
			*/
			var qs = {id: prod_id};
			if (qs.id == currentId) { card.show(); return; }
			currentId = qs.id;

			
			var data = options.data;
			data.type = page;
			data.id = qs.id;//parseInt(qs.id, 10);	
			if (qs.cat) { data.cat = parseInt(qs.cat, 10); }
			if (qs.highlight) { data.highlight = qs.highlight; }
			
			$.ajax({
				url: options.load,
				data: data,
				dataType: 'html',
				success: onsuccess
			});
			function onsuccess (response, status, xhr) {
				if (appear_timeout) { clearTimeout(appear_timeout); }
				if (disappear_timeout) { clearTimeout(disappear_timeout); }
				appear_timeout = setTimeout(function () {
					success(response, status, xhr)
				}, 1);
			}
			
			function success (response, status, xhr) {
				var width = Math.max(parseInt(options.width, 10), parseInt(xhr.getResponseHeader("X-Suggested-Width"), 10));
				width = Math.min($('.contentdjr').width(), width);
				content.html(response);
				var position = orig.offset();
				previous = orig;
				var listing = orig.parents('.listing, .pkg').offset();	
				
				card.css({
					'width': (width) + "px",
					'left': (listing.left - 9) + "px",
					'display': 'block'
				}).show();
				card.css('top', Math.round(listing.top - card.outerHeight() + 10) + "px");
			}
		});	
	}
	
	card.bind('mouseleave', function (event) {
		if (appear_timeout) { clearTimeout(appear_timeout); }
		if (disappear_timeout) { clearTimeout(disappear_timeout); }
		disappear_timeout = setTimeout(function () {
			card.hide();//.fadeTo('fast', 0, function () { $(this).css('display', 'none'); });
			currentId = null;
		}, 300);
	}).find('.hovercard-close').bind('click', function (event) {
		event.preventDefault(true);
		card.hide();
		currentId = null;
	});


	
	$(function () {
		card.appendTo('body');
		$('.contentdjr .productthumb img').hovercard();
	});

})(window, jQuery);

