var fixlist = ['header_left', 'header_logo', 'header_right']; // add images here

function did(string) {
	return document.getElementById(string);
}

function find_by_id(element, id) {
	if ( typeof(element.hasChildNodes) == 'undefined' ) {
		return false;
	}
	if ( !element.hasChildNodes() ) {
		return false;
	}
	
	for ( var x=0; x<element.childNodes.length; ++x ) {
		if ( element.childNodes[x].id == id ) {
			return element.childNodes[x];
		} else {
			var res = find_by_id(element.childNodes[x], id);
			if ( res ) {
				return res;
			}
		}
	}
	return false;
}

function rpc(path, input) {
	var requestType = "POST";
	
	if ( !input ) {
		requestType = "GET";
		input = null;
	}
	
	if ( window.XMLHttpRequest ) {
			request = new XMLHttpRequest();
	} else if ( window.ActiveXObject ) {
		try {
			request = new ActiveXObject( "Msxml2.XMLHTTP" );
		} catch ( error ) {
			try {
				request = new ActiveXObject( "Microsoft.XMLHTTP" );
			} catch ( error2 ) {
				return alert("Fatal Error: No XMLHttp Interface Available");
			}
		}
	} else {
		return alert("Fatal Error: No XMLHttp Interface Available");
	}
	
	request.open(requestType, 'rpc/'+path, false);
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");		
	request.send(input);
	eval("var res="+request.responseText);
	return res;
}

function async_rpc(path, callback, input) {
	this.requestType = "POST";
	this.myCallback = callback;
	
	this.callback = function () {
		if (4 == this.request.readyState && 200 == this.request.status) {
			eval("var res="+this.request.responseText);
			//res.callback(res.retval);
			this.myCallback(res);
		}
	}
	
	this.abort = function (){
		this.request.abort();
	}

	
	if ( !input ) {
		this.requestType = "GET";
		this.input = null;
	}
	
	if ( window.XMLHttpRequest ) {
			this.request = new XMLHttpRequest();
	} else if ( window.ActiveXObject ) {
		try {
			this.request = new ActiveXObject( "Msxml2.XMLHTTP" );
		} catch ( error ) {
			try {
				this.request = new ActiveXObject( "Microsoft.XMLHTTP" );
			} catch ( error2 ) {
				return alert("Fatal Error: No XMLHttp Interface Available");
			}
		}
	} else {
		return alert("Fatal Error: No XMLHttp Interface Available");
	}

	this.request.onreadystatechange = createDelegate(this, 'callback');

	this.request.open(this.requestType, 'rpc/'+path, true);
	this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this.request.send(input);
	
}



function createDelegate(oObject, sMethodName) {
	return function () {
		return oObject[sMethodName].apply(oObject, arguments);
	};
}

function domcheck(elem) {
	if ( typeof(elem) == 'object' ) {
		return elem;
	}
	
	return did(elem);
}

function registerEvent(elem, event, callback, capture) {
	if ( typeof(capture) != 'undefined' ) {
		capture = true;
	}
	if ( event == 'allchange' ) {
		registerEvent(elem, 'change', callback, capture);
		registerEvent(elem, 'click', callback, capture);
		registerEvent(elem, 'keyup', callback, capture);
		return;
	}
	elem = domcheck(elem);
	
	if ( elem.addEventListener ) {
		elem.addEventListener(event, callback, capture);
	} else {
		elem.attachEvent('on'+event, callback, capture); 
	}
}

function unregisterEvent(elem, event, callback, capture) {
	if ( typeof(capture) != 'undefined' ) {
		capture = true;
	}
	if ( event == 'allchange' ) {
		unregisterEvent(elem, 'change', callback, capture);
		unregisterEvent(elem, 'click', callback, capture);
		unregisterEvent(elem, 'keyup', callback, capture);
		return;
	}
	elem = domcheck(elem);
	
	if ( elem.removeEventListener ) {
		elem.removeEventListener(event, callback, capture);
	} else {
		elem.detachEvent('on'+event, callback, capture); 
	}
}



function NewWindow(mypage, myname, w, h, scroll) {
var winl = (screen.width - w) / 2;
var wint = (screen.height - h) / 2;
winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable=yes'
win = window.open(mypage, myname, winprops)
if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
return win;
}
//Quick fix
function NewWindow2(mypage, myname, w, h, scroll) { 
	return NewWindow(mypage, myname, w, h, scroll); 
};

String.prototype.ltrim = function()
{
	return this.replace(/^\s*/, '');
}

String.prototype.rtrim = function()
{
	return this.replace(/\s*$/, '');
}

String.prototype.trim = function()
{
	return this.rtrim().ltrim();
}

Array.prototype.find = function(targ)
{
	for(x in this) {
		if ( this[x] == targ ) {
			return x;
		}
	}
	return false;
}

Array.prototype.inArray = function(targ)
{
	if( this.find(targ) ) {
		return true;
	} else {
		return false;
	}
}

Array.prototype.remove = function(pos)
{
	if ( pos ) {
		this.splice(pos, 1);
	}
	
}

function getNextSibling(elem) {
	elem = domcheck(elem);
	if ( !elem.nextSibling ) {
		return false;
	}
	if ( elem.nextSibling.nodeName == '#text' ) {
		return getNextSibling(elem.nextSibling);
	}
	return elem.nextSibling;
}

function getPreviousSibling(elem) {
	elem = domcheck(elem);
	if ( !elem.previousSibling ) {
		return false;
	}
	if ( elem.previousSibling.nodeName == '#text' ) {
		return getPreviousSibling(elem.previousSibling);
	}
	return elem.previousSibling;
}

function ltrim(string)
{
	return string.replace(/^\s*/, '');
}

function rtrim(string)
{
	return string.replace(/\s*$/, '');
}

function trim(string)
{
	if ( typeof(string) == 'undefined' ) {
		return false;
	}
	return rtrim(ltrim(string));
}