var arrowimages={down:['downarrowclass', 'd.gif', 0], right:['rightarrowclass', 'dr.gif']}

var jqueryslidemenu={
animateduration: {over: 200, out: 100}, //duration of slide in/ out animation, in milliseconds

buildmenu:function(menuid, arrowsvar){
	jQuery(document).ready(function($){
		var $mainmenu=$("#"+menuid+">ul>li");
		$mainmenu.each(function(i){
			var $curobj=$(this);

			var $subul=$(this).find('ul:eq(0)')
			this._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subul.outerWidth(), subulh:$subul.outerHeight()}
			var dimension = this._dimensions;
			this.istopheader=$curobj.parents("ul").length==1? true : false
			$subul.css({top:this.istopheader? this._dimensions.h+"px" : 0})
			var $headers=$curobj.find("ul").parent();
			jQuery.each($headers,function(key, value) {

				value.istopheader=$(value).parents("ul").length==1? true : false
				var valtopheader = value.istopheader;
				var $subuls=$(value).find('ul:eq(0)')
				value._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subuls.outerWidth(), subulh:$subuls.outerHeight()}
				$(value).children("a:eq(0)").css(this.istopheader? {paddingRight: arrowsvar.down[2]} : {}).append('<img src="/images/'+ (value.istopheader? arrowsvar.down[1] : arrowsvar.right[1])
				+'" class="'+(value.istopheader? arrowsvar.down[0] : arrowsvar.right[0])
				+ '" style="border:0;" />');
				var timeoutID;
				if($(value).children("ul").children("li").length>=1&&key!=0) {
                       		$(value).hover(
					function(e){
 						var $targetuls=$(this).children("ul:eq(0)")
						value._offsets={left:$(value).children("ul").offset().left, top:$(value).children("ul").offset().top}
						var menuleft=value.istopheader? 0 : value._dimensions.w
						menuleft=(value._offsets.left+menuleft+dimension.subulw>$(window).width())?(value.istopheader? -dimension.subulw+dimension.w : -dimension.w) : menuleft
						timeoutID = setTimeout(function() {
							$targetuls.css({left:menuleft+"px", width:dimension.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)
						}, 400);
					},
					function(e){
						var $targetul=$(value).children("ul>li>ul")
						$targetul.slideUp(jqueryslidemenu.animateduration.out)
						clearTimeout(timeoutID);  
					}
				);
				}
         
			});
			$curobj.toggle(
				function(e){				
					var $targetul=$(this).children("ul");
					$targetul.find("a").mousedown(function(){var elem=$(this); window.location.href=elem.attr("href"); $curobj.unbind("click");});
					jQuery.each($mainmenu,function(key, value) {
					  $(value).children("ul").slideUp(jqueryslidemenu.animateduration.over)
					});
					this._offsets={left:$(this).offset().left, top:$(this).offset().top}
					var menuleft=this.istopheader? 0 : this._dimensions.w
					menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
					$targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)                                       
				},
				function(e){
					var $targetul=$(this).children("ul:eq(0)")
					if($targetul.is(":visible"))
					 window.location.href=$(this).children("a").attr("href");
					$targetul.slideUp(jqueryslidemenu.animateduration.out)
                                        if($targetul.is(":hidden")) {
                                        this._offsets={left:$(this).offset().left, top:$(this).offset().top}
					var menuleft=this.istopheader? 0 : this._dimensions.w
					menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
					$targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)
					} 				
                                }	
			);
			$curobj.focusout(
				function(){
					var $targetul=$(this).children("ul");
					$targetul.slideUp(jqueryslidemenu.animateduration.out);
			})			

		})
		$mainmenu.find("ul").css({display:'none', visibility:'visible'})
	})
}
}

jqueryslidemenu.buildmenu("myslidemenu", arrowimages);