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); }
function $(i){ return Utils.getElement(i); }

Utils.getElementsByTagName = function(tagName,container){
	return (container&&container.getElementsByTagName)?container.getElementsByTagName(tagName):document.getElementsByTagName(tagName);
}
function $T(t,c){ return (c)?Utils.getElementsByTagName(t,c):Utils.getElementsByTagName(t); }

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);
	this.setAttributes(a,obj);
	return a;
}
function Ł(e,o,s){
	var elm=Utils.createElement(e,o);
	if(s) Utils.setStyle(elm,s);
	return elm;
}

Utils.appendChild = function()
{
	if(arguments.length > 1){
		var a = arguments[0];
		for(var i=1; i<arguments.length; i++)
			if(arguments[i]) a.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(e,opacity)
{
	var object = (typeof(e)=='string')?Utils.getElement(id).style:e.style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

Utils.setStyle = function(e,styleDef){
	if(typeof(e)=='string') e=$(e);
	if(e){
		for(var s in styleDef){
			if(s=='float'){
				if(Utils.isIE) e.style.styleFloat=styleDef[s];
				else e.style.cssFloat=styleDef[s];
			} else e.style[s]=styleDef[s];
		}
	} else return false;
}

Utils.position = function(e,width,height,left,top){
	if(typeof(e)=='string') e=$(e);
	Utils.setStyle(e,
		{
			'width'  : (typeof(width)=='string')?width:width+'px',
			'height' : (typeof(height)=='string')?height:height+'px',
			'left'   : (typeof(left)=='string')?left:left+'px',
			'top'    : (typeof(top)=='string')?top:top+'px'
		}
	);
}

Utils.getPosition = function(obj){
	var curleft = 0;
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else {
		if (obj.x) curleft += obj.x;
		if (obj.y) curtop += obj.y;
	}
	return {'left':curleft,'top':curtop};
}

Utils.setAttributes=function(e,attributeDef){
	for(var a in attributeDef) e.setAttribute(a,attributeDef[a]);
	return e;
}

Utils.getEventDetails=function(evt){
	var targ;
	var e=(evt)?evt: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;
}

Utils.addInit=function(func) {
    var oldQueue = window.onload? window.onload: function() {};
    window.onload = function() {
        oldQueue();
        eval(func+'()');
    }
}

Utils.isIE = (navigator.userAgent.toLowerCase().indexOf( 'msie', 0 )>0);

Utils.switchDisplay=function(e){
	if(typeof(e)=='string') e=$(e);
	this.setStyle(e,{'display':(e.style.display=='none')?'block':'none'});
}

Utils.showHideLayers=function(){
	var i,p,v,obj,args=Utils.showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3)
	with (document)
		if (getElementById && ((obj=getElementById(args[i]))!=null)) {
			v=args[i+2];
			if (obj.style) {
				obj=obj.style;
				v=(v=='show')?'visible':(v=='hide')?'hidden':v;
			}
		obj.visibility=v;
	}
}

Utils.getTypeOfControl=function(ctrl) {
	return (ctrl.getAttribute('type')) ? ctrl.getAttribute('type') : ctrl.tagName.toLowerCase()
},


Utils.getInputs=function() {
	var fields = new Array;
	var input = $T('input');
	var select = $T('select');
	var textarea = $T('textarea');
	var chkbox = $T('checkbox');
	var radio = $T('radio');

	for (var i = 0; i < input.length; i++) fields[fields.length] = input[i];
	for (var i = 0; i < select.length; i++) fields[fields.length] = select[i];
	for (var i = 0; i < textarea.length; i++) fields[fields.length] = textarea[i];
	for (var i = 0; i < chkbox.length; i++) fields[fields.length] = chkbox[i];
	for (var i = 0; i < radio.length; i++) fields[fields.length] = radio[i];

	return fields;
}


var Debug={
	displayJSON : function(json){
		json=json.replace(/(},)/g,'},\n');
		alert(json);
	}
}

// If Push and pop is not implemented by the browser
if (!Array.prototype.push) {
	Array.prototype.push = function array_push() {
		for(var i=0;i<arguments.length;i++)
			this[this.length]=arguments[i];
		return this.length;
	}
};
if (!Array.prototype.pop) {
	Array.prototype.pop = function array_pop() {
		lastElement = this[this.length-1];
		this.length = Math.max(this.length-1,0);
		return lastElement;
	}
};
