Array.prototype.has = function( v, i ){
	for(var j = 0; j < this.length; j++ ){
		if( this[j] == v ) return ( !i ? true : j );
	}
	return false;
}

function menu(){
	var self = this;
	var openMenus = new Array();
	var status = "keepOpen";

	this.init = function(){
		var navEntry = $$("td.topnavigation");
		navEntry.each(function( item ){
			var link = item.down('a');
			Event.observe(item, 'mouseover', function(e) {
				var idLINK = link.readAttribute("id").split("_");
				var menu = $("Level_"+idLINK[1]+"_menu");
				if( openMenus.length > 0 ){
				    openMenus.each(function(item){
						item.setStyle({ display: 'none' });
				    });
					 openMenus = new Array();
				}
				navEntry.each(function(el){ $(el.parentNode.parentNode.parentNode.parentNode).removeAttribute("style"); });
				$(item.parentNode.parentNode.parentNode.parentNode).setStyle({ backgroundColor:"#ffffff" });
				item.down('a').setStyle({color: "#646464"});

				self.showMenu( "Level_"+idLINK[1]+"_menu" );
				Event.stop(e);
			});

			Event.observe(item, 'mouseout', function(e) { 
				status = "close";
				setTimeout(self.hideMenu, 700); 
			});
		});
	}
	
	this.hideMenu = function(){ if( status == "close" ) self.clearAll(); }
	
	this.clearAll = function( keepOpenEl ){
		if( keepOpenEl == undefined ){
			$$("td.topnavigation").each(function( item ){
				$(item.parentNode.parentNode.parentNode.parentNode).setStyle({ backgroundColor:"#c8c8ca" });
				item.down(0).setStyle({color: "#646464"});
			});

			var splicevalue = 0;			
			openMenus.each(function(item){ item.setStyle({ display: "none" }); });
			openMenus = new Array();
		}else{
			if( $(keepOpenEl).hasClassName('menu') ){
				var secondleveldiv = $(keepOpenEl).select( 'div.secondLevel' );
				$( secondleveldiv[0]).childElements().each(function( element ){
					element.setStyle({ display: 'none' }); 
				});
			} 
			if( $(keepOpenEl.parentNode).hasClassName('secondLevel') ){
				var thirdLeveldiv = $(keepOpenEl).select( 'div.thirdLevel' );
				if( $( thirdLeveldiv[0]) ){
					$( thirdLeveldiv[0]).childElements().each(function( element ){
						element.setStyle({ display: 'none' }); 
					});
				}
			}
		}
	}
	
	this.showMenu = function( el ){
		status = "keepOpen";
		var element = $(el);
		element.setStyle({ visibility: 'visible', display: 'block' });
		element.select('tr').each(function(item){ 
			item.setStyle({ backgroundColor: "#FFFFFF", opacity: 0.9 }); 
		})
		
		Event.observe( element, 'mouseover', function(e){
			status = "keepOpen";				
		});
		
		Event.observe( element, 'mouseout', function(e){
			status = "close";	
			setTimeout(self.hideMenu, 700);
		});
		
		
		 if( openMenus.length > 0 ){
	 		var splicecounter = 0;
			openMenus.each(function(item){
		 		item.setStyle({ display: 'none' });
				openMenus.splice( splicecounter, 1 );
				splicecounter++;
			});
		}
		
		if( !openMenus.has(element) ){
			openMenus.push( element );
			self.addListener( el );
		}
	}
	
	this.calcMenuPos = function( el, listitem, container ){
		var element = $(el);
		var menuHeight = parseInt( element.getHeight() );
		var offsetTrigger = listitem.cumulativeOffset();
		var offsetCont = container.cumulativeOffset();	
		var newTop = Math.round(offsetTrigger[1]-offsetCont[1]);
		if( newTop+menuHeight+offsetCont[1] > 453 ) newTop = newTop-( (newTop+menuHeight+offsetCont[1])-453 );
		else newTop = newTop-12;
		element.setStyle({ top: newTop+"px" });
	}

	this.addListener = function( el ){
		var container = $(el.parentNode);
		var list = $(el).firstChild;
		var table = $(list).firstChild;
		if( table == undefined ) return ;
      var links = $(table).select('a');
 		var nextLevel = $(list.nextSibling)

		if(nextLevel){
			Event.observe( nextLevel, 'mouseover', function(e){
				status = "keepOpen";				
			});
		
			Event.observe( nextLevel, 'mouseout', function(e){
				status = "close";	
				setTimeout(self.hideMenu, 700);
			});
		}
		
		links.each(function(item){
			var element = $(item);
			var parent = element.readAttribute('id');
			var href = element.readAttribute('href');
			if( href == "javascript: void(0);" ){
				Event.observe(item, 'mouseover', function(e){
					var tr = $(item.parentNode.parentNode);
					tr.siblings().each(function(item){ item.setStyle({  backgroundColor: "#FFFFFF", color: "#000000" }) });
					status = "keepOpen";
					tr.setStyle({ backgroundColor: "#e9e9e9", color: "#FFFFFF" });
					nextLevel.immediateDescendants().each(function(item){
						if( item.readAttribute("id") == parent+"level"){
						// if( $(item).readAttribute("id") == parent+"level"){
							var div = $(e.target).up('div');
							var target  = e.target;
							self.calcMenuPos( item, target, div );
							self.addListener( item );
							// $(item).setStyle({ display: 'block' });
							item.setStyle({ display: 'block' });
							status = "keepOpen";
							
							Event.observe(item, 'mouseout', function(e){
								status = "close";
								setTimeout(self.hideMenu, 700);
							});

							openMenus.push( $(item) );
						}else{ item.setStyle({ display: "none" }); }
					});
					Event.stop( e );
				});
			}else{
				Event.observe(item, 'mouseover', function(e){
					status = "keepOpen";
					self.clearAll( $(list.parentNode) );
				});
			}
		});
	}
	this.init();
}