/**
 *	Object to handle the display of a pretty description popup on form elements.
 */
var formelement_description = function(id) {
	
	var self = this;
	this.id = id;
	this.el = false;
	this.timeout = 0;
	this.iframe = false;
	this.rollover = false;
	this.popupOffsetX = 10;
	this.popupOffsetY = 0;

	function construct() 
	{
		/** init an array on first create of a description */
		if( ! window['formelement_description_array'] ) window['formelement_description_array'] = new Array();
		
		/** get the element this description is attached to and store it in the object */
		self.el = document.getElementById(self.id);
		
		/** */
		self.rollover = document.getElementById(self.id+'_rollover') || false;
		
		self.rollover.onmouseover = self.show;
		self.el.onmouseover = self.showc;
		self.rollover.onmouseout = self.el.onmouseout = self.hide;
		
		self.iframe = document.getElementById(self.id+'_iframe') || false;
		
		if( self.iframe )
		{
			self.iframe.onmouseover = self.showc;
			self.iframe.onmouseout = self.hide;
		}
		
		window['formelement_description_array'].push( self );
	}

	this.showc = function() 
	{
		clearTimeout(self.timeout);
	}

	this.show = function(e) 
	{
		/** event obj in ie */
		if (!e) var e = window.event;
		
		/** FF positioning */
		if( e['pageX'] && e['pageY'] )
		{
			var x = e.pageX;
			var y = e.pageY;
		}
		/** IE positioning */
		else if( e['clientX'] && e['clientY'] )
		{
			var x = e.clientX + document.body.scrollLeft;
			var y = e.clientY + document.body.scrollTop;
		}
		
		for (var i in formelement_description_array) if (i > 0) formelement_description_array[i].doHide();
		clearTimeout(self.timeout);
		if (!self.el) self.el = document.getElementById(self.id);
		self.el.style.top = y+self.popupOffsetY + 'px';
		self.el.style.left = x+self.popupOffsetX + 'px';
		
		if( self.iframe )
		{
			self.iframe.style.top = y+self.popupOffsetY + 'px';
			self.iframe.style.left = x+self.popupOffsetX + 'px';
			self.iframe.style.visibility = '';
		}
		self.el.style.display = 'block';
	}

	this.hide = function() 
	{
		self.timeout = setTimeout(self.doHide,500);
	}

	this.doHide = function() 
	{
		if (!self.el) self.el = document.getElementById(self.id);
		self.el.style.display = 'none';
		
		if( self.iframe ) self.iframe.style.visibility = 'hidden';
	}

	construct();

	return this;
};
