var LAYER_X=9;//layer coordinates
var LAYER_Y=180;
var SUB_MENU_X=LAYER_X;  //where our submenus begin from
var SUB_MENU_Y=LAYER_Y;	

var FILTER="alpha(opacity=95)";
var ON_ITEM_BCKG=(NAV6 ? "#3616F6" : "#3616F6");//tuned for certain filter!
var OFF_ITEM_BCKG="#DDF7FC";

var MENU_BCKG="#DDF7FC"; 

var ON_ITEM_FONT="#DDF7FC"; 
var OFF_ITEM_FONT="#575757";

var FONT="sans-serif,Vernada";
var FONT_SIZE="14px";

var BORDER_W=1;
var BORDER_COLOR="#000000";
var BORDER=BORDER_COLOR+" "+BORDER_W+"px solid";
var BORDER_TOP=BORDER;
var BORDER_BOTTOM=BORDER;
var BORDER_LEFT=BORDER;
var BORDER_RIGHT=BORDER;

//menu item position
var PADDING_LEFT=5;
var PADDING_RIGHT=5;
var PADDING_TOP=3;
var PADDING_BOTTOM=3;

var MARGIN_LEFT=0;
var MARGIN_RIGHT=0;
var MARGIN_TOP=1;
var MARGIN_BOTTOM=0;

//menu position
var MENU_MARGIN_LEFT=1;
var MENU_MARGIN_RIGHT=0;
var MENU_MARGIN_TOP=0;
var MENU_MARGIN_BOTTOM=0;

var MENU_PADDING_RIGHT=0;
var MENU_PADDING_LEFT=0;
var MENU_PADDING_TOP=0;
var MENU_PADDING_BOTTOM=3;

var ARR_RIGHT_PATH="/images/arr_right.gif";
var ARR_RIGHT_W=7;
var ARR_RIGHT_H=6;
var ARR_HSPACE=0;
var ARR_VSPACE=-8;

var MOVE_X_DISTANCE=15; //x - distance the menu slides while appearing

var MAX_TICKS=-1, Ticks=MAX_TICKS;  //maximum 'idle' ticks - then menu disapears, -1 - no ticks at all

var NOT_FISHED_AREA='&nbsp;&nbsp;under construction<B>*</B>'; // common message for unfinished areas

var MENU_PREFIX="menu";
var ITEM_PREFIX="l";
var BEING_CREATED=true;
var MOVING_TIMER_ID=null;
var MOUSE_OUT_TIMER_ID=null;
var LAST_ONE_SUB=null;
var BEING_MOVED_SUB=null;
var USER_OVER_MENU=false;

function MenuInit()
{
	var root=ScanNode(null,null,'_0');
	FixSizes(root);
	if(root) BEING_CREATED=false;

	OtherMouseDown = (document.onmousedown) ? document.onmousedown :  new Function;
    	document.onmousedown = function(){PageClick();OtherMouseDown()}

	return root;
}

function PageClick()
{
	if (!USER_OVER_MENU) HideAllMenu();
}

function FixSizes(menu)
{
	var prev_item=null;	
	var max_x=0;
	var parent=menu.parent;
	var parent_line=menu.parent_line;

	for(var i=0;i<menu.lines;i++)
	{	
		var item=document.getElementById(menu.id+ITEM_PREFIX+ i);
		if(prev_item)
		{
			item.line_pos_x=prev_item.line_pos_x;
			item.style.left=item.line_pos_x+"px";

	
			item.line_pos_y=prev_item.line_pos_y+prev_item.offsetHeight+MARGIN_BOTTOM+MARGIN_TOP;
			item.style.top=item.line_pos_y+"px";
		}
		else
		{
			item.line_pos_x=MENU_PADDING_RIGHT+MARGIN_LEFT;
			item.style.left=item.line_pos_x+"px";

			item.line_pos_y=MENU_PADDING_TOP+MARGIN_TOP;
			item.style.top=item.line_pos_y+"px";
		}	
		max_x=Math.max(max_x,item.offsetWidth);
		prev_item=item;
	}
	
	if(menu.lines)
	{
		
		menu.style.width =max_x+MENU_PADDING_LEFT+MENU_PADDING_RIGHT+MARGIN_LEFT+MARGIN_RIGHT+2*BORDER_W+"px";
		menu.style.height=item.line_pos_y+item.offsetHeight+MENU_PADDING_BOTTOM+MARGIN_BOTTOM+"px";
	
		if(parent) 
		{
			menu.pos_x=parent.pos_x+parent.offsetWidth+MENU_MARGIN_LEFT;
			menu.pos_y=parent.pos_y+parent_line.line_pos_y+MENU_MARGIN_TOP;
		}
		else
		{
			menu.pos_x=MENU_MARGIN_LEFT;
			menu.pos_y=MENU_MARGIN_TOP;
		}
	}

	
	for(var j=0;j<menu.lines;j++) 
	{	
		item=document.getElementById(menu.id+ITEM_PREFIX+ j);
		item.style.width=max_x+"px";
		
		if(!IE)item.style.width=max_x+(2*BORDER_W-PADDING_RIGHT-PADDING_LEFT)+"px";
			
		if(item.child) 
		{
			item.img.align="right";
			item.img.style.marginLeft=ARR_HSPACE+"px";
			item.img.style.marginTop=ARR_VSPACE+"px";
			FixSizes(item.child);
		}
	}
}

function ScanNode(parent,prev_pref,level)
{
	var isObject = (typeof eval("window." + MENU_PREFIX+level) == "object");
	if(isObject)
	{
		var arr = eval(MENU_PREFIX+level);
		if(typeof  arr[0] == "object")
		{

			var pref=arr[0];
			var curr_pref = 
			{
				width		: CheckInherited(pref[0],prev_pref ? prev_pref.width:""),
				height		: CheckInherited(pref[1],prev_pref ? prev_pref.height:""),
				img_path		: CheckInherited(pref[2],prev_pref ? prev_pref.img_path:""),
				links_path	: CheckInherited(pref[3],prev_pref ? prev_pref.links_path:"")
			}
		
		}

		var new_menu = MakeMenu(parent,curr_pref,level);
		for(var i=1;i<arr.length;i++)
		{
			var next_arr=arr[i];
			var item=MakeMenuItem(new_menu,(i-1),next_arr);
			if(next_arr[next_arr.length-1]) 
			{
				item.child=ScanNode(item,curr_pref,level+"_"+(i-1));
			}
		}
		new_menu.lines=(i-1);
	}
	return new_menu;
}

function CheckInherited(curr,prev)
{
	str=new String(curr);
	
	if(!curr) res=prev;
	else if(str.indexOf("+")!=-1) res=prev+str.substring(1);		
	else res=curr;
	return res;
}

function MakeMenu(parent_line,pref,level) 
{
	var menu_obj = document.createElement("DIV");

	menu_obj.curr_line=null;
	menu_obj.parent_line=parent_line;
	menu_obj.parent=parent_line ? parent_line.menu:null;
	menu_obj.pref=pref;

	with(menu_obj)
	{
		var id = MENU_PREFIX+level;
		
		with(style) 
		{
			filter=FILTER;
			borderBottom=BORDER_BOTTOM;
			borderTop=BORDER_BOTTOM;
			borderLeft=BORDER_LEFT;
			borderRight=BORDER_RIGHT;
			backgroundColor=MENU_BCKG;
			position = "absolute";
			visibility = "hidden";
			left = "-500px";
			top = "0px";
			if(pref.width!="any") width =pref.width+"px";
			else width="100%"
			zIndex=100;
		}

	}

	menu_obj.Show=Show;
	menu_obj.ShowMoving=ShowMoving;
	menu_obj.Move=Move;
	menu_obj.Hide=Hide;

	document.body.appendChild(menu_obj);
	return menu_obj;
}

function MakeMenuItem(menu,linecount,content) 
{

	var prev_item=document.getElementById(menu.id+ITEM_PREFIX+ (linecount-1));
	var item = document.createElement("DIV");

	item.id = menu.id+ITEM_PREFIX+ linecount;
	item.menu =menu;

	if(menu.pref.width !="any")item.style.width=menu.pref.width-(!IE? (PADDING_RIGHT+PADDING_LEFT):0)+"px"; 
	if(menu.pref.height !="any")item.style.height=menu.pref.height-(!IE? (PADDING_TOP+PADDING_BOTTOM):0)+"px"; 

	with(item.style)
	{
		position = "absolute";
		visibility = "inherit";
		color=OFF_ITEM_FONT;
		backgroundColor=MENU_BCKG;
		fontFamily=FONT;
		fontSize=FONT_SIZE;
		paddingTop=PADDING_TOP+"px";
		paddingBottom=PADDING_BOTTOM+"px";
		paddingLeft=PADDING_LEFT+"px";
		paddingRight=PADDING_RIGHT+"px";
		zIndex=99;
	}

	if(content.length)
	{
		item.style.cursor = NAV6 ? "pointer" : "hand";
		item.innerHTML = content[0];	
		item.link =menu.pref.links_path+content[1];	

		item.onmouseover = MenuItemOver;
		item.onmouseout = MenuItemOut;
		item.onclick = MenuItemClick;
		item.OnOff=OnOff;
	}
	else
	{
		item.innerHTML =NOT_FISHED_AREA;	
	}

	if(content[content.length-1])
	{
		img=document.createElement("IMG");
		with(img)
		{
			position = "relative";
			src=ARR_RIGHT_PATH;
			width=ARR_RIGHT_W;
			height=ARR_RIGHT_H;
		}
		item.appendChild(img);
	item.img=img;
	}
	menu.appendChild(item);

	return item;
}

function OnOff(mode)
{
		this.style.color=(mode=="OFF" ? OFF_ITEM_FONT:ON_ITEM_FONT);	
		this.style.backgroundColor=(mode=="OFF" ? OFF_ITEM_BCKG:ON_ITEM_BCKG);
}

function PopUp(id)
{
	if(BEING_CREATED) return;

	status='';
	var menu=document.getElementById(id);	
	if(menu&&menu.style.visibility=="hidden") 
	{
		if(LAST_ONE_SUB&&(LAST_ONE_SUB!=menu)&&(LAST_ONE_SUB!=menu.parent))
		 HideDownUp(LAST_ONE_SUB,menu.parent);

		//menu.Show();
		menu.ShowMoving(MOVE_X_DISTANCE,"x");
		LAST_ONE_SUB=menu;

		MouseOutTicks()
	}
}

function Show(dx,dy)
{
	this.style.left=SUB_MENU_X+this.pos_x+(dx ? dx:0)+"px";
	this.style.top=SUB_MENU_Y+this.pos_y+(dy ? dy:0)+"px";

    	this.style.visibility="visible";
}

function ShowMoving(distance,dir)
{
	BEING_MOVED=true;
    	if(MOVING_TIMER_ID)
	{
		window.clearTimeout(MOVING_TIMER_ID);
		MOVING_TIMER_ID=null;
	}
	this.Show(-distance);
   	this.Move(distance,dir);
}
   
function Move(distance,dir)
{
	id=this.id;
	if(dir=='y')strObj= "document.getElementById(id).style.top";
    else strObj= "document.getElementById(id).style.left";
	BEING_MOVED_SUB=this;
    	TickMove(distance,strObj);	
}

function TickMove(distance,strObj)
{ 
	var lastScrollStr=String(eval(strObj));
	lastScrollStr=lastScrollStr.substr(0,(lastScrollStr.length-2));
	var lastScroll=eval(lastScrollStr);
    	var diff=lastScroll+distance;   
    	if(diff != lastScroll) 
	{
	 	var percent = .5 * (diff - lastScroll);
	  	if(percent > 0) percent = Math.ceil(percent);
	  	else percent = Math.floor(percent);	
	  	lastScrollStr=""+(lastScroll+percent);	
	  	eval(strObj+"='"+lastScrollStr+"px'");		 
	  	lastScroll= lastScroll + percent;
	  	
      		exec="window.setTimeout('TickMove("+(diff-lastScroll)+","+'"'+strObj+'"'+")',1);";
      		MOVING_TIMER_ID=eval(exec);
	 }
	 else
	 {
	  	window.clearTimeout(MOVING_TIMER_ID);
		MOVING_TIMER_ID=null;
		BEING_MOVED_SUB=null;
	 }
}

function Hide()
{
	if(this.curr_line)	
	{
		this.curr_line.OnOff("OFF");
		this.curr_line=null;		
	}

	this.style.left = "-500px";
	this.style.top = "0px";
	this.style.visibility="hidden";
}

function HideDownUp(from,dest)
{	
	ptr=from;
	while(ptr&&ptr!=dest)
	{
		ptr.Hide();
		ptr=ptr.parent;
	}

	LAST_ONE_SUB=dest;
}

function MenuItemClick()
{
	location.href = this.link;
}

function MenuItemOver()
{
	if (BEING_MOVED_SUB==this.menu) return;
	USER_OVER_MENU=true;
	ResetMouseOutTicks();

	if(this.menu.curr_line&&this.menu.curr_line!=this)
	{		
		this.menu.curr_line.OnOff("OFF");
		this.OnOff("ON");
	}
	else if(!this.menu.curr_line)
	{
		this.OnOff("ON");
	}
	
	if(this.child) PopUp(this.child.id);
	else if(LAST_ONE_SUB!=this.menu) HideDownUp(LAST_ONE_SUB,this.menu);
	
	status=this.link;
	this.menu.curr_line=this;
}

function MenuItemOut()
{	
	USER_OVER_MENU=false;	
	MouseOutTicks()
}

function HideOnlySubMenu()
{
	 if(LAST_ONE_SUB) HideDownUp(LAST_ONE_SUB,null);
}

function HideAllMenu() 
{ 
	 if(LAST_ONE_SUB) HideDownUp(LAST_ONE_SUB,null);	         
  	 if(SwapMenuImage)SwapMenuImage(null);
}
	
function MouseOutTicks()
{
	if(Ticks==0)
	{
		HideAllMenu();
		ResetMouseOutTicks();
	}
	else if(Ticks<0)return;
	else
	{
		Ticks--;
		MOUSE_OUT_TIMER_ID=window.setTimeout('MouseOutTicks()',1000);
	}
}

function ResetMouseOutTicks()
{
	if(MOUSE_OUT_TIMER_ID)
	{
  		Ticks=MAX_TICKS;
		window.clearTimeout(MOUSE_OUT_TIMER_ID);
	}
}			
