/* QuickView v 0.1		 										*/
/* CONFIG: 														*/
/* you can also overwrite this value after including this js 	*/

// Path to QuickView
//var global_quickViewPath = "/quickview/";
// Path to QuickView Button
//var global_quickViewButtonPath = global_quickViewPath + "images/quickview.gif";
// Path to QuickView PDP Template
//var global_quickViewPDPTemplatePath = "/catalog/quickView.cfm";
// Path to QuickView Zoom Image Template
//var global_quickViewZoomImagePath = "/catalog/quickViewZoomImage.cfm";
// Flag for URLRewrite (i.e. /sku--123/model--abc/)
//var global_quickViewUseURLRewrite = false;
// Bottom margin for QuickView Button
var global_quickViewButtonBottomMargin = 10;
// Width of QuickView Panel
var global_quickViewWidth = 520;

/********************************/
/* DO NOT MODIFY CODE BELOW     */
/********************************/

// preload button image so that it would be ready at the time we calculate the height
var global_quickviewButtonImage = new Image();
global_quickviewButtonImage.src = global_quickViewButtonPath;

// set mouseenter/mouseleave event to quickviewEnabled class elements
$(document).ready(function() {
	initializeQuickview();
});

function initializeQuickview() {
	$(".quickViewButtonWrap").unbind();

	$(".quickviewEnabled").each(function() {
		var URLString = $(this).attr("href");
		URLString = $.trim(URLString);
		
		var wrap = '<span class="quickViewButtonWrap"></span>';
		$(this).wrap(wrap);
		var parentWrap = $(this).parent(".quickViewButtonWrap");
				
		$(this).removeClass("quickviewEnabled");
		
		var tags = '<a class="quickviewButton" onmousedown="openQuickViewWithURL(\'' + URLString + '\');"><img src="' + global_quickViewButtonPath + '" alt="Quick View" /></a>';
		parentWrap.prepend(tags);

		// calculate width and top margin for the button
		var imgObj = $("img", this);
		var width = imgObj.width();
		var marginTop = imgObj.height() - global_quickviewButtonImage.height - global_quickViewButtonBottomMargin;
		
		parentWrap.children(".quickviewButton").css({"width": width, "margin-top": marginTop});	
	});
	
	$(".quickViewButtonWrap").bind("mouseenter", function() {
		$(this).children(".quickviewButton").css("display", "inline");
	}).bind("mouseleave", function() {
		$(this).children(".quickviewButton").css("display", "none");
	})
}

function openQuickView(queryString) {
	closeQuickView();

	if ($.browser.msie && $.browser.version == "6.0")
		$("select").css("visibility", "hidden");

	var tags = '<div id="quickview"><div id="quickview_top"><div id="quickview_topRight"></div></div><div id="quickview_middle"><div id="quickview_middleRight"><div id="quickviewLoading"></div><div id="quickviewContent"></div><div style="clear: both"></div></div></div><div id="quickview_bottom"><div id="quickview_bottomRight"><a href="javascript:closeQuickView()"><span class="red">x</span> Close</a></div></div></div>';
	$("body").prepend(tags);
	$("#quickviewLoading").css("display", "block");	
	var bodyWidth = $("body").width();
	var leftOffset = (bodyWidth - global_quickViewWidth) / 2;
	var topOffset = getViewpointTop() + ((getViewpointHeight() - $("#quickview").height()) / 2);		
	$("#quickview").css({ left: leftOffset, top: topOffset, width: global_quickViewWidth });			

	$("#quickviewContent").load(global_quickViewPDPTemplatePath,
		queryString,
		function (responseText, textStatus, XMLHttpRequest) {
			$("#quickviewLoading").css("display", "none");			
			if (textStatus != "success") {
				$("#quickview").remove();
				// for debugging
				//$("body").html(responseText);
				alert("There was problem loading Quick View for this product. Please try back again later.");
			}
			else {
				var topOffset = getViewpointTop() + ((getViewpointHeight() - $("#quickview").height()) / 2);
				$("#quickview").animate({top: topOffset}, function() {
					if (typeof(quickviewCallbackFunction) == "function")
						quickviewCallbackFunction();
						
						/* workaround to avoid click-through links under quickview in ie */
						var quickviewContentBackground = '<div id="quickviewContentBackground"></div>';
						$("body").prepend(quickviewContentBackground);
						var width = $("#quickviewContent").width();
						var height = $("#quickviewContent").height();
						var offset = $("#quickviewContent").offset();
						var left = offset.left;
						var top = offset.top;
						$("#quickviewContentBackground").css({left: left, top: top, width: width, height: height});
						
						$("#quickview_excludedMessage a").click(qvShowExcludedBubble);
						$("#quickview_excludedMessage a").mouseout(qvHideExcludedBubble);							
					}
				);
			}
		}
	);
}

function openQuickViewWithURL(URLString) {
	var queryString = getQueryStringFromURL(URLString);

	if (queryString == null) {
		queryString = getQueryStringFromURLForURLReWrite(URLString);
	}

	if (queryString == null) {
		queryString = getQueryStringFromURLForURLReWriteII(URLString);
	}	
	
	
	openQuickView(queryString);
}

function closeQuickView() {
	if ($.browser.msie && $.browser.version == "6.0")
		$("select").css("visibility", "visible");	
					
	$("#quickview").remove();
	$("#quickviewContentBackground").remove();
}

function quickViewZoom(args) {
	$("#quickviewContent").css("display", "none");	
	$("#quickviewLoading").css("display", "block");	
	$.post(global_quickViewZoomImagePath,
		args,
		function(data, textStatus) {
			$("#quickviewLoading").css("display", "none");	
			if (textStatus != "success") {
				alert("There was problem loading Zoom Image for this product. Please try back again later.");
				closeQuickViewZoomImage();
			}
			else {
				var imageDiv = '<div id="quickViewZoomImage"><a href="javascript:closeQuickViewZoomImage()">' + data + '</a></div>';
				$("#quickview_middleRight").prepend(imageDiv);
				$("#quickview_bottomRight a").attr("href", "javascript:closeQuickViewZoomImage()");
			}
		}
	);
}

function closeQuickViewZoomImage() {
	$("#quickviewContent").css("display", "block");
	$("#quickViewZoomImage").remove();	
	$("#quickview_bottomRight a").attr("href", "javascript:closeQuickView()");
}

/* utility functions */

function getQueryStringFromURL(URLString) {
	var returnObject = {};
	var querystring = URLString.split("?")[1];
	var skuFound = false;
	var model_nbrFound = false;
	var modelFound = false;
	
	// return empty object if there is no query string
	if (!querystring) return null;
	
	// parse query string into object
	// TODO: we might need to check for &amp;
	var querystringArray = querystring.split("&");
	
	$.each(querystringArray, function(i) {
		var key = querystringArray[i].split("=")[0];
		var value = querystringArray[i].split("=")[1];

		if (key == 'sku') skuFound = true;
		if (key == 'model_nbr') model_nbrFound = true;
		if (key == 'model') modelFound = true;
		
		if (key) returnObject[key] = value;
	});

	if ((skuFound && model_nbrFound) || modelFound) {
		return returnObject;
	}
	else {
		return null;
	}
}

function getQueryStringFromURLForURLReWrite(URLString) {
	var returnObject = {};
	var skuFound = false;
	var model_nbrFound = false;
	var modelFound = false;
		
	// parse query string into object
	var querystringArray = URLString.split("/");
	
	$.each(querystringArray, function(i) {
		var key = querystringArray[i].split("--")[0];
		var value = querystringArray[i].split("--")[1];
		
		if (key == 'sku') skuFound = true;
		if (key == 'model_nbr') model_nbrFound = true;
		if (key == 'model') modelFound = true;		
		
		if (key) returnObject[key] = value;
	});

	if ((skuFound && model_nbrFound) || modelFound) {
		return returnObject;
	}
	else {
		return null;
	}
}

function getQueryStringFromURLForURLReWriteII(URLString) {
	var returnObject = {};
	var skuFound = false;
	var modelFound = false;
		
	// parse query string into object
	var querystringArray = URLString.split("/");
	
	$.each(querystringArray, function(i) {
		var key = querystringArray[i].split(":")[0];
		var value = querystringArray[i].split(":")[1];
		
		if (key == 'model') {
			key = 'model_nbr';
		}

		if (key == 'sku') skuFound = true;
		if (key == 'model_nbr') model_nbrFound = true;
		if (key == 'model') modelFound = true;	
				
		if (key) returnObject[key] = value;
	});

	if ((skuFound && model_nbrFound) || modelFound) {
		return returnObject;
	}
	else {
		return null;
	}
}