
function GetChildElements(eElement)
{
	var elements = [],childNode;
	for(var i=0,len=eElement.childNodes.length;i<len;i++)
	{
		childNode = eElement.childNodes[i];
		if(typeof(childNode.tagName) != 'undefined')
			elements[elements.length] = childNode;
	}
	
	return elements;
}

function regexpReplace(in_str,reg_exp,replace_str,opts)
{
	var re;
	if(in_str==null) return in_str;
	if(typeof(opts)=="undefined") opts='g';
	re=new RegExp(reg_exp,opts);
	return in_str.replace(re,replace_str)
}
	
function GetInt(val)
{
	if(typeof(val) == 'number') return val;
	else if(typeof(val) == 'string')
	{
		val = regexpReplace(val,'/[\x00-\x2f\x3a-\xff]/','');
		if(val != '') return val;
	}
	
	return 0;
}

var MenuCfg = Class.create();

MenuCfg.prototype = {
	initialize: function() {
		
	},
	
	minWidth : 0,
	maxWidth : null
	
}

var oMenuCfg = new MenuCfg();

var MenuItem = Class.create();

MenuItem.prototype = {
	initialize: function(m) 
	{
		if(typeof(m) == 'object')
		{
			this.oItem = m;
			this.id = m.id;
		}
		else
		{
			this.id  = m;
			this.oItem = $('#'+m);
		}
		//this.Width = this.GetWidth();
		//this.Left = GetInt(this.oItem.style['left']);
		this.oItem.Object = this;
		this.HasMenu = false;
		//var aElements = this.oItem.childElements();
		var aElements = GetChildElements(this.oItem);
		for(var i=0;i<aElements.length;i++)
		{
			if(aElements[i].nodeType == 1 && aElements[i].tagName == 'UL')
			{
				this.HasMenu = true;
				this.SubMenu = new Menu(aElements[i]);
				this.SubMenu.parent = this;
				//this.SubMenu.cfg = this.cfg;
				
				this.oItem.onmouseover = function()
				{
					this.Object.SubMenu.showMenu();
				}
				this.oItem.onmouseout = function()
				{
					this.Object.SubMenu.hideMenu();
				}
			}
		}
	},
	
	Width : function ()
	{
		//aElements = this.oItem.childElements();
		var aElements = GetChildElements(this.oItem); 
		for(var i=0;i<aElements.length;i++)
		{
			if(aElements[i].nodeType == 1 && aElements[i].tagName == 'A')
			{
				return aElements[i].offsetWidth;
			}
		}
	},
	
	Left : function ()
	{
		return this.oItem.offsetLeft;
	},
	
	Top : function ()
	{
		return this.oItem.offsetTop;
	}
}

var Menu = Class.create();
Menu.prototype = {
	
	initialize: function(m)
	{
		if(typeof(m) == 'object')
		{
			this.oMenu = m;
			this.id = m.id;
			this.SubMenu = true;
		}
		else
		{
			this.id  = m;
			this.oMenu = document.getElementById(m);
			this.SubMenu = false;
			this.cfg = new MenuCfg();
		}
		this.oMenu.style.display = 'none';
		this.aChilds = new Array();
		//var aElements = this.oMenu.childElements();
		var aElements = GetChildElements(this.oMenu);
		for(var i=0;i<aElements.length;i++)
		{
			this.aChilds[i] = new MenuItem(aElements[i]);
			this.aChilds[i].parent = this;
			//this.aChilds[i].cfg = this.cfg;
		}
	},
	
	showMenu : function ()
	{
		//---------M----I-----M
		if(typeof(this.parent) != 'undefined' && typeof(this.parent.parent) != 'undefined')
		{
			this.parent.parent.showMenu();
		}
		if(this.SubMenu)
		{
			this.oMenu.style['position'] = 'absolute';
			this.oMenu.style['left'] = this.parent.Left() + this.parent.Width() + 'px';
			this.oMenu.style['top'] = this.parent.Top() + 'px';
		}
		this.oMenu.style['visibility'] = 'hidden';
		this.oMenu.style.display = 'block';
		
		var width = getDimensions(this.oMenu).width;
		/*if(this.oMenu.getWidth() < oMenuCfg.minWidth)
		{
			this.oMenu.style['width'] = oMenuCfg.minWidth + 'px';
		}
		if(oMenuCfg.maxWidth != null && this.oMenu.getWidth() > oMenuCfg.maxWidth)
		{
			this.oMenu.style['width'] = oMenuCfg.maxWidth + 'px';
		}*/
		
		
		
		this.oMenu.style['visibility'] = 'visible';
		
	},
	
	
	hideMenu : function ()
	{
		this.oMenu.style.display = 'none';
	}
}
