    var agent = navigator.userAgent.toLowerCase();
    var agentVer = null;
    if (agent.indexOf('opera') !=-1){
		agentVer = parseFloat(agent.match(/opera.{1}(\d+.\d+)/)[1]); 
	}

function initMenu(){
	if(MainMenu && !Event.observers && agentVer <= 9.0){
	MainMenu.addObservers();
	}
}

var Menu = Class.create();

Menu.prototype = {

  initialize: function(id) {
		this.menu = $(id);
		this.previousSubmenu = this.menu;
		this.currentItem = null;
		this.firstLevelItems = [];
		var lowerSubmenu;
		var firstUL;
		this.allchildUlsOfTheMenu = this.menu.getElementsBySelector('ul');
		this.allchildLisOfTheMenu = this.menu.getElementsBySelector('li');
		this.isCloseNeeded = false;
		this.closeMenuTimerId = null;
		this.mouseOverBody = this.overBody.bindAsEventListener(this);
		this.isIE = false;
		var agent = navigator.userAgent.toLowerCase(); 
		if (agent.indexOf('msie')!=-1 && agent.indexOf('opera')==-1){
			this.isIE = true;
		}
	 try { document.execCommand("BackgroundImageCache",false,true); } catch(e) {};

		var firstLevelItem = this.menu.getElementsBySelector('li')[0];
		while(firstLevelItem){
			if(firstLevelItem.tagName && firstLevelItem.tagName.toLowerCase() == "li"){
					this.firstLevelItems.push(firstLevelItem);
				/*	
          $A(firstLevelItem.getElementsByTagName('li')).each(function(item){
						if(item.getElementsByTagName('ul')[0]){
							//new Insertion.Top(item.getElementsByTagName('a')[0], "<span>&nbsp;</span>");
							
              //var newSpan = document.createElement('span');
							//var newText = document.createTextNode("\0");
							//newSpan.appendChild(newText);
							//item.getElementsByTagName('a')[0].insertBefore(newSpan, item.getElementsByTagName('a')[0].firstChild);
							
						}
					});
        */
//				firstUL = firstLevelItem.getElementsByTagName('ul')[0];
/*				
				if(firstUL){
					//firstUL.className = "parent";
					if(this.isIE){
						Element.addClassName(firstUL, "iefix");
					}
//$("test").firstChild.nodeValue += ("\n"+firstUL.className);
					$A(firstUL.getElementsByTagName('ul')).each(function(submenu){
						Element.addClassName(submenu, "parent");
						Element.addClassName(submenu, "child");
//$("test").firstChild.nodeValue += ("\n"+submenu.className);
//						alert(submenu.className);
						//submenu.className = "parent";
						//submenu.className += " child";
					});
					
					
				}
*/				
			}
			firstLevelItem = firstLevelItem.nextSibling;
		}
		this.addObservers();
	},
	
	addObservers: function(){
		this.allchildLisOfTheMenu.each(function(item){
			if(this.firstLevelItems.include(item)){
        Event.observe(item, "click", this.openSubmenu.bindAsEventListener(this, item), false);
  			Event.observe(item, "mouseout", this.wait.bindAsEventListener(this, item), false);
        item.observe('click', function(event){
					if(!item.getElementsBySelector('ul').length){ return true; }
          if(event.target == item || event.target == item.down("a")){Event.stop(event)};
          this.firstLevelItems.each(function (i){
            i.className  = '';
          });
  	      item.className = 'over';
  	     // if (value==7) $('menu_'+value).className += ' end';
        }.bindAsEventListener(this));
      }else{
        Event.observe(item, "mouseover", this.openSubmenu.bindAsEventListener(this, item), false);
  			Event.observe(item, "mouseout", this.wait.bindAsEventListener(this, item), false);
      }
		}.bind(this));
	},

	openSubmenu: function(event, element) {
		//if(!element.getElementsBySelector('ul').length){ return true; }
		this.isCloseNeeded = false;
		clearTimeout(this.closeMenuTimerId);
		this.closeMenuTimerId = null;
		if(element == this.currentItem){
			//Event.stop(event);
			return false;
		}
 		

		if(this.currentItem){this.currentItem.style.zIndex = 1;}
		this.currentItem = element;
		//var effect = {};
		var currentSubmenu = Element.up(element, "ul", 0);
//$("test").firstChild.nodeValue = ("\n"+currentSubmenu.className);
		//currentSubmenu.setOpacity(1.0);
		var lowerSubmenu = element.getElementsBySelector('ul')[0];
		
		var childUls = $A(currentSubmenu.getElementsBySelector('ul'));
		//if(this.isIE){childUls = childUls.reverse();}
		childUls.each(function(item){
			//if(Element.visible(item)){
				if(item != lowerSubmenu){
				/*
        	if(effect = $A(Effect.Queues.get(this.menu.id))[0]){
						$A(Effect.Queues.get(this.menu.id)).length=0;
						effect.cancel();
					}
					*/
					/*
          if(this.isIE){
						$A(item.getElementsByTagName('a')).each(function(itema){
							itema.style.display = "none";
						});
						$A(item.getElementsByTagName('li')).each(function(itema){
							itema.style.display = "none";
						});
					}
					*/
					item.style.display = "none";
					//item.up("li").style.zIndex = 1;
					
			//	}
			}
		}.bind(this));

    

		if(lowerSubmenu){
      lowerSubmenu.up("li").style.zIndex = 2;
      if(lowerSubmenu.style.display == "none"){//!Element.visible(lowerSubmenu)){
		/*
			if( this.previousSubmenu != currentSubmenu && this.previousSubmenu != this.menu){
				new Effect.Appear(lowerSubmenu, { queue: {position:'end', scope: this.menu.id, limit:2},
													duration: 0.25});
			}else{
				new Effect.Appear(lowerSubmenu, { queue: {position:'end', scope: this.menu.id, limit:1},
													duration: 0.25});
			}
*/
      lowerSubmenu.style.display = "block";
      

/*				

			if(this.isIE){
				$A(lowerSubmenu.getElementsByTagName('a')).each(function(itema){
					itema.style.display = "block";
				});
			}

			
			$A(lowerSubmenu.getElementsByTagName('li')).each(function(itema){
				if(this.isIE){
					itema.style.display = "block";
				}	
				if(Element.hasClassName(itema, "over")){
					Element.removeClassName(itema, "over");
				}
			}.bind(this));
*/				
		
      }
    }

//$("test").firstChild.nodeValue += ("\n"+currentSubmenu.className);
		//this.allchildUlsOfTheMenu.each(function(item){$("test").firstChild.nodeValue += item.className;});
/*
		if( Element.hasClassName(currentSubmenu, "child")){ //alert(1);
			$A(currentSubmenu.getElementsByTagName('li')).each(function(item){
				if(item == this.currentItem){
					if(!Element.hasClassName(item, "over")){
						Element.addClassName(item, "over");
					}
				}else{
					if(Element.hasClassName(item, "over")){
						Element.removeClassName(item, "over");
					}
				}
			}.bind(this));
		}
*/
    this.previousSubmenu = currentSubmenu;
	},

	closeAll: function() {
		this.firstLevelItems.each(function(firstLevelLi){
			var currentSubmenu = firstLevelLi.parentNode;
			var childUls = currentSubmenu.getElementsBySelector('ul');
			$A(childUls).reverse().each(function(item){
				//if(item.style.display == "block"){
				/*
        if(this.isIE){
					$A(item.getElementsByTagName('a')).each(function(itema){itema.style.display = "none";});
					$A(item.getElementsByTagName('li')).each(function(itema){
						itema.style.display = "none";
					});
				}	
				*/
				item.style.display = "none";
				//}
			}.bind(this));
			firstLevelLi.className  = '';
		}.bind(this));
				/*
				$R(1,7).each(function (val){
                  $('menu_'+val).className  = '';
                });
				*/
	},
		
	wait: function(event, element) {
		var thisMenuObject = this;
		this.isCloseNeeded = true;
		if(! Position.within(element, Event.pointerX(event), Event.pointerY(event))){
			this.closeMenuTimerId = setTimeout(( function() {return thisMenuObject.detectCloseNeed();}), 400);
		}else{
			this.closeMenuTimerId = setTimeout(( function() {return Event.observe(document.body, "mouseover", thisMenuObject.mouseOverBody, false);}), 400);
		}
		Event.stop(event);
	},

	overBody: function(event) {
		if(this.isCloseNeeded){
		var isWithinMenu = false;
		this.allchildLisOfTheMenu.each(function(item){
			isWithinMenu = isWithinMenu || Position.within(item, Event.pointerX(event), Event.pointerY(event));
		}.bind(this));
		if(!isWithinMenu){
			var thisMenuObject = this;
			this.closeMenuTimerId = setTimeout(( function() {return thisMenuObject.detectCloseNeed();}), 400);
			this.isCloseNeeded = true;
		}
		}
		Event.stopObserving(document.body, "mouseover", this.mouseOverBody, false);
	},

	detectCloseNeed: function() {
		if(this.isCloseNeeded){
			this.closeAll();
		}
	}
};
