
jQuery.noConflict();

var mijnMenu={

effectduur: 300, //duur inschuifeffect, in milliseconden
vertraging: 1000, //vertraging na muisuit, in milliseconden

// Hieronder (liefst) niets wijzigen

maximenulabels: [],
maximenus: [],
zIndexWaarde: 1000, 
$ieobj: null,

iecompatibel: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.$ieobj=$("#outlineiframeshim")
},

menu_uitlijning:function($, e, maximenu_pos){
	var maximenu=this.maximenus[maximenu_pos]
	var $anchor=maximenu.$ankerobj
	var $menu=maximenu.$menuobj
	var menuleft=($(window).width()-(maximenu.offsetx-$(document).scrollLeft())>maximenu.huidigebreedte)? maximenu.offsetx : maximenu.offsetx-maximenu.huidigebreedte+maximenu.ankerbreedte 
	var menutop=maximenu.offsety+maximenu.ankerhoogte
	$menu.css({left:menuleft+"px", top:menutop+"px"})
	this.$ieobj.css({width:maximenu.huidigebreedte+"px", height:maximenu.huidigehoogte+"px", left:menuleft+"px", top:menutop+"px", display:"block"})
},

toon_menu:function(e, maximenu_pos){
	var maximenu=this.maximenus[maximenu_pos]
	var $menu=maximenu.$menuobj
	var $menuinhoud=maximenu.$menuinhoud
	if ($menu.css("display")=="none"){
		this.menu_uitlijning(jQuery, e, maximenu_pos)
		$menu.css("z-index", ++this.zIndexWaarde)
		$menu.show(this.effectduur, function(){
			$menuinhoud.css('visibility', 'visible')
		})
	}
	else if ($menu.css("display")=="block" && e.type=="click"){
		this.verberg_menu(e, maximenu_pos)
	}
	return false
},

verberg_menu:function(e, maximenu_pos){
	var maximenu=this.maximenus[maximenu_pos]
	var $menu=maximenu.$menuobj
	var $menuinhoud=maximenu.$menuinhoud
	$menuinhoud.css('visibility', 'hidden')
	this.$ieobj.css({display:"none", left:0, top:0})
	$menu.hide(this.effectduur)
},

maakMenu:function(ankernaam, menunaam, revealtype){
	this.maximenulabels.push([ankernaam, menunaam, revealtype])
},

menu_opbouw:function($){
	for (var i=0, labels=this.maximenulabels[i]; i<this.maximenulabels.length; i++, labels=this.maximenulabels[i]){
		if ($('#'+labels[0]).length!=1 || $('#'+labels[1]).length!=1) 
			return
		this.maximenus.push({$ankerobj:$("#"+labels[0]), $menuobj:$("#"+labels[1]), $menuinhoud:$("#"+labels[1]).children('ul:first-child'), revealtype:labels[2], hidetimer:null})
		var maximenu=this.maximenus[i]	
		maximenu.$ankerobj.add(maximenu.$menuobj).attr("_maximenupos", i+"pos") 
		maximenu.huidigebreedte=maximenu.$menuobj.outerWidth()
		maximenu.huidigehoogte=maximenu.$menuobj.outerHeight()
		maximenu.offsetx=maximenu.$ankerobj.offset().left
		maximenu.offsety=maximenu.$ankerobj.offset().top
		maximenu.ankerbreedte=maximenu.$ankerobj.outerWidth()
		maximenu.ankerhoogte=maximenu.$ankerobj.outerHeight()
		$(document.body).append(maximenu.$menuobj) 
		maximenu.$menuobj.css("z-index", ++this.zIndexWaarde).hide()
		maximenu.$menuinhoud.css("visibility", "hidden")
		maximenu.$ankerobj.bind(maximenu.revealtype=="click"? "click" : "mouseenter", function(e){
			var menuinfo=mijnMenu.maximenus[parseInt(this.getAttribute("_maximenupos"))]
			clearTimeout(menuinfo.hidetimer) 
			return mijnMenu.toon_menu(e, parseInt(this.getAttribute("_maximenupos")))
		})
		maximenu.$ankerobj.bind("mouseleave", function(e){
			var menuinfo=mijnMenu.maximenus[parseInt(this.getAttribute("_maximenupos"))]
			if (e.relatedTarget!=menuinfo.$menuobj.get(0) && $(e.relatedTarget).parents("#"+menuinfo.$menuobj.get(0).id).length==0){ 
				menuinfo.hidetimer=setTimeout(function(){ 
					mijnMenu.verberg_menu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_maximenupos")))
				}, mijnMenu.vertraging)
			}
		})
		maximenu.$menuobj.bind("mouseenter", function(e){
			var menuinfo=mijnMenu.maximenus[parseInt(this.getAttribute("_maximenupos"))]
			clearTimeout(menuinfo.hidetimer) 
		})
		maximenu.$menuobj.bind("click mouseleave", function(e){
			var menuinfo=mijnMenu.maximenus[parseInt(this.getAttribute("_maximenupos"))]
			menuinfo.hidetimer=setTimeout(function(){ 
				mijnMenu.verberg_menu(e, parseInt(menuinfo.$menuobj.get(0).getAttribute("_maximenupos")))
			}, mijnMenu.vertraging)
		})
	} 
	if(/Safari/i.test(navigator.userAgent)){ 
		$(window).bind("resize load", function(){
			for (var i=0; i<mijnMenu.maximenus.length; i++){
				var maximenu=mijnMenu.maximenus[i]
				var $anker_is_beeld=(maximenu.$ankerobj.children().length==1 && maximenu.$ankerobj.children().eq(0).is('img'))? maximenu.$ankerobj.children().eq(0) : null
				if ($anker_is_beeld){ //indien het anker een afbeelding is, afmetingen beeld ophalen in plaats van hyperlink parent
					maximenu.offsetx=$anker_is_beeld.offset().left
					maximenu.offsety=$anker_is_beeld.offset().top
					maximenu.ankerbreedte=$anker_is_beeld.width()
					maximenu.ankerhoogte=$anker_is_beeld.height()
				}
			}
		})
	}
	else{
		$(window).bind("resize", function(){
			for (var i=0; i<mijnMenu.maximenus.length; i++){
				var maximenu=mijnMenu.maximenus[i]	
				maximenu.offsetx=maximenu.$ankerobj.offset().left
				maximenu.offsety=maximenu.$ankerobj.offset().top
			}
		})
	}
	mijnMenu.iecompatibel($)
}

}

jQuery(document).ready(function($){
	mijnMenu.menu_opbouw($)
})
