    /* Global javascript functions for common store actions. */
    
    function QuickSearch(searchtext) 
    {
      __doPostBack('StoreQuickSearch', searchtext);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
    function Login(email, password, persistent) 
    {
      __doPostBack('StoreLogin', email + '\036' + password + '\036' + persistent);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
    function LoginWithRedirect(email, password, persistent, redirectUrl) 
    {
       __doPostBack('StoreLogin', email + '\036' + password + '\036' + persistent + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function SetBasketQuantity(productID, guideMeasurementID, quantity) 
    {
      __doPostBack('SetBasketQuantity', productID + '\036' + guideMeasurementID + '\036' + quantity);
      try { event.returnValue = false; } catch(err) {};
      return false; 
    }

    function SetBasketQuantityWithRedirect(productID, guideMeasurementID, quantity, redirectUrl) 
    {
      __doPostBack('SetBasketQuantity', productID + '\036' + guideMeasurementID + '\036' + quantity + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function IncrementBasketQuantity(productID, guideMeasurementID, quantity) 
    {
      __doPostBack('IncrementBasketQuantity', productID + '\036' + guideMeasurementID + '\036' + quantity);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function IncrementBasketQuantityWithRedirect(productID, guideMeasurementID, quantity, redirectUrl) 
    {
      __doPostBack('IncrementBasketQuantity', productID + '\036' + guideMeasurementID + '\036' + quantity + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function EmptyBasket() 
    {
      __doPostBack('EmptyBasket', '');
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
    function EmptyBasketWithRedirect(redirectUrl) 
    {
      __doPostBack('EmptyBasket', redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function AddClaimCode(claimCode) 
    {
      __doPostBack('AddClaimCode', claimCode);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function AddClaimCodeWithRedirect(claimCode, redirectUrl) 
    {
      __doPostBack('AddClaimCode', claimCode + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
    function RemoveClaimCode(claimCode) 
    {
      __doPostBack('RemoveClaimCode', claimCode);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }

    function RemoveClaimCodeWithRedirect(claimCode, redirectUrl) 
    {
      __doPostBack('RemoveClaimCode', claimCode + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
    function ReserveSlot(slotID) 
    {
      __doPostBack('ReserveSlot', slotID);
      try { event.returnValue = false; } catch(err) {};
      return false;     
    }
    
     function ReserveSlotWithRedirect(slotID, redirectUrl) 
    {
      __doPostBack('ReserveSlot', slotID + '\036' + redirectUrl);
      try { event.returnValue = false; } catch(err) {};
      return false;
    }

    function SetGuestPostcode(postcode) {
      __doPostBack('SetGuestPostcode', postcode);
      try { event.returnValue = false; } catch (err) { };
      return false;
    }
    
    function SetBasketQuantityAjax(productID, guideMeasurementID, quantity, extraInformationRequest, userContext, successCallback, failureCallback) 
    {
        if (browserSupportsAjax() == true) {
            var userContextArray = new Array();
            userContextArray[0] = successCallback;
            userContextArray[1] = failureCallback;
            userContextArray[2] = userContext;
            PageMethods.SetBasketQuantity(productID, guideMeasurementID, quantity, extraInformationRequest, BasketQuantityAjax_OnSucceeded, BasketQuantityAjax_OnFailed, userContextArray);
            try { event.returnValue = false; } catch(err) {};
            return false;
        } else {
            return SetBasketQuantity(productID, guideMeasurementID, quantity);
        }
      }
      
    function IncrementBasketQuantityAjax(productID, guideMeasurementID, quantity, extraInformationRequest, userContext, successCallback, failureCallback) 
    {
        if (browserSupportsAjax() == true) {
            var userContextArray = new Array();
            userContextArray[0] = successCallback;
            userContextArray[1] = failureCallback;
            userContextArray[2] = userContext;
            PageMethods.IncrementBasketQuantity(productID, guideMeasurementID, quantity, extraInformationRequest, BasketQuantityAjax_OnSucceeded, BasketQuantityAjax_OnFailed, userContextArray);
            try { event.returnValue = false; } catch(err) {};
            return false;
        } else {
            return IncrementBasketQuantity(productID, guideMeasurementID, quantity);
        }
      }
    
    function BasketQuantityAjax_OnSucceeded(result, userContext, methodName) {
        var successCallback = userContext[0];
        userContext = userContext[2];
        var resultArray = result.split('\036');
        var productID = resultArray[0];
        var guideMeasurementID = resultArray[1];
        var quantity = resultArray[2]
        var extraInformationRequest = new Array();
        if (resultArray.length > 3) {
            resultArray.splice(0,3);
            extraInformationRequest = resultArray;
        }
        if (typeof successCallback == "function")
            successCallback(productID, guideMeasurementID, quantity, extraInformationRequest, userContext);
    }

    function BasketQuantityAjax_OnFailed(error, userContext, methodName) { 
        var failureCallback = userContext[1];
        userContext = userContext[2];
        
        var errorCode = 400;
        var errorMessage = 'Unknown error';
        
        if (error.get_timedOut() == true) {
            errorCode = 401;
            errorMessage = 'Timeout talking to server';
        }
        
        var errorMessageRaw = String(error.get_message());
        var i = errorMessageRaw.indexOf('\036');
        if (i > 0) {
            var messageArray = errorMessageRaw.split('\036');
            errorCode = messageArray[0];
            errorMessage = messageArray[1];
        }
        
        if (typeof failureCallback == "function")
            failureCallback(errorCode, errorMessage, userContext);
                
    }

    var submitCount=0;
    
    function clickButton(e, buttonid){ 
	    var bt = document.getElementById(buttonid); 
	    if (typeof bt == 'object'){ 
		    if(navigator.appName.indexOf("Netscape")>(-1)){ 
			    if (e.keyCode == 13){ 
					    bt.click(); 
					    try { event.returnValue = false; } catch(err) {};
                        return false; 
			    } 
		    } 
		    if (navigator.appName.indexOf("Microsoft Internet Explorer")>(-1)){ 
			    if (event.keyCode == 13){ 
					    bt.click(); 
					    try { event.returnValue = false; } catch(err) {};
                        return false; 
			    } 
		    } 
	    } 
    }
    
    function pressedEnter(e){ 
	    if(navigator.appName.indexOf("Netscape")>(-1)){ 
		    if (e.keyCode == 13){ 
				    return true; 
		    } 
	    } 
	    if (navigator.appName.indexOf("Microsoft Internet Explorer")>(-1)){ 
		    if (event.keyCode == 13){ 
				    return true;
		    } 
	    } 
	    return false;
    } 

    var browserSupportsAjaxSave = false;
    
    function browserSupportsAjax()
    {
        if (StoreAjaxEnabled != true) {
            return false;
        }
        
        if (browserSupportsAjaxSave == true) {
            return true;
        }
        
        var xmlHttp = null;
        try
        {
            // Firefox, Opera 8.0+, Safari
            xmlHttp = new XMLHttpRequest();
        } 
        catch (e)
        {
            // Internet Explorer
            try
            {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                try
                {
                    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e)
                {
                    return false;
                }
            }
        }
        if (xmlHttp == null) {
            return false;
        } else {
            xmlHttp = null;
            browserSupportsAjaxSave = true;
            return true;    
        }
    }