/* 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
*/



var jkmegamenu={

effectduration: 0, //duration of animation, in milliseconds
delaytimer: 0, //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:"? '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")
},

alignmenu:function($, e, megamenu_pos){
	var megamenu=this.megamenus[megamenu_pos]
	var $anchor=megamenu.$anchorobj
	var $menu=megamenu.$menuobj
	var menuleft = ($(window).width() - (megamenu.offsetx - $(document).scrollLeft()) > megamenu.actualwidth) ? megamenu.offsetx : megamenu.offsetx - megamenu.actualwidth + megamenu.anchorwidth //get x coord of menu
	//var menuleft = ($(window).width() - (megamenu.offsetx - $(document).scrollLeft()) > megamenu.actualwidth) ? megamenu.offsetx : megamenu.offsetx - megamenu.actualwidth + megamenu.anchorwidth

	//var menuleft = megamenu.offsetx - megamenu.actualwidth + 200;




	//var menutop=($(window).height()-(megamenu.offsety-$(document).scrollTop()+megamenu.anchorheight)>megamenu.actualheight)? megamenu.offsety+megamenu.anchorheight : megamenu.offsety-megamenu.actualheight
	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')
		})
	}
	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})
	$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 -1
		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.$anchorobj.bind(megamenu.revealtype=="click"? "click" : "mouseenter", 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("mouseleave", 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.$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 - 1
					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 - 1
				megamenu.offsety=megamenu.$anchorobj.offset().top
			}
		})
	}
	jkmegamenu.addshim($)
}

}







var jkmegamenu_lang = {

    effectduration: 110, //duration of animation, in milliseconds
    delaytimer: 110, //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:" ? '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")
    },

    alignmenu: function ($, e, megamenu_pos) {
        var megamenu_lang = this.megamenus[megamenu_pos]
        var $anchor = megamenu_lang.$anchorobj
        var $menu = megamenu_lang.$menuobj
        var menuleft = ($(window).width() - (megamenu_lang.offsetx - $(document).scrollLeft()) > megamenu_lang.actualwidth) ? megamenu_lang.offsetx : megamenu_lang.offsetx - megamenu_lang.actualwidth + megamenu_lang.anchorwidth //get x coord of menu
        //var menuleft = ($(window).width() - (megamenu_lang.offsetx - $(document).scrollLeft()) > megamenu_lang.actualwidth) ? megamenu_lang.offsetx : megamenu_lang.offsetx - megamenu_lang.actualwidth + megamenu_lang.anchorwidth

        //var menuleft = megamenu_lang.offsetx - megamenu_lang.actualwidth + 200;




        //var menutop=($(window).height()-(megamenu_lang.offsety-$(document).scrollTop()+megamenu_lang.anchorheight)>megamenu_lang.actualheight)? megamenu_lang.offsety+megamenu_lang.anchorheight : megamenu_lang.offsety-megamenu_lang.actualheight
        var menutop = megamenu_lang.offsety + megamenu_lang.anchorheight  //get y coord of menu
        $menu.css({ left: menuleft + "px", top: menutop + "px" })
        this.$shimobj.css({ width: megamenu_lang.actualwidth + "px", height: megamenu_lang.actualheight + "px", left: menuleft + "px", top: menutop + "px", display: "block" })
    },

    showmenu: function (e, megamenu_pos) {
        var megamenu_lang = this.megamenus[megamenu_pos]
        var $menu = megamenu_lang.$menuobj
        var $menuinner = megamenu_lang.$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')
            })
        }
        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_lang = this.megamenus[megamenu_pos]
        var $menu = megamenu_lang.$menuobj
        var $menuinner = megamenu_lang.$menuinner
        $menuinner.css('visibility', 'hidden')
        this.$shimobj.css({ display: "none", left: 0, top: 0 })
        $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_lang = this.megamenus[i]
            megamenu_lang.$anchorobj.add(megamenu_lang.$menuobj).attr("_megamenupos", i + "pos") //remember index of this drop down menu
            megamenu_lang.actualwidth = megamenu_lang.$menuobj.outerWidth()
            megamenu_lang.actualheight = megamenu_lang.$menuobj.outerHeight()
            megamenu_lang.offsetx = megamenu_lang.$anchorobj.offset().left
            megamenu_lang.offsety = megamenu_lang.$anchorobj.offset().top
            megamenu_lang.anchorwidth = megamenu_lang.$anchorobj.outerWidth()
            megamenu_lang.anchorheight = megamenu_lang.$anchorobj.outerHeight()
            $(document.body).append(megamenu_lang.$menuobj) //move drop down menu to end of document
            megamenu_lang.$menuobj.css("z-index", ++this.zIndexVal).hide()
            megamenu_lang.$menuinner.css("visibility", "hidden")
            megamenu_lang.$anchorobj.bind(megamenu_lang.revealtype == "click" ? "click" : "mouseenter", function (e) {
                var menuinfo = jkmegamenu_lang.megamenus[parseInt(this.getAttribute("_megamenupos"))]
                clearTimeout(menuinfo.hidetimer) //cancel hide menu timer
                return jkmegamenu_lang.showmenu(e, parseInt(this.getAttribute("_megamenupos")))
            })
            megamenu_lang.$anchorobj.bind("mouseleave", function (e) {
                var menuinfo = jkmegamenu_lang.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_lang.hidemenu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_megamenupos")))
                    }, jkmegamenu_lang.delaytimer)
                }
            })
            megamenu_lang.$menuobj.bind("mouseenter", function (e) {
                var menuinfo = jkmegamenu_lang.megamenus[parseInt(this.getAttribute("_megamenupos"))]
                clearTimeout(menuinfo.hidetimer) //cancel hide menu timer
            })
            megamenu_lang.$menuobj.bind("click mouseleave", function (e) {
                var menuinfo = jkmegamenu_lang.megamenus[parseInt(this.getAttribute("_megamenupos"))]
                menuinfo.hidetimer = setTimeout(function () { //add delay before hiding menu
                    jkmegamenu_lang.hidemenu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_megamenupos")))
                }, jkmegamenu_lang.delaytimer)
            })
        } //end for loop
        if (/Safari/i.test(navigator.userAgent)) { //if Safari
            $(window).bind("resize load", function () {
                for (var i = 0; i < jkmegamenu_lang.megamenus.length; i++) {
                    var megamenu_lang = jkmegamenu_lang.megamenus[i]
                    var $anchorisimg = (megamenu_lang.$anchorobj.children().length == 1 && megamenu_lang.$anchorobj.children().eq(0).is('img')) ? megamenu_lang.$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_lang.offsetx = $anchorisimg.offset().left
                        megamenu_lang.offsety = $anchorisimg.offset().top
                        megamenu_lang.anchorwidth = $anchorisimg.width()
                        megamenu_lang.anchorheight = $anchorisimg.height()
                    }
                }
            })
        }
        else {
            $(window).bind("resize", function () {
                for (var i = 0; i < jkmegamenu_lang.megamenus.length; i++) {
                    var megamenu_lang = jkmegamenu_lang.megamenus[i]
                    megamenu_lang.offsetx = megamenu_lang.$anchorobj.offset().left
                    megamenu_lang.offsety = megamenu.$anchorobj.offset().top
                }
            })
        }
        jkmegamenu_lang.addshim($)
    }

}








jQuery(document).ready(function($){
    jkmegamenu.render($)
    jkmegamenu_lang.render($)
})
