// this script is dependent on the prototype library, more info on prototype is available at http://prototype.conio.net/

// 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()
{
	Element.hide('minicart');
	var orderFormArray = document.getElementsByName("orderForm");
	var fwSearchArray = document.getElementsByName("fwSearch");
	var brandFilterArray = document.getElementsByName("brandFilter");
	
	var colorFilterArray = document.getElementsByName("colors_0");
	
	if (orderFormArray.length > 0)
	{
		if (document.getElementsByName("prod_0"))
		{
			document.orderForm.prod_0.style.visibility = "visible";
		}
		if (document.getElementsByName("qty_0"))
		{
			document.orderForm.qty_0.style.visibility = "visible";
		}
		if (colorFilterArray.length > 0)
		{
			document.orderForm.colors_0.style.visibility = "visible";
		}
	}
	
	if (fwSearchArray.length > 0)
	{
		if (document.getElementsByName("fsize"))
		{
			document.fwSearch.fsize.style.visibility = "visible";
		}
		if (document.getElementsByName("fpricesort"))
		{
			document.fwSearch.fpricesort.style.visibility = "visible";
		}
		if (document.getElementById("filterbardiv"))
		{
			target = document.getElementById("filterbardiv");
			target.style.display = "";
		}
		document.getElementById("searchFilterHide").style.visibility = "visible";
	}
	
	if (brandFilterArray.length > 0)
	{
		if (document.getElementsByName("fpricesort"))
		{
			document.brandFilter.fpricesort.style.visibility = "visible";
		}
		if (document.getElementsByName("fgender"))
		{
			document.brandFilter.fgender.style.visibility = "visible";
		}
		if (document.getElementById("filterbardiv"))
		{
			target = document.getElementById("filterbardiv");
			target.style.display = "";
		}
	}
}

function ajaxAddToCart(formObject)
{

	if (document.getElementById("expressShop"))
	{
		document.getElementById("expressShop").style.display="none";
		hideLightbox();
	}
	// first stab at handling browsers that don't support AJAX
	if (!supportedBrowser)
	{
		formObject.submit();
	}
	else
	{
		var url="/cartHandler/index.jsp";
		var pars = "";
		for(var i=0;i < formObject.elements.length;i++)
		{
			var elem = formObject.elements[i];
			if(elem.type=='radio'){
				if(elem.checked==true){
					pars = pars + elem.name + "=" + elem.value + "&";				
				}
			}
			else 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 updateCart(req)
{
	if(req.status == 200)
	{
		Element.update('minicart', req.responseText);
		
		var orderFormArray = document.getElementsByName("orderForm");
		var fwSearchArray = document.getElementsByName("fwSearch");
		
		var colorFilterArray = document.getElementsByName("colors_0");
		
		if (orderFormArray.length > 0)
		{
			if (document.getElementsByName("prod_0"))
			{
				document.orderForm.prod_0.style.visibility = "hidden";
			}
			if (document.getElementsByName("qty_0"))
			{
				document.orderForm.qty_0.style.visibility = "hidden";
			}
			if (colorFilterArray.length > 0)
			{
				document.orderForm.colors_0.style.visibility = "hidden";
			}
		}
		
		if (fwSearchArray.length > 0)
		{
			if (document.getElementsByName("fsize"))
			{
				document.fwSearch.fsize.style.visibility = "hidden";
			}
			if (document.getElementsByName("fpricesort"))
			{
				document.fwSearch.fpricesort.style.visibility = "hidden";
			}
			if (document.getElementById("filterbardiv"))
			{
				target = document.getElementById("filterbardiv");
				target.style.display = "none";
			}
			document.getElementById("searchFilterHide").style.visibility = "hidden";
		}
		
		Element.show('minicart');
		clearTimeout('hideCart()');
		setTimeout('hideCart()', 15000);
		// 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 n = $("cartItemCount");
	// this document node might not exist everywhere
	if (n)
	{
		var newText = '';
		if (itemCount == 0 || itemCount > 1)
		{
			newText = itemCount + ' Items';
		}
		else
		{
			newText = itemCount + ' Item';
		}
		n.innerHTML = newText;
	}
}

//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;
}
