/*
 * Author: Mattijs Spierings
 * Date: 15/7/2011
 * Description: slidemenu
 */
var SlideMenu = {
	triggerClass: "",
	currentMenu: null,
	menuTimeout: 2000,
	/*
	 * init function which copies attributes and set the mouse events
	 */
	init: function (arg) {
		//extend arguments to this scope
		$j.extend(this,arg);
	
		//for each anchor tag in the main nav
		$j(this.triggerClass).each(function(){
			var o_item=$j(this);
			
			
			//find reference of the slide menu for the mainmenu item
			var o_slidemenu=o_item.siblings("div");
			
			//get the width from the main Nav item
			var i_width = o_item.parent().width();
			
			
			//set mouseover trigger
			o_item.mouseenter(function(){
				//set active class to parent ListItem
				//if timeoutid is available, cancel timeout which slide the menu up
				if(o_item.timeoutId != undefined) {
					
					window.clearTimeout(o_item.timeoutId);
				}
				o_item.addClass("mainNavSelected");

				if(SlideMenu.currentMenu != null && SlideMenu.currentMenu != o_slidemenu) {
					SlideMenu.currentMenu.slideUp('50','easeOutQuart');
					//remove the highlighter main item
					SlideMenu.currentMenu.prev().removeClass("mainNavSelected");
				}
			
				o_slidemenu.find("li").each(function(){
				
					
					if($j(this).parents("div").width() < i_width)
						$j(this).width(i_width);
					else
						$j(this).width($j(this).parents("div").width());
				});
				
				o_slidemenu.slideDown('50','easeOutQuart',function() {
					//alert(that.width());
				});
				
				SlideMenu.currentMenu = o_slidemenu;
			});
			
			//set mouseout trigger
			o_item.mouseleave(function(e){
				//the border of the trigger is around Ypos 85, so if e.pageY is less then this value user moved the mouse left, top or right
				if(e.pageY < o_item.offset().top + o_item.innerHeight()) {
					
					o_slidemenu.slideUp('50','easeOutQuart');
					
					SlideMenu.currentMenu.prev().removeClass("mainNavSelected");
				}
				
				//set slideup timeout in case mouseleave event is not triggered on o_slidemenu
				o_item.timeoutId = window.setTimeout(function() {
					o_slidemenu.slideUp('50','easeOutQuart');
					
					SlideMenu.currentMenu.prev().removeClass("mainNavSelected");
				},SlideMenu.menuTimeout);

				
			});
			//set the mouseout on the slidemenu itself
			o_slidemenu.mouseleave(function(e){
				if(e.pageY > $j(this).offset().top) {
					if(this.currentMenu != null && this.currentMenu != o_slidemenu)
						this.currentMenu.slideUp(50);	
					$j(this).slideUp(50);
					
					$j(this).prev().removeClass("mainNavSelected");
				}
			});
			
			o_slidemenu.mouseenter(function(){
				//if timeoutid is available, cancel timeout which slide the menu up
				if(o_item.timeoutId != undefined) {
					
					window.clearTimeout(o_item.timeoutId);
				}
			});

		});
	}
}
