var jkoutlinemenu={



effectduration: 10, //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(){

	

	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=outlinemenu.anchorwidth-35;//)>outlinemenu.actualwidth)? outlinemenu.offsetx : outlinemenu.offsetx-outlinemenu.actualwidth+outlinemenu.anchorwidth //get x coord of menu

	var menutop=outlinemenu.offsety-35;//-$(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 jkoutlinemenu.showmenu(e, parseInt(this.getAttribute("_outlinemenupos")))

		})

		outlinemenu.$anchorobj.bind("mouseleave", function(e){

				var $menu=jkoutlinemenu.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

					jkoutlinemenu.hidemenu(e, parseInt(this.getAttribute("_outlinemenupos")))

				}

		})

		outlinemenu.$menuobj.bind("click mouseleave", function(e){

			jkoutlinemenu.hidemenu(e, parseInt(this.getAttribute("_outlinemenupos")))

		})

	} //end for loop

	$(document).bind("click", function(e){

		for (var i=0; i<jkoutlinemenu.outlinemenus.length; i++){

			jkoutlinemenu.hidemenu(e, i)

		}

	}) //end document.click

	$(window).bind("resize", function(){

		for (var i=0; i<jkoutlinemenu.outlinemenus.length; i++){

			var outlinemenu=jkoutlinemenu.outlinemenus[i]	

			outlinemenu.offsetx=outlinemenu.$anchorobj.offset().left

			outlinemenu.offsety=outlinemenu.$anchorobj.offset().top

		}

	})

	jkoutlinemenu.addshim()

}



}



jQuery(document).ready(function($){

	jkoutlinemenu.render($)

})
