// 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');
	toggleSelects('showSelects');
}

function ajaxAddToCart(formObject)
{
	// 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 != '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 && req.readyState == 4)
	{
		var txt = req.responseText;
		if (txt.indexOf("AJAX_SUCCESS") > -1)
		{
			updateCartItemDisplay(getXmlValue(txt, 'itemCount'));
			updateCartTotalDisplay(getXmlValue(txt, 'itemTotValue'));
			getOrderItemDetails();
		}
		else
		{
			window.location = getXmlValue(txt, 'rdir');
		}
	}
	else
	{
		alert("Unable to retrieve a response from the server.1");
	}
}

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";
  			}
		}
	}
}

var hideCartTimer;
var showSelectsTimer;

function updateCart(req)
{
	if(req.status == 200 && req.readyState == 4)
	{
		Element.update('minicart', req.responseText);
		
		// Background image (png) replacement fix for IE6 (retains links)
		// If ie6...
		if(navigator.appVersion.indexOf('MSIE 6.0') > -1){
			// Get the current innerHTML...
			var currentInnerHTML = $('miniwrapper').innerHTML;
			// Create the background image code.
			var backgroundImage = '<div id="backgroundImage"><span style="width:210px; height:260px; display:inline-block; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'../images/minicart.png\');"><img id="backgroundImageMinicart" style="filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="../images/minicart.png" width="210px" height="260px" border="0" alt=""></span></div>';
			// Inject the background image code.
			currentInnerHTML = backgroundImage + currentInnerHTML;
			Element.update('miniwrapper', currentInnerHTML);
		}
		
		Element.show('minicart');
		toggleSelects("hideSelects");
		clearTimeout(hideCartTimer);
		clearTimeout(showSelectsTimer);
		hideCartTimer = setTimeout('hideCart()', 10000);
		showSelectsTimer = setTimeout('toggleSelects("showSelects")', 10000);
		// 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.2");
	}
}

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;
		
		// If theshopping bag image exists, update it.
		if ($('headerShoppingBag')){
			if (itemCount > 0) {
				$('headerShoppingBag').src = '../images/redesign/shoppingBag_on.gif';
			}else{
				$('headerShoppingBag').src = '../images/redesign/shoppingBag_off.gif';
			}
		}
	}
}

function updateCartTotalDisplay(totalPrice)
{
	var n = $("cartTotalPrice");
	// this document node might not exist everywhere
	if (n){
		n.innerHTML = '$' + totalPrice ;
	}
}

//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;
}