/* jQuery Mega Menu v1.02
* Last updated: June 29th, 2009. This notice must stay intact for usage
* Author: JavaScript Kit at http://www.javascriptkit.com/
* Visit http://www.javascriptkit.com/script/script2/jScale/ for full source code
*/

//jQuery.noConflict();


var jkmegamenu={

effectduration: 200, //duration of animation, in milliseconds
delaytimer: 200, //delay after mouseout before menu should be hidden, in milliseconds

//No need to edit beyond here
megamenulabels: [],
megamenus: [], //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:"? 'about:blank' : '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")
},

alignmenu:function($, e, megamenu_pos){
    var megamenu=this.megamenus[megamenu_pos]
    var $anchor=megamenu.$anchorobj
    var $menu=megamenu.$menuobj

	gecomitems = 0;
    gecommenu = document.getElementById(megamenu.menu);
    gecomcode = gecommenu.innerHTML;
    gecomcols = gecomcode.split('column');
    gecomitems = gecomcols.length - 1;
    gecomactual = gecomitems * 193;
    if(gecomactual > 780)
      {gecomactual = 780;}
    gecomwidth = $(window).width();
    gecombase = ((gecomwidth - 950) / 2);
    gecomoffset = megamenu.offsetx;
    gecomright = gecomoffset + gecomactual;
    gecommax = gecombase + 950;
    if(gecomright > gecommax)
      {menuleft = gecommax - gecomactual;}
    else
      {menuleft = gecomoffset;}
    if(menuleft < gecombase)
      {menuleft = gecombase + 5;}

	var menutop=megamenu.offsety+megamenu.anchorheight  //get y coord of menu
    $menu.css({left:menuleft+"px", top:menutop+"px"})
    this.$shimobj.css({width:megamenu.actualwidth+"px", height:megamenu.actualheight+"px", left:menuleft+"px", top:menutop+"px", display:"block"})
},

showmenu:function(e, megamenu_pos){
    var megamenu=this.megamenus[megamenu_pos]
    var $menu=megamenu.$menuobj
    var $menuinner=megamenu.$menuinner
    if ($menu.css("display")=="none"){
        this.alignmenu(jQuery, e, megamenu_pos)
        $menu.css("z-index", ++this.zIndexVal)
        $menu.show(this.effectduration, function(){
            $menuinner.css('visibility', 'visible');
        megamenu.$anchorobj.addClass("anchor-on")
        })
    }
    else if ($menu.css("display")=="block" && e.type=="click"){ //if menu is hidden and this is a "click" event (versus "mouseout")
        this.hidemenu(e, megamenu_pos)
    }
    return false
},

hidemenu:function(e, megamenu_pos){
    var megamenu=this.megamenus[megamenu_pos]
    var $menu=megamenu.$menuobj
    var $menuinner=megamenu.$menuinner
    $menuinner.css('visibility', 'hidden')
    this.$shimobj.css({display:"none", left:0, top:0});
    megamenu.$anchorobj.removeClass("anchor-on")
    $menu.hide(this.effectduration)
},


definemenu:function(anchorid, menuid, revealtype){
    this.megamenulabels.push([anchorid, menuid, revealtype])
},


render:function($){
    for (var i=0, labels=this.megamenulabels[i]; i<this.megamenulabels.length; i++, labels=this.megamenulabels[i]){
        if ($('#'+labels[0]).length!=1 || $('#'+labels[1]).length!=1) //if one of the two elements are NOT defined, exist
            return
        this.megamenus.push({$anchorobj:$("#"+labels[0]), $menuobj:$("#"+labels[1]), $menuinner:$("#"+labels[1]).children('ul:first-child'), revealtype:labels[2], hidetimer:null})

        var megamenu=this.megamenus[i]
        megamenu.$anchorobj.add(megamenu.$menuobj).attr("_megamenupos", i+"pos") //remember index of this drop down menu
        megamenu.actualwidth=megamenu.$menuobj.outerWidth()
        megamenu.actualheight=megamenu.$menuobj.outerHeight()
        megamenu.offsetx=megamenu.$anchorobj.offset().left
        megamenu.offsety=megamenu.$anchorobj.offset().top
        megamenu.anchorwidth=megamenu.$anchorobj.outerWidth()
        megamenu.anchorheight=megamenu.$anchorobj.outerHeight()
        $(document.body).append(megamenu.$menuobj) //move drop down menu to end of document
        megamenu.$menuobj.css("z-index", ++this.zIndexVal).hide()
        megamenu.$menuinner.css("visibility", "hidden")

		megamenu.menu =  labels[1];                      // save the menu name

        onShow = function(e){
            var menuinfo=jkmegamenu.megamenus[parseInt(this.getAttribute("_megamenupos"))]
            clearTimeout(menuinfo.hidetimer) //cancel hide menu timer
            return jkmegamenu.showmenu(e, parseInt(this.getAttribute("_megamenupos")))
        }

        //megamenu.$anchorobj.bind(megamenu.revealtype=="click"? "click" : "mouseenter", onShow)
        onHide = function(e){
            var menuinfo=jkmegamenu.megamenus[parseInt(this.getAttribute("_megamenupos"))]
            if (e.relatedTarget!=menuinfo.$menuobj.get(0) && $(e.relatedTarget).parents("#"+menuinfo.$menuobj.get(0).id).length==0){ //check that mouse hasn't moved into menu object
                menuinfo.hidetimer=setTimeout(function(){ //add delay before hiding menu
                    jkmegamenu.hidemenu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_megamenupos")))
                }, jkmegamenu.delaytimer)
            }
        }
        //megamenu.$anchorobj.bind("mouseleave", onHide)
        megamenu.$anchorobj.hoverIntent(onShow, onHide)
        megamenu.$menuobj.bind("mouseenter", function(e){
            var menuinfo=jkmegamenu.megamenus[parseInt(this.getAttribute("_megamenupos"))]
            clearTimeout(menuinfo.hidetimer) //cancel hide menu timer
        })
        megamenu.$menuobj.bind("click mouseleave", function(e){
            var menuinfo=jkmegamenu.megamenus[parseInt(this.getAttribute("_megamenupos"))]
            menuinfo.hidetimer=setTimeout(function(){ //add delay before hiding menu
                jkmegamenu.hidemenu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_megamenupos")))
            }, jkmegamenu.delaytimer)
        })
    } //end for loop

    if(/Safari/i.test(navigator.userAgent)){ //if Safari
        $(window).bind("resize load", function(){
            for (var i=0; i<jkmegamenu.megamenus.length; i++){
                var megamenu=jkmegamenu.megamenus[i]
                var $anchorisimg=(megamenu.$anchorobj.children().length==1 && megamenu.$anchorobj.children().eq(0).is('img'))? megamenu.$anchorobj.children().eq(0) : null
                if ($anchorisimg){ //if anchor is an image link, get offsets and dimensions of image itself, instead of parent A
                    megamenu.offsetx=$anchorisimg.offset().left
                    megamenu.offsety=$anchorisimg.offset().top
                    megamenu.anchorwidth=$anchorisimg.width()
                    megamenu.anchorheight=$anchorisimg.height()
                }
            }
        })
    }
    else{
        $(window).bind("resize", function(){
            for (var i=0; i<jkmegamenu.megamenus.length; i++){
                var megamenu=jkmegamenu.megamenus[i]
                megamenu.offsetx=megamenu.$anchorobj.offset().left
                megamenu.offsety=megamenu.$anchorobj.offset().top
            }
        })
    }
    jkmegamenu.addshim($)
}
}
jQuery(document).ready(function($){
    jkmegamenu.render($)
})
