// JavaScript Document
var ctrlDown = false;
var subCat;
var tablePrinted = false;
var selectedVideo;

//alert('running');
var offsetTop = 0;

$(function() {
	$("#buyNowFeedback").hide();
	
	subCat = sub_cat_only(window.location.href);
	//alert(subCat);
	if (subCat != null && subCat != "") { selectSubCat(subCat, 'load'); }
	
	setupProduct();
	
	$(".menuSubCat > li > h4 > a").click(function() {
		//$("#product").hide();
		var subCat = $(this).attr('subCat');
		var append;
		if (ctrlDown) { 
			append = 1;
		}
		selectSubCat(subCat, 'click', append);
	});
	
	
	if (subCat != null && subCat != "") { selectSubCatMap(subCat); }
	setupMiniMap();
	
	$("#headerRightUp").click(function() {
		
		
		if (Math.abs(curTop) < thumbsWindowHeight)
			{ totalY = Math.abs(curTop); }
		else
			{ totalY = thumbsWindowHeight; }
		
		if(!isScrolling && numThumbsVis > 12 && curTop < 0)
		{
			isScrolling = true;
			curTop = $("#headerThumbs").position().top;
			newTop = curTop + totalY;
			$("#headerThumbs").animate({ top: newTop }, function(){ isScrolling = false; curTop = $("#headerThumbs").position().top; });
		}
	});
	
	$("#headerRightDown").click(function() {
		curTop = $("#headerThumbs").position().top;
		remainingY = (thumbsHeight - thumbsWindowHeight + curTop) - 0;
		
		if (remainingY < thumbsWindowHeight)
			{ totalY = remainingY; }
		else
			{ totalY = thumbsWindowHeight; }
			
		if (!isScrolling && numThumbsVis > 12)
		{
			isScrolling = true;
			curTop = $("#headerThumbs").position().top;
			newTop = curTop - totalY;
			$("#headerThumbs").animate({ top: newTop }, function(){ isScrolling = false; curTop = $("#headerThumbs").position().top; });
		}
	});
	
	$('#footer').after("<div id='zoomOverlay'><div id='zoomOverlayImage'></div></div>");
	//$('#footer').after("<div id='zoomDebug'></div>");
	
	if(($('#divProduct').text()) != '') // ON A PROPER PRODUCT PAGE, NOT A CATEGORY
	{
		$(document).bind("mousemove",showZoom);
		//$('#divProductImageLarge').bind("mousemove", showZoom);
		//$('#zoomOverlay').bind("mousemove", showZoom);
		var largeImg = $('#divProductImageLarge > img').attr('src');
		if (largeImg)
			{ switchProductPic(largeImg); }
		
		if(getHashVar("alternateView"))
		{
			//$("#"+getHashVar("alternateView")).click();
			//alert("video: " + getHashVar("alternateView"));
			var videoVar = getHashVar("alternateView");
			
			$("#divProductAlternateViewThumbnails a[rel*=lightbox[alternates]]").each(function() { 
				//alert( $(this).attr('title') ); 
				var thisTitle = $(this).attr('title').replace(/ /g,"-");
				if(thisTitle == videoVar)
				{
					selectedVideo = $(this);
					//alert("selectedVideo = " + $(this));
				}
			});
			if(selectedVideo)
			{
				Shadowbox.init();
				Shadowbox.open({
					title: ($(selectedVideo).attr('title')) ? $(selectedVideo).attr('title') : $(selectedVideo).attr('lightboxtitle'),
					content: $(selectedVideo).attr('HREF'),
					moreBeta: $(selectedVideo).attr('moreBeta'),
					gallery: 'alternates'
				   }, { gallery: 'alternates'} );
			}
		}
		
	}
	else if (($("#divSearchResultsList").text()) != ''){
		/*
			SET UP DRAG AND DROP TO COMPARE
		*/
		$('#minorContent').append("<div id=\"dropContainer\"><div id=\"dropHeader\">" + textCompareDropHeader + "</div><div id=\"drop\"><div id=\"dropInstructions\"><br/><br/>" + textCompareDropInstruction + "</div></div><div id=\"dropCompare\" style=\"display: none; \"><a href=\"javascript:compareNow();\">" + textCompareDropLink + "</a></div></div>");
		
		$(window).scroll(function() {
			moveDrop();
		});

		
		$(".searchResult").draggable({ zIndex: 999, helper: 'clone' });
		
		$("#drop").droppable({
			activeClass: 'dragActive',
			hoverClass: 'dropOver',
			drop: function(event, ui) {
				compareCount++;
				
				switch(compareCount) {
					case 0:
						return;
						break;
					case 1:
						$("#drop > #dropInstructions").hide();
						break;
					case 2:
					case 3:
						$("#dropCompare").show();
						break;
					case 4:
						compareCount = 3;
						return;
						break;
				}
	
				
				$(this).append("<div id=\"drop-" + compareCount + "\" class=\"dropProduct\"><div class=\"dropProductImage\"><img src=\"" + $(ui.draggable).find('.searchResultThumbnail').children("img").attr('src').replace("70W","53x53") + "\"/></div><div class=\"dropProductName\">" + $(ui.draggable).find('.searchResultName').children("a").text() + "</div><div class=\"dropRemove\"><a href=\"javascript:dropRemove("+compareCount+");\" title=\"" + textCompareRemoveTitle + "\"><img src=\"graphics/remove-icon.png\" /></a></div></div>");
				
				aCompare[aCompare.length] = $(ui.draggable).attr('model');
				dropRemoveBehaviours();
			}
		});
		
		/*
			END DRAG AND DROP TO COMPARE SETUP
		*/
	}
	
	$("div#mainContent input").focus(function() {
		var bottomOfScreen = myHeight - $("#footer").height();
		var thisHeight = $(this).height();
		var thisTop = $(this).offset().top;
		var thisBottom = thisHeight + thisTop;
		
		if(thisBottom > bottomOfScreen + $(document).scrollTop()) {
			$(document).scrollTop(thisBottom - bottomOfScreen + thisHeight);
		}
		
	});
	// ucBillAddress_divAddress
	$("div#divCheckoutPage input[type!=submit]").attr('autocomplete','off');
	$("div#divCheckoutPage input[type!=submit]").keydown(function(event) {
		if(event.keyCode == 13) {
			$(this).closest('div[id*=divItems],div[id*=divAddress],div[id*=divLogin]','div#divCheckoutPage').find('input[type=submit]').click();
			return false;
		}
	});
	
});

/*
	DRAG AND DROP
*/
var srHTML = new Array();
var compareCount = 0;
var aCompare = new Array();

function moveDrop() {
	var scrollTop = $(document).scrollTop();
	var siloOffset = 29 + 13; // 29px = height of tabs + 13 = silo top padding
	var menuBottom = $("ul.menucat:visible").offset().top + $("ul.menucat:visible").height();
	var menuHeight = $("ul.menucat:visible").height() + siloOffset; 
	
	if((scrollTop + 13) > menuBottom) {
		var newTop = (scrollTop - $("#leftSiloOne").offset().top + siloOffset);
		if(navigator.userAgent.indexOf("Firefox") > -1) {
			$("#dropContainer").animate({ top: newTop }, 100);
		}
		else {
			document.getElementById("dropContainer").style.top = newTop + "px";
		}
	}
	else {
		document.getElementById("dropContainer").style.top = menuHeight + "px";
	}
	return scrollTop;
}

function dropRemoveBehaviours() {
	$("div#drop div.dropProduct").hover(function() {
		// hover
		$(this).find("div.dropRemove").fadeIn('fast');
	}, function() {
		// blur
		$(this).find("div.dropRemove").fadeOut('fast');
	});
	
	$("div#drop div.dropRemove a").tooltip();
}

function dropRemove(i) {
	$("div#drop div#drop-"+i).fadeOut("fast", function() { 
		$(this).remove(); 
		$("div#drop div.dropProduct").each(function(j) {
			$(this).attr('id','drop-' + (j+1));
		});
	});
	compareCount--;
	if(compareCount <= 0) {
		compareCount = 0;
		$("#drop > #dropInstructions").show();
		$("#dropCompare").hide();
	}
	aCompare.splice(i-1,1);
	
}

function compareNow() {
	var sCompare = 'Compare.aspx?' + lang + "/";
	for(i = 0; i < aCompare.length; i++) {
		if(i>0) sCompare += "&";
		sCompare += "model" + (i+1) + "=" + aCompare[i];
	}
	//alert(sCompare);
	window.location.href = sCompare;
}
/*
	END DRAG AND DROP
*/

/*
	ZOOM OVERLAY
*/
var zoomOverlayVeto = false;
var zoomOverlayOn = false;
var posx = 0;
var posy = 0;
var myWidth = 0, myHeight = 0;

showZoom = function(e) {
	if (!e) { var e = window.event; }
	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	
	var imageOffset = $('#divProductImageLarge').offset();
	var topLimit = ($("#market").attr('market') == 'URBAN') ? imageOffset.top + 20 : imageOffset.top;
	var imageW = $('#divProductImageLarge').width();
	var imageH = $('#divProductImageLarge').height();
	
	// Turn overlay on or off depending on it's position
	if(!zoomOverlayVeto && (posx > imageOffset.left && posx < (imageOffset.left + imageW) && posy > topLimit && posy < (imageOffset.top + imageH)))
	{
		$("#zoomOverlay").css('left', posx - ($('#zoomOverlay').width() / 2));
		$("#zoomOverlay").css('top', posy - ($('#zoomOverlay').height() / 2));
		
		var offsetX = (posx - imageOffset.left);
		var offsetY = (posy - imageOffset.top);
		
		var offsetPx = (offsetX / imageW) * 100;
		var offsetPy = (offsetY / imageH) * 100;
		
		var bgPos = offsetPx + "% " + offsetPy + "%";
		$("#zoomOverlayImage").css('background-position', bgPos);
	
		$("#zoomOverlay").show();
		zoomOverlayOn = true;
	}
	else
	{
		$("#zoomOverlay").hide();
		zoomOverlayOn = false;
	}
};

var curIndex, curTop, newTop, numThumbsVis;
var thumbsHeight;
var thumbHeight = 70;
var thumbsWindowHeight = 210;
var isScrolling = false;
var minY, remainingY, totalY;

setupMiniMap = function() {
	$("#headerRight").show();
	
	// number of visible thumbs
	numThumbsVis = $(".thumb:visible").length;
	
	if (numThumbsVis > 12)
	{
		$("#headerRightUp").show();
		$("#headerRightDown").show();
	}
	
	// index of thumb with .current class
	curIndex = $(".thumb:visible").index($(".currThumb"));
	//alert(curIndex);
	
	$(".thumb").click(function() {
		var targetURL = this.id;
		if (subCat != null)
			{ targetURL += "#" + subCat; }
		pageTracker._trackEvent('product-mini-map', targetURL);
		window.location = targetURL; 
	});
	
	// height of all rows containing thumbnails
	thumbsHeight = Math.ceil($(".thumb:visible").length / 4) * thumbHeight;
	
	var totalY;
	// If .current is not on the first page, scroll to that page
	if(curIndex >= 12) {
		thumbScreen = Math.floor(curIndex / 12);
		var firstScroll = thumbScreen * - thumbsWindowHeight;
		
		var remainingY = (thumbsHeight - thumbsWindowHeight) * -1;
		
		
		if (remainingY > firstScroll)
			{ totalY = remainingY; }
		else
			{ totalY = firstScroll; }
		
		$("#headerThumbs").css('top',totalY);
		curTop = $("#headerThumbs").position().top;
		//$("#headerThumbs").animate({ top: totalY }, 1000, function() { curTop = $("#headerThumbs").position().top; });
	}
	
	// minimum up can be shifted, total height less the visible area
	minY = (thumbsHeight - thumbsWindowHeight) * -1;
	totalY = thumbsWindowHeight;
};



setupProduct = function() {
	var maxNameHeight = 0;
	$(".productColoursThumbnailName").each(function () {
		maxNameHeight = Math.max(maxNameHeight, $(this).height());
	});
	$(".productColoursThumbnailName").height(maxNameHeight);
	
	var maxThumbnailHeight = 0;
	$(".productColoursThumbnailContent").each(function () {
		maxThumbnailHeight = Math.max(maxThumbnailHeight, $(this).height());
	});
	//alert("heights: " + listHeights + "max height: " + maxHeight);
	$(".productColoursThumbnailContainer").height(maxThumbnailHeight);
	
/*	THIS WAS SET UP TO ALIGN THE THUMBNAILS TO THE BOTTOM OF THE CONTAINER
	var numThumbs = $(".productColoursThumbnailContainer").length;
	var rowThumbs = Math.ceil(numThumbs / 3);
	// alert("numThumbs (" + numThumbs + ") / 3 = rowThumbs (" + rowThumbs + ")");
	
	var summaryHeight = (rowThumbs * maxThumbnailHeight) + 30;
	//alert (betaHeight);
	$("#divProductSummary").css('padding-bottom', summaryHeight + "px");
*/	
	
	//$(".productBetaWindow:not(.productBetaWindowSelected)").hide();
	
	$(".productBetaTab").click(function() { 
		switchBetaWindow(this.id);
	});
	
	$(".productColoursThumbnailContent").click(function() {
		switchProductPic($(this).attr('id'));
	});
};

switchBetaWindow = function(clickedTab, allowScroll) {
	//alert('clickedTab: ' + clickedTab);
	var targetWindow = "#productBetaWindow" + clickedTab.substr(14, clickedTab.length);
	
	$(".productBetaTab").removeClass('productBetaTabSelected');
	$("#" + clickedTab).addClass('productBetaTabSelected');
	
	$(".productBetaWindow").hide().removeClass('productBetaWindowSelected');
	$(targetWindow).show().addClass('productBetaWindowSelected');
	
	
	
	/* VIRTUAL PAGE VIEW TRACKING for product beta tabs */
	var page = window.location.href;
	
	var tempStr = page;
	if (page.lastIndexOf('?')>0)
		{ tempStr = tempStr.substring(0, tempStr.lastIndexOf('?')); }
	
	var slash = '/';
	if (tempStr.match(/\\/))
		{ slash = '\\'; }
	
	var startPos = tempStr.lastIndexOf(slash);
	page += targetWindow;
	page = page.replaceAll('#', '/');
	page = page.substring(startPos, page.length);
	
	var tabSelected = targetWindow.substring(1, targetWindow.length);
	
	//alert(tabSelected);
	
	pageTracker._trackEvent('product-page-beta-tabs', tabSelected);
	pageTracker._trackEvent('product-page-beta', page);
	
	
	sizeVerticals();
	/*(allowScroll != false)
		scrollTo(0, $("#" + clickedTab).offset().top);
	*/
};

/* Function called by shop online / buy now dropdown */
switchProductPicSetup = function(url, color) {
    // enable the button once the user chooses an option.
    document.getElementById('btnSearchDealers').disabled=false;
    // build up the right picture URL by subbing in the color and then call switchProductPic to sub in this picture.
    var x = color.indexOf(' - ');
    if (x > 0) {
        color = color.substring(0, x);
        color = color.replaceAll(' ','-'); // replaceAll is a custom written extention to the replace function, which is written in init.js as String.prototype.replaceAll
    }
	if(color != textPickOne) // only do this if they've selected something other than "Pick One" (or whatever the language equivalent is
	{
		url = url.replace('COLOR', color);
		switchProductPic(url);
	}
};

/* Change large and loupe image */
switchProductPic = function(url) {
	//alert(url);
	$("#divProductImageLarge").children('img').attr('src', url);
	//pageTracker._trackEvent('load sub categories', page);
	var largeImg = url;
	largeImg = largeImg.replace('355W-png','995x1322');
	largeImg = largeImg.replace('.png','.jpg');
	$("#zoomOverlayImage").css('background-image', 'url(' + largeImg + ')');
};

selectSubCatMap = function(subCat) {
	//alert(subCat);
	if (subCat != null)
	{
		$(".thumb:not(." + subCat + ")").hide();
		$("."+subCat).show();
	}
};

selectSubCat = function(subCat, action, append) {
	/*
	$("#divSearchResultsList").show();
	$("#divProduct").hide();
	*/
	
	if(!$('#productUpper').length) // you're on a search result page
	{
		if (subCat == 'all')
		{
			$(".searchResult").show();
			$(".searchResultHeader").show();
			$(".menuSubCat > li > h4 > a").removeClass('current');
			$("h4 > a[subCat=all]").addClass('current');
		}
		else
		{
			if (!append) {
				$(".searchResult:not(." + subCat + ")").hide();
				$(".searchResultHeader:not(." + subCat + ")").hide();
				
				$(".menuSubCat > li > h4 > a").removeClass('current');
			}
			
			$("."+subCat).show();
			$("h4 > a[subCat=" + subCat + "]").addClass('current');
			
		}
		window.location = (subCat == 'all') ? "#" : "#" + subCat;
	}
	else
	{
		$(".menuSubCat > li > h4 > a").removeClass('current');
		$("h4 > a[subCat=" + subCat + "]").addClass('current');
	}
	
	if (subCat != 'all') {
		var subCatText = $("a.current[subCat="+subCat+"]").text();
		$("#breadcrumbHeadlineSubCat").html("&nbsp;/&nbsp;" + '<a href="#' + subCat + '">' + subCatText + "</a>");
	}
	else
		{ $("#breadcrumbHeadlineSubCat").html(""); }
	
	/* VIRTUAL PAGE VIEW TRACKING for SUBCATs */
	var page = window.location.href;
	
	var tempStr = page;
	if (page.lastIndexOf('?')>0)
	    { tempStr = tempStr.substring(0, tempStr.lastIndexOf('?')); }
	
	var slash = '/';
	if (tempStr.match(/\\/))
		{ slash = '\\'; }
	
	var startPos = tempStr.lastIndexOf(slash);
	page = page.replace('#', '/');
	page = page.substring(startPos, page.length);
	
	//alert(page);
	//alert(action); // click happens when clicking on the subMenu (either causing a reload or not!)
	//alert(!$('#productUpper').length); // true = search result page, false = product page
	//alert(action=='click' && !$('#productUpper').length); // this is only true when clicking on the menu, and from a search result page
	
	if(action=='click' && !$('#productUpper').length)
		{ pageTracker._trackPageview(page); }
	else
	{
		//alert(page);
		pageTracker._trackEvent('load sub categories', page);
	}
	
	sizeVerticals();
};

buyNowFeedback = function (show, text, colour, dontHide) {
	dontHide = typeof(dontHide) != 'undefined' ? dontHide : false;
	
	if(show)
	{
		$("#buyNowFeedback").html(text);
		switch(colour)
		{
			case 'red':
				$("#buyNowFeedback").css('background-color','#FF0000').css('color','#FFFFFF');
				break;
			case 'green':
				$("#buyNowFeedback").css('background-color','#CCCCCC').css('color','#000000');
				break;
		}
		$("#buyNowFeedback").slideDown(function() { sizeVerticals(); });
		if(!dontHide) {
			setTimeout('buyNowFeedback(false);', 5000);
		}
	}
	else { $("#buyNowFeedback").slideUp(function() { sizeVerticals(); }); }
		
	// examples:
	/*
		buyNowFeedback(false);
		buyNowFeedback(true, 'Sorry. This item is no longer in stock','red');
		buyNowFeedback(true, '1 x Field Jacket Coal XL added to cart','green');
	*/
};

function getHashVar(key, default_){
  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&#]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.hash);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

//----------------------------------------------------------------------------------------//
/* YOUR CART FUNCTIONALITY */
//----------------------------------------------------------------------------------------//

clearEdits = function() {
	$(".yourCartEditForm").hide();
	
	$(".yourCartItemSpecs").show();
	$(".yourCartItemPrice").show();
	
	// ONLY SHOW EDIT DROPDOWNS IF THE ITEM ISN'T DELETED
	$(".yourCartItemEdit[deleted!=deleted]").show();
	
	// reset dropdowns?
	//$(".yourCartItemEditDD").
	
	if(document.body.id == "Checkout")
	{
		//$(".yourCartItemEdit").show();
		$(".yourCartItemSize").show();
		$(".yourCartItemQtyVal").show();
		$(".yourCartItemEditQty").hide();
		$(".yourCartItemColour").attr('colspan',1);
		$(".yourCartItemColourName").show();
		$(".btnYourCartItemEdit").hide();
	}
};
$(function() {
	
	$("#divAjaxFeedback")
	.ajaxSend(function(evt, request, settings){
		//$(this).append("<li>Starting request at " + settings.url + "</li>");
	}).ajaxComplete(function(evt, request, settings){
		//$(this).append("<li>response complete from " + settings.url + "</li>");
	}).ajaxError(function(event, request, settings, thrownError){
		//$(this).append("<li>Error requesting page " + settings.url + "</li>");
		//$(this).append(request.readyState);
		if ( 4==request.readyState) { // failed after data has received
			//alert("Sorry, there was an error while communicating with our servers.\nIf this problem persists please contact our support and mention an invalid AJAX response while communicating with\n" + settings.url);
		}
		else {
			alert(textAjaxCommErrorLong + settings.url);
		}
		//window.location.reload(); // THIS WILL RESULT IN A LOOP

	});
	
	if($("#market").attr('market') == 'URBAN'){
	//	alert(document.body.id);
	//$("#productPrice").after('<div style="margin-top: 1.5em; margin-bottom: 2.25em"><strong>Notice</strong>: Our warehouse will be closed for the Labour Day holiday Monday, September 6. We will re-open on Tuesday, September 7th, and resume shipments then.</div>');
	switch(document.body.id) // depends on whether you're on a product page or checkout page
	{
		case 'Product':
			//alert('body.id = Product');
			if(($('#divProduct').text()) != '') // on a REAL single-product page
			{
				// btnAddToCart is in Buy Now form, not Your Cart
				$("#btnAddToCart").click(function() {
					$(this).attr('disabled', 'disabled');
					$(this).val(textAddingToCart);
					$("#selBuyNow").attr('disabled', 'disabled');
					$("#buyNowSelector > #txtQTY").attr('disabled', 'disabled');
					// clear all edits
					clearEdits();
					
					// build add string
					var productAdd = {
						'action': 'add',
						'model':$('#selBuyNow').val(),
						'qty': $('#txtQTY').val()
					};
					//alert(dump(productAdd));
					
					// add a new product to the cart
					var RN = Math.floor(Math.random()* 9999);

					$.getJSON('AjaxResponse.aspx?Q=' + RN, productAdd, updateCart);
					
					// count number of items in cart display
					var curCount = $(".yourCartItem").length; // = 6
					//alert('curCount: ' + curCount);
				});
				
				$("#selBuyNow").change(function(){
					if ($(this).val() != '')
					{
						document.getElementById("btnAddToCart").disabled='';
						checkInStock();
						
						var largeImg = $("#divProductImageLarge > img").attr('src');
						var newImg = largeImg.substring(0, largeImg.lastIndexOf("/")) + "/";
						newImg += $("#productName").attr('mktgName').replaceAll(" ", "-");
						newImg += "-";
						var newColour = $("#selBuyNow > option:selected").text();
						//alert(newColour);
						newColour = newColour.substring(0, newColour.indexOf(" -")).replaceAll(" ", "-");
						newImg += newColour + ".png";
						//alert(newImg);
						$("#divProductImageLarge > img").attr('src',newImg);
						
						var largeImg = newImg;
						largeImg = largeImg.replace('355W-png','995x1322');
						largeImg = largeImg.replace('.png','.jpg');
						$("#zoomOverlayImage").css('background-image', 'url(' + largeImg + ')');
					}
					else
					{
						document.getElementById("btnAddToCart").disabled='disabled';
					}
				});
				
				$("#buyNowSelector > #txtQTY").keyup(function() {
					//buyNowFeedback(true, $(this).val(), 'green');
					checkInStock();
				});
				
				bindCartBehaviours("#productBetaWindowYourCart");
				
				// update cart (initial page load)
				var productStatus = {
						'action': 'refresh'
					};
				var RN = Math.floor(Math.random()* 9999);
				$.getJSON('AjaxResponse.aspx?Q=' + RN, productStatus, updateCart);
				
				
				// OFFLINE MODE MESSAGE
				var shoppingOn = 1;
				try{
					var comment = document.getElementById("content").childNodes[1].childNodes[1].data;
					var countryCd = comment.substr(12,2);
					var allowedCountries = "AD,AE,AF,AG,AM,AN,AR,AS,AT,AU,AW,BA,BE,BF,BG,BM,BN,BO,BR,BS,CA,CH,CL,CN,CO,CR,CZ,DE,DK,DM,DO,EC,EG,ES,FI,FJ,FR,GI,GL,GR,GT,GU,HK,HN,HT,HU,ID,IE,IL,IN,IQ,IS,IT,JM,JP,KN,KO,KR,KW,KY,KZ,LB,LI,LT,LU,MH,MK,MP,MX,MY,NI,NL,NO,NZ,PA,PE,PG,PH,PK,PL,PR,PT,PY,RO,RS,RU,SA,SE,SG,SI,SK,SL,SV,SZ,TH,TR,TT,TW,TZ,UA,UK,UN,US,UY,VE,VG,VI,VN,XX,ZA";
					shoppingOn = allowedCountries.search(countryCd);
				} catch(e) {}
				
				if(shoppingOn>0 && 0) // FORCE OFF
				{
					$("#productPrice").after('<div style="margin-top: 1.5em; margin-bottom: 2.25em"><strong>Notice</strong>: Our shopping cart is currently unavailable due to a system upgrade. We apologize for the inconvenience. This upgrade should be complete by 10am PST, Monday, April 12th.</div>');
				}
				
			}
			else // on a search result page
			{
				// update cart (initial page load)
				var productStatus = {
						'action': 'refresh'
					};
				var RN = Math.floor(Math.random()* 9999);
				$.getJSON('AjaxResponse.aspx?Q=' + RN, productStatus, updateCart);
			}
			break;
		case 'Checkout':
			bindCartBehaviours("#divOrder");
			
			// update cart (initial page load)
			var productStatus = {
					'action': 'refresh'
				};
			var RN = Math.floor(Math.random()* 9999);
			$.getJSON('AjaxResponse.aspx?Q=' + RN, productStatus, updateCart);
			
			$("#chkShipAsPrimary").click(function() {
				switch($("#chkShipAsPrimary").is(":checked"))
				{
					case true:
						//$("#divAddressShipping").hide();
						break;
					case false:
						//$("#divAddressShipping").show();
						break;
				}
				sizeVerticals();
			});

			$("#selShippingMethod").change(function(){
				// $(this).val() // = FEDEXGR, FEDEX2D
				var changeShipping = {
					'action': 'changeShip',
					'ShipVia': $(this).val()
				}
				tablePrinted = false;
				var RN = Math.floor(Math.random()* 9999);
				$.getJSON('AjaxResponse.aspx?Q=' + RN, changeShipping, updateCart);
			});
			
			break;
		case 'Confirmation':
			var productConfirm = {
				'action': 'confirm',
				'OrderNo': $("#spanOrderNo").text()
			};
			var RN = Math.floor(Math.random()* 9999);
			$.getJSON('AjaxResponse.aspx?Q=' + RN, productConfirm, updateCart);
			break;
	} // end of switch
	} // end of if
   
});

checkInStock = function () {
	var inputQty = $("#buyNowSelector > #txtQTY").val();
	if (isNumeric(inputQty))
	{
		inputQty = parseInt(inputQty,10);
		//buyNowFeedback(true,inputQty,'green');
		//buyNowFeedback(true, 'Acceptable','green');
		if ($('#selBuyNow').val() != '')
		{
			var inStock = $('#selBuyNow').val();
			inStock = inStock.substr(inStock.indexOf(':')+1);
			//buyNowFeedback(true, "inStock=" + inStock, 'green');
			if (inputQty > inStock)
			{
				var overMsg = textOverMaxQty(inStock);
				buyNowFeedback(true,overMsg,'red');
				//$("#buyNowSelector > #txtQTY").val(inStock);
				$("#buyNowSelector > #txtQTY").val(inStock + '');
			}
		}
			
	}
	else
	{
		// not numeric entry
		buyNowFeedback(true, textInputOnlyNumbers, 'red');
		$("#buyNowSelector > #txtQTY").val('');
	}	
};

bindCartBehaviours = function(scope) {
	// -------- DELETE -------- //
	$(".yourCartDeleteLink", scope).unbind('click');
	$(".yourCartDeleteLink", scope).click(function() {
		var cartItem = $(this).closest('.yourCartItem').attr('id');
		//alert(cartItem); // 'cartItem3'
		//alert(cartItem.substring(12));
		// clear any other edits in progress (hide their edits, and show their specs/price/links
		clearEdits();
		
		// SEND DELETE COMMAND WITH AJAX TO CART
		var modelNo = $(this).closest('.yourCartItem').attr('model');
		var ajaxDelete = {
			'action': 'delete',
			'cartItem': cartItem.substring(12)
		};
		// alert(dump(ajaxDelete));
		// Submit delete
		var RN = Math.floor(Math.random()* 9999);
		$.getJSON('AjaxResponse.aspx?Q=' + RN, ajaxDelete, updateCart);
		
		// hide edit links
		$("#" + cartItem + "Edit").hide();
		$("#" + cartItem + "Delete").hide();
		
	});
	
	// -------- UNDO -------- //
	$(".yourCartUndoLink", scope).unbind('click');
	$(".yourCartUndoLink", scope).click(function() {
		var cartItem = $(this).closest('.yourCartItem').attr('id');
		//alert(cartItem); // 'cartItem3'
		
		// clear any other edits in progress (hide their edits, and show their specs/price/links
		clearEdits();
		
		// SEND UNDO COMMAND WITH AJAX TO CART - WITH ORIGINAL POSITION IN ARRAY SPECIFIED
		var productUndo = {
			'action': 'undo',
			'cartItem': cartItem.substring(12)
		};
		//alert(dump(productUndo));
		
		// submit undo
		var RN = Math.floor(Math.random()* 9999);
		$.getJSON('AjaxResponse.aspx?Q=' + RN, productUndo, updateCart);
		
		// hide undo links
		$("#" + cartItem + "Undo").hide();
	});
	
	// -------- EDIT -------- //
	$(".yourCartEditLink", scope).unbind('click');
	$(".yourCartEditLink", scope).click(function() {
		var cartItem = $(this).closest('.yourCartItem').attr('id');
		//alert(cartItem); // 'cartItem3'
		
		// clear any other edits in progress (hide their edits, and show their specs/price/links
		clearEdits();
		
		// hide specs, price, and edit
		switch(document.body.id)
		{
			case "Product":
				$("#" + cartItem + "Edit").fadeOut();
				$("#" + cartItem + "Price").fadeOut();
				$("#" + cartItem + "Specs").fadeOut(function(){$("#" + cartItem + "EditForm").fadeIn();});
				break;
			case "Checkout":
				$("#" + cartItem + "Edit").hide();
				$("#" + cartItem + "Size").hide();
				$("#" + cartItem + "QtyVal").hide();
				$("#" + cartItem + "Colour").attr('colspan',2);
				$("#" + cartItem + "ColourName").hide();
				$("#" + cartItem + "EditForm").show();
				$("#" + cartItem + "EditQty").show();
				$("#btnY" + cartItem.substring(1) + "Edit").show();
		}
	});
	
	// enable "Update" button
	$(".yourCartItemEditDD, .yourCartItemEditQty", scope).unbind('change');
	$(".yourCartItemEditDD, .yourCartItemEditQty", scope).change(function() {
		var cartItem = $(this).closest('.yourCartItem').attr('id');
		var targetUpdateBtn = "btnY" + cartItem.substring(1) + "Edit"; // target = btnCartItem1Edit
		document.getElementById(targetUpdateBtn).disabled=false;
	});
	$(".yourCartItemEditQty", scope).unbind('keydown');
	$(".yourCartItemEditQty", scope).keydown(function() {
		var cartItem = $(this).closest('.yourCartItem').attr('id');
		var targetUpdateBtn = "btnY" + cartItem.substring(1) + "Edit"; // target = btnCartItem1Edit
		document.getElementById(targetUpdateBtn).disabled=false;
	});
	
	$(".btnYourCartItemEdit").unbind('click');
	$(".btnYourCartItemEdit").click(function(){
		$(this).attr('disabled','disabled');
		var cartItem = $(this).closest('.yourCartItem').attr('id'); // cartItem = "cartItem3"
		var modelNo = $(this).closest('.yourCartItem').attr('model');
		
		// build add string
		var productEdit = {
			'action': 'edit',
			'cartItem': cartItem.substring(cartItem.length-1),
			'SKU': $('#' + cartItem + "EditDD").val(),
			'QTY': $('#' + cartItem + "EditQty").val()
		};
		//alert(dump(productEdit));
		
		// submit edit to server and update response
		var RN = Math.floor(Math.random()* 9999);
		$.getJSON('AjaxResponse.aspx?Q=' + RN, productEdit, updateCart);
	});

};

reEnableBuyNow = function () {
	$("#btnAddToCart").attr('disabled', '');
	$("#btnAddToCart").val(textAddToCart);
	$("#selBuyNow").attr('disabled', '');
	$("#buyNowSelector > #txtQTY").attr('disabled', '');
};

$(function() {
	//alert('append');
	
	//$("body").append("<div id=\"ajaxFb\" style=\"position:fixed; right: 0; top: 0;\">Ajax Feedback Here</div>");
	/*
	$("#ajaxFb").ajaxComplete(function(event,request, settings){
		$(this).html(event);
	});
	*/
	
});

updateCart = function(response, status) {
	//$("#divAjaxFeedback").append(dump(response));

	var feedbackText = '';
	var feedbackColour = '';
	var feedbackDontHide = false;
	
	if(response.success && response.type != 'empty')
	{
		feedbackColour = 'green';
		
		if (!tablePrinted)
		{
			switch(document.body.id)
			{
				case 'Checkout': // ---------------------- CHECKOUT PAGE --------------------- //
					$("#checkoutTable").remove();
					$("#divOrder").append(buildCheckoutTable());
					break;
				case 'Confirmation':
					$("#divOrder").append(buildCheckoutTable(true));				
					break;
			}
			tablePrinted = true;
		}
		
		switch(response.type)
		{
			case 'add': // add a single item to the end of the array
				var reAdd = setTimeout("reEnableBuyNow()", 600);
				
				feedbackText = response.message; 
				
				for(var i in response.cartItems) // i will be the index of the array
				{
					$("#productBetaWindowYourCart").append(buildCartItemHTML(response.cartItems[i], false));
					$("#yourCartItem" + response.cartItems[i].cartItem).fadeIn();
				}
				
				if(response.summary.totalQty >= 1) {
					$("#btnYourCartCheckout").attr('disabled','');
				}
				break;
			case 'edit': // update one item in a specific position with fade out/in behaviour for image if it's changed
				feedbackText = response.message;
				for(var i in response.cartItems) // i will be the index of the array
				{
					var cartItem = "yourCartItem" + response.cartItems[i].cartItem;
					// check to see if photo different
					
					var responseCartItemPhoto = response.cartItems[i].photo;
					if ("https:" == document.location.protocol)
						{ responseCartItemPhoto = responseCartItemPhoto.replace("http:", "https:"); }
							
					if(responseCartItemPhoto != $("#" + cartItem + "Photo > img").attr('src'))
					{
						//alert('image different');
						$("#" + cartItem + "Photo").fadeOut(function(){$("#" + cartItem + "Photo > img").attr('src', responseCartItemPhoto); $("#" + cartItem + "Photo").fadeIn();});						
					}
					
					// update Specs and Price
					switch(document.body.id) {
						case "Checkout":
							$("#" + cartItem + "ColourName").text(response.cartItems[i].colorName);
							$("#" + cartItem + "ColourName").css('color',"#" + response.cartItems[i].colorHex);
							break;
						default:
							$("#" + cartItem + "Colour").text(response.cartItems[i].colorName);
							$("#" + cartItem + "Colour").css('color',"#" + response.cartItems[i].colorHex);
							break;
					}
					
					//alert(response.cartItems[i].colourHex);
					
					$("#" + cartItem + "Size").text(response.cartItems[i].size);
					
					switch(document.body.id)
					{
						case "Product":
							$("#" + cartItem + "Qty").text(response.cartItems[i].QTY);
							break;
						case "Checkout":
							$("#" + cartItem + "QtyVal").text(response.cartItems[i].QTY);
							break;
					}
					
					$("#" + cartItem + "EditQty").val(response.cartItems[i].QTY);
					var price = '';
					if(document.body.id == "Product")
						{ price += response.cartItems[i].curSymbol; }
					price += response.cartItems[i].price.toFixed(2);
					$("#" + cartItem + "Price").text(price);
					
					if(document.body.id == "Checkout")
						{ $("#" + cartItem + "SubTotal").text(response.cartItems[i].extension.toFixed(2)); }
					
					clearEdits();
				}
				
				//alert($("#selBuyNow").val());
				
				if($("#selBuyNow").val() != '')
				{
					reEnableBuyNow();
				}
				if(response.summary.totalQty >= 1) {
					$("#btnYourCartCheckout").attr('disabled','');
				}
				
				break;
			case 'delete':
				var cartItem = "yourCartItem" + response.cartItems[0].cartItem;
				
				// hide edit/delete links
				$("#" + cartItem + "Edit").attr('deleted','deleted');
				$("#" + cartItem + "Delete").attr('deleted','deleted');
				
				// show undo links
				$("#" + cartItem + "Undo").show();
				
				// fade item out
				//$("#" + cartItem).fadeTo('fast', 0.3);
				$("#" + cartItem + "Photo > img").fadeTo('fast', 0.3);
				$("#" + cartItem + "Name").fadeTo('fast', 0.3);
				$("#" + cartItem + "Specs").fadeTo('fast', 0.3);
				$("#" + cartItem + "Price").fadeTo('fast', 0.3, function(){$("#" + cartItem + "Photo").css('background-image',"url('graphics/the-v-x.gif')");});
				
				if(response.summary.totalQty <= 0) {
					$("#btnYourCartCheckout").attr('disabled','disabled');
				}
				
				if(document.body.id == "Checkout")
				{
					$("#" + cartItem + "ColourName").fadeTo('fast', 0.3);
					$("#" + cartItem + "Size").fadeTo('fast', 0.3);
					$("#" + cartItem + "Qty").fadeTo('fast', 0.3);
					$("#" + cartItem + "SubTotal").fadeTo('fast', 0.3);
					
					$("#" + cartItem + "Name").addClass('strike');
					$("#" + cartItem + "Size").addClass('strike');
					$("#" + cartItem + "ColourName").addClass('strike');
					$("#" + cartItem + "Qty").addClass('strike');
					$("#" + cartItem + "Price").addClass('strike');
					$("#" + cartItem + "SubTotal").addClass('strike');
				}
				
				break;
			case 'undo':
				var cartItem = "yourCartItem" + response.cartItems[0].cartItem;
				
				// fade item in
				//$("#" + cartItem).fadeTo('fast', 1);
				$("#" + cartItem + "Photo > img").fadeTo('fast', 1);
				$("#" + cartItem + "Name").fadeTo('fast', 1);
				$("#" + cartItem + "Specs").fadeTo('fast', 1);
				$("#" + cartItem + "Price").fadeTo('fast', 1, function(){$("#" + cartItem + "Photo").css('background-image',"none");}); // make sure background "X" is gone, just in case of weird fast-clicking...
				// remove background "X"
				$("#" + cartItem + "Photo").css('background-image',"none");
				
				if(document.body.id == "Checkout")
				{
					$("#" + cartItem + "ColourName").fadeTo('fast', 1);
					$("#" + cartItem + "Size").fadeTo('fast', 1);
					$("#" + cartItem + "Qty").fadeTo('fast', 1);
					$("#" + cartItem + "SubTotal").fadeTo('fast', 1);
					
					$("#" + cartItem + "Name").removeClass('strike');
					$("#" + cartItem + "Size").removeClass('strike');
					$("#" + cartItem + "ColourName").removeClass('strike');
					$("#" + cartItem + "Qty").removeClass('strike');
					$("#" + cartItem + "Price").removeClass('strike');
					$("#" + cartItem + "SubTotal").removeClass('strike');
				}
				
				// show edit links
				$("#" + cartItem + "Edit").show();
				$("#" + cartItem + "Edit").attr('deleted','not');
				$("#" + cartItem + "Delete").show();
				$("#" + cartItem + "Delete").attr('deleted','not');
				
				if(response.summary.totalQty >= 1) {
					$("#btnYourCartCheckout").attr('disabled','');
				}
				
				break;
			case 'refresh': // clear whole cart and replace it
				//feedbackText = 'refresh cart!';
				//alert(dump(response));
				if(document.body.id=="Product" && ($('#divProduct').text()) == '')
				{
					
				}
				else
				{
					for(var i in response.cartItems) { // i will be the index of the array
						switch(document.body.id)
						{
							case 'Product':
								$("#productBetaWindowYourCart").append(buildCartItemHTML(response.cartItems[i]));
								break;
							case 'Checkout':
								$("#checkoutTable").append(buildCheckoutItemHTML(response.cartItems[i]));
								break;
							case 'Confirmation':
								$("#checkoutTable").append(buildCheckoutItemHTML(response.cartItems[i], true));
								break;
						}
					}
				}
				
				if(response.summary.totalQty >= 1) {
					$("#btnYourCartCheckout").attr('disabled','');
				}
				break;
		}
		
		switch(document.body.id)
		{
			case 'Product':
				bindCartBehaviours("#productBetaWindowYourCart");
				
				// cartStatusCheckout is the one in the Buy Now chunk, not the Your Cart one
				//$("#cartStatusCheckout:hidden").show();
				
				var cartStatus = response.summary.totalQty + ' item';
				if(response.summary.totalQty > 1)
					{ cartStatus += 's'; }
				cartStatus += ' in Your Cart';
				//alert(dump(response.summary));
				$("#cartStatus").html(cartStatus);
				
				// update summary
				buildCartTalliesHTML(response.summary);
				
				// switch betaWindow to Cart tab
				if(response.summary.totalQty > 0)
				{
					$("#productBetaTabYourCart").removeClass('cartEmpty');
					switchBetaWindow("productBetaTabYourCart", false);
					$("#divSiloCartStatusMsg").html("You have " + cartStatus + ".");
					$("#divSiloCartStatus").show();
				}
				else {
					$("#divSiloCartStatus").hide();
				}
				break;
			case 'Checkout': // ---------------------- CHECKOUT PAGE --------------------- //
				buildCheckoutTalliesHTML(response.summary);
				
				if(response.summary.CADTotal)
				{
					$("#UcCreditCard1_lblPaymentAmount").html(response.summary.CADTotal.toFixed(2));
					$("#canadianExchanged").html(response.summary.CADTotal.toFixed(2));
					/*$("#UcCreditCard1_lblPaymentAmount").html(response.cartItems[0].curSymbol + "&nbsp;" + response.summary.CADTotal.toFixed(2));*/
				}
				
				if(response.summary.cartCurrency == "USD")
				{
					if(response.summary.cartTotal < 2000)
					{
						$("#divSSN").hide();
					}
					else
					{
						$("#divSSN").show();
					}
				}
				
				bindCartBehaviours("#divOrder");
				break;
			case 'Confirmation':
				buildCheckoutTalliesHTML(response.summary, true);
				
				break;
		}
		
		sizeVerticals();
			
	}
	else if (response.success && response.type=='empty') {}
	else // response.success!=true && response.type != 'empty'
	{
		////////////////////////// FAILED RESPONSE HANDLING
		
		// what if:
		// - delete or undo command fails on product page
		// - tried to add more than there is in stock
		
		//alert("response.success != true");
		//alert(dump(response));
		
		feedbackColour = 'red';
		
		if(are_cookies_enabled()){
			alert(textAjaxCommErrorShort);
			window.location.reload();
		}
		else {
			feedbackText = textCookiesRequiredToShop;
		}
		
		
		switch(response.type)
		{
			case 'refresh':
				$("#yourCartSummary").hide();
				$("#productBetaWindowYourCart").html('<p style="color: #FF0000">' + textErrorUpdatingCart + '</p>');
				break;
			case 'add':
				//feedbackText = response.message;
				break;
			case 'edit':
				$(this).attr('disabled','');
				// give some feedback that edit failed
				break;
			case 'delete':
				//var cartItem = "yourCartItem" + response.cartItems[0].cartItem;
				
				clearEdits();
				// re-show  edit links
				/*
				$("#" + cartItem + "Edit").show();
				$("#" + cartItem + "Delete").show();
				*/
				// re-hide undo link
				$("#" + cartItem + "Undo").hide();
				
				feedbackText = response.message;
				//feedbackText = "Failed to delete selected item from your cart, please try again";
				break;
			case 'undo':
				var cartItem = "yourCartItem" + response.cartItems[0].cartItem;
				// re-show undo links
				$("#" + cartItem + "Undo").show();
				
				// re-hide edit/delete link
				$("#" + cartItem + "Edit").hide();
				$("#" + cartItem + "Delete").hide();
				break;
		}
		feedbackDontHide = true;
	}
	
	if(feedbackText != '')
	{
		//alert(feedbackText);
		buyNowFeedback(true, feedbackText, feedbackColour, feedbackDontHide);
	}
	
};

buildCartTalliesHTML = function(summary) {
	//alert('build summaries');
	$("#yourCartTallies").empty();
	
	if (summary.cartSubTotal != summary.cartTotal) {
		$("#yourCartTallies").append('<div id="yourCartSubTotalHeader">' + textSubTotal + ':</div><div id="yourCartSubTotal">' + summary.cartSubTotal.toFixed(2) + '</div>');
	}
	
	for(var t in summary.cartTaxes)
	{
		$("#yourCartTallies").append('<div id="yourCartTax' + t + 'Header" class="yourCartTaxHeader">' + summary.cartTaxes[t].name + ':</div><div id="yourCartTax' + t + '"class="yourCartTax">' + summary.cartTaxes[t].value.toFixed(2) + '</div>');
	}
	
	if (summary.cartShipping != 0 && summary.cartShipping != '')
		{ $("#yourCartTallies").append('<div id="yourCartShippingHeader">' + textEstShipping + '</div><div id="yourCartShipping">' + summary.cartShipping.toFixed(2) + '</div>'); }
	
	$("#yourCartTallies").append('<div id="yourCartTotalHeader">' + textTotal + '</div><div id="yourCartTotal">' + summary.cartTotal.toFixed(2) + '</div>');
	$("#yourCartTallies").append('<div id="yourCartCurrency">&nbsp;' + summary.cartCurrency + '</div>');
};


buildCartItemHTML = function(cartItem, visible) {
	//alert(dump(response.cartItems[i]));
	var cartItemHTML = '';
	cartItemHTML = '<div id="yourCartItem' + cartItem.cartItem + '" class="yourCartItem yCI" model="' + cartItem.model + '"';
	
	if(visible==false)
		{ cartItemHTML += ' style="display: none;"'; }
	
	cartItemHTML += '>';
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Photo" class="yourCartItemPhoto"><img src="' + cartItem.photo + '" /></div>';
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Name" class="yourCartItemName yCIN">' + cartItem.name + '</div>';
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Specs" class="yourCartItemSpecs yCIS"><span id="yourCartItem' + cartItem.cartItem + 'Colour" class="yourCartColourName yCCN" style="color: #' + cartItem.colorHex + ';">' + cartItem.colorName + '</span> <span id="yourCartItem' + cartItem.cartItem + 'Size">' + cartItem.size + '</span> x <span id="yourCartItem' + cartItem.cartItem + 'Qty" class="yourCartItemQty">' + cartItem.QTY + '</span></div>';
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Price" class="yourCartItemPrice yCIP">' + cartItem.curSymbol + cartItem.price.toFixed(2) + '</div>';
	
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'EditForm" class="yourCartEditForm yCEF">';
	cartItemHTML += '	<select id="yourCartItem' + cartItem.cartItem + 'EditDD" class="yourCartItemEditDD yCIEDD" name="yourCartItem1EditDD">';
	
	for(var j in cartItem.editOptions)
	{
		if(cartItem.editOptions[j].value!=null)
		{
			cartItemHTML += '<option value="' + cartItem.editOptions[j].value + '" inStock="' + cartItem.editOptions[j].inStock + '"';
			
			if(cartItem.editOptions[j].selected)
			{
				//alert(cartItem.editOptions[j].label);
				cartItemHTML += ' selected="selected"';
			}
			
			if(cartItem.editOptions[j].inStock <= 0)
			{
				//alert(cartItem.editOptions[j].label);
				cartItemHTML += ' disabled="disabled"';
			}
			
			cartItemHTML += '>' + cartItem.editOptions[j].label + '</option>';
		}
	}
	
	cartItemHTML += '	</select>';
	cartItemHTML += '	<div id="yourCartItem' + cartItem.cartItem + 'EditQtyLabel" class="yourCartItemEditQtyLabel">Qty:</div>';
	cartItemHTML += '	<input class="yourCartItemEditQty" name="yourCartItem' + cartItem.cartItem + 'EditQty" type="text" id="yourCartItem' + cartItem.cartItem + 'EditQty" value="' + cartItem.QTY + '" size="1" maxlength="2" />';
	cartItemHTML += '	<div id="yourCartEditCart"><input id="btnYourCartItem' + cartItem.cartItem + 'Edit" name="btnYourCartItem' + cartItem.cartItem + 'Edit" class="btnYourCartItemEdit" type="button" value="Update"';
	cartItemHTML += ' disabled="disabled"';
	cartItemHTML += '/></div>';
	cartItemHTML += '</div>';
	
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Edit" class="yourCartItemEdit yCIE"><a class="yourCartEditLink" href="javascript:;">' + textEdit + '</a> :: <a class="yourCartDeleteLink" href="javascript:;">' + textDelete + '</a></div>';
	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Undo" class="yourCartItemUndo"><a class="yourCartUndoLink" href="javascript:;">' + textUndo + '</a></div>';
	cartItemHTML += '</div>';
	
	return cartItemHTML;
};

buildCheckoutTable = function(confirmationPage) {
	var checkoutTable = '';
	checkoutTable += '<table id="checkoutTable" width="100%" border="1" cellspacing="0" cellpadding="2" align="center">';
	if(confirmationPage)
		{ checkoutTable += '<tr id="checkoutTableHeaders"><td>&nbsp;</td><td>' + textDescription + '</td><td class="text-center">' + textColour + '</td><td class="text-center">' + textSize + '</td><td class="text-center">' + textQty + '</td><td class="text-right">' + textCost + '</td><td class="text-right">' + textTotal + '</td></tr>'; }
	else
	{
		checkoutTable += '<tr id="checkoutTableHeaders"><td>&nbsp;</td><td>' + textDescription + '</td><td class="text-center">' + textColour + '</td><td class="text-center">' + textSize + '</td><td class="text-center">' + textQty + '</td><td class="text-center">' + textEdit + '</td><td class="text-center">' + textDelete + '</td>';
	
		//checkoutTable += '<td class="text-center">Save For Later</td>';
		checkoutTable += '<td class="text-center">' + textInStock + '</td><td class="text-right">' + textCost + '</td><td class="text-right">' + textTotal + '</td></tr>';
	}
	
		
	checkoutTable += '</table>';
	return checkoutTable;
};

buildCheckoutTalliesHTML = function(summary, confirmationPage){
	$(".yourCartCheckoutTaxHeader, #yourCartCheckoutShipping, #yourCartCheckoutTotal, #yourCartCheckoutSubTotal").remove();
	var colspan = (confirmationPage) ? 4 : 7;
	
	if(summary.cartSubTotal != summary.cartTotal){
		$("#checkoutTable").append('<tr id="yourCartCheckoutSubTotal" class="yourCartcheckoutSubTotalHeader"><td>&nbsp;</td><td class="text-right" colspan="' + (colspan) + '">' + textSubTotal + '</td><td class="text-right" colspan="2">' + summary.cartSubTotal.toFixed(2) + '</td></tr>');
	}
	
	for(t=0; t<summary.cartTaxes.length; t++){
		$("#checkoutTable").append('<tr id="yourCartCheckoutTax' + t + '" class="yourCartCheckoutTaxHeader"><td>&nbsp;</td><td class="text-right" colspan="' + colspan + '">' + summary.cartTaxes[t].name + '</td><td class="text-right">' + summary.cartTaxes[t].rate.toFixed(2) + '</td><td class="text-right">' + summary.cartTaxes[t].value.toFixed(2) + '</td></tr>');
	}
	
	var currencyLabel = '';
	if(summary.cartCurrency != '' && summary.cartCurrency != null)
		{ currencyLabel = ' ' + summary.cartCurrency; }
	
	if (summary.cartShipping != 0 && summary.cartShipping != ''){
		$("#checkoutTable").append('<tr id="yourCartCheckoutShipping"><td>&nbsp;</td><td class="text-right" colspan="' + (colspan) + '">' + textShipping + '</td><td class="text-right" colspan="2">' + summary.cartShipping.toFixed(2) + '</td></tr>');
	}	
	$("#checkoutTable").append('<tr id="yourCartCheckoutTotal"><td>&nbsp;</td><td class="text-right" colspan="' + (colspan) + '">Total' + currencyLabel + '</td><td class="text-right" colspan="2">' + summary.cartTotal.toFixed(2) + '</td></tr>');
	$("#checkoutTable tr:odd").addClass('stripe');
	sizeVerticals();
};

buildCheckoutItemHTML = function(cartItem, confirmationPage) {
	//alert(dump(response.cartItems[i]));
	var cartItemHTML = '';
	cartItemHTML = '<tr id="yourCartItem' + cartItem.cartItem + '" class="yourCartItem" model="' + cartItem.model + '">';
	
	var cartItemPhoto = cartItem.photo;
	
	if ("https:" == document.location.protocol)
		{ cartItemPhoto = cartItemPhoto.replace("http:", "https:"); }
	//? "https://ssl." : "http://www."
	
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Photo" class="yourCartItemPhoto"><img src="' + cartItemPhoto + '" /></td>';
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Name" class="yourCartItemName">' + cartItem.name + '</td>';
	
	
	
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Colour" class="yourCartItemColour text-center"><div id="yourCartItem' + cartItem.cartItem + 'ColourName" class="yourCartItemColourName" style="color: #' + cartItem.colorHex + ';">' + cartItem.colorName + "</div>";

	cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'EditForm" class="yourCartEditForm yCEF">';
	cartItemHTML += '	<select id="yourCartItem' + cartItem.cartItem + 'EditDD" class="yourCartItemEditDD" name="yourCartItem1EditDD">';
	for(var j in cartItem.editOptions)
	{
		if(cartItem.editOptions[j].value!=null)
		{
			cartItemHTML += '<option value="' + cartItem.editOptions[j].value + '"';
			if(cartItem.editOptions[j].selected)
			{
				//alert(cartItem.editOptions[j].label);
				cartItemHTML += ' selected="selected"';
			}
			if(cartItem.editOptions[j].inStock <= 0)
			{
				//alert(cartItem.editOptions[j].label);
				cartItemHTML += ' disabled="disabled"';
			}
			cartItemHTML += '>' + cartItem.editOptions[j].label + '</option>';
		}
	}
	cartItemHTML += '	</select></div>' + '</td>';
	
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Size" class="yourCartItemSize text-center">' + cartItem.size + '</td>';
	
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Qty" class="yourCartItemQty text-center"><div id="yourCartItem' + cartItem.cartItem + 'QtyVal" class="yourCartItemQtyVal">' + cartItem.QTY + "</div>";
	//cartItemHTML += '	<div id="yourCartItem' + cartItem.cartItem + 'EditQtyLabel" class="yourCartItemEditQtyLabel">Qty:</div>';
	if(!confirmationPage)
		{ cartItemHTML += '	<input class="yourCartItemEditQty yCIEQ-CO text-center" name="yourCartItem' + cartItem.cartItem + 'EditQty" type="text" id="yourCartItem' + cartItem.cartItem + 'EditQty" value="' + cartItem.QTY + '" size="1" maxlength="2" />'; }
	cartItemHTML += '	</td>';
	
	if(!confirmationPage)
	{
		cartItemHTML += '	<td>';
		cartItemHTML += '<div id="yourCartItem' + cartItem.cartItem + 'Edit" class="yourCartItemEdit text-center"><a class="yourCartEditLink" href="javascript:;">' + textEdit + '</a></div>';
		cartItemHTML += '	<div id="yourCartEditCart" class="text-center"><input id="btnYourCartItem' + cartItem.cartItem + 'Edit" name="btnYourCartItem' + cartItem.cartItem + 'Edit" class="btnYourCartItemEdit bYCIE-CO" type="button" value="' + textUpdate + '"';
		cartItemHTML += ' disabled="disabled"';
		cartItemHTML += '/></div>';
		cartItemHTML += '	</td>';
		cartItemHTML += '	<td><div id="yourCartItem' + cartItem.cartItem + 'Delete" class="yourCartItemEdit text-center"><a class="yourCartDeleteLink" href="javascript:;">' + textDelete + '</a></div>';
		cartItemHTML += '	<div id="yourCartItem' + cartItem.cartItem + 'Undo" class="yourCartItemUndo text-center"><a class="yourCartUndoLink" href="javascript:;">' + textUndo + '</a></div>';
		cartItemHTML += '	</td>';
		
		/*
		cartItemHTML += '	<td class="text-center">'
		cartItemHTML += '<input type="checkbox" name="chkBuyNow" id="chkBuyNow" checked="checked" />';
		cartItemHTML += '<a href"javascript:;">Save For Later</a>';
		cartItemHTML += '</td>';
		*/
		cartItemHTML += '	<td class="text-center">';
		cartItemHTML += 'Y';
		cartItemHTML += '</td>';
	}
	
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'Price" class="yourCartItemPrice text-right">' /*+ cartItem.curSymbol*/ + cartItem.price.toFixed(2) + '</td>';
	cartItemHTML += '	<td id="yourCartItem' + cartItem.cartItem + 'SubTotal" class="yourCartItemSubTotal text-right">' /*+ cartItem.curSymbol*/ + cartItem.extension.toFixed(2) + '</td>';
	cartItemHTML += '</tr>';
	
	return cartItemHTML;
};

isNumeric = function(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	
	
	for (i = 0; i < sText.length && IsNumber == true; i++) 
	  { 
	  Char = sText.charAt(i); 
	  if (ValidChars.indexOf(Char) == -1) 
		 {
		 IsNumber = false;
		 }
	  }
	return IsNumber;
};


showProduct = function() {};

// This jQuery plugin will gather the comments within
// the current jQuery collection, returning all the
// comments in a new jQuery collection.
//
// NOTE: Comments are wrapped in DIV tags.
 
jQuery.fn.comments = function( blnDeep ){
	var blnDeep = (blnDeep || false);
	var jComments = $( [] );
	
	// Loop over each node to search its children for
	// comment nodes and element nodes (if deep search).
	this.each(
		function( intI, objNode ){
			var objChildNode = objNode.firstChild;
			var strParentID = $( this ).attr( "id" );
	
			// Keep looping over the top-level children
			// while we have a node to examine.
			while (objChildNode){
				// Check to see if this node is a comment.
				if (objChildNode.nodeType === 8){
					// We found a comment node. Add it to
					// the nodes collection wrapped in a
					// DIV (as we may have HTML).
					console.log(dump(objChildNode));
					jComments = jComments.add(
						"<div rel='" + strParentID + "'>" +
						objChildNode.nodeValue +
						"</div>"
						);
				} else if (blnDeep && (objChildNode.nodeType === 1))
				{
					// Traverse this node deeply.
					jComments = jComments.add(
						$( objChildNode ).comments( true )
						);
				}
				// Move to the next sibling.
				objChildNode = objChildNode.nextSibling;
			}
		}
	);
	 
	// Return the jQuery comments collection.
	return( jComments );
}
