(function ($) { //for navigation using JQuery 

    var currentMenu = "";
    var inSubnav = true;
    var menuWait = 1500;
    var exiting = false;

    // sets up the crash main subnav
    NavigationController.prototype.HandleCrashMainSubNav = function () {
        $(document).ready(function () {

            //IE 7 z-index hack for crashEpisodes
            if ($("#ctl00_masterBodyTag").is('.page_crashEpisode')) {
                if (navigator.userAgent.match(/MSIE/i)) {
                    var zIndexNumber = 990;
                    $('div').each(function () {
                        if ($(this).css("position") == "relative") {
                            $(this).css('zIndex', zIndexNumber);
                            zIndexNumber -= 10;
                        }
                    });
               }
            }

            if (isiPad()) {
                navController.SetIPadSubNav();
            }
            else {
                $(".subNav").mouseover(function () {
                    navController.inSubnav = true;
                    if (navController.currentMenu != this) {
                        navController.currentMenu = this;
                        $(".selectorItem ").removeClass("selected");
                        navController.UpdateTertiaryContent(this);
                        navController.ShowTertiaryNav();
                    }
                });

                $(".noNav").mouseenter(function () {
                    if ($("#tertMenu").is(":visible")) {
                        navController.HideTertiaryNav();
                    }
                });

                $(".subNav").mouseleave(function () {
                    navController.inSubnav = false;
                    setTimeout(function () { navController.CheckForNavClose() }, navController.menuWait);
                });
                $("#tertMenu").mouseenter(function () {
                    navController.inSubnav = true;
                });

                $("#tertMenu").mouseleave(function () {
                    navController.inSubnav = false;
                    setTimeout(function () { navController.CheckForNavClose() }, navController.menuWait);
                });
            }
        });
    }

    //delayed close to stop menu refreshes when not needed
    NavigationController.prototype.CheckForNavClose = function () {
        if (!navController.inSubnav) {
            navController.HideTertiaryNav();
        }
    }
    //ipad specific tert menu handling 
    NavigationController.prototype.SetIPadSubNav = function () {

        //handle menu clicks
        $(".subNav").click(function (event) {
            navController.currentMenu = this;
            $(".selectorItem ").removeClass("selected");

            var classes = $(this).attr("class");
            var classesArray = classes.split(" ");

            for (var i = 0; i < classesArray.length; i++) {
                if (classesArray[i].indexOf("-tertiary") > -1) {
                    var newId = classesArray[i].replace(":", "");
                    newId = newId.replace("-tertiary", "");
                    var content = $("#" + newId + "-content").html();
                    $("#tertMenuContent").html(content);
                    navController.SetSubNavEvents();
                }
            }
            navController.animating = true;
            navController.ShowTertiaryNav();
            $(this).addClass("sub_nav_selected");

            event.preventDefault();
        });
    }

    NavigationController.prototype.SetSubNavEvents = function () {
        navController.BindEpisodesSubnavEvents();
    }

    // updates the content inside of the tertiary navigation 
    NavigationController.prototype.UpdateTertiaryContent = function (menuItem) {
        $(".subNav").removeClass("sub_nav_selected");
        var classes = $(menuItem).attr("class");
        var classesArray = classes.split(" ");
        var found = false;

        for (var i = 0; i < classesArray.length; i++) {
            if (classesArray[i].indexOf("-tertiary") > -1) {
                var newId = classesArray[i].replace(":", "");
                newId = newId.replace("-tertiary", "");
                var content = $("#" + newId + "-content").html();
                $("#tertMenuContent").html(content);
                found = true;
            }
        }
        if (found) {
            $(menuItem).addClass("sub_nav_selected");
            navController.SetSubNavEvents();
        }
    }

    //animates the tert subnav
    NavigationController.prototype.ShowTertiaryNav = function () {
        $("#tertMenu").show();
    }
    NavigationController.prototype.HideTertiaryNav = function () {
        $(".subNav").removeClass("sub_nav_selected");
        $(".selectorItem ").removeClass("selected");
        $("#tertMenu").hide();
        navController.currentMenu = "";
    }

    //handles jquery show/hide events for originals sub navigation
    NavigationController.prototype.HandleNavigation = function () {
        if (isiPad()) //function declared in navigation.js
        {
            this.ToggleOriginalsForIPAD();
        }
        else {
            $("#orig_starz_menu").mouseenter(function () {
                $("#orig_starz_nav").show();
                $("#orig_starz_menu span").addClass("orig_span_selected");
                $("#orig_encore_nav").hide();
            });
            $("#orig_starz_menu").mouseleave(function () {
                $("#orig_starz_menu span").removeClass("orig_span_selected");
            });
            $("#orig_encore_menu").mouseenter(function () {
                $("#orig_encore_nav").show();
                $("#orig_encore_menu span").addClass("orig_span_selected");
                $("#orig_starz_nav").hide();
            });
            $("#orig_encore_menu").mouseleave(function () {
                $("#orig_encore_menu span").removeClass("orig_span_selected");
            });

            $("#orig_starz_nav").mouseenter(function () {
                $("#orig_starz_menu").addClass("orig_starz_selected");
            });

            $("#orig_starz_nav").mouseleave(function () {
                $("#orig_starz_menu").removeClass("orig_starz_selected");
            });

            $("#orig_encore_nav").mouseenter(function () {
                $("#orig_encore_menu").addClass("orig_starz_selected");
            });

            $("#orig_encore_nav").mouseleave(function () {
                $("#orig_encore_menu").removeClass("orig_starz_selected");
            });

            if (navigator.appVersion.indexOf("MSIE 6.0") > 0) {
                //dont autohide nav in IE6 - will break between sub elements
            }
            else {
                $("#Navigation").mouseleave(function () {
                    $("#orig_starz_nav").hide();
                    $("#orig_encore_nav").hide();
                });
            }
        }
        this.UpdateMainImageUrl();
    }

    //in use for spartacus crash main 2 subnav. requires classes are set properly in the rad editor
    NavigationController.prototype.BindEpisodesSubnavEvents = function () {
        $(".season2Select").addClass("selected");

        var menuContent = $(".epiContentTwo").html();
        $(".epiContent").html(menuContent);
        navController.BindTertEvents();

        $(".season2Select").click(function () {
            $(".selectorItem ").removeClass("selected");
            $(".season2Select").addClass("selected");

            var menuContent = $(".epiContentTwo").html();
            $(".epiContent").html(menuContent);
            navController.BindTertEvents();

        });
        $(".season1Select").click(function () {
            $(".selectorItem ").removeClass("selected");
            $(".season1Select").addClass("selected");

            var menuContent = $(".epiContentOne").html();
            $(".epiContent").html(menuContent);
            navController.BindTertEvents();

        });
        $(".prequelSelect").click(function () {
            $(".selectorItem ").removeClass("selected");
            $(".prequelSelect").addClass("selected");

            var menuContent = $(".epiContentPre").html();
            $(".epiContent").html(menuContent);
            navController.BindTertEvents();
        });
    }

    NavigationController.prototype.BindTertEvents = function () {
        if (isiPad()) {
            $(".ipadClose").show();
            $(".ipadClose").click(function () { navController.HideTertiaryNav(); });
        }
    }
    //overrides the href based on the image applied TODO: move this to C# code behind
    NavigationController.prototype.UpdateMainImageUrl = function () {
        try {
            var backgroundImageName = $("#ctl00_a_starz_top_logo").css('backgroundImage');
            var imageNameArray = backgroundImageName.split("/");

            backgroundImageName = imageNameArray[(imageNameArray.length - 1)]

            if (backgroundImageName.indexOf("starz") != -1) {
                $("#ctl00_a_starz_top_logo").attr('href', "/");
            }
            else if (backgroundImageName.indexOf("encore") != -1) {
                $("#ctl00_a_starz_top_logo").attr('href', "/channels/encore");
            }
            else if (backgroundImageName.indexOf("movieplex") != -1) {
                $("#ctl00_a_starz_top_logo").attr('href', "/channels/movieplex");
            }
        }
        catch (e) { /*no throw*/ }
    }

    NavigationController.prototype.ToggleOriginalsForIPAD = function () {
        $("#orig_starz_menu").click(function () {
            $("#orig_starz_nav").toggle();
            $("#orig_encore_nav").hide();
            $(".OrigCloseButton").css("background-image", "none");
        });

        $("#orig_encore_menu").click(function () {
            $("#orig_encore_nav").toggle();
            $("#orig_starz_nav").hide();
            $(".OrigCloseButton").css("background-image", "none");
        });
    }

    function NavigationController() {
        // Set default properties.
        this.name = ("NavController-" + (new Date()).getTime());
        this.HandleCrashMainSubNav();
    }

    // Create a new instance of the navController and store it in the window.
    window.navController = new NavigationController();

    // Return a new navController instance.
    return (window.navController);
})(jQuery);
