﻿/*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JQuery Initializer
----------------------------------------------------------------------------
This site makes use of the following JQuery Modules:
  - JQuery 1.2.6
  - Impromptu 2.5 (for popups)
  - FancyBox 1.2.1 (for enlarging images)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
//Layer expander/fader
$.fn.slideFadeToggle = function(speed, easing, callback) {
    return this.animate({height: 'toggle'}, speed, easing, callback);  
}

$.fn.exists = function() {
    return jQuery(this).length > 0;
}

$.preloadImages = function()
{
    for(var i = 0; i < arguments.length; i++) $("<img>").attr("src", arguments[i]);
}

$.rollOverImage =
{
   init: function()
   {
      this.preload();
      $(".ImageRollOver").hover(
         function () { $(this).attr( 'src', $.rollOverImage.newimage($(this).attr('src')) ); },
         function () { $(this).attr( 'src', $.rollOverImage.oldimage($(this).attr('src')) ); }
      );
   },

   preload: function()
   {
      $(window).bind('load', function() {
         $('.ImageRollOver').each( function( key, elm ) { $('<img>').attr( 'src', $.rollOverImage.newimage( $(this).attr('src') ) ); });
      });
   },
   
   newimage: function( src )
   {
      return src.substring( 0, src.search(/(\.[a-z]+)$/) ) + '_h' + src.match(/(\.[a-z]+)$/)[0];
   },

   oldimage: function( src )
   {
      return src.replace(/_h\./, '.');
   }
};

function WaitingBox_Clear() {
    $("#fancy_loading").hide();
}

$(document).ready(function() {
    //Preload images
    $.preloadImages("_images/formfield_active.gif", "_images/cart_bg.jpg", "_images/cart_container_bg.gif", "_images/body_bg.gif");
    $.rollOverImage.init();
    
    $("#Dropdown_GallerySort").change(
        function()
        {
            $.fn.fancybox.showLoading();
            $("#Gallery_SortSetting").val($(this).val());
            __doPostBack('Panel_GalleryThumbnails', '');
        }
   );
   
    $("#Dropdown_GalleryCategories").change(
        function()
        {
            $.fn.fancybox.showLoading();
            $("#Gallery_CategorySetting").val($(this).val());
            __doPostBack('Panel_GalleryThumbnails', '');
        }
   );
   
    $("#Panel_GalleryLayoutButtons>.ImageRollOver").click(
        function()
        {
            $("#Panel_GalleryLayoutButtons>.ImageRollOver").removeClass("ListViewButton_Active");
            $(this).addClass("ListViewButton_Active");
            $.fn.fancybox.showLoading();
            $("#Gallery_ListViewSetting").val($(this).attr("id").split("_", 2)[1]);
            __doPostBack('Panel_GalleryThumbnails', '');
        }
    );
    
    
    /*
    =======================================================================================
    Initialize the custom validation methods
    =======================================================================================
    */
    //Password custom validation method
	$.validator.addMethod("password", function( value, element ) {
		var result = this.optional(element) || value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value);
		return result;
	}, "Your password must be at least 6 characters long and contain at least one number and one character.");
	
	//Make Billing address optional based on checked field
	$.validator.addMethod("BillingRequired", function(value, element) {
	    return ($("#Billing_Same_As_Shipping").is(":checked")) ? 1 : !this.optional(element);
	}, "");
	
	
	/*
	Add custom validator method for credit card information
	*/
	//CC Number
	$.validator.addMethod("CreditCard", function(value, element) {
	    value = value.split('_').join('').replace(/\s/g,'');
	    if($("#Checkout_CCType").val() == '' && value != '') $("#Checkout_CCType").val("9");   //If no card is selected, default to Visa.
	    return (value == '' || Validate_CC(value,$("#Checkout_CCType").val()));
	}, "Please enter a valid credit card number");
	
    //CC Expiry Date
	$.validator.addMethod("CCExpDate", function(value, element) {
	    var Today = new Date();
	    var M = $("#Checkout_CCExpMonth").val();
	    var Y = $("#Checkout_CCExpYear").val();
	    return ((Y == Today.getFullYear() && M >= (Today.getMonth() + 1)) || (Y > Today.getFullYear() && M > 0));
	}, "Please select a valid expiry date.");
	
	
    /*
    Initialize the JQuery validation module
    */
    if($("div.error").length == 0) {
        $("#MainWebForm").validate();
    }
    else {
        var creditcard = $("#Checkout_CCNumber").mask("9999 9999 9999 9999");
        
        $("#Checkout_CCType").change(function() {
            switch ($(this).val()) {
                case '12':
                $("#Checkout_CCNumber").unmask().mask("9999 999999 99999");
                break;
            default:
                $("#Checkout_CCNumber").unmask().mask("9999 9999 9999 9999");
                break;
            }
        });
    
    	$.validator.messages.required = "";
    	
        $("#MainWebForm").validate({
		    invalidHandler: function(e, validator) {
			    var errors = validator.numberOfInvalids();
			    if (errors) {
				    var message = (errors == 1) ? 'There is one required field that has not been filled in. It has been highlighted below' : 'There are ' + errors + ' required fields which have not been filled in.  They have been highlighted below';
				    $("div.error #Checkout_Error_Text").html(message);
				    $("div.error").show();
				    $('html, body').animate({ scrollTop: 0 }, 1000, 'easeOutCubic');
			    }
			    else {
				    $("div.error").hide();
			    }
		    },
		    onkeyup: false,
		    submitHandler: function(form) {
			    $("div.error").hide();
			    form.submit();
		    },
		    groups: {
		        CCExpDate: "Checkout_CCExpMonth Checkout_CCExpYear"
		    },
		    errorPlacement: function(error, element) {
		        if(element.attr("name") == "Checkout_CCExpMonth" || element.attr("name") == "Checkout_CCExpYear") {
		            error.insertAfter("#Checkout_CCExpYear");
		        }
		        else {
		            error.insertAfter(element);
		        }
		    },
		    messages: {
			    email: {
				    required: " ",
				    email: "Please enter a valid email address, example: you@yourdomain.com",
				    remote: jQuery.format("{0} is already taken, please enter a different address.")	
			    },
			    Checkout_Password2: {
			        required: " ",
			        equalTo: "The confirmation password does not match"
			    }
		    },
		    rules: {
		        Checkout_Password2: {
		            required: true,
		            minlength: 6,
		            equalTo: "#Checkout_Password1"
		        }
		    }
	    });
    }


    /*
    Add method to the "My billing address is the same as my shipping" checkbox to enable/disable billing address
    */
    $("#Billing_Same_As_Shipping").click(function() {
        $("#Billing_Address_Content input").each(function(idx, item) {
            item.disabled = ($("#Billing_Same_As_Shipping").is(":checked"));
            if($("#Billing_Same_As_Shipping").is(":checked")) {
                $("#" + item.id).addClass('disabled');
            }
            else {
                $("#" + item.id).removeClass('disabled');
            }
        });
        $("#Billing_Address_Content select").each(function(idx, item) {
            item.disabled = ($("#Billing_Same_As_Shipping").is(":checked"));
            if($("#Billing_Same_As_Shipping").is(":checked")) {
                $("#" + item.id).addClass('disabled');
            }
            else {
                $("#" + item.id).removeClass('disabled');
            }
        });
    });
    
    
    /*
    Add method to the "Shipping Methods" radio buttons to change the shipping amount
    */
    $("input[name='RadioButtons_ShippingMethod']").click(function() {
        Cart_UpdateCart_Checkout();
    });
    

    /*
    =======================================================================================
    Initialize the menus and apply default form field focus/blur events
    =======================================================================================
    */
    $('ul.sf-menu').superfish();
    ApplyFormFieldFocusEvents();

    /*
    =======================================================================================
    Add the click event to the "View Cart" top menu button
    =======================================================================================
    */
    $("#btnViewCart").click(function() {
        $("#Cart_Container").slideFadeToggle('slow');
        return false;
    });
    
    
    /*
    =======================================================================================
    Add the click event to the "Forgot your password" button (only used on login page)
    =======================================================================================
    */
    $("#btnFYPBoxToggle").click(function() {
        $("#FYP_Box").slideFadeToggle('normal');
        return false;
    });
    
    
	/*
	=======================================================================================
	Add Forgot-Your-Password handler to the FYP send button (if it exists)
	=======================================================================================
	*/
	$("#FYP_Email_Send").click(function() {
        $("#FYP_Email").rules("add", { required: true, email: true, messages: { required: "Please enter your email address." } });
        var IsValid = $("#MainWebForm").validate().element("#FYP_Email");
        $("#FYP_Email").rules("remove");
        
        if(IsValid) {
            var SubmitData = "Email=" + $("#FYP_Email").val();
            $.ajax({
                type: "POST",
                url: AJAX_ServicesURL + '/ForgotPassword',
                data: SubmitData,
                beforeSend: function(xhr) {
                    xhr.setRequestHeader("Content-Length", SubmitData.length);
                    
                    //Show the JQuery FancyBox busy indicator
                    $.fn.fancybox.showLoading();
                },
                dataType: "xml",
                complete: function(xhr, msg) {
                    //Hide the JQuery FancyBox busy indicator
                    $("#fancy_loading").hide();
                    
                    if(xhr.status == 200) {
                        var xml = (xhr.responseXML);
                        var Status = $(xml).find('Status').text();
                        if(Status == "1") {
                            $.prompt('Your password has been emailed to you.', {prefix:'impromptu',opacity:0.4,persistent:false});
                            $("#FYP_Box").slideFadeToggle('normal');
                            return;
                        }
                    }
                    
                    $.prompt('An error occurred while trying to retrieve your password.  Please try clicking "Send" again or give us a call at (202) 633-8080 for assistance.', {prefix:'impromptu',opacity:0.4,persistent:false});
                }
            });
        }
	});
});


/*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Cookie Processing Functions
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
function setCookie(name, value) {
    var args = arguments;
    var argc = args.length;
    var expires = (argc > 2) ? args[2] : null;
    var path = (argc > 3) ? args[3] : null;
    var domain = (argc > 4) ? args[4] : null;
    var secure = (argc > 5) ?  args[5] : false;
    var expDate = new Date();
    day=24*60*60*1000;
    if(expires){ expDate.setTime(expDate.getTime() + expires * day); }
    document.cookie = name + "=" + escape(value) +
        ((expires === null) ? "" : ("; expires=" + expDate.toUTCString())) +
        ((path === null) ? "" : ("; path=" + path)) +
        ((domain === null) ? "" : ("; domain=" + domain)) +
        ((secure === true) ? "; secure" : "");
}

function getCookieVal(name) {
  var endstr = document.cookie.indexOf(";", name);
  if( endstr === -1) { endstr = document.cookie.length; }
  return unescape(document.cookie.substring(name, endstr));
}

function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i=0;
    while (i < clen) {
        j=i + alen;
        if(document.cookie.substring(i,j) === arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if( i === 0) { break; }
   }
}


/*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Validation Processing Functions
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
function NumberFilter(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if(charCode <= 31 || charCode == 45 || (charCode >= 48 && charCode <= 57)) return true;
    return false;
}

function Validate_CheckForRequiredFields(FieldList, FieldCaptions) {
    var thisForm = document.MainWebForm;
    var errMsg = "";
    
    for(var i = 0; i < FieldList.length; i++) {
        var Field = thisForm[FieldList[i]];
        if(((Field.type == 'text' || Field.type == 'password') && Field.value == '') || (Field.type == 'select-one' && Field.selectedIndex < 1)) {
            Field.style.background = Validation_ErrBGColor;        
            errMsg += ((errMsg != '') ? ', ' : '') + FieldCaptions[i];
        }
        else {
            Field.style.background = Validation_BGColor;
        }
    }
    
    return errMsg;
}

function Validate_CC(cardNumber, cardType)
{
    var isValid = false;
    var ccCheckRegExp = /[^\d ]/;
    cardNumber = cardNumber.split('-').join('');
    cardType = cardType.toLowerCase();
    isValid = !ccCheckRegExp.test(cardNumber);

    if (isValid)
    {
        var cardNumbersOnly = cardNumber.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;

        switch(cardType) {
            case "10":
            case "mastercard":
                lengthIsValid = (cardNumberLength == 16);
                prefixRegExp = /^5[1-5]/;
                break;

            case "9":
            case "visa":
                lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
                prefixRegExp = /^4/;
                break;

            case "12":
            case "american express":
                lengthIsValid = (cardNumberLength == 15);
                prefixRegExp = /^3(4|7)/;
                break;

            case "11":
            case "discover":
                lengthIsValid = (cardNumberLength == 16);
                prefixRegExp = /^6011/;
                break;
            
            default:
                prefixRegExp = /^$/;
                alert("Card type not found");
                break;
        }

        prefixIsValid = prefixRegExp.test(cardNumbersOnly);
        isValid = prefixIsValid && lengthIsValid;
    }

    if (isValid)
    {
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;

        for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--)
        {
            checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
            digitCounter--;
            numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
            for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++)
            {
                checkSumTotal += 
                parseInt(numberProduct.charAt(productDigitCounter));
            }
        }

        isValid = (checkSumTotal % 10 == 0);
    }

    return isValid;
}


/*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
AJAX Processing Functions
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
var AJAX_ServicesURL = '_services/tcs.asmx';

function AJAX_Logout() {
    var SubmitData = "";
    
    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/Logout',
        data: SubmitData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", SubmitData.length);
            
            //Show the JQuery FancyBox busy indicator
            $.fn.fancybox.showLoading();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //Hide the JQuery FancyBox busy indicator
            $("#fancy_loading").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var Status = $(xml).find('Status').text();
                
                if(Status == "1") {
                    alert("You have been logged out.");
                    document.location.href = document.location.href;
                }
                else {
                    alert('An error occurred while attempting to log you out.  Please try clicking Logout again, or close your browser to end your session.');
                    //alert($(xml).find('Details').text());
                }
            }
            else {
                alert('An error occurred while attempting to log you out.  Please try clicking Logout again, or close your browser to end your session.');
                //alert($(xml).find('Details').text());
            }
        }
    });
}


function Cart_AddItem2() {
    var SubmitData = "PerformanceID=" + arguments[0] + "&PriceTypeID=" + arguments[1] + "&ZoneID=" + arguments[2] + "&Quantity=" + arguments[3];
    var ErrMsg = 'There was a problem adding this artwork to your cart which has been reported to our engineers.\n\nPlease try adding the piece to your cart again or give us a call at (202) 633-8080 to place your order.';

    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/AddToCart2',
        data: SubmitData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", SubmitData.length);
            
            //Show the JQuery FancyBox busy indicator
            $.fn.fancybox.showLoading();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //Hide the JQuery FancyBox busy indicator
            $("#fancy_loading").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var Status = $(xml).find('Status').text();
                
                if(Status == "1") {
                    if(document.location.href.indexOf("artwork=") > -1) {
                        if(GetQueryVariable("artwork") == PerformanceID && PerformanceID > 0) $("#Panel_InCartMessage").show();
                    }
                
                    Cart_UpdateCart();
                    $.prompt('This artwork has been added to your cart.', {prefix:'impromptu',opacity:0.4,persistent:false});
                }
                else {
                    alert(ErrMsg);
                    //alert($(xml).find('Details').text());
                }
            }
            else {
		alert(ErrMsg);
		//alert($(xml).find('Details').text());
            }
        }
    });
}


function Cart_AddItem(BagOData, Obj, PerformanceID) {
    var Qty = $("input[name='" + Obj + "']").attr("value");
    if(Qty == null) Qty = 1;
    if(Qty == 0) return;
    var SubmitData = 'BagOData=' + BagOData + '&Quantity=' + Qty;
    var ErrMsg = 'There was a problem adding this artwork to your cart which has been reported to our engineers.\n\nPlease try adding the piece to your cart again or give us a call at (202) 633-8080 to place your order.';

    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/AddToCart',
        data: SubmitData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", SubmitData.length);
            
            //Show the JQuery FancyBox busy indicator
            $.fn.fancybox.showLoading();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //Hide the JQuery FancyBox busy indicator
            $("#fancy_loading").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var Status = $(xml).find('Status').text();
                
                if(Status == "1") {
                    if(document.location.href.indexOf("artwork=") > -1) {
                        if(GetQueryVariable("artwork") == PerformanceID && PerformanceID > 0) $("#Panel_InCartMessage").show();
                    }
                
                    Cart_UpdateCart();
                    $.prompt('This artwork has been added to your cart.', {prefix:'impromptu',opacity:0.4,persistent:false});
                }
                else {
                    alert(ErrMsg);
                    //alert($(xml).find('Details').text());
                }
            }
            else {
                alert(ErrMsg);
		//alert(xhr.statusText);
                //alert($(xml).find('Details').text());
            }
        }
    });
    
    return false;
}

function Cart_UpdateCart() {
    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/GetCart',
        data: "",
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", 0);
            //${"#ProgressBarContainer").show();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //${"#ProgressBarContainer").hide();
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var details = $(xml).find('Details').text();
                var subtotal = $(xml).find('Details').attr('OrderTotal');
                var itemcount = parseInt($(xml).find('Details').attr('ItemCount'));

                $("#Cart_Items_List").html(details);
                $("#Cart_Summary_Subtotal").html("$" + subtotal);

                if(itemcount > 0) {
                    $("#TopMenu_Button_ViewCart").html("View Cart (" + itemcount + " " + ((itemcount > 1) ? 'items' : 'item') + ")");
                    $("#PageHeader_Panel_CartEmpty").hide();
                    $("#PageHeader_Panel_CartDetails").show();
                }
                else {
                    $("#TopMenu_Button_ViewCart").html("View Cart");
                    $("#PageHeader_Panel_CartEmpty").show();
                    $("#PageHeader_Panel_CartDetails").hide();
                }
            }
            else {
                alert("An error occurred while attempting to get the items in your cart.\n\nPlease try your last action again or give us a call at (202) 633-8080 for assistance.");
            }
        }
    }); 
}

function Cart_UpdateCart_Checkout() {
    var ShippingMethodID = 0;
    var MWF = document.forms[0];
    //if(MainWebForm == null) MainWebForm = document.forms[0];
    
    for(var i = 0; i < MWF.RadioButtons_ShippingMethod.length; i++) {
        if(MWF.RadioButtons_ShippingMethod[i].checked) {
            var Parts = MWF.RadioButtons_ShippingMethod[i].value.split("|");
            ShippingMethodID = Parts[0];
            break;
        }
    }

    var BagOData = "Template=Checkout&ShippingMethodID=" + ShippingMethodID + "&CountryID=" + $("#Shipping_Address_Editor_Address_Country").val();

    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/GetCartEx',
        data: BagOData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", BagOData.length);
            
            //Show the JQuery FancyBox busy indicator
            $.fn.fancybox.showLoading();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //Hide the JQuery FancyBox busy indicator
            $("#fancy_loading").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var details = $(xml).find('Details').text();
                var XML = $(xml).find('RawXML').text();
                var itemcount = parseInt($(xml).find('Details').attr('ItemCount'));
                var shippingtotal = $(xml).find('Details').attr('ShippingTotal');
                
                $("textarea[name=TextBox_XMLOutput]").val(XML.replace(/\>/g, ">\n"));                
                $("#Checkout_ShippingTotal").val(shippingtotal);
                $("#Checkout_CartItems").html(details);
                if(itemcount > 0) {
                    reFancy();
                    Cart_UpdateCart();
                }
                else {
                    document.location.href = document.location.href;
                }
            }
            else {
                alert("An error occurred while attempting to get the items in your cart.\n\nPlease try your last action again or give us a call at (202) 633-8080 for assistance.");
            }
        }
    }); 
}

function Cart_RemoveItem(BagOData, CallbackFunction) {
    var ErrMsg = 'There was a problem removing this item from your cart.\n\nPlease try removing the item again or give us a call at (202) 633-8080 for assistance.';
    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/RemoveTickets',
        data: "PerformanceID=" + BagOData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", BagOData.length);
            
            //Show the JQuery FancyBox busy indicator
            $.fn.fancybox.showLoading();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            //Hide the JQuery FancyBox busy indicator
            $("#fancy_loading").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var Status = $(xml).find('Status').text();
                var Details = $(xml).find('Details').text();
                
                if(Status == "1") {
                    if(document.location.href.indexOf("artwork=") > -1) {
                        if(GetQueryVariable("artwork") == BagOData && parseInt("0" + BagOData) > 0) $("#Panel_InCartMessage").hide();
                    }

                    if(CallbackFunction != "") {
                        eval(CallbackFunction);
                    }
                }
                else {
                    alert(ErrMsg);
                }
            }
            else {
                alert(ErrMsg);
            }
        }
    });
}


function Cart_UpdateShippingMethods(SkipCallback) {
    var Shipping_Method_ID = $("#Checkout_ShippingMethod_Selected").val();
    var BagOData = "ShippingMethodID=" + ((Shipping_Method_ID == "") ? "0" : Shipping_Method_ID) + "&CountryID=" + $("#Shipping_Address_Editor_Address_Country").val();

    $.ajax({
        type: "POST",
        url: AJAX_ServicesURL + '/GetShippingMethods',
        data: BagOData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Content-Length", BagOData.length);
            
            $("#Checkout_DeliveryMethods_Preloader").show();
            $("#Checkout_DeliveryMethods_Updater").hide();
        },
        dataType: "xml",
        complete: function(xhr, msg) {
            $("#Checkout_DeliveryMethods_Preloader").hide();
            
            if(xhr.status == 200) {
                var xml = (xhr.responseXML);
                var Status = $(xml).find('Status').text();
                var Details = $(xml).find('Details').text();
                var XML = $(xml).find('RawXML').text();
                
                if(Status == "1") {
                    $("#Checkout_DeliveryMethods_Updater").html(Details);
                    $("input[name='RadioButtons_ShippingMethod']").click(function() {
                        $("input[name='Checkout_ShippingMethod_Selected']").val($("input[name=RadioButtons_ShippingMethod]:checked").val().split("|",2)[0]);
                        Cart_UpdateCart_Checkout();
                    });
                    if(SkipCallback != 'SkipCallback') Cart_UpdateCart_Checkout();
                }
                else {
                    alert("There was a problem retrieving the shipping methods.");
                }
                
                $("#Checkout_DeliveryMethods_Updater").show();
            }
            else {
                alert(xhr.status);
                alert(xhr.message);
            }
        }
    });
}


function Checkout_Validate() {
    $("#MainWebForm").submit();
}

function Checkout_ShowForm() {
    Cart_UpdateShippingMethods('SkipCallback');
    $("div.error").hide();
    $("#Checkout_Summary").slideFadeToggle("slow");
    $("#Checkout_ContinueButton_Panel").slideFadeToggle("normal");
    $("#Checkout_LoggedInMessage").slideFadeToggle("normal");
    $("#Checkout_PlaceOrderButton_Panel").slideFadeToggle("normal");
    var t2 = setTimeout("$(\"#Checkout_NewUserBoxes\").slideFadeToggle(\"normal\")", 1300);
    var t4 = setTimeout("$(\"#Checkout_AddressBoxes\").slideFadeToggle(\"normal\")", 1000);
    var t3 = setTimeout("$(\"#Checkout_PaymentBoxes\").slideFadeToggle(\"normal\")", 700);
}


/*
=======================================================================================
Add input field class to highlight on focus
=======================================================================================
*/
function ApplyFormFieldFocusEvents() {
	$("input[type='text']").focus(function() { $(this).addClass("Input_CurrentFocus"); });
	$("input[type='text']").blur(function() { $(this).removeClass("Input_CurrentFocus"); });
	$("input[type='password']").focus(function() { $(this).addClass("Input_CurrentFocus"); });
	$("input[type='password']").blur(function() { $(this).removeClass("Input_CurrentFocus"); });
	$("select").focus(function() { $(this).addClass("Input_CurrentFocus"); });
	$("select").blur(function() { $(this).removeClass("Input_CurrentFocus"); });
}


function Checkout_PlaceOrderButton_Disable() {
    $("#Checkout_PlaceOrderButton_Panel").hide();
    $("#Checkout_PlaceOrderButton_PleaseWait").show();
    
    //Show the JQuery FancyBox busy indicator
    $.fn.fancybox.showLoading();
}


function GetQueryVariable(VariableName) {
    var QueryString = window.location.search.substring(1);
    var Values = QueryString.split("&");
    var Value = "";
    for(var i = 0; i < Values.length; i++) {
        var NameValuePair = Values[i].split("=");
        if(NameValuePair[0] == VariableName) {
            Value = NameValuePair[1];
            break;
        }
    }
    return Value;
}