
var evilBrowserInformation = {
	isEvil : null,
	evilVersion : null
}

function checkEvilBrowser() {
	var isEvil = /msie\s(\d)/.test(navigator.userAgent.toLowerCase());
	var ieVersion = null;
	if (isEvil) {
		var ieVersion = RegExp.$1;
	}
	evilBrowserInformation.isEvil = isEvil;
	if (isEvil) {
		evilBrowserInformation.evilVersion = ieVersion;
	}
}

checkEvilBrowser();

/* IE6 Hover Fix */
var IE6HoverFix = Class.create({
 
	element: null,
 
	initialize: function(el) {
		if (evilBrowserInformation.isEvil && evilBrowserInformation.evilVersion < 7) {
			if (!el.hoverFixAttached) {
				this.element = el;
				this.element.observe('mouseenter', this.mouseOverHandler);
				this.element.observe('mouseleave', this.mouseOutHandler);
				this.element.hoverFixAttached = true;
			}
		}
	},
 
	mouseOverHandler: function(ev) {
		var element = Event.element(ev);
		element.addClassName('hover');
	},
 
	mouseOutHandler: function(ev) {
		var element = Event.element(ev);
		element.removeClassName('hover');
	}
});



var NaviMenu = {
	menuElement: null,
	menuLayer: null,
	menuWrapper: null,
	topNavEntries: null,
	viewedElement: null,
	hiddenDropDowns: null,

	initialize: function() {
		this.menuElement = $('mainmenu');
		this.menuLayer = $('menu_layer');
		this.menuWrapper = $('menuWrapper');
		this.hovermenuTopLeft = $('hovermenuTopLeft');
		
		if (!this.menuElement || !this.menuLayer) {
			return false;
		}
		this.topNavEntries = this.menuElement.select('ul.menuItemList > li > a:first-child');
		this.topNavEntries.each(function(el) {
			var parentEl = el.up();			
			var hiddenMenu = parentEl.select('.hiddenMenu');
			if (hiddenMenu && hiddenMenu.length > 0) {
				el.hiddenMenu = hiddenMenu[0];
             	var horContainer = el.hiddenMenu.select('.horContainer');
				if (horContainer.length>0) {
    			horContainer[0].setStyle('height:'+(this.menuLayer.getDimensions().height-13)+'px');}
			}
			el.observe('mouseover', this.menuOver.bind(this));
			el.observe('mouseout', this.menuOut.bind(this));
		}.bind(this));
		this.menuLayer.observe('mouseover', this.layerOver.bind(this));
		this.menuLayer.observe('mouseout', this.layerOut.bind(this));
	},
	
	calculatePosition: function(el) {
		
		// TODO: <iframe src="" id="overwrite" style="position:absolute;z-index:-1"></iframe>		
		var left = $(el).positionedOffset()[0];	
		if($(el).readAttribute("lastitem")){
			left = left - 91;
		}
		
	    this.menuLayer.style.left = left + 'px';
		var maxHeight = 0;
		var submenuBoxes = this.menuWrapper.select('.submenu_box');
		
		submenuBoxes.each(function(el) {
	    	var height = el.getDimensions().height;
	    	if (height > maxHeight) {
	    		maxHeight = height;
	    	}
	    });
	    submenuBoxes.each(function(el) {
	    	el.style.height = maxHeight + 'px';
	    });
	    
		var lastEntries = this.menuWrapper.select('.last');
		if (lastEntries.length > 0) {
			var vertContainer = this.menuWrapper.select('.vertContainer');
			if (vertContainer.length > 0) {
				var vertContainerWidth = vertContainer[0].getDimensions().width;
				lastEntries.each(function(el) {
					if (el.getDimensions().width != vertContainerWidth) {
						el.style.width = vertContainerWidth + 'px';
					}
				});
			}
		}
		this.hideDropDowns();
	},
	
	show: function(el) {
		el.up().addClassName('hover');
		this.viewedElement = el;
		this.menuLayer.show();
	},
	
	hide: function(el) {
		el.up().removeClassName('hover');
		this.menuLayer.hide();
		if (this.hiddenDropDowns) {
			this.hiddenDropDowns.each(function(el) {
				el.style.visibility = 'visible';
			});
		}
		this.hiddenDropDowns = [];
	},
	
	hideDropDowns: function() {
		this.hiddenDropDowns = [];
		if (evilBrowserInformation.isEvil && evilBrowserInformation.evilVersion < 7) {
			$('main').select('select').each(function(el,i){
				if (el.overlaps(this.menuLayer)) {
					this.hiddenDropDowns.push(el);
					el.style.visibility = 'hidden';
				}
			}.bind(this));
		}
	},
	
	menuOver: function(ev) {
		var el = Event.element(ev);
		var hiddenMenu = el.hiddenMenu;
		if (hiddenMenu) {
			this.menuLayer.style.left = '10px';
			this.menuWrapper.update(hiddenMenu.innerHTML);
			this.show(el);
			this.calculatePosition(el);
			if (evilBrowserInformation.isEvil && evilBrowserInformation.evilVersion == 7) this.ie7ZoomFix();
		}
	},
	
	menuOut: function(ev) {
		this.hide(Event.element(ev));
	},
	
	layerOver: function(ev) {
		this.show(this.viewedElement);
		this.hideDropDowns();
	},
	
	layerOut: function(ev) {
		this.hide(this.viewedElement);
	},
	// fix for menu link in ie7 when zoom != 1 (Bug #246)
	ie7ZoomFix: function() {
		var els = this.menuWrapper.select('.listing > li > a');
		var cont;
		for (var i=0; i<els.length; i++) {
			cont = els[i].innerHTML
			els[i].innerHTML = '';
			els[i].innerHTML = cont;
		}
	}
};

document.observe('dom:loaded', function() {
	NaviMenu.initialize();
});