var MENU = {};
MENU.$ = function()
{
	var elements = new Array();
	
	for (var i = 0; i < arguments.length; i++) 
	{
		var element = arguments[i];
		
		if (typeof element == 'string')
			element = document.getElementById(element);
			
		if (arguments.length == 1)
			return element;
			
		elements.push(element);
	}
	
	return elements;
}

var $A = function(iterable) 
{
	if (!iterable) return [];
	
	if (iterable.toArray) 
	{
		return iterable.toArray();
	} 
	else 
	{
		var results = [];
		
		for (var i = 0; i < iterable.length; i++)
			results.push(iterable[i]);
			
		return results;
	}
}

Function.prototype.bind = function() 
{
	var __method = this, args = $A(arguments), object = args.shift();
	
	return function() 
	{
		return __method.apply(object, args.concat($A(arguments)));
	}
}

var Utils = {
	AttachEvent: function(element, ev, func)	
	{
		if (element.addEventListener) element.addEventListener(ev, func, false);
		else
		if (element.attachEvent) element.attachEvent('on' + ev, func);
		else
		element['on' + ev] = func;
	}
};


function Menu(fieldName)
{
	this.objField = MENU.$(fieldName);
	this.timer = false;
	this.hideTimeOut = 200;
	this.timeoutID = -1;
	this.containerName = 'menu_' + fieldName;
	
	this.requests = new Array();
}

Menu.prototype = 
{
	init: function(obj)
	{
		this.items = obj.items;
		Utils.AttachEvent(this.objField, 'mouseover', this.ShowMenu.bind(this));
		Utils.AttachEvent(this.objField, 'mouseout', this.hideTimerSet.bind(this));
	},
	
	onMouseOverDiv: function (evt)
	{
		var evt = (evt) ? evt : ((window.event) ? event : null);
		var target = (evt.target) ? evt.target : evt.srcElement;
	},
	
	onMouseOutDiv: function (evt)
	{
		var evt = (evt) ? evt : ((window.event) ? event : null);
		var target = (evt.target) ? evt.target : evt.srcElement;
	},

	hideMenu: function(text)
	{
		var elem = MENU.$(this.containerName);
		if (elem)
		{
			elem.style.display = 'none';
		}
	},
	
	ShowMenu: function()
	{
		var cont = this.createContainer();
		
		cont.style.display = 'block';
		this.hideTimerReset.bind(this);
	},

	hideTimerSet: function()
	{
		this.timer = setTimeout(this.hideMenu.bind(this), this.hideTimeOut);
	},

	hideTimerReset: function()
	{
		if (this.timer) clearTimeout(this.timer);
	},
	
	createContainer: function ()
	{
		if (MENU.$(this.containerName)) return MENU.$(this.containerName);
		
		var body = document.getElementsByTagName('body');
		
		if (body && body[0])
		{
			var container 				= document.createElement('DIV');
			container.id				= this.containerName;
			container.style.display 	= 'none';
			container.style.position 	= 'absolute';
			container.className = 'menu-container';
			container.onmouseover 		= this.hideTimerReset.bind(this);
			container.onmouseout		= this.hideTimerSet.bind(this);
			body[0].appendChild(container);
			this.containerPosition(container);
			
			for (var i = 0; i < this.items.length; i++)
			{
				var it = this.items[i];
				var el = document.createElement('A');
				el.id = 'menu_link_' + i;
				el.href = it.link;
				el.innerHTML = it.content;
				el.cookie = it.cookie;
				el.onclick = function() { 	var dt = new Date();
											dt.setTime(dt.getTime() + (120*60*1000));
											SetCookie('iw_tips_from_page', this.cookie, dt); 
											return true; 
										};
				
				container.appendChild(el);
			}
		}
		
		return container;
	},

	containerPosition: function(container)
	{
		var left = this.getLeftPos(this.objField);
		var top = this.getTopPos(this.objField) + this.objField.offsetHeight + 2;
		
		container.style.left = left + 'px';
		container.style.top	= top + 'px';
	},

	getLeftPos: function(obj)
	{
		var res = 0;
		
		while (obj)
		{
			res += obj.offsetLeft;
			obj = obj.offsetParent;
		}
		
		return res;
	},

	getTopPos: function(obj)
	{
		var res = 0;
		
		while (obj)
		{
			res += obj.offsetTop;
			obj = obj.offsetParent;
		}
		
		return res;
	}
}