// minicart JavaScript

if(ksp) {
}else{
	var ksp={};
}

ksp.verifyCollectionFields = function(submitProcess, minicartActive) {
	var errMsg = "";
	if (submitProcess == "no") {
		return false;
	} else {
		var totalQty = 0;
		var haveBadQty = false;
		var sizeSelected = true;
		var colorSelected = true;
		var skuInStock = true;

		for (i=0;!haveBadQty && sizeSelected && colorSelected && skuInStock && i < document.orderForm.elements.length; i++) {
			if (document.orderForm.elements[i].name.match("qty")) {
				qtyField = document.orderForm.elements[i];

				for (j=0; j < qtyField.value.length; j++) {
					if(isNaN(parseInt(qtyField.value.charAt(j))) ) {
						haveBadQty = true;
						break;
					}
				}

				if(haveBadQty) {
					errMsg += "Please enter a valid quantity.<br />";
				} 
				if (parseInt(qtyField.value) > 0) {
					totalQty += parseInt(document.orderForm.elements[i].value);

					var qtyArray = qtyField.name.split("_");
					prodIndex = qtyArray[1];
					prodField = eval('document.orderForm.prod_'+prodIndex);
					
					if(prodField.value == '') {
						errMsg += "Please select at least one product size and quantity.<br />";
					}
					
//TODO: out of stock	
					if (!haveBadQty && sizeSelected && colorSelected && prodField.type == "select-one") {
					//if (!haveBadQty && sizeSelected && colorSelected) {
						var prodSkuArray = prodField.options[prodField.selectedIndex].value.split("|");
						if (prodSkuArray != null && prodSkuArray.length > 1 && prodSkuArray[1] != null) {
							for(var m = 0; m < itemMap.length; m++) {
								if (itemMap[m].sku ==  prodSkuArray[1]) {
									if (itemMap[m].avail == "OUT_OF_STOCK" || itemMap[m].avail == "NOT_AVAILABLE") {
										alert("Item is out of stock");
										prodField.focus();
										skuInStock = false;
									}
									break;
								}
							}
						}
					}
					
				}
			}
		}
	}

	if (!haveBadQty && sizeSelected && colorSelected && skuInStock && errMsg == '') {
		if (totalQty == 0) {
			errMsg += "Please select at least one product size and quantity.<br />";
			qtyField.focus();
			ksp.showErrMsg(errMsg)
		} else {
			if (submitProcess == "wishlist") {
				document.orderForm.wlName.value = "wlName";
				document.orderForm.submit();
			} else {
				document.orderForm.wlName.value = "";
				document.orderForm.showMy.value = "";

				ksp.hideErrMsg()
				if (minicartActive == 0) {
					document.orderForm.submit();
				} else {
					ajaxAddToCart(document.orderForm);
				}
			}
		}
	} else {
		ksp.showErrMsg(errMsg)
	}
}

ksp.verifyFields = function(submitProcess, minicartActive) {
	var errMsg = "";
	if (submitProcess == "no") {
		return false;
	} else {
		var totalQty = 0;
		var haveBadQty = false;
		var sizeSelected = true;
		var colorSelected = true;
		var skuInStock = true;

		for (i=0;!haveBadQty && sizeSelected && colorSelected && skuInStock && i < document.orderForm.elements.length; i++) {
			if (document.orderForm.elements[i].name.match("qty")) {
				qtyField = document.orderForm.elements[i];

				for (j=0; j < qtyField.value.length; j++) {
					if(isNaN(parseInt(qtyField.value.charAt(j))) ) {
						haveBadQty = true;
						break;
					}
				}

				if(haveBadQty) {
					errMsg += "Please enter a valid quantity.<br />";
				} 
				if (parseInt(qtyField.value) > 0) {
					totalQty += parseInt(document.orderForm.elements[i].value);

					var qtyArray = qtyField.name.split("_");
					prodIndex = qtyArray[1];
					prodField = eval('document.orderForm.prod_'+prodIndex);
					if(ksp.product.skuId=='' && ksp.product.colorId=='') {
						if(ksp.product.sizeId == '') {
							errMsg += "Please select a color and size.<br />";
						} else {
							errMsg += "Please select a color.<br />";
						}
					} else if(ksp.product.skuId=='' && ksp.product.sizeId == '') {
						errMsg += "Please select a valid size.<br />";
					}
					

//TODO: out of stock	
					if (!haveBadQty && sizeSelected && colorSelected && prodField.type == "select-one") {
					//if (!haveBadQty && sizeSelected && colorSelected) {
						var prodSkuArray = prodField.options[prodField.selectedIndex].value.split("|");
						if (prodSkuArray != null && prodSkuArray.length > 1 && prodSkuArray[1] != null) {
							for(var m = 0; m < itemMap.length; m++) {
								if (itemMap[m].sku ==  prodSkuArray[1]) {
									if (itemMap[m].avail == "OUT_OF_STOCK" || itemMap[m].avail == "NOT_AVAILABLE") {
										alert("Item is out of stock");
										prodField.focus();
										skuInStock = false;
									}
									break;
								}
							}
						}
					}
					
				}
			}
		}
	}

	if (!haveBadQty && sizeSelected && colorSelected && skuInStock && errMsg == '') {
		if (totalQty == 0) {
			errMsg += "Please enter a valid quantity.<br />";
			qtyField.focus();
			ksp.showErrMsg(errMsg)
		} else {
			if (submitProcess == "wishlist") {
				document.orderForm.wlName.value = "wlName";
				document.orderForm.submit();
			} else {
				document.orderForm.wlName.value = "";
				document.orderForm.showMy.value = "";

				ksp.hideErrMsg()
				if (minicartActive == 0) {
					document.orderForm.submit();
				} else {
					ajaxAddToCart(document.orderForm);
				}
				
			}
		}
	} else {
		ksp.showErrMsg(errMsg)
	}
}

ksp.showErrMsg = function(msg) {
	$('errMsg').innerHTML = msg
	$('errMsg').setStyle({display: 'block'})
}

ksp.hideErrMsg = function() {
	$('errMsg').innerHTML = ''
	$('errMsg').setStyle({display: 'none'})
}


// used for executing javascript returned in the xmlHttpRequest content
function execJS(node)
{
	var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
	var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
	var bMoz = (navigator.appName == 'Netscape');
	var st = node.getElementsByTagName('SCRIPT');
  	var strExec;
  	for(var i=0;i<st.length; i++) 
  	{     
    	if (bSaf) 
		{
      		strExec = st[i].innerHTML;
    	}
    	else if (bOpera) 
		{
      		strExec = st[i].text;
    	}
    	else if (bMoz) 
		{
      		strExec = st[i].textContent;
    	}
    	else 
		{
      		strExec = st[i].text;
    	}
		try 
		{
      		eval(strExec);
    	} 
		catch(e) 
		{
      		alert(e);
    	}
  	}
}
var showCart = 0;

//browser sniffing
var supportedBrowser = (navigator.userAgent.indexOf('MSIE 5.2') == -1);

function hideCart()
{
	$('minicart').hide();
	toggleSelects('showSelects');
}

function ajaxAddToCart(formObject, prodDisplay)
{
	// first stab at handling browsers that don't support AJAX
	if (!supportedBrowser)
	{
		formObject.submit();
	}
	else
	{	
		var url="";
		if(prodDisplay == "giftCertificate")
		{
			url = "/customHandler/customHandler.jsp";
			//url="/cartHandler/index.jsp";
		}
		else
		{
			url="/cartHandler/index.jsp";
		}
		var pars = "";
		for(var i=0;i < formObject.elements.length;i++)
		{
			var elem = formObject.elements[i];
			if (elem.type != 'checkbox' || (elem.type == 'checkbox' && elem.checked == true))
			{	
				pars = pars + elem.name + "=" + elem.value + "&";
			}
		}
		// make sure the carthandler knows its getting an async call.
		pars = pars + 'async=true'; 
		var myAjax = new Ajax.Request( url, { 
			method: 'post', 
			parameters: pars, 
			onComplete: handleStateChange
		}); 
	}
}

function handleStateChange(req)
{
	scroll(0,0);
	if(req.status == 200)
	{	
		var txt = req.responseText;
		
		if (txt.indexOf("AJAX_SUCCESS") > -1)
		{	
			updateCartItemDisplay(getXmlValue(txt, 'itemCount'));
			getOrderItemDetails();
		}
		else
		{
			window.location = getXmlValue(txt, 'rdir');
		}
	}
	else
	{
		alert("Unable to retrieve a response from the server.");
	}
}

function getOrderItemDetails()
{
	// Append a timestamp to prevent caching of the response.
	var myAjax = new Ajax.Request( '/minicart/index.jsp', { method: 'get', parameters: 't=' + new Date().getTime(), onComplete: updateCart });
}

function toggleSelects(toggleMode)
{
	if (navigator.appVersion.indexOf("MSIE")!=-1)
	{
		var s = document.getElementsByTagName('select');
		if (toggleMode == "hideSelects")
		{
  			for (var i=0; i<s.length; i++) 
			{
    			s[i].style.visibility = "hidden";
  			}
		}
		else
		{
			for (var i=0; i<s.length; i++) 
			{
    			s[i].style.visibility = "visible";
  			}
		}
	}
}

function updateCart(req)
{
	if(req.status == 200)
	{	
		$('minicart').update(req.responseText);
		$('minicart').show();		
		Element.update('minicart', req.responseText);
		Element.show('minicart');
		toggleSelects("hideSelects");
		clearTimeout('hideCart()');
		clearTimeout('toggleSelects("showSelects")');
		setTimeout('hideCart()', miniCartTimeOut);
		setTimeout('toggleSelects("showSelects")', miniCartTimeOut);
		// run any scripts that might be in the minicart html, mainly this ensures that omniture reporting works
		execJS($("minicart"));
	}
	else
	{
		alert("Unable to retrieve a response from the server.");
	}
}

function updateCartItemDisplay(itemCount) {
	var newQty = parseInt(itemCount);

	if ($("cart2")) {
		$("cart2").innerHTML = newQty
	}
	
	if (newQty == 1) {
		$("cart3").addClassName('oneItem')
	} else {
		$("cart3").removeClassName('oneItem')
	}
}

//returns the value of an xml node "nodeName" within "inText"
function getXmlValue(inText, nodeName)
{
	var ret = '';
	var n = '<' + nodeName + '>';
	var n2 = '</' + nodeName + '>';
	var f = inText.indexOf(n);
	if (f > -1)
	{
		ret = inText.substring(f + n.length, inText.indexOf(n2));
	}
	return ret;
}