menuAnimator=function(element){
	this.element=element;
	fade=this.element.getAttribute('data-fade');
	if(fade=='true' ||fade=='1'||fade==1){
		this.fade=true;
	}
	if(this.fade){
		this.animator=new SLAnimator(element,'fade');
	}
	this.shown=false;
	this.fullOpacity=parseFloat((this.element.style.opacity)?this.element.style.opacity:1);
	this.opacity=0;
	this.showing=false;
	this.hiding=false;
}

menuAnimator.prototype={
	use:false,
	fade:false,
	element:false,
	animator:false,
	shown:false,
	opacity:0,
	show:function(){
		if(this.use){
			if(this.hiding){
				if(this.fade){
					this.animator.cancel();
					this.opacity=parseFloat(this.element.style.opacity);
				}
				this.shown=false;
			}
			if(!this.shown){
				this.showing=true;
				if(this.fade){
					this.animator.onfinish=new callBack(this.setShownTrue,this);
					this.animator.from=this.opacity;
					this.animator.to=this.fullOpacity;
					this.animator.interval=50;
					this.animator.run();
				}else{
					this.shown=true;
					this.showing=false;
				}
				this.element.style.display='block';
			}
		}else{
			this.setShownTrue();
		}
	},
	hide:function(){
		if(this.use){
			if(this.showing){
				if(this.fade){
					this.animator.cancel();
					this.opacity=parseFloat(this.element.style.opacity);
				}
				this.shown=true;
			}
			if(this.shown){
				this.hiding=true;
				if(this.fade){
					this.animator.onfinish=new callBack(this.setDisplayNone,this);
					this.animator.from=this.opacity;
					this.animator.interval=50;
					this.animator.to=0;
					this.animator.run();
				}else{
					this.element.style.display='none';
					this.shown=false;
					this.hiding=false;
				}
			}
		}else{
			this.setDisplayNone();
		}
	},
	setDisplayNone:function(){
		this.element.style.display='none';
		this.shown=false;
		this.opacity=0;
		this.hiding=false;
	},
	setShownTrue:function(){
		this.shown=true;
		this.element.style.display='block';
		this.opacity=this.fullOpacity
		this.showing=false;
	}
}

// document.browser={engine:'gecko',engineVersion:20100106,name:'firefox',version:3.5,os:'linux',bot:false};

function menu_showSubMenu(id){
	var element=(document.getElementById(id))?document.getElementById(id):id;
	if(!element.animator){
		element.animator=new menuAnimator(element);
	}
	if (!element.animator.shown){
		var level=element.getAttribute('name');
		var subMenus=document.getElementsByTagName('div');
		for(var i=0;i<subMenus.length;i++){
			subMenu=subMenus[i];
			if (subMenu.getAttribute('name')>=level && subMenu!=element){
				if(!subMenu.animator){
					subMenu.animator=new menuAnimator(subMenu,'fade');
				}
				subMenu.animator.hide();
			}
		}
		//element.style.left=(parseInt(element.style.left)+GetComputedElementStyle(element.parentNode,'width',true))
		if (parseInt(level)>1){
			var left=getStyle(element.parentNode,'width')
			element.style.left=((parseInt(left)>10)?parseInt(left):150)+'px';
			if (window.ActiveXObject){//like always microsoft does things his own way
				element.style.marginTop=0;
			}
		}else{
			element.style.marginTop=0;
		}
		element.animator.show();
// 		bodyHideEnabled=false;
// 		bodyHideTime=setTimeout(enableBodyHide,50);
	}
}

function menu_hide(level){
	var subMenus=document.getElementsByTagName('div');
	for(var i=0;i<subMenus.length;i++){
		if ((subMenus[i].className=="menu_subMenu") || (subMenus[i].className=="menuExpanding_subMenu")){
			if (subMenus[i].getAttribute('name')>=level){
				if(!subMenus[i].animator){
					subMenus[i].animator=new menuAnimator(subMenus[i],'fade');
				}
				subMenus[i].animator.hide();
			}
		}
	}
}
var bodyHideTimer=false;
var bodyHideEnabled=true;

function menu_hideBody(){
	if(bodyHideEnabled){
		menu_hide(1);
	}
}
function enableBodyHide(){
	bodyHideEnabled=true;
// 	clearInterval(bodyHideTime);
}