/* Checkout */

$(function() {

    if (!getCookie("JSESSIONID")) {
       $("#cookiesRequired").show(); 
    }
  
    $("#shoppingCart select").change(function() {
        $(this).parents("form").submit();
    });
    
    $("#deliveryInfoLink").click(function() {
        $("#deliveryModalWindow").fadeIn();
        return false;
    });
    
    $("#deliveryModalWindowClose").click(function() {
        $("#deliveryModalWindow").fadeOut();
        return false;        
    });
    
    $("#offerCodeTermsLink").click(function() {
        $("#offerCodeTerms").fadeIn();
        return false;
    });
    
    $("#offerCodeTermsClose").click(function() {
        $("#offerCodeTerms").fadeOut();
        return false;        
    });    
    
    function bindCardEvent() {
        $("#cardSelection").bind("change", function() {
            updateCardInput();
        });    
    }        
    
    function updateCardInput() {
        var debitCardFields = $("#debitCartFields");
        var selectedCard = $("#cardSelection").val() ;       
        if (selectedCard == "maestro" || selectedCard == "solo") {
            debitCardFields.show();
        } else {
            debitCardFields.hide();
        }
    }    
    
    updateCardInput();
    bindCardEvent();
    
    /* Checkout */
    
    $("#removeBannedItemsFromCart").click(function() {
        $("input[name=removeBannedBtnClicked]").val("true");
    });
    
    $("#useGiftVoucherCheck").click(function() {
        if ( $(this).is(":checked") ) {
            $("#useGiftVoucher").val("check");
            $(this).val("check");
            $("#voucherRedeemForm").show();       
        } else {
            $("#useGiftVoucher").val("");
            $(this).val("");
            $("#voucherRedeemForm").hide();
        }
    });
        
    $("#deliveryOptionsList input").bind("click", function() {
        var action = "/checkout-billing.do";
        var method = "POST";
        var delOption = $(this).val();
        var ajaxOptions = {
            type: method,
            url: action,
            data: "deliveryOption=" + delOption,
            success: function(data) {
                removeLoader();
		        var action = "/checkout-billing-submit-ajax.do";
		        var method = $("#mainForm").attr("method");
		        var ajaxOptions = {
		            type: method,
		            url: action,
		            data: "",
		            success: function(data) {
		                var action = $("#mainForm").attr("action");
		                var name = $("#mainForm").attr("name");
		                $("#mainForm").replaceWith(data);
		                $("#mainForm").attr("action", action).attr("name", name);
		                bindCardEvent();
		                updateCardInput();
		            }
		        };
		        $.ajax(ajaxOptions);

            }
        };
        
        $.ajax(ajaxOptions);
 
        if ( $(this).attr("class") == "BYBOX" ) {
 
	        if ( $("#byBoxTrigger").is(":checked") ) {
	            if ( $("#byBoxiFrame").attr("src") == "" ) {
	               $("#byBoxiFrame").attr("src", "http://www.bybox.com/NearestByBox");
	            }
	            $("#byBoxWindow").show();
	        } else {
	            $("#byBoxWindow").hide();
	        }
        
        }
        
        var smsCapable = $(this).next().next().val();
        if ( smsCapable == "True" ) {
            $("#smsService").removeAttr("class");
        } else {
            $("#smsService").addClass("hidden");
        }
        
    });
        
    //ByBoxNearestSite(window.frames[0], OnSiteSelect); // Initialise.
        
    function OnSiteSelect(site) {
        populateAddress(site);
        $("#byBoxWindow").hide();
    }
    
    function populateAddress(address) {
        var $buyBoxForm = $("#buyBoxForm");
        $buyBoxForm.find("input[name=street1]").val(address.address1);
        $buyBoxForm.find("input[name=street2]").val(address.address2);
        $buyBoxForm.find("input[name=zipPostalCode]").val(address.postalCode);
        $buyBoxForm.find("input[name=city]").val(address.town);
        $buyBoxForm.find("input[name=stateProvince]").val(address.region );
        $buyBoxForm.find("input[name=phoneNumber]").val(address.siteName);
        var url = $buyBoxForm.attr("action");
        var type = $buyBoxForm.attr("method");
        var dataString = $buyBoxForm.serialize();
        $.ajax({
            type: type,
            url: url,
            data: dataString,
            success: function(data) {
                var addressUID = $(data).find("#addedAddressUID").val();
                 $.ajax({
		            type: "POST",
		            beforeSend: function() {
                        $("#shippingBox").empty().append("<img id='loadingImage' src='/store/images/loading.gif' alt='Loading...' />"); //""
		            },
		            url: "/select-address-submit.do",
		            data: "redirect=/checkout-billing.do&addressType=shipping&selectedAddressUID=" + addressUID,
		            success: function(data) {
                        var newAddress = $(data).find("#shippingBox");
                        $("#shippingBox").replaceWith(newAddress);
                    }
                });
            },
            error: function() {
                
            }
        });
        
    }

    $("#smsService form").submit(function() {
	    var $this = $(this);
	    var action = $this.attr("action");
	    var method = $this.attr("method");
	    var dataString = $this.serialize();
	    var ajaxOptions = {
	        type: method,
	        url: action,
	        data: dataString,
            success: function() {
                $("#smsPhoneNumber").text($("#phoneNumber").val());
            }
	    };
	    if ( $("#phoneNumber").val() != "" ) {
	       $.ajax(ajaxOptions);
	    }
        return false;
    });
    
    $("#smsServiceModalLink").click(function() {
        $("#smsServiceModal").show();
        return false;
    });
    
    $("#smsServiceModalCloseLink").click(function() {
        $("#smsServiceModal").hide();
        return false;
    });
    
    var mainForm = $("#mainForm");
    
    $("#selectBigGiftWrap").live("click", function() {
        if ( $(this).is(":checked") ) {
            $("#mainForm").find("input[name=giftWrappingOption]").val("displayBigWrap");
            $("#mainForm").find("input[name=giftWrappingActive]").val("false");        
        } else {
            $("#mainForm").find("input[name=giftWrappingOption]").val("removeBigWrap");
        }
        checkoutBillingAJAX();
    });
    
    $("#giftWrapOptions.bigWrap li").live("click", function() {
        var thisElem = $(this);
        var paperCode = thisElem.find("input[name=wrappingCode]").val();
        var paperPrice = thisElem.find("input[name=wrappingPrice]").val();
        $("#mainForm").find("input[name=giftWrappingCode]").val(paperCode);
        $("#mainForm").find("input[name=giftWrappingPrice]").val(paperPrice);
        $("#mainForm").find("input[name=giftWrappingOption]").val("addBigWrap");
        checkoutBillingAJAX();
        return false;
    });
    
    $("#messageCheckbox input").live("click", function() {
        if ( $(this).is(":checked") ) {
            $("#mainForm").find("input[name=giftWrappingOption]").val("updateBigWrap");
            $("#addGiftWrappingMsg").fadeIn();
        } else {
            $("#addGiftWrappingMsg").fadeOut();
            $("#mainForm").find("input[name=giftWrappingOption]").val("updateBigWrap");
            $("#giftWrappingMessage").text("").val("");
            checkoutBillingAJAX();
        }
    });    
    
    $("#changeGiftWrappingMsg").live("click", function() {
        $("#addGiftWrappingMsg").fadeIn();
        $("#mainForm").find("input[name=giftWrappingOption]").val("updateBigWrap");
        return false;
    });    
    
    $("#submitGiftWrapMsg").live("click", function() {
        checkoutBillingAJAX();
        return false;
    });
    
    $("#changeGiftWrapping").live("click", function() {
        $("#mainForm").find("input[name=changeWrapping]").val("1");
        $("#mainForm").find("input[name=giftWrappingOption]").val("displayBigWrap");
        checkoutBillingAJAX();
        return false;
    });
    
    var remainingChars = $("#remainingChars");
    var messageLimit = 150;
    
    $("#giftWrappingMessage").live("keydown", function(e) {
        var messageLength = $(this).val().length + 1;
        var messageCount = messageLimit - messageLength;
        if ( messageCount > -1 ) {
            remainingChars.text(messageCount);
        } else {
            if (e.which != 8 && (e.which < 37 || e.which > 40 ) ) {
                return false;
            }
        }
    });


    $(".smallGiftWrap input[type=checkbox]", $("#shoppingCart")).live("click", function() {
        var thisElem = $(this);
        var label = thisElem.parents("label");
        var cartKey = label.attr("rel");
        if ( thisElem.is(":checked") ) {
            $("#mainForm").find("[name=giftWrappingOption]").val("display");
        } else {
            $("#mainForm").find("[name=giftWrappingOption]").val("remove");
        }
        $("#giftWrappingMessage").text("").val("");
        $("#mainForm").find("input[name=giftWrappingCartKey]").val(cartKey);
        $("#mainForm").find("input[name=giftWrappingActive]").val("true");
        $("#mainForm").find("input[name=selectBigGiftWrap]").attr('checked', false);
        checkoutBillingAJAX();
    });    
    
    $("#giftWrapOptions.smallWrap li a").live("click", function() {
        var thisElem = $(this);
        var cartKey = thisElem.siblings("input[name=smallGiftWrappingCartKey]").val();
        var paperCode = thisElem.siblings("input[name=smallGiftWrappingPaperCode]").val();
        var paperPrice = thisElem.siblings("input[name=smallGiftWrappingPrice]").val();
        var uidPk = thisElem.siblings("input[name=smallGiftWrappinguidPk]").val();
        $("#mainForm").find("input[name=giftWrappingCode_" + cartKey + "]").val(paperCode);
        $("#mainForm").find("input[name=giftWrappingPrice_" + cartKey + "]").val(paperPrice);
        $("#mainForm").find("input[name=giftWrappingProductCode_" + cartKey + "]").val(uidPk);
        $("#mainForm").find("input[name=giftWrappingProductCode]").val(uidPk);
        $("#mainForm").find("input[name=giftWrappingPrice]").val(paperPrice);
        if ( $("#mainForm").find("input[name=giftWrappingMessage_" + cartKey + "]").val() == "Please enter your message" ) {
            $("#mainForm").find("input[name=giftWrappingMessage]").val($("#mainForm").find("input[name=giftWrappingMessage_" + cartKey + "]").val());
        } else {
            $("#mainForm").find("input[name=giftWrappingMessage]").val("");
        }
        $("#mainForm").find("input[name=giftWrappingCode]").val(paperCode);
        $("#mainForm").find("input[name=giftWrappingOption]").val("add");
        $("#mainForm").find("input[name=giftWrappingCartKey]").val(cartKey);
        checkoutBillingAJAX();
        return false;
    });
    
    $(".messageCheckbox input[type=checkbox]").live("click", function() {
        var thisElem = $(this);
        if ( thisElem.is(":checked") ) {
            thisElem.parents("label").next(".addGiftWrappingMsg").fadeIn();
        } else {
            var cartKey = thisElem.attr("rel");
            thisElem.parents("label").next(".addGiftWrappingMsg").fadeOut();
            $("#giftWrappingMessage_" + cartKey).val("");
            $("#mainForm").find("input[name=giftWrappingCartKey]").val(cartKey);
            $("#mainForm").find("input[name=giftWrappingOption]").val("update");
            $("#mainForm").find("input[name=giftWrappingMessage]").val("");
            checkoutBillingAJAX();
        }

    });
    
    $(".submitSmallGiftWrapMsg").live("click", function() {  
        var thisElem = $(this);
        var cartKey = thisElem.attr("rel");
        var giftWrapMsg = thisElem.siblings("textarea").val();
        $("#mainForm").find("input[name=giftWrappingCartKey]").val(cartKey);
        $("#mainForm").find("input[name=giftWrappingMessage]").val(giftWrapMsg);
        $("#mainForm").find("input[name=giftWrappingOption]").val("update");
        checkoutBillingAJAX();
        return false;
    });
    
    $(".changeGiftWrapMsg").live("click", function() {
        $(this).parents(".messagePreview").next(".addGiftWrappingMsg").fadeIn();
        return false;
    });
    
    $(".changeSmallGiftWrap").live("click", function() {
        var cartKey = $(this).attr("rel");
        $("#mainForm").find("input[name=changeWrapping_" + cartKey + "]").val("1");
        checkoutBillingAJAX();
        return false;
    });
    
    function checkoutBillingAJAX() {
        var action = "/checkout-billing-submit-ajax.do";
        var method = $("#mainForm").attr("method");
        var dataString = $("#mainForm").serialize();
        var ajaxOptions = {
            type: method,
            url: action,
            data: dataString,
            beforeSend: function() {
                insertLoader();
            },
            success: function(data) {
                removeLoader();
                var action = $("#mainForm").attr("action");
                var name = $("#mainForm").attr("name");
                $("#mainForm").replaceWith(data);
                $("#mainForm").attr("action", action).attr("name", name);
                bindCardEvent();
                updateCardInput();
                activateFormValidation();
            }
        };
        $.ajax(ajaxOptions);
    }

    $("#ipointsLinkForm").submit(function() {
        var thisElem = $(this);
        processIpointsForm(thisElem);
        return false;
    });
    
    $("#ipointsCreateForm").submit(function() {
        var thisElem = $(this);
        processIpointsForm(thisElem);
        return false;
    });
    
    function processIpointsForm(thisElem) {
        var method = thisElem.attr("method");
        var url = thisElem.attr("action");
        var dataString = thisElem.serialize();
        var error;
        if ( $("#agreeTerms", thisElem).length > 0 && $("#agreeTerms").is(":checked") === false ) {
            error = "You must accept the iPoints terms and conditions before registering.";
            ipointsError(error);
            return false;
        }

        if ( $("#customerLogin", thisElem).length > 0 && $("#customerLogin").val() == "" ) {
            error = "Please fill in your Login (Email)";
            ipointsError(error);
            return false;
        }
        
        if ( $("#customerLastName", thisElem).length > 0 && $("#customerLastName").val() == "" ) {
            error = "Please fill in your Surname";
            ipointsError(error);
            return false;
        }
        
        if ( $("#customerCity", thisElem).length > 0 && $("#customerCity").val() == "" ) {
            error = "Please fill in your City";
            ipointsError(error);
            return false;
        }                

        if ( $("#customerPostCode", thisElem).length > 0 && $("#customerPostCode").val() == "" ) {
            error = "Please fill in your PostCode";
            ipointsError(error);
            return false;
        }  

        if ( $("#customerPassword", thisElem).length > 0 && $("#customerPassword").val() == "" ) {
            error = "Please fill in your Password";
            ipointsError(error);
            return false;
        }
            
        var orderInQueue = $("#orderInQueue").val();
        
        var dataTypeS;
        
        if ( orderInQueue == "true" ) {
            dataTypeS = "html";
        } else {
            dataTypeS = "json";
        }
        
        var responseText;
        if ( thisElem.attr("id") == "ipointsLinkForm" ) {
            responseText = $("#linkResponse").val();
        } else {
            responseText = $("#registerResponse").val();
        }       
        
        
        $.ajax({ 
            type: method,
            url: url,
            data: dataString,
            dataType: dataTypeS,
            success: function(data) {
                if ( orderInQueue == "true" ) {
	                var responseHTML = "<div id='ipointsRegConfirm'><p>" + responseText + "</p><p id='ipointsRegConfirmWarn'>" + $("#registerWarning").val() + "</p></div>";
	                $("#iPointsReceiptRegBody").empty().append(responseHTML);
                } else {
	                var iPointsID = data.iPointsID;
	                var error = data.error;
	                if (error != "") {
	                    ipointsError(error);
	                } else if ( iPointsID != "" ) {
	                    var customerUidPK = $("#customerUidPK").val();
	                    $.ajax({
	                        type: "post",
	                        url: "/ipoints-submit.do",
	                        data: "customerUID_PK=" + customerUidPK + "&ipointsMemberId=" + iPointsID,
	                        success: function() {
	                            var responseHTML = "<div id='ipointsRegConfirm'><p>" + responseText + "</p><p id='ipointsRegConfirmWarn'>" + $("#registerWarning").val() + "</p></div>";
	                            $("#iPointsReceiptRegBody").empty().append(responseHTML);
	                        }
	                    });
	                } else {
	                    error = "An error as occured. Please try again.";
	                    ipointsError(error);
	                }
                }
            },
            error: function() {
                error = "An error has occured. Please try again later.";
                ipointsError(error);
            }
        });
    }
    
    function ipointsError(error) {
            if ( $("#errorMessages").length > 0 ) {
                $("#errorMessages p").text(error);
            } else {
                $("#iPointsReceiptRegBody").find("p:first").after("<div id='errorMessages'><p>" + error + "</p></div>");                    
            }
    }
    
    $("#iPointsCart").hover(function() {
        $("#iPointsCartExplainBox").show();
    }, function() {
        $("#iPointsCartExplainBox").hide();
    });
    
    /* PayPal */
    
    $("#creditCardFields").hide();
    
    function processPaymentFields() {
        if ( $("#payPal").is(":checked") ) {
            $("#creditCardFields").hide();        
        } else if ( $("#creditCard").is(":checked") ) {
            $("#creditCardFields").show();
        }
    }
    
    processPaymentFields();
    
    $("#paymentTypeSelection input").change(function() {
        processPaymentFields();
    });   
    
    /* Shipping Checkout Form */
    $("#chosenAddressTop, #chosenAddressBottom").change(function() {
        submitPostCodeFinder($(this).attr("name"));
    });
    
    function submitPostCodeFinder(submitName) {
	    if ( submitName == "chosenAddressTop" ) {
	        name = "updateAddressTop";
	    } else if ( submitName == "chosenAddressBottom" ) {
	        name = "updateAddressBottom";
	    }
	    $("#checkoutAddressNewCustomer").attr("action", "checkout-billing-shipping-new-address-submit.do?"+ name +"=Add this address").submit();
    }
    
	function populateBillingForm() {
	    $("#shippingAddressForm input:text").each(function(i) {
	        $("#billingAddressForm input:text:eq(" + i +  ")").val($(this).val()).attr("readonly","true");
	    });
	    $("#billingAddressForm input[type=submit]").attr("disabled", "true");
	    $("#billingAddressForm .formHelper").hide();
	    var titleDrop = document.getElementById("titleDrop");
	    var billingTitleDrop = document.getElementById("billingTitleDrop");
	    var titleIndex = titleDrop.selectedIndex;
	    var countryDrop = document.getElementById("country");
	    var billingCountryDrop = document.getElementById("billingCountry");
	    var countryIndex = countryDrop.selectedIndex;
	    billingTitleDrop.selectedIndex = titleIndex;
	    billingCountryDrop.selectedIndex = countryIndex;
	    $("#billIsShipVal").val("check");
	    deactivate($("#billingCountry"), $("#billingAddressForm input:text"));
	}
	
	function clearBillingForm() {
	    $("#billingAddressForm input:text").val("").removeAttr("readonly");
	    $("#billingAddressForm input[type=submit]").removeAttr("disabled");
	    $("#billingAddressForm .formHelper").show();
	    var billingTitleDrop = document.getElementById("billingTitleDrop");
	    billingTitleDrop.selectedIndex = 0;
	    var billingCountryDrop = document.getElementById("billingCountry");
	    billingCountryDrop.selectedIndex = 10;
	    $("#billIsShipVal").val("uncheck");
	    activateIreland($("#billingCountry"), $("#billingAddressForm input:text"), $("#billingAddressForm input[name=billingZipPostalCode]"));
	}
    
    if ( $("#billIsShip").is(':checked') ) {
        populateBillingForm();
    }
    
    $("#checkoutAddressNewCustomer").bind("submit keyup change", function() {
        if ( $("#billIsShip").is(':checked') ) {
            populateBillingForm();
        }
    });
    
    $("#billIsShip").click(function() {
        if ( $(this).is(':checked') ) {
            populateBillingForm();
        } else {
            clearBillingForm();
        }
    });    

    function showHidePostCodeBtn() {
        if ( $("#country").val() != "GB" ) {
            $("#addressLookup").hide();
        } else {
            $("#addressLookup").show();
        } 
    }

    function showHideShipPostCodeBtn() {
        if ( $("#country").val() != "GB" ) {
            $("#addressLookupTop").hide();
        } else {
            $("#addressLookupTop").show();
        }
    }
    
    function showHideBillPostCodeBtn() {
        if ( $("#billingCountry").val() != "GB" ) {
            $("#addressLookupBottom").hide();
        } else {
            $("#addressLookupBottom").show();
        } 
    } 

    if ( $("#addressLookup").length > 0 ) {
    
    
        activateIreland($("#country"), $("#addressForm input:text"), $("#addressForm input[name=zipPostalCode]"));
        
        showHidePostCodeBtn();
        
        $("#country").change(showHidePostCodeBtn);   
	    
	    $("#chosenAddress").change(function() {
	        $("#addressForm").attr("action", "create-address-submit.do?updateAddress=Add this address").submit();
	    });         
        
    } else {
    
        activateIreland($("#country"), $("#shippingAddressForm input:text"), $("#shippingAddressForm input[name=zipPostalCode]"));
	    
	    showHideShipPostCodeBtn();
	    showHideBillPostCodeBtn();
	    $("#country").change(showHideShipPostCodeBtn);    
	    $("#billingCountry").change(showHideBillPostCodeBtn);        
    }
    
});
