// @(#) $Id: lang.js,v 1.10 2005/12/20 19:12:42 tom Exp $

/**
* @package lib5
* @subpackage util
* @version @(#) $Id: lang.js,v 1.10 2005/12/20 19:12:42 tom Exp $
*/




function Point()
{
	var self=new Object();
	self.x;
	self.y;

	if(Point.arguments.length==2)
	{
		self.x=Point.arguments[0];
		self.y=Point.arguments[1];
	}
	else if(Point.arguments.length==1)
	{
		self.x=Point.arguments[0].x;
		self.y=Point.arguments[0].y;
	}


	self.getX=function getX()
	{
		return(self.x);
	}

	self.getY=function getY()
	{
		return(self.y);
	}

	self.setX=function setX(x)
	{
		self.x=x;
	}

	self.setY=function setY(y)
	{
		self.y=y;
	}

	self.toString=function toString(y)
	{
		return("("+self.x+","+self.y+")");
	}

	return(self);
}
Point.unserialize=function unserialize(s)
{
	if(s=="null" || s.length==0)
		return(null);
	var t=s.split(",");
	var p=new Point();
	p.x=parseInt(t[0].substring(1,t[0].length));
	p.y=parseInt(t[1].substring(0,t[1].length-1));
	return(p);
}




function Conv()
{
}
	Conv.relative2Page=function relative2Page(src)
	{
		var x,y,dx,dy;
		dx=dy=0;

		while(src!=null)
		{
			dx+=src.offsetLeft;
			dy+=src.offsetTop;
			src=src.offsetParent;
		}
		return(new Point(dx,dy));
	}


	Conv.page2Relative=function page2Relative(src,p)
	{
		var pSrc=Conv.relative2Page(src);
		var res=new Point(p.x-pSrc.x,p.y-pSrc.y);
		return(res);
	}


	Conv.page2Absolute=function page2Absolute(src,p) // deprecated
	{
		if(src.offsetParent!=null)
			return(Conv.page2Relative(src.offsetParent,p));
		return(p);
	}


	Conv.getOffsetPosition=function getOffsetPosition(src)
	{
		if(typeof(src.offsetLeft)!="undefined" && typeof(src.offsetTop)!="undefined")
			return(new Point(src.offsetLeft,src.offsetTop));
		return(null);
	}
// End of Conv


//-----------------------------------------------------------------------


function EventUtil()
{
}
	EventUtil.addEventListener=function addEventListener(src,name,booble)
	{
		if(typeof(src.addEventListener)=="function")
			src.addEventListener(name,eventRedir,booble);
		else
			src.attachEvent("on"+name,eventRedir);
	}


	EventUtil.registerDocumentEvent=function registerDocumentEvent(src,name)
	{
		if(typeof(document.registeredEvents)!="object")
			document.registeredEvents=new Array();
		if(typeof(document.registeredEvents[name])!="object")
			document.registeredEvents[name]=new Array();
		document.registeredEvents[name][document.registeredEvents[name].length]=src;

		if(typeof(document.addEventListener)=="function")
			document.addEventListener(name,documentEventListener,false);
		else
			document.attachEvent("on"+name,documentEventListener);
	}
// End of EventUtil


function documentEventListener(e)
{
	if(typeof(document.registeredEvents)=="undefined")
		return;
	if(typeof(document.registeredEvents[e.type])=="undefined")
		return;
	for(var i=0;i<document.registeredEvents[e.type].length;i++)
	{
		var o=document.registeredEvents[e.type][i];
		if(typeof(o.eventListener)=="function")
			o.eventListener(e);
		else if(typeof(o)=="function")
			o(e);
	}
}



function eventRedir(e)
{
	if(e.target)
		e.target.eventListener(e);
	else if(e.srcElement)
		e.srcElement.eventListener(e);
}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------


function EventUtils()
{

	EventUtils.DocumentEventHandlerContainer=function DocumentEventHandlerContainer()
	{
		var self=new Object();
		self.handler=null;
		self.id=null;
		if(arguments.length==2)
		{
			self.handler=arguments[0];
			self.id=arguments[1];
		}
		return(self);
	}


	EventUtils.registerDocumentEvent=function registerDocumentEvent(handler,type)
	{
		if(typeof(EventUtils.documentRegisteredEvents[type])!="object")
		{
			EventUtils.documentRegisteredEvents[type]=new List();
			EventUtils.addEventListener(document,type,EventUtils.documentEventListener,false);
		}
		var id=EventUtils.documentRegisteredEventsCounter++;
		EventUtils.documentRegisteredEvents[type].add(o=new EventUtils.DocumentEventHandlerContainer(handler,id));
		return(id);
	}


	// args (handler,type) or (id)
	EventUtils.unRegisterDocumentEvent=function unRegisterDocumentEvent()
	{
		var id,handler,type;
		if(arguments.length==2)
		{
			handler=arguments[0];
			type=arguments[1];
		}
		else if(arguments.length==1)
			id=arguments[0];
		else
			return;
		if(type!=null && typeof(EventUtils.documentRegisteredEvents[type])=="object")
		{
			var li=new ListIterator(EventUtils.documentRegisteredEvents[type]);
			while((o=li.next())!=null)
				if(o.handler==handler)
					li.remove();
		}
		else if(id!=null && typeof(EventUtils.documentRegisteredEvents)=="object")
		{
			var t;
			var flag=false;
			for(t in EventUtils.documentRegisteredEvents)
			{
				var li=new ListIterator(EventUtils.documentRegisteredEvents[t]);
				while((o=li.next())!=null)
					if(o.id==id)
					{
						li.remove();
						flag=true;
						break;
					}
				if(flag)
					break;
			}
		}
	}


	EventUtils.documentEventListener=function documentEventListener(e)
	{
		if(typeof(EventUtils.documentRegisteredEvents)=="undefined")
			return;
		if(typeof(EventUtils.documentRegisteredEvents[e.type])=="undefined")
			return;
		var li=new ListIterator(EventUtils.documentRegisteredEvents[e.type]);
		var o;
		while((o=li.next())!=null)
		{
			if(typeof(o.handler)=="function")
				o.handler(e);
		}
	}

	//-----------------------------------

	EventUtils.addEventListener=function addEventListener(element,type,handler)
	{
		var flag=false;
		if(arguments.length>3)
			flag=arguments[3];
		if(typeof(element.addEventListener)=="function")
			element.addEventListener(type,handler,flag);
		else
			element.attachEvent("on"+type,handler);
	}


	EventUtils.voidEventHandler=function voidEventHandler(e)
	{
		e.cancelBubble=true;
		e.returnValue=false;
		return(false);
	}

}
EventUtils();
EventUtils.documentRegisteredEvents=new Array();
EventUtils.documentRegisteredEventsCounter=0;



//-----------------------------------------------------------------------
//-----------------------------------------------------------------------



function CssMerger(cssText)
{
	var self=new Object();
	self.cssText=cssText;
	self.cssT=CssMerger.splitCss(cssText);

	self.addCssText=function addCssText(cssText)
	{
		var t=CssMerger.splitCss(cssText);
		for(var o in t)
			self.cssT[o]=t[o];
		self.cssText="";
		for(o in self.cssT)
			self.cssText+=o+": "+self.cssT[o]+"; ";
	}

	return(self);
}

CssMerger.splitCss=function splitCss(cssText)
{
	var i,res,p;
	res=new Array();
	if(cssText==null || cssText.length==0)
		return(res);
	var t=cssText.split(";");
	for(i=0;i<t.length;i++)
		if(t[i].length>2)
		{
			p=t[i].split(":");
			res[p[0].toLowerCase()]=p[1];
		}
	return(res);
}

CssMerger.overwriteElementCss=function overwriteElementCss(o,cssText)
{
	try {
		var cm=new CssMerger(o.style.cssText);
		cm.addCssText(cssText);
		o.style.cssText=cm.cssText;
	} catch(e) {}
}

CssMerger.underwriteElementCss=function underwriteElementCss(o,cssText)
{
	try {
		var cm=new CssMerger(cssText);
		cm.addCssText(o.style.cssText);
		o.style.cssText=cm.cssText;
	} catch(e) {}
}


//-----------------------------------------------------------------------
//-----------------------------------------------------------------------


function ActionContainer()
{
	var self=new Object();
	self.url=null;
	self.target=null;
	self.js=null;


	self.clicked=function clicked(e)
	{
		if(self.js!=null)
		{
			try {
				eval(self.js);
			} catch(ex) {alert("Error in menu entry action.");}
		}
		if(self.url!=null)
		{
			if(self.target!=null)
				window.open(self.url,self.target);
			else
				document.location=self.url;
		}
	}

	return(self);
}
