﻿var ManorNav = function() {
	//private vars and methods
	var currentNavItem;
	
	//public methods
	return {
	
		Commons: {
			
		},
		
		//flyout top navigation
		TopNav: {
			timerCartNum:null,
			
			openCart: function() {
				/* minicart open */
				jQuery('.cart').each(function() {
					var $cart = jQuery(this);
					$cart.addClass('expanded');
					initCart();
					timerCartNum = setTimeout(function(){ $cart.removeClass('expanded');} , 3000);
				});
			},
			initTopNav: function() {
				/*
				** behavior for topnav -> open on click
				 */
				jQuery('li.dd > a').each(function() {
					jQuery(this).click(function(e) {
						var clickedElem = jQuery(this);
						jQuery('li.dd').each(function(e) {
							if(jQuery(this).hasClass('expanded') != clickedElem.parent('li.dd').hasClass('expanded')) {
								jQuery(this).removeClass('expanded');
							}
						});
						jQuery(this).parent('li.dd').toggleClass('expanded');
						return false;
					});
				});
				
				var timerDDNum = 0;
				jQuery('li.dd').each(function() {
					var parentElem = jQuery(this);
					jQuery(this).children('div.box').bind("mouseenter",function(){
						clearTimeout(timerDDNum);
						
					}).bind("mouseleave",function(){
						timerDDNum = setTimeout ( function() { jQuery(parentElem).removeClass('expanded'); }, 500 );
					});
				});
				
				/* minicart click */
				jQuery('.cart').each(function() {
					var $cart = jQuery(this);
						
						
					$cart.find('div.cartStatus').click(function() {
						$cart.addClass('expanded');
						initCart();
					});
					$cart.find('img.closebar').click(function() {
						$cart.removeClass('expanded');
					});
					
					$cart.find('div.box').bind("mouseenter", function(){
						clearTimeout(timerCartNum);
					}).bind("mouseleave",function(){
						timerCartNum = setTimeout(function(){ 
							$cart.removeClass('expanded'); 
						} , 700);
					});
				});
			}
		},
	
		//flyout main navigation
		MainNav: {
			createNavigation: function() {
				jQuery(document.body).append('<div id="Submenu"></div>');
				
				var objNavi = jQuery('#mainnav');
				var objSubNavi = jQuery('#Submenu');
				var timerOn;
				var timerOff;
				
				jQuery('li.replace', objNavi).hover(
					function() {
						//reset
						clearTimeout(timerOff);
						if(currentNavItem != null) {
							ManorNav.MainNav.closeSubNavi(currentNavItem);
						}
						currentNavItem = jQuery(this);
					
						
						//show main active hover state
						currentNavItem.addClass('hover_on');
						
						var objSubNaviClone = jQuery('div.box', currentNavItem).clone(true);
						objSubNavi.empty().append('<!--[if lte IE 6]><iframe></iframe><![endif]-->');
						objSubNavi.append(objSubNaviClone);
						var offsets = currentNavItem.offset();						
						var height = currentNavItem.innerHeight();
						var topPos = ((offsets.top + height -2) / 12) + "em";
						var boxPadding = (parseInt(objSubNavi.find('div.box-overflow').css('paddingLeft')) + 2);
						if(jQuery.browser.mozilla && jQuery.browser.version.substr(0,3)=="1.9") {
							boxPadding++;
						}
						
						objSubNavi.show();
						
						//set submenu width
						var objSubNaviWidth = 0;
						objSubNavi.find('div.box-bg').children('ul').each(function() {
							objSubNaviWidth += jQuery(this).innerWidth();
							if (jQuery(this).hasClass("border_right")) {
								objSubNaviWidth ++;
							}
						});
						objSubNavi.find('div.box-bg').children('div.os_wrapper').children('ul').each(function() {
							objSubNaviWidth += jQuery(this).innerWidth();
							if (jQuery(this).hasClass("border_right")) {
								objSubNaviWidth ++;
							}
						});
						objSubNaviWidth += 10;
						objSubNavi.css('width', (objSubNaviWidth / 12) + "em");
						
						//left positioning submenu
						if(!currentNavItem.hasClass('rightaligned')) {
							var leftPos = ((offsets.left + boxPadding) / 12) + "em";
						
						} else {
							objSubNavi.addClass('rightaligned');
							
							var boxContentWidth = objSubNavi.find('.box-content').width();
							var leftPos = ((4 + offsets.left- boxContentWidth + parseInt(currentNavItem.width())) / 12) + "em";
						}						
						//submenu positioning
						objSubNavi.css("top", topPos);
						objSubNavi.css("left", leftPos);
							
					},
					function() {
						timerOff = window.setTimeout("ManorNav.MainNav.closeSubNavi()", 0);
					}
				);
				
				jQuery(objSubNavi).hover(
					function() {
						clearTimeout(timerOff);
						//show main active hover state
						if(currentNavItem.hasClass('hover_on')) {
							currentNavItem.removeClass('hover_on');
						}
						currentNavItem.addClass('hover_off');
					},
					function() {
						timerOff = window.setTimeout("ManorNav.MainNav.closeSubNavi()", 0);
					}
				);
				
				
				// Chrome on Windows has issues with text-shadow applied to our font
				if (navigator.userAgent.indexOf('Chrome/') > -1 && navigator.userAgent.indexOf('Windows') > -1) {
					objNavi.addClass('no-shadow');
				}
				// OS X has another baseline
				if (navigator.userAgent.indexOf('Macintosh') > -1) {
					objNavi.addClass('higher-baseline');
				}
			},
			
			closeSubNavi: function(item) {
				jQuery("#Submenu").removeAttr("style");
				if(jQuery("#Submenu").hasClass('rightaligned')) {
					jQuery("#Submenu").removeClass('rightaligned');
				}
				if(item == null) {
					item = currentNavItem;
				}
				if(item.hasClass('hover_on')) {
					item.removeClass('hover_on');
				}
				if(item.hasClass('hover_off')) {
					item.removeClass('hover_off');
				}
			}
		},
		
		//tooltip shown on click
		Tooltip: {
			createTooltip: function() {
				jQuery(document.body).append('<div id="Tooltip"></div>');
			},
				
			tooltipClicked: function(e) {
				var newTooltip = jQuery('#Tooltip');
				var tooltip = jQuery(e.target).next('.tooltip');
				var timer;
				
				//reset
				clearTimeout(timer);
			
				var newTooltipClone = jQuery(tooltip).clone(true);
				jQuery(newTooltipClone).removeAttr('style');
				newTooltip.empty();
				newTooltip.append(newTooltipClone);
				newTooltip.show();
				//submenu positioning
				var leftPos = e.pageX - (jQuery(tooltip).innerWidth() / 2);
				var topPos = e.pageY - jQuery(newTooltipClone).innerHeight() - 10;
				newTooltip.css("top", topPos);
				newTooltip.css("left", leftPos);
				
				jQuery(e.target).bind('mouseleave', function() {
					timer = window.setTimeout("ManorNav.Tooltip.closeTooltip()", 300);
				});
				
				jQuery(newTooltip).hover(
					function() {
						clearTimeout(timer);
					},
					function() {
						timerOff = window.setTimeout("ManorNav.Tooltip.closeTooltip()", 300);
					}
				);
			},
			
			closeTooltip: function(item) {
				jQuery("#Tooltip").removeAttr("style");
				jQuery("#Tooltip").empty();
			}
		},
		
		//tooltip shown on click
		TooltipCloud: {
			createTooltip: function() {
				jQuery(document.body).append('<div id="TooltipCloud"></div>');
			},
				
			tooltipClicked: function(e) {
				var newTooltip = jQuery('#TooltipCloud');
				var tooltip = jQuery(e).next('.tooltip_cloud');
				var timer;
				
				//reset
				//clearTimeout(timer);
			
				var newTooltipClone = jQuery(tooltip).clone(true);
				jQuery(newTooltipClone).removeAttr('style');
				newTooltip.append(newTooltipClone);
				
				newTooltip.show();
				//submenu positioning
				var pos = findPos(e);
				var leftPos = pos[0] +(jQuery(e).innerWidth() / 2) - (jQuery(tooltip).innerWidth() / 2);
				var topPos = pos[1] - jQuery(newTooltipClone).innerHeight() - 10;
				newTooltip.css("top", topPos);
				newTooltip.css("left", leftPos);
				
				window.setTimeout("ManorNav.TooltipCloud.closeTooltip()", 5000);
			},
			
			closeTooltip: function(item) {
				jQuery("#TooltipCloud").removeAttr("style");
				jQuery("#TooltipCloud").empty();
			}
			
		}
		
	};
}();

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
	do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	return [curleft,curtop];
	}
}

