var iTimeout = 5;
var hdnAddToCartClickID;
var hdnAddToCartTotalClicksID;

/*
strUnsecureRootUrl - the unsecure url for the root of the site (ie. www.lampsplus.com, internet, cs.lampsplus.com, etc.).
aHiddenAddToCartID - ID of a control that popups up the Add-To-Cart modal box (ie. using the attribute rel="#add-to-cart").
strCatalogPrefix - the catalog prefix.
arrShortSKUs - array of short skus.
arrQuantities - array of the quantities.
arrOptionalArgs:
	aHiddenAddToCartErrorID - ID of a control that popups up an error modal box.
	arrPatterns - the pattern.
	hdnAddToCartClickID - ID of a hidden control that stores the click number after any Ajax has been resolved.
	hdnAddToCartTotalClicksID - ID of a hidden control that stores the total number of clicks.
	bPageIsValid - is the page valid?  Page_IsValid for .Net 2.0 if validators are used.
	OnItemsAddedToCart - function(), executed after the items have been added to the cart.
	bIsSpecialDiscount - flag whether or not this is a special members discount item.

ex. AddToCart("www.lampsplus.com", "aHiddenAddToCart", "", ["55999", "12345"], [3, 1], {aHiddenAddToCartErrorID:"aHiddenAddToCartError", arrPatterns:"00000000-0000-0000-0000-000000000000~000000~000000~000000", bPageIsValid:Page_IsValid});
*/
function AddToCart(strUnsecureRootUrl, aHiddenAddToCartID, strCatalogPrefix, arrShortSKUs, arrQuantities, arrOptionalArgs)
{
	var aHiddenAddToCartError;
	var arrPatterns;
	var hdnAddToCartClickID;
	var hdnAddToCartTotalClicksID;
	var bPageIsValid;
	var OnItemsAddedToCart;
	var bIsSpecialDiscount;
	
	FillOptionalVariables();

	var aHiddenAddToCart = document.getElementById(aHiddenAddToCartID);
	if (aHiddenAddToCartID == null) { return;}
	
	SetClickEvent(aHiddenAddToCart);
	
	if(typeof(aHiddenAddToCartError) != 'undefined')
		SetClickEvent(aHiddenAddToCartError);

    
        if ((typeof (bPageIsValid) == 'undefined') || bPageIsValid) {
            ReloadAddToCart(true);

            if (aHiddenAddToCart != null) {
                aHiddenAddToCart.click();
            }
            else {
                return false;
            }

            setTimeout(AddItemToCart, 500);
        }
        else {
            if (typeof (aHiddenAddToCartError) != 'undefined')
                aHiddenAddToCartError.click();
        }
    
    
	
	// Internal functions.
	function FillOptionalVariables()
	{
		for(var index in arrOptionalArgs)
		{
			switch(index)
			{
				case "aHiddenAddToCartErrorID":
					aHiddenAddToCartError = document.getElementById(arrOptionalArgs[index]);
					break;
				case "arrPatterns":
					arrPatterns = arrOptionalArgs[index];
					break;
				case "hdnAddToCartClickID":
					hdnAddToCartClickID = arrOptionalArgs[index];
					break;
				case "hdnAddToCartTotalClicksID":
					hdnAddToCartTotalClicksID = arrOptionalArgs[index];
					break;
				case "bPageIsValid":
					bPageIsValid = arrOptionalArgs[index];
					break;
				case "OnItemsAddedToCart":
					OnItemsAddedToCart = arrOptionalArgs[index];
					break;
				case "bIsSpecialDiscount":
					bIsSpecialDiscount = arrOptionalArgs[index];
					break;
			}
		}
	}
	
	function AddItemToCart()
	{
		var addUrl;
		
		if(typeof(arrPatterns) == 'undefined')
			addUrl = strUnsecureRootUrl + "/htmls/cart/add.aspx?catalogprefix=" + strCatalogPrefix + "&commaskus=" + GetCommaSKUs() + "&specialdiscountflag=" + bIsSpecialDiscount + "&ajax=true&ms=" + new Date().getTime();
		else {
		var patterns = new Array();
			for (i = 0; i < arrShortSKUs.length; i++) {
				patterns.push(arrShortSKUs[i] + "," + arrQuantities[i] + "," + arrPatterns[i] + "," + bIsSpecialDiscount);
			}
			
			addUrl = strUnsecureRootUrl + "/htmls/cart/add.aspx?catalogprefix=" + strCatalogPrefix + "&patternskus=" + patterns.join(",") + "&ajax=true&ms=" + new Date().getTime();
		}
		$.ajax({url:addUrl, async:false});
		
		if(typeof(OnItemsAddedToCart) != 'undefined')
			OnItemsAddedToCart(strUnsecureRootUrl, arrShortSKUs, arrOptionalArgs.arrPatterns);
		
		WaitForAjaxUpdate();
		
		ReloadAddToCart(false);
		
		GetCartCount();
	}
	
	function GetCommaSKUs()
	{
		var strCommaSKUs = "";
		
		for(var i = 0; i < arrShortSKUs.length; i++)
		{
			strCommaSKUs += arrShortSKUs[i] + "," + arrQuantities[i] + ",";
		}
		
		if(strCommaSKUs.length > 0)
			return strCommaSKUs.substr(0, strCommaSKUs.length - 1);
		
		return "";
	}
	
	function WaitForAjaxUpdate()
	{
		if((typeof(hdnAddToCartClickID) == 'undefined') || (typeof(hdnAddToCartTotalClicksID) == 'undefined'))
			return;
		
		var iCount = 0;
		
		while((iCount < iTimeout) && (parseInt(document.getElementById(hdnAddToCartClickID).value) <= parseInt(document.getElementById(hdnAddToCartTotalClicksID).value)))
		{
			Sleep(1);
			iCount++;
		}
		
		document.getElementById(hdnAddToCartTotalClicksID).value = parseInt(document.getElementById(hdnAddToCartClickID).value);
	}
	
	function ReloadAddToCart(bBlank)
	{
		var src = "";
		
		if(!bBlank)
			src = strUnsecureRootUrl + "/cart/Add-To-Cart.aspx?qty=" + arrQuantities.join(",") + "&ms=" + new Date().getTime();
		else
			$('#add-to-cart > iframe').css("visibility", "hidden");
		
		$('#add-to-cart > iframe').attr('src', src);
	}
}

// This creates a click function on a button for non-IE browsers.
function SetClickEvent(btn)
{
    if ((btn!=null) && (typeof (btn) != 'undefined') && (typeof (btn.click) == 'undefined'))
	{
		btn.click = function()
		{
			var evt = this.ownerDocument.createEvent('MouseEvents');
			evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
			this.dispatchEvent(evt);
		}
	}
}

function Sleep(iSeconds)
{
	var iStopTime = new Date().getTime() + (iSeconds * 1000);
	
	while(iStopTime > new Date().getTime());
}
