// NAME: WorkerMessage
// DESC: Contains routing and event data for cross-thread operations.

function CoreObject()
{
	var sequence = new Array();
	
	var mouseUpNotifications = new Array();
	var mouseMoveNotifications = new Array();
	
	this.boot =
	{
		"start" : function () {
				for (i=0; i<sequence.length; i++)
				{
					sequence[i]();
				}
			},
		"add" : function (delegate) { sequence.push(delegate); }
	}
	
	this.mouseUp = 
	{
		"notify" : function (event) {
				for (i=0; i<mouseUpNotifications.length; i++)
				{
					mouseUpNotifications[i](event);
				}
			},
		"add" : function (delegate) { mouseUpNotifications.push(delegate); }
	}
	
	this.mouseMove = 
	{
		"notify" : function (event) {
				for (i=0; i<mouseMoveNotifications.length; i++)
				{
					mouseMoveNotifications[i](event);
				}
			},
		"add" : function (delegate) { mouseMoveNotifications.push(delegate); }
	}
	
	
	this.Cursor =
	{
		"X": function (event) {
			if (Core.Browser.isIE) {
		    		return window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		  	}
		  	if (Core.Browser.isNS) {
		    		return event.clientX + window.scrollX;
		    	}
		    	return 0;
		},
		"Y": function (event) {
			if (Core.Browser.isIE) {
		    		return window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
		  	}
		  	if (Core.Browser.isNS) {
		    		return event.clientY + window.scrollY;
		    	}
		    	return 0;
		}
	}
	
	this.ElementHelper = 
	{
		"GetPosX": function (obj) {
			var curleft = 0;
	    		if(obj.offsetParent)
	    		{
				while(1) 
				{
					curleft += obj.offsetLeft;
					if(!obj.offsetParent) { break; }
					obj = obj.offsetParent;
				}
			}
			else if(obj.x)
			{
				curleft += obj.x;
			}
			return curleft;
	  	},
	
	  	"GetPosY": function (obj) {
			var curtop = 0;
			if(obj.offsetParent)
			{
				while(1)
				{
					curtop += obj.offsetTop;
					if(!obj.offsetParent) { break; }
	          			obj = obj.offsetParent;
	          		}
		        }
			else if(obj.y)
			{
				curtop += obj.y;
			}
			return curtop;
		},
		
		"GetEventSource": function (e) {
			var sender = null;
			
			if (!e)
			{
				sender = window.event;
			}
			if (e.target)
			{
				sender = e.target;
			}
			else if (e.srcElement)
			{
				sender = e.srcElement;
			}
			if (sender && sender.nodeType==3) // defeat Safari bug
			{
				sender = targ.parentNode;
	  		}
	  		
	  		return sender;
		}
	}
}

var Core = new CoreObject();

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
