﻿$(document).ready(function () {
    menuImagesPreloader();
    menu = new Menu();
});
$(document).click(function () {
	menu.Hide();
});


function Menu() {
	var mainMenu = $('#MainMenu ul');
	var mainMenuSelectedItem = $("#MainMenu ul li.selected");
	//Timer objects
	var mainMenuShowTimer = null;
	var mainMenuHideTimer = null;

	//Delays
	var mainMenuShowDelay = 100;
	var mainMenuHideDelay = 800;

	//CurrentItem
	var currentItem;
	var infocus = false;

	//Automatic rendered menus
	$('#MainMenu ul li.childs').bind('mouseover', DropDownShowTimer);
	$('#MainMenu ul li.childs').bind('mouseout', DropDownHideTimer);

	//QuickSearch Menu
	$('#MainMenu ul li.searchButton').bind('mouseover', DropDownShowTimer);
	$('#MainMenu ul li.searchButton').bind('mouseout', DropDownHideTimer);

	//Local menu
	$('#MainMenu ul li.localButton').bind('mouseover', DropDownShowTimer);
	$('#MainMenu ul li.localButton').bind('mouseout', DropDownHideTimer);

	//Login menu
	$('#GlobalMenu ul li.loggedIn').bind('click', DropDownShowTimer);
	$('#GlobalMenu ul li.loggedIn .displayName').click(function (e) { e.preventDefault(); });

	function DropDownShowTimer() {
		var invoker = $(this);
		if (currentItem != null) {
			DropDownShow(invoker);
		}
		else {
			mainMenuShowTimer = window.setTimeout(function () { DropDownShow(invoker); }, mainMenuShowDelay);
		}
	}

	function DropDownHideTimer() {
		MainMenuCancelShowTimer();
		mainMenuHideTimer = window.setTimeout(DropDownHide, mainMenuHideDelay);
	}

	function MainMenuCancelShowTimer() {
		if (mainMenuShowTimer) {
			window.clearTimeout(mainMenuShowTimer);
			mainMenuShowTimer = null;
		}
	}
	function MainMenuCancelHideTimer() {
		if (mainMenuHideTimer) {
			window.clearTimeout(mainMenuHideTimer);
			mainMenuHideTimer = null;
		}
	}

	function DropDownShow(invoker) {
		if (currentItem!= null) {
			DropDownHide();
		}
		
		currentItem = invoker;
		currentItem.addClass("hover");
		currentItem.children("a").addClass("hover");
		var currentDropDownItem = currentItem.children(".dropDownMenu");
		currentDropDownItem.show();

		currentDropDownItem.find('input[type="text"]').each(function () {
			$(this).focus(function () {
				infocus = true;
				if (this.value == this.defaultValue) {
					this.value = '';
				}
				if (this.value != this.defaultValue) {
					this.select();
				}
			});
			$(this).blur(function () {
				if ($.trim(this.value) == '') {
					this.value = (this.defaultValue ? this.defaultValue : '');
				}
				infocus = false;
			});
		});


		mainMenuSelectedItem.removeClass("selected");

		PositionDropDown(currentItem, currentDropDownItem, 0);

		MainMenuCancelHideTimer();
	}
	return {
		Hide: function () {
			DropDownHide();
		}
	}

	function DropDownHide() {
		if (!infocus) {
			if (currentItem) {
				currentItem.removeClass("hover");
				currentItem.children("a").removeClass("hover");
				currentItem.children(".dropDownMenu").hide();

				mainMenuSelectedItem.addClass("selected");
				currentItem = null;
			}
		}
	}

	function PositionDropDown(selectedMenuItem, selectedDropDownMenu, correction) {
		//Reset position to avoid errors when calculating width
		selectedDropDownMenu.css('left', 0);

		var mainMenuPositionLeft = mainMenu.position().left;
		var mainMenuPositionRight = mainMenuPositionLeft + mainMenu.width();
		var dropDownPositionLeft = selectedMenuItem.position().left;
		var dropDownPositionRight = dropDownPositionLeft + selectedDropDownMenu.width();
		var dropDownMenuWidth = selectedDropDownMenu.width();

		var leftPosition = dropDownPositionLeft;
		//If the dropdown is outside to the left of the mainmenu
		if (leftPosition < mainMenuPositionLeft) {
			leftPosition = mainMenuPositionLeft;
		}
		//If the dropdown goes outside to the right of the mainmenu
		if ((leftPosition + dropDownMenuWidth) > mainMenuPositionRight) {
			//Remove 14px for padding
			leftPosition = mainMenuPositionRight - dropDownMenuWidth - 14;
		}
		//Add correction to position if specified
		leftPosition = leftPosition + correction;

		selectedDropDownMenu.css('left', leftPosition);
	}
}
