var gxBallonList = new Array();
var timerRunning = false;

function isUnset( id)
{
  this.element = document.getElementById( id);
  if (element.innerHTML == "unset")
    return true;
  if (element.innerHTML == "")
    return true;
  return false;
}

function GXgetMessage( Code)
{
	if (Code == "inex")
		return "Inexistente";
		
	switch (Code) 
	{
   		case "inex" : message = "Codigo inexistente";
	      	break;
	   	
	   	default : message = "Error";
	}
	return message;	
}

function gxBalloon()
{
	this.init = function( id)
	{
		this.hide();
		this.id = id;	
		this.balloonid = id + "_Balloon";
		this.hasMessage = false;
		this.messageErr = '';
		this.messageWar = '';
		this.isError = false;
	}
	
	this.setMessage = function(message)
	{
		this.messageWar += message+'<BR>';
		this.hasMessage = true;
	}

	this.setError = function(message)
	{
		this.messageErr += message+'<BR>';
		this.isError = true;
		this.hasMessage = true;
	}

	this.show = function()
	{
		if (document.readyState != undefined && document.readyState != 'complete')
			return;
		try
		{
			if (this.hasMessage == false)
				return true;
			var BalloonControl = document.getElementById( this.balloonid);
			Control = GXgetControlRef_impl( this.id);
			if (BalloonControl == null)
			{
				BalloonControl = document.createElement("SPAN");
				BalloonControlShadow = document.createElement("SPAN");
				BalloonControlShadow2 = document.createElement("SPAN");
				IFrameControl = document.createElement("IFRAME");
				BalloonControl.id = this.balloonid;
				BalloonControlShadow.id = this.balloonid + "Shadow";
				BalloonControlShadow2.id = this.balloonid + "Shadow2";
				IFrameControl.id= this.balloonid + "GXiFrameIEHack";
				IFrameControl.src = "about:blank";
				IFrameControl.style.zIndex = 1;
				IFrameControl.style.visibility = "hidden";
				IFrameControl.style.position = "absolute";
				IFrameControl.frameBorder= "0";
			
				document.body.appendChild( BalloonControl);
				document.body.appendChild( BalloonControlShadow);
				document.body.appendChild( BalloonControlShadow2);
				document.body.appendChild( IFrameControl);
				
			}
			var Coord = GXgetPosition( Control);
			var CoordTop = parseInt(Coord.top);
			var CoordLeft = parseInt(Coord.left);
			
			var sHTML;
			sHTML = "<span style='white-space:nowrap;position: absolute; top:" +  CoordTop + "px; left:" + CoordLeft + "px;z-index:3' >"
			if (this.messageErr.length > 0)
			{
				sHTML += "<div class='ErrorMessages'>";
				sHTML += this.messageErr;
				sHTML +="</div><span style='height:4px;overflow:hidden'></span>";
			}
			if (this.messageWar.length > 0)
			{
				sHTML += "<div class='WarningMessages'>";
				sHTML += this.messageWar;
				sHTML +="</div>";
			}
			sHTML +="</span>";

			BalloonControl.innerHTML = sHTML;
			
			var shadowWidth = 2;
			
			CoordTop -= BalloonControl.lastChild.offsetHeight - shadowWidth;
			
			sHTML = "<span style='white-space:nowrap;position: absolute; top:" +  CoordTop + "px; left:" + CoordLeft + "px;z-index:3' >"
			if (this.messageErr.length > 0)
			{
				sHTML += "<div class='ErrorMessages'>";
				sHTML += this.messageErr;
				sHTML +="</div><span style='height:4px;overflow:hidden'></span>";
			}
			if (this.messageWar.length > 0)
			{
				sHTML += "<div class='WarningMessages'>";
				sHTML += this.messageWar;
				sHTML +="</div>";
			}
			sHTML +="</span>";

			BalloonControl.innerHTML = sHTML;
			
			IFrameControl.style.visibility = "visible";		
			IFrameControl.style.height = BalloonControl.firstChild.firstChild.offsetHeight;
			IFrameControl.style.width = BalloonControl.lastChild.offsetWidth;
			IFrameControl.style.top	= CoordTop;
			IFrameControl.style.left = CoordLeft;
			
			CoordTop += shadowWidth;
			CoordLeft += shadowWidth;
			
			if (this.messageErr.length > 0)
			{
				sHTML ="<span style='position: absolute;border-style:none;";
				sHTML += "top:" +  CoordTop + "px; left:" + CoordLeft + "px;";
				sHTML += "width:" + BalloonControl.lastChild.offsetWidth + "px;" + " height:" + BalloonControl.firstChild.firstChild.offsetHeight + "px;";  
				sHTML += "z-index:2;background-color:ThreeDDarkShadow;' class='ErrorMessages'></span>";
				BalloonControlShadow.innerHTML = sHTML;
				CoordTop += BalloonControl.firstChild.firstChild.offsetHeight + 4;
			}

			if (this.messageWar.length > 0)
			{
				sHTML ="<span style='position: absolute;border-style:none;";
				sHTML += "top:" +  CoordTop + "px; left:" + CoordLeft + "px;";
				sHTML += "width:" + BalloonControl.lastChild.offsetWidth + "px;" + " height:" + BalloonControl.firstChild.lastChild.offsetHeight + "px;";  
				sHTML += "z-index:2;background-color:ThreeDDarkShadow;' class='ErrorMessages'></span>";
				BalloonControlShadow2.innerHTML = sHTML;
			}
			
			if (timerRunning == false)
			{
				timerRunning = true;
				this.timerId = setTimeout( "GXTimeoutTip()", 4000);
			}
		}
		catch (E){}
		return !this.isError;
	}

	this.hide = function()
	{
		try
		{
			ctrl = document.getElementById( this.balloonid+"Shadow");
			if (ctrl != null)
				GXRemoveElement( ctrl);
			ctrl = document.getElementById( this.balloonid+"Shadow2");
			if (ctrl != null)
				GXRemoveElement( ctrl);
			ctrl = document.getElementById( this.balloonid);
			if (ctrl != null)
				GXRemoveElement( ctrl);
			ctrl = document.getElementById( this.balloonid + "GXiFrameIEHack");
			if (ctrl != null)
				GXRemoveElement( ctrl);
		}
		catch (e){
			}
	}
}

function GXRemoveElement( ctrl)
{
	if (document.createRange == null)
		ctrl.removeNode( true);
	else
	{
		range = document.createRange();
		if (ctrl)
		{
			range.selectNode( ctrl);
			range.deleteContents();
		}	
	}
}

function GXTimeoutTip()
{
	timerRunning = false;
	while (DelBalloon = gxBallonList.pop())
		DelBalloon.hide();
}

function getGXGridBallon(id, RowId)
{
	return getGXBallon(id + "_" + RowId)
}

function getGXBallon(Id)
{
	Id = GXCmpControlId( Id);
	singlegxBallon = new gxBalloon();
	gxBallonList.push(singlegxBallon);
	singlegxBallon.init(Id);
	return singlegxBallon;
}

function GXgetPosition( Ctrl)
{
	var XCtrl = Ctrl;
	var LeftCoord = 0;
	var TopCoord = 0;
	while( XCtrl)
	{
		LeftCoord += XCtrl.offsetLeft;
		TopCoord += XCtrl.offsetTop;
		XCtrl = XCtrl.offsetParent;	
	}
	return {left:LeftCoord, top:TopCoord};
}