$(function() {
    
    /* Global AJAX Settings */
    $.ajaxSetup({
        beforeSend: function() {
            removeLoader();
            insertLoader();
        },
        complete: function() {
            removeLoader();
        }
    });

    
    $("#content").localScroll();
    
    $("#searchBox").submit(function() {
        var thisElem = $(this);
        var textBox = thisElem.find("input[type=text]").val();
        if ( textBox == "Type keyword or code here" ) {
            textBox = "";
        }
        var selectBox = thisElem.find("select").val();
        var finalQuery = "/searchSite.do?Query=" + textBox + " " + selectBox;
        window.location.href = finalQuery;
        return false;
    });
    
    $("#searchText").focus(function() {
        var thisElem = $(this);
        if ( thisElem.val() == "Type keyword or code here" ) {
            thisElem.val("");
        }
    }).blur(function() {
        var thisElem = $(this);
        if ( thisElem.val() == "" ) {
            thisElem.val("Type keyword or code here");
        }
    });    
    
    $("#nextDayDelivery").css("cursor","pointer").click(function() {
        window.location.href = $(this).attr("rel");
    });
    
    $("#reminderService").css("cursor","pointer").click(function() {
        window.location.href = $(this).find("a").attr("href");
    });
    
    $("#cataloguRequest").css("cursor","pointer").click(function() {
        window.location.href = $(this).find("a").attr("href");
    });
    
    $(".giftFinderQuestion").change(function() {
        window.location.href = $(this).val();
    });
    
    $(".external").attr("target","_blank")
    
    $("#featuredProducts li.product").css("cursor", "pointer").live("click", function() {
        window.location.href = $(this).find("a").attr("href");
    });
    
    /* Main Navigation */
    $("#mainNav > li").hover(
    function() {
        var dropDown = $(this).children("ul");
        var dropDownHeight = dropDown.innerHeight();
        var cssOptions = {
            display: "block",
            opacity: 1,
            height: 0
        };
        var animateOptions = {
            height: dropDownHeight + "px"
        };
        dropDown.css(cssOptions).stop().animate(animateOptions, 300, "swing");
    },
    function() {
        var cssOptions = {
            height: ""
        };
        $(this).children("ul").css(cssOptions).stop().hide();
    });
    /* End Main Navigation */ 
     
    /* Micro Cart */
    
    $("#toggleBasket").live("click", function() {
        var thisElem = $(this);
        var text = thisElem.text();
        if ( text == "Show Basket" ) {
            thisElem.attr("class", "hide");
            showMicroCart();
        } else if ( text == "Hide Basket" ) {
            thisElem.attr("class", "show");
            hideMicroCart();
        }
        
        return false;
    });
    /* End Micro Cart */
    
    /* Add To Cart AJAX */
   
    bindAddToCartAJAX();
    
    $("#addToCartClose, #addToCartContinue").live("click", function() {
        removeAddToCartDialogue();
        return false;
    });
    
    $(".removeItemLink").live("click", function() {
        var cikey = $(this).next().val();
        $.ajax({
            type: "GET",
            url: "/remove-cart-item-ajax.do",
            data: "cikey=" + cikey,
            dataType: "html",
            beforeSend: function() {
                insertLoader();
            },
            success: function(data) {
               removeLoader();
               $("#microCartItems").slideUp(300, function() {
                    $("#microCart").replaceWith(data);
                    $("#microCartItems").slideDown(300);
               });
               
            },
            error: function(data) {
               alert("Error");
               removeLoader();
            }    
        });
        return false;
    });
    
    setTimeout(showVariantSelection, 1000)
        
    
    /* Form Validation */
    activateFormValidation();
    function activateFormValidation() {
        
        var requiredText = "Required";
        var completeText = "";
        var formHelper = "<span class='formHelper'>" + requiredText + "</span>";
        
        var validatedInputField = $("input.validatedField");
        
        validatedInputField.after(formHelper);
        
        validatedInputField.each(function() {
            isInputFieldValidated($(this));
        });
        
        validatedInputField.keyup(function() {
            isInputFieldValidated($(this));
        }).blur(function() {
            isInputFieldValidated($(this));
        }).click(function() {
            isInputFieldValidated($(this));
        });
        
        function isInputFieldValidated(thisElem) {
            if ( thisElem.val() != "" ) {
                thisElem.next().text(completeText).removeClass("incomplete").addClass("complete");
            } else {
                thisElem.next().text(requiredText).removeClass("complete").addClass("incomplete");
            }
        }
        
        var validatedSelectBox = $("select.validatedField");
        
        validatedSelectBox.after(formHelper);
    
        validatedSelectBox.change(function() {
            isSelectFieldValidated($(this));
        });
        
        function isSelectFieldValidated(thisElem) {
            if ( thisElem.get(0).selectedIndex != 0 ) {
                thisElem.next().text(completeText).removeClass("incomplete").addClass("complete");
            } else {
                thisElem.next().text(requiredText).removeClass("complete").addClass("incomplete");
            }
        }
        
        var multipleSelectValidation = $("div.multipleSelectValidation");
        
        multipleSelectValidation.append(formHelper);
        
        isMultipleSelectValidation(multipleSelectValidation);
        
        multipleSelectValidation.find("select").change(function() {
            isMultipleSelectValidation(multipleSelectValidation);
        });
        
        function isMultipleSelectValidation(thisElem) {
            thisElem.each(function() {
                var firstSelect = $(this).find("select").get(0).selectedIndex;
                var secondSelect = $(this).find("select").get(1).selectedIndex;
                if ( firstSelect != 0 && secondSelect != 0 ) {
                    $(this).find(".formHelper").text(completeText).removeClass("incomplete").addClass("complete");
                } else {
                    $(this).find(".formHelper").text(requiredText).removeClass("complete").addClass("incomplete");
                }
            });
        }
    }
    
    $("#catalogueRequestForm #updateAddress").hide();
    $("#catalogueRequestForm .postCodeLookup select").change(function() {
        var form = $("#catalogueRequestForm");
        form.append("<input type='hidden' name='updateAddress' value'' />");
        form.submit();
    });
    
    var $autoOfferCode = $("#autoOfferCode");
    if ( $autoOfferCode.length > 0 ) {
        $.ajax({ 
            type: "POST",
            url: "update-cart.do",
            data: "couponCode=" + $autoOfferCode.val()
        });    
    }
    
    $("#iPointsRegForm").submit(function() {
        var thisElem = $(this);
        var method = thisElem.attr("method");
        var url = thisElem.attr("action");
        var dataString = thisElem.serialize();
        if ( $("#agreeTerms").length > 0 && $("#agreeTerms").is(":checked") == false ) {
            var error = "You must accept the iPoints terms and conditions before registering.";
            ipointsError(error);
            return false;
        }
        
        if ( $("#customerLogin").val() == "" ) {
            var error = "Please fill in your Login (Email)";
            ipointsError(error);
            return false;
        }
        
        if ( $("#customerLastName").val() == "" ) {
            var error = "Please fill in your Surname";
            ipointsError(error);
            return false;
        }
        
        if ( $("#customerCity").val() == "" ) {
            var error = "Please fill in your City";
            ipointsError(error);
            return false;
        }                

        if ( $("#customerPostCode").val() == "" ) {
            var error = "Please fill in your PostCode";
            ipointsError(error);
            return false;
        }                

        if ( url == "/myaccount/control/mapIwootUserWithIpointsUser" ) {
            var confirmType = "?confirmType=link";
        } else if ( url == "/myaccount/control/createIpointsMember" ) {
            var confirmType = "?confirmType=register";
        }

        $.ajax({ 
            type: method,
            url: url,
            data: dataString,
            dataType: "json",
            success: function(data) {
                var iPointsID = data.iPointsID;
                var error = data.error;
                if (error != "") {
                    ipointsError(error);
                } else if ( iPointsID != "" ) {
                    var customerUidPK = $("#customerUid").val();
                    $.ajax({
                        type: "post",
                        url: "/ipoints-submit.do",
                        data: "customerUID_PK=" + customerUidPK + "&ipointsMemberId=" + iPointsID,
                        success: function() {
                            window.location.href = "/ipoints.do" + confirmType;
                        }
                    });
                } else {
                    var error = "An error as occured. Please try again."
                    ipointsError(error);
                }
            },
            error: function() {
                var error = "An error has occured. Please try again later."
                ipointsError(error);
            }
        });
        return false;
    });
    
    function ipointsError(error) {
            if ( $("#errorMessages").length > 0 ) {
                $("#errorMessages p").text(error);
            } else {
                $("#iPointsRegForm").find("h4").after("<div id='errorMessages'><p>" + error + "</p></div>");                    
            }
    }
    
    if ( $("#iPointsSummary p").length > 0 ) {
        var accountID = $("#ACCOUNTID").val();
        getTotalipoints(accountID);
    }
    
    function getTotalipoints(accountID) {
       method= "POST";  
       url = "/myaccount/control/numberIpointsCustomer";
       dataString = "ACCOUNTID=" + accountID;
       $.ajax({
            type: method,
            url: url,
            data: dataString,
            dataType: "json",
            success: function(data) {
                $("#iPointsSummary p").text(data.numberPoints);
            }            
       });
    }
    
    $(".shortDescription").css("opacity", 0.9).click(function() {
        window.location.href = $(this).find("a").attr("href");
    });
    
    $(".titleImageContainer").hover(function() {
       if ( $(this).children(".shortDescription").is(":animated") == false ) {
           $(this).children(".shortDescription").slideDown();
       }
    }, function() {
       $(this).children(".shortDescription").fadeOut();
    });
    
    
    $("#newsletterEmailAddress").click(function() {
        $(this).val("");
    });    
    
    
}); /* Closing jQuery Ready Function*/

/* Global Functions */

function bindAddToCartAJAX() {
    $(".catalogueProduct, .productVariationForm").submit(function() {
        var variantDropDown = $(".variantDropDown select");
        if ( variantDropDown.length > 0 && variantDropDown.val() == "" ) {
            alert("Please make your selection.")
            return false;
        }
        var thisElem = $(this)
        var formMethod = thisElem.attr("method");
        var formURL = "/add-to-cart-ajax.do";
        var dataString = thisElem.serialize();
        removeLoader();
        removeAddToCartDialogue();
        $.ajax({
            type: formMethod,
            url: formURL,
            data: dataString,
            dataType: "html",
            beforeSend: function() {
                insertLoader();
                if ( $("#variantSelectionNotice").length > 0 ) {
                    hideVariantSelection();
                }
            },
            success: function(data) {
               removeLoader();
               var itemAddedImage = $(data).find("#addedItemImage").val();
               insertAddToCartDialogue("", itemAddedImage);
               $("#microCart").replaceWith(data);
               removeAddToCartDialogueTimer = setTimeout(removeAddToCartDialogue, 5000);
               
            },
            error: function(data) {
               alert("Error");
               removeLoader();
            }    
        });
        return false;
    });

}

function showVariantSelection() {
    $("#variantSelectionNotice").animate({
         opacity: 1,
         top: "-10px"
    });
}

function hideVariantSelection() {
    $("#variantSelectionNotice").animate({
         opacity: 0,
         top: "-20px"
    });
}        

function insertLoader() {
    var loader = "<div id='loading'><h3>Loading...</h3><div id='loadingBody'><p>Please wait. We are processing your request.</p></div></div>";
    $("#wrapper").append(loader)
}

function removeLoader() {
    $("#loading").remove();
};

function insertAddToCartDialogue(itemName, ItemImage) {
    var dialogue = "<div id='addToCartConfirm'><h3>You've just popped this into your basket:</h3><img src='" + ItemImage + "' width='200' height='171' alt'" + itemName + "' /><ul><li id='addToCartContinue'><a href='#'>Continue Shopping</a></li><li id='addToCartCheckout'><a href='/view-cart.do'>Checkout</a></li><li id='addToCartClose'><a href='#'>Close Window</a></li></ul></div>"
    $(dialogue).appendTo("#wrapper").fadeIn();
}

function removeAddToCartDialogue() {
    $("#addToCartConfirm").fadeOut(function() {
      $(this).remove();
    });
}

function hideMicroCart() {
    $("#microCartItems").slideUp(300);
    $("#toggleBasket").text("Show Basket");
}

function showMicroCart() {
    $("#microCartItems").slideDown(300);
    $("#toggleBasket").text("Hide Basket");
}