﻿var HorizontalTabMenu = {
    subcontainers: [], last_accessed_tab: null,

    revealsubmenu: function(curtabref) {
        this.hideallsubs()
        if (this.last_accessed_tab != null)
            this.last_accessed_tab.className = ""
        if (curtabref.getAttribute("rel")) //If there's a sub menu defined for this tab item, show it
            document.getElementById(curtabref.getAttribute("rel")).style.display = "block"
        curtabref.className = "current"
        this.last_accessed_tab = curtabref
    },

    hideallsubs: function() {
        for (var i = 0; i < this.subcontainers.length; i++)
            document.getElementById(this.subcontainers[i]).style.display = "none"
    },


    init: function(menuId, selectedIndex) {
        var tabItems = document.getElementById(menuId).getElementsByTagName("a")
        for (var i = 0; i < tabItems.length; i++) {
            if (tabItems[i].getAttribute("rel"))
                this.subcontainers[this.subcontainers.length] = tabItems[i].getAttribute("rel") //store id of submenu div of tab menu item
            if (i == selectedIndex) { //if this tab item should be selected by default
                tabItems[i].className = "current"
                this.revealsubmenu(tabItems[i])
            }
            tabItems[i].onmouseover = function() {
                HorizontalTabMenu.revealsubmenu(this)
            }
        } //END FOR LOOP
    }

}

var DropDownMenu = {

    effectduration: 300, //duration of animation, in milliseconds
    outlinemenulabels: [],
    outlinemenus: [], //array to contain each block menu instances
    zIndexVal: 1000, //starting z-index value for drop down menu
    $shimobj: null,

    addshim: function() {
        $(document.body).append('<IFRAME id="outlineiframeshim" src="' + (location.protocol == "https:" ? 'blank.htm' : 'about:blank') + '" style="display:none; left:0; top:0; z-index:999; position:absolute; filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)" frameBorder="0" scrolling="no"></IFRAME>')
        this.$shimobj = $("#outlineiframeshim")
        //alert(this.$shimobj.attr("src"))
    },

    alignmenu: function(e, outlinemenu_pos) {
        var outlinemenu = this.outlinemenus[outlinemenu_pos]
        var $anchor = outlinemenu.$anchorobj
        var $menu = outlinemenu.$menuobj
        var menuleft = ($(window).width() - (outlinemenu.offsetx - $(document).scrollLeft()) > outlinemenu.actualwidth) ? outlinemenu.offsetx : outlinemenu.offsetx - outlinemenu.actualwidth + outlinemenu.anchorwidth //get x coord of menu
        var menutop = ($(window).height() - (outlinemenu.offsety - $(document).scrollTop() + outlinemenu.anchorheight) > outlinemenu.actualheight) ? outlinemenu.offsety + outlinemenu.anchorheight : outlinemenu.offsety - outlinemenu.actualheight //get y coord of menu
        $menu.css({ left: menuleft + "px", top: menutop + "px" })
        this.$shimobj.css({ width: outlinemenu.actualwidth + "px", height: outlinemenu.actualheight + "px", left: menuleft + "px", top: menutop + "px", display: "block" })
    },

    showmenu: function(e, outlinemenu_pos) {
        var outlinemenu = this.outlinemenus[outlinemenu_pos]
        var $menu = outlinemenu.$menuobj
        var $menuinner = outlinemenu.$menuinner
        if ($menu.css("display") == "none") {
            this.alignmenu(e, outlinemenu_pos)
            $menu.css("z-index", ++this.zIndexVal)
            $menu.show(this.effectduration, function() {
                $menuinner.css('visibility', 'visible')
            })
        }
        else if ($menu.css("display") == "block" && e.type == "click") { //if menu is hidden and this is a "click" event (versus "mouseout")
            this.hidemenu(e, outlinemenu_pos)
        }
        return false
    },

    hidemenu: function(e, outlinemenu_pos) {
        var outlinemenu = this.outlinemenus[outlinemenu_pos]
        var $menu = outlinemenu.$menuobj
        var $menuinner = outlinemenu.$menuinner
        $menuinner.css('visibility', 'hidden')
        this.$shimobj.css({ display: "none", left: 0, top: 0 })
        $menu.hide(this.effectduration)
    },

    definemenu: function(anchorid, menuid, revealtype, optwidth, optheight) {
        var $ = jQuery
        this.outlinemenulabels.push([anchorid, menuid, revealtype, optwidth, optheight])
    },

    render: function($) {
        for (var i = 0, labels = this.outlinemenulabels[i]; i < this.outlinemenulabels.length; i++, labels = this.outlinemenulabels[i]) {
            this.outlinemenus.push({ $anchorobj: $("#" + labels[0]), $menuobj: $("#" + labels[1]), $menuinner: $("#" + labels[1]).children('ul:first-child'), revealtype: labels[2] })
            var outlinemenu = this.outlinemenus[i]
            outlinemenu.$anchorobj.add(outlinemenu.$menuobj).attr("_outlinemenupos", i + "pos")
            outlinemenu.$menuobj.css(parseInt(labels[3]) > 10 ? { width: parseInt(labels[3]) + "px"} : {})
            outlinemenu.$menuobj.css(parseInt(labels[4]) < outlinemenu.$menuobj.height() ? { height: parseInt(labels[4]) + "px", overflow: "scroll", overflowX: "hidden"} : {})
            outlinemenu.actualwidth = outlinemenu.$menuobj.outerWidth()
            outlinemenu.actualheight = outlinemenu.$menuobj.outerHeight()
            outlinemenu.offsetx = outlinemenu.$anchorobj.offset().left
            outlinemenu.offsety = outlinemenu.$anchorobj.offset().top
            outlinemenu.anchorwidth = outlinemenu.$anchorobj.outerWidth()
            outlinemenu.anchorheight = outlinemenu.$anchorobj.outerHeight()
            outlinemenu.$menuobj.css("z-index", ++this.zIndexVal).hide()
            outlinemenu.$menuinner.css("visibility", "hidden")
            outlinemenu.$anchorobj.bind(outlinemenu.revealtype == "click" ? "click" : "mouseenter", function(e) {
                return DropDownMenu.showmenu(e, parseInt(this.getAttribute("_outlinemenupos")))
            })
            outlinemenu.$anchorobj.bind("mouseleave", function(e) {
                var $menu = DropDownMenu.outlinemenus[parseInt(this.getAttribute("_outlinemenupos"))].$menuobj
                if (e.relatedTarget != $menu.get(0) && $(e.relatedTarget).parents("#" + $menu.get(0).id).length == 0) { //check that mouse hasn't moved into menu object
                    DropDownMenu.hidemenu(e, parseInt(this.getAttribute("_outlinemenupos")))
                }
            })
            outlinemenu.$menuobj.bind("click mouseleave", function(e) {
                DropDownMenu.hidemenu(e, parseInt(this.getAttribute("_outlinemenupos")))
            })
        } //end for loop
        $(document).bind("click", function(e) {
            for (var i = 0; i < DropDownMenu.outlinemenus.length; i++) {
                DropDownMenu.hidemenu(e, i)
            }
        }) //end document.click
        $(window).bind("resize", function() {
            for (var i = 0; i < DropDownMenu.outlinemenus.length; i++) {
                var outlinemenu = DropDownMenu.outlinemenus[i]
                outlinemenu.offsetx = outlinemenu.$anchorobj.offset().left
                outlinemenu.offsety = outlinemenu.$anchorobj.offset().top
            }
        })
        DropDownMenu.addshim()
    }

}

jQuery(document).ready(function($) {
    DropDownMenu.render($)
})

