(function($) {
    var site = window.site = {
        data: {
        // js data
    },
    func: {
        // commonly used site specific functions
        setupHeaderNavigation: function() {
            /* top nav hover */
            var menuTimer;
            var navItemSecondaryIndex;
            $("#siteHdr #nav > li").each(function(item, i) {
                $(this).hover(function() {
                    if (menuTimer != "undefined") {
                        clearTimeout(menuTimer);
                        lib.layer.remove("#tierThreeLayer");
                    }
                    $("#nav > li").removeClass("navHighlight1");
                    $(this).addClass("navHighlight1");
                    $("li:eq(0)", this).addClass("first");

                    /* Add the menu to body, and setup hover */
                    var highestnavitem = this;
                    var wPos = lib.screen.position();
                    var wSize = lib.screen.size();
                    var menuLayerSelector = "#hdrNavigationLayer";
                    liPositionX = lib.utils.getPosition(this)[0][0] + (1);
                    liPositionY = lib.utils.getPosition(this)[0][1] + (26); // navbar position plus height of bar

                    if ($("ul", this).html() != null) {
                        var ulHTML = "<ul class='tiertwo'>" + $("ul", this).html() + "</ul>";
                        lib.layer.create(menuLayerSelector, {
                            defaultContent: ulHTML,
                            xPos: liPositionX,
                            yPos: liPositionY
                        });
                    }

                    $("#hdrNavigationLayer li").hover(function() {
                        if (menuTimer != "undefined")
                        { clearTimeout(menuTimer); }

                        $("#hdrNavigationLayer li").removeClass("navHighlight2");
                        $(this).addClass("navHighlight2");
                        navItemSecondaryIndex = $("#hdrNavigationLayer li").index(this);
                        if ($("ul", this).html() != null) {

                            // third tier positioning and creation
                            var difference = lib.utils.getPosition("#hdrNavigationLayer")[0][1] - lib.utils.getPosition("#hdrNavigationLayer ul")[0][1];
                            var liTier2PositionX = lib.utils.getPosition(this)[0][0] + ($(this).width()) + 31; // the hardcoded number is the padding on the lists in px
                            var liTier2PositionY = lib.utils.getPosition(this)[0][1] + difference;
                            var ulThirdTierHTML = "<ul class='tierthree'>" + $("ul", this).html() + "</ul>";

                            lib.layer.create("#tierThreeLayer", {
                                defaultContent: ulThirdTierHTML,
                                xPos: liTier2PositionX,
                                yPos: liTier2PositionY
                            });

                            //handlers for third tier
                            $("#tierThreeLayer").hover(
                                function() { clearTimeout(menuTimer); },
                                function() {
                                    menuTimer = setTimeout(function() {
                                        clearTimeout(menuTimer);
                                        lib.layer.remove("#hdrNavigationLayer");
                                        lib.layer.remove("#tierThreeLayer");
                                    }, 500);
                                }
                            );

                            $("#tierThreeLayer li").each(function(i, item) {
                                // remove top border for first nav item
                                if (navItemSecondaryIndex == 0 && i == 0) { $(item).addClass("removeBorder"); }
                                $(this).hover(function() {
                                    $("#tierThreeLayer li").removeClass("navHighlight3");
                                    $(this).addClass("navHighlight3");
                                }, function() {
                                    $("#tierThreeLayer li").removeClass("navHighlight3");
                                });
                            });
                        }
                        else {
                            lib.layer.remove("#tierThreeLayer");
                        }

                    }, function() {
                        clearTimeout(menuTimer);
                        menuTimer = setTimeout(function() {
                            $("#navBar li").removeClass("navHighlight2");
                            lib.layer.remove("#tierThreeLayer");
                            lib.layer.remove("#hdrNavigationLayer");
                            $("#navBar li").removeClass("navHighlight3");
                        }, 500);
                    });

                }, function() {
                    clearTimeout(menuTimer);
                    menuTimer = setTimeout(function() {
                        $("#siteHdr #nav > li").removeClass("navHighlight1").removeClass("navHighlight2");
                        lib.layer.remove("#hdrNavigationLayer");
                        //lib.layer.remove("#tierThreeLayer");
                    }, 500);
                });
            });
        },
        setUpPanelCalls: function() {
            $(".js-openLayer").click(function(e) {
                e.preventDefault();

                var layerUrl = (this.href == "undefined") ? "layer_template.html" : this.href;
                var layerClass = (this.name == "undefined") ? "defaultClass" : this.name;
                var layerId = (this.id == "undefined") ? "defaultId" : this.id + "Layer";
                var selector = "#" + layerId;

                lib.layer.create(selector, {
                    keepCentered: true,
                    callback: function() {
                        $(".js-layerClose").click(function(e) { e.preventDefault(); lib.layer.remove(selector); overlay.removeOverlay(); });
                    },
                    url: layerUrl
                });
                $(selector).addClass(layerClass);
            }); // end layer handler


            $(".js-openLayerOverlay").click(function(e) {
                e.preventDefault();
                // Get URL and id from anchor
                var layerUrl = (this.href == "undefined") ? "layer_template.html" : this.href;
                var layerClass = (this.name == "undefined") ? "defaultClass" : this.name;
                var layerId = (this.id == "undefined") ? "defaultId" : this.id + "Layer";
                var selector = "#" + layerId;

                lib.layer.create(selector, {
                    keepCentered: true,
                    callback: function() {
                        $(".js-layerClose").click(function(e) { e.preventDefault(); lib.layer.remove(selector); overlay.removeOverlay(); });
                    },
                    url: layerUrl
                });
                $(selector).addClass(layerClass);

                var overlay = new lib.obj.pageOverlay({ selector: "#pageOverlay" });

                //$("#pageOverlay").addClass("ie6png");
                $("#pageOverlay").click(function() {
                    overlay.removeOverlay();
                    lib.layer.remove(selector);
                });

            }); // end layer & overlay handler

            $(".js-openInNewWindow").click(function(e) {
                e.preventDefault();
                // Get the URL and the ID from the <a> tag
                var linkLayerURL = $(this).attr("href");
                var windowParameters = ($(this).attr("name") == "") ? "scrollbars,width=600,height=500" : $(this).attr("name");
                window.open(linkLayerURL, "popup", windowParameters);

            }); // end pop up handler

            $(".popupWindowContainer .js-layerClose").click(function(e) { e.preventDefault(); window.close(); }); // close handler for popup
        },
        setUpIntFooterTargets: function() {
            $("#siteFooter select").change(function() {
                switch (this.selectedIndex) {
                    case 1:
                        location.href = "http://www.godiva.be"; // Europe
                        break;
                    case 2:
                        location.href = "http://www.godiva.co.jp"; // Japan
                        break;
                    case 3:
                        location.href = "http://www.godiva.hk"; // Hong Kong
                        break;
                    default:
                        return;
                }
            });
        },
        setUpProductTabs: function() {
            tabSet = new lib.obj.contentCollection({
                selectorContent: "#productTabs .tabContent .tab",
                selectorActivator: "#productTabs .tabHeader a",
                defaultIndex: 0
            });


            $("#productTabs .tabHeader a").click(function(e) {
                // remove previous tab and trigger display of images on left
                $("#productTabs .tabHeader li").each(function() {
                    var currentClass = $(this).attr("class");
                    var currentClassStripped = currentClass.split(" ")[0];
                    if (currentClass.indexOf("_selected") != -1) {
                        $(this).removeClass(currentClassStripped + "_selected");
                    }
                })

                var itemClass = $(this).parent().attr("class");
                var itemClassStripped = itemClass.split(" ")[0];
                var itemClassSelected = itemClassStripped + "_selected";
                $(this).parent().addClass(itemClassSelected);


                $(".productImg").hide();
                if (itemClassSelected == "tabdescription_selected") {
                    $(".default").show();
                }
                if (itemClassSelected == "tabpackaging_selected") {
                    $(".packaging").show();
                }
                if (itemClassSelected == "tabWhatsInside_selected") {
                    $(".inside").show();
                }
                if (itemClassSelected == "tabShipping_selected") {
                    $(".default").show();
                }

            });
        },
        clickableGlobalHdr: function() {
            $("#siteUtil").click(function() {
                location.href = "/";
            });
        },
        setUpSideBarNav: function() {
            // only show top cats, hide all nested UL elements
            $("#leftNav ul li ul").hide();
            $("#leftNav ul li a.selected ~ ul").show();
            $("#leftNav li a").each(function() {
                if ($(this).prev().hasClass("handle")) { $(this).css({ padding: "0" }); }
            });

            $("#leftNav ul .js-expandMenu").each(function() {
                $(this).click(function(e) {
                    e.preventDefault();
                    var currentHandle = this;
                    if ($("~ ul", this).is(":visible")) {
                        // hide all siblings that are UL elements
                        $("~ ul", this).hide();
                        $("~ ul > ul", this).hide();
                        $("#leftNav ul li a.handleExpand").each(function() {
                            $(currentHandle).removeClass("handleExpand");
                            $(currentHandle).addClass("handle");
                        });
                    }
                    else {
                        // show all siblings that are UL elements
                        $("~ ul", this).show();
                        $("~ ul > ul", this).show();
                        $("#leftNav ul li a.handle").each(function() {
                            $(currentHandle).addClass("handleExpand");
                            $(currentHandle).removeClass("handle");
                        });
                    }
                });
            });

        },
        launchPostEmailSignUp: function() {

            $(".js-formLayer").click(function(e) {
                e.preventDefault();

                /*** EMAIL & QUICKSHOP LAYER ***/
                //$(this).addClass("selected");
                $("#catalogEmail").addClass("selected");
                $("#quickShopEmailForm").show();

                //get position for layer
                liPositionX = lib.utils.getPosition(this)[0][0] - 94;
                liPositionY = lib.utils.getPosition(this)[0][1] - 48;

                //position layer
                $("#quickShopEmailForm").css({ top: liPositionY, left: liPositionX });

                //add handler for clearing text fields
                site.func.clearTextFields(".submit #inputSignUpHeader", "#inputSignUpHeader")
                $(".js-signUpClose").click(function(event) {                    
                    event.preventDefault();
                    $(this).parent().parent().parent().hide();
                    $("#catalogEmail").removeClass("selected");
                    return false;
                });
            });
            //handler which controls post for footer and header
            $(".js-inputSubmit").click(function(e) {
                e.preventDefault();

                // start functions
                handleSignUp();

                //Footer Control Code - START
                function handleSignUp() {
                    var supForm = document.getElementById("footerSubcribe");
                    var email = supForm["inputSignUpSubmit"].value;
                    //var signUpMsg = "<%= _strSignUpMessage %>" ;	 Declared in the Navigation control

                    // only submit if the current email passes basic check
                    if (cleanString(email) != "" && email != signUpMsg)
                        supForm.submit();
                    else
                        return false;

                    return true;
                }

                function clearEmail() {
                    var supForm = document.getElementById("footerSubcribe");
                    var emailField = supForm["inputSignUpSubmit"];
                    var signUpMsg = "<%= _strSignUpMessage %>";

                    if (emailField.value == signUpMsg)
                        emailField.value = "";
                }

                function resetEmail() {
                    var supForm = document.getElementById("footerSubcribe");
                    var emailField = supForm["inputSignUpSubmit"];
                    var cleanEmail = cleanString(emailField.value);

                    // alert("Input: " + emailField.value + "\nClean: " + cleanEmail)

                    var signUpMsg = "<%= _strSignUpMessage %>";

                    if (cleanEmail == "")
                        emailField.value = signUpMsg;
                }

                function cleanString(input) {
                    var output = "";

                    if (input.length > 0) {
                        for (var i = 0; i < input.length; i++)
                            if (input.charAt(i) != " ")
                            output += input.charAt(i);
                    }
                    return output;
                }
                //Footer Control Code - END
            });
        },
        clearTextFields: function(selectorHandle, textFieldSelector) {
            $(selectorHandle).click(function() {
                //$(textFieldSelector).addClass("defaultCleared");
                $(textFieldSelector).val("");
                $(textFieldSelector).css({ color: "#000" });
            });
        }
    },
    obj: {
    // site specfic objects

}
};
})($);

// on body load
$(function() {
    //Site on load.
    site.func.setupHeaderNavigation();
    site.func.setUpPanelCalls();
    site.func.setUpIntFooterTargets();
    site.func.setUpProductTabs();
    //site.func.clickableGlobalHdr();
    site.func.setUpSideBarNav();
    site.func.launchPostEmailSignUp();
    site.func.clearTextFields(".submit #inputSignUpSubmit", "#inputSignUpSubmit");
    site.func.clearTextFields(".search .input", "#inputGlobalSearch"); // global search
    //Run the Form Setup
    //lib.func.formSetup();
});