/* drop down menu class
 * opens and hides submenus
 * author Samuil Gospodinov, Stanisval Kumanov
 * date: 02.05.2011
 * ver: 1.1
 * - shows submenu level 1
 * ver: 1.2 - 28.02.2011
 * -fixed some bugs
 * ver: 1.3 - 30.05.2011
 * - removed bug when you are at hover state on menu item and return back on the same menu item from it's drop down container
 */
function DropDown() {
	

	
	//setu up variables
	var dropDown = this;
	
	var menuHolderId			= "#mainNavigation";			//menu holder id or class
	var menuItem				= menuHolderId + ' a';			//menu item
	var submenuNavigation		= '.submenuNavigation';			//submenu holder class
	var submenuNavigationItem	= submenuNavigation + ' a'		//submenu item
	var multyHoverProtect		= null;
	var killHoverMenuHelper		= '#header .topPanel';			//helps to kill hovered menu
	var safeArea				= '.safeArea';					//protects from closing submenu when goigng again on the same menu item
	
	this.initDropDown = function(){
		
		$(submenuNavigation).find('a:last').addClass("lastItem");;
		
		//cycle all menu items and assign safeareas
		$(menuItem).each(function(){
			
			submenuHolderBoolean = Boolean($(this).attr('rel'));	//cast to boolean becouse for IE html attributes are not strings and when empty they are not "undefiner" or "null" or ""
			submenuHolderString = null; 							//for ie reset value
			
			if(submenuHolderBoolean != false){
				
				submenuHolderString = String($(this).attr('rel'));
				
				safeAreaWidth = $(this).outerWidth() + 5;
				
				submenuHolderSafeArea = "." + submenuHolderString + " " + safeArea;
				$(submenuHolderSafeArea).width(safeAreaWidth);
				
			}
		});
		
		//attach on menu item hover event
		$(menuItem).mouseenter(function(){
	
			if (multyHoverProtect == null){
				
				
				submenuHolder = $(this).attr('rel');
				checkIfSubmenuIsAlreadyShown = $('.' + submenuHolder + ':visible').attr('rel'); 
				
				if(checkIfSubmenuIsAlreadyShown != submenuHolder){
					if(submenuHolder != undefined){
						isAlreadyActive = $(this).attr('class');
						if(isAlreadyActive == undefined || isAlreadyActive == '' || isAlreadyActive == 'current'){
							//get menu item position
							pos = $(this).offset();
							multyHoverProtect = 1;
							DropDown.showSubmenu(this, pos);											
						}
					}else{
						targetIfOpenedSubmenu = $(submenuNavigation + ':visible').attr('rel');
						DropDown.hideSubmenu(targetIfOpenedSubmenu);
					}					
				}
			}
		});
		
		
		$(killHoverMenuHelper).mouseenter(function(){
			targetIfOpenedSubmenu = $(submenuNavigation + ':visible').attr('rel');
			DropDown.hideSubmenu(targetIfOpenedSubmenu);
		})
		
		
		
		//attach on submenu mouse out event
		$(submenuNavigation).mouseleave(function(){
			//get the menu class from wich we are leaving									 
			targetSubmenu = $(this).attr('rel');
			//hide submenu
			DropDown.hideSubmenu(targetSubmenu);
		});
	};
	
	this.showSubmenu = function(target, pos){
		
		subMenuTarget = $(target).attr('rel');
		submenuToBeClosed = null;				//assign default value
		multyHoverProtect = null;				//release the next hover switch from preventing multiple hovers
		
		//cycle all submenus
		$(submenuNavigation).each(function(){
			if ($(this).css('display') == 'block'){
				
				//get the submenu class that needs to be closed
				submenuToBeClosed = $(this).attr('rel');
				//clear previous selected element
				$(menuItem).removeClass('selected');
				
				//if we must show submenu, slide up the previous submenu if present
				if(submenuToBeClosed != ''){
					$('.' + submenuToBeClosed).stop(true, true).slideUp(50);
				};
			}
		});
		
		
		
		//if menu link dosent have submenu dont add selected class
		if (subMenuTarget != '') {
			
			//position the submenu
			$('.' + subMenuTarget).css('left', pos.left);
			
			//calsulate top position
			topPos = pos.top + $(target).outerHeight() - 1; //this equation may varie
			
			$('.' + subMenuTarget).css('top', topPos);
			
			$(target).addClass('selected');
			$('.' + subMenuTarget).stop(true, true).slideDown(50);
		};
	};
				
	this.hideSubmenu = function(target){
		$('.' + target).stop(true, true).slideUp(50, function(){
			$(menuItem + '.selected').removeClass('selected');
		});
	};				
}

// create class object
var DropDown = new DropDown();
