var Utils = new Object();

Utils.includeJS = function(filepaths)
{
	for(var i=0; i<filepaths.length; i++)
	{
		document.write('<script type="text/javascript" src="'+filepaths[i]+'"></script>');
	}
}

Utils.includeCSS = function(filepaths)
{
	for(var i=0; i<filepaths.length; i++)
	{
		document.write('<link href="'+filepaths[i]+'" rel="stylesheet" type="text/css" />');
	}
}

Utils.getElement = function(i) { return document.getElementById(i); }

Utils.debug = function(val)
{
	this.getElement('debug').innerHTML += val +"<br/>";
}

Utils.toggle = function(id)
{
	this.getElement(id).style.display = (this.getElement(id).style.display == '') ? 'none' : '';
}

Utils.createElement = function(e, obj)
{
	var a = document.createElement(e);
	for(prop in obj)
	{
		a[prop] = obj[prop];
	}
	return a;
}

Utils.appendChild = function()
{
	if(this.appendChild.arguments.length > 1)
	{
		var a = this.appendChild.arguments[0];
		for(i=1; i<this.appendChild.arguments.length; i++)
		{
			if(arguments[i])
			{
				a.appendChild(this.appendChild.arguments[i]);
			}
		}
		return a;
	}
	else
	{
		return null;
	}
}

Utils.removeChildren = function(node)
{
	if(node == null)
	{
		return;
	}

	while(node.hasChildNodes())
	{
		node.removeChild(node.firstChild);
	}
}

Utils.addListener = function(obj, eventName, listener)
{
	if (obj.attachEvent)
	{
		obj.attachEvent("on"+eventName, listener);
	}
	else if(obj.addEventListener)
	{
		obj.addEventListener(eventName, listener, false);
	}
	else
	{
		return false;
	}
	return true;
}

Utils.removeListener = function(obj, eventName, listener)
{
	if(obj.detachEvent)
	{
		obj.detachEvent("on"+eventName, listener);
	}
	else if(obj.removeEventListener)
	{
		obj.removeEventListener(eventName, listener, false);
	}
	else
	{
		return false;
	}

	return true;
}

Utils.changeOpac = function(opacity, id)
{
	var object = Utils.getElement(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

Utils.setStyle = function(e,styleDef){
	for(var s in styleDef) e.style[s]=styleDef[s];
}

Utils.position = function(e,width,height,left,top){
	Utils.setStyle(e,
		{
			'width'  : width,
			'height' : height,
			'left'   : left,
			'top'    : top
		}
	);
}

Utils.setAttributes=function(e,attributeDef){
	for(var a in attributeDef) e.setAttribute(a,attributeDef[a]);
}

Utils.getEventDetails=function(e){
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) targ = targ.parentNode;

	var code;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	var character = String.fromCharCode(code);

	var button,rightclick;
	if (e.which) rightclick = (e.which == 3);
	else if (e.button) rightclick = (e.button == 2);
	button=(rightclick)?'right':'left';

	var posx = 0;
	var posy = 0;
	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft	+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	return {
		'target'  : targ,
		'keyCode' : code,
		'button'  : button,
		'mouseX'  : posx,
		'mouseY'  : posy
	}
}

Utils.strpos=function( haystack, needle, offset){
    var i = haystack.indexOf( needle, offset ); // returns -1
    return i >= 0 ? i : false;
}
