function LTrim( value ) {
	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
	
}

// Removes ending whitespaces
function RTrim( value ) {
	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
	
}

// Removes leading and ending whitespaces
function trim( value ) 
{
	
	return LTrim(RTrim(value));
	
}

function getElement(aID)
{ 
    if (aID != null)
		 return (document.getElementById) ? document.getElementById(aID)
                                      : document.all[aID];
} 

function debug(area, text)
{
	getElement(area).innerHTML += text+"<br/>";
}

function isdefined( variable)
{
    return (typeof(variable) == "undefined")?  false: true;
}

function loadFormContent(formname)
	{
		var form = document.forms[formname];
		var el = form.elements.length;
		for (var i = 0; i < el; i++)
		{		
			if (!isdefined(postfields[form.elements[i].name]))
				continue;
		
			if (form.elements[i].type == "text" || form.elements[i].type == "hidden")
			{
				form.elements[i].value = postfields[form.elements[i].name];
			}
			else if (form.elements[i].type == "checkbox")
			{
				form.elements[i].checked = (postfields[form.elements[i].name] == 1);
			}
			else if (form.elements[i].type == "textarea")
			{
				form.elements[i].value = postfields[form.elements[i].name];
			}
			else if (form.elements[i].type == "select-one")
			{				
				var value = postfields[form.elements[i].name];//selected value
				if (value == "")
					continue;
				var index = 0;
				var opts = form.elements[i].options;
				var count = opts.length;
				
				for (var o = 0; o < count; o++)
				{
					if (opts[o].value == value)
					{
						index = o;
						break;
					}
				}
				form.elements[i].selectedIndex = index;
			}		
			else if (form.elements[i].type == "submit" || form.elements[i].type == "button")
				continue;
			else
				alert("Unknown Type: "+ form.elements[i].type);
		}
	}


function proxyCall(url,callback,ext_url,funct)
{	
	var xmlHttp = getAjaxObject();
	
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4)
		{
			if (callback != null)
				eval(callback+"('"+trim(xmlHttp.responseText)+"')");
		}
	}
	
	var url = "agent.php?function=proxy&arg[]="+ext_url+"&arg[]="+funct;
	if (arguments.length > 4)		
	for (var i = 4; i< arguments.length; i++)
		url += "&arg[]="+escape(arguments[i]);
	//alert("URL: "+url)
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

var AJAX_BUFFER = "";


function rawCall(url,callback)
{
	var xmlHttp = getAjaxObject();
	
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4)
		{
			if (callback != null)
			{
				//store the response in a global variable
				AJAX_BUFFER = trim(xmlHttp.responseText);	
				AJAX_XML = xmlHttp.responseXML;//now into result tag.
				//AJAX_ARRAY = xmlToArray(AJAX_XML.firstChild);
				
				//call the users function.
				eval(callback+"()");
			}
		}
	}
	
	//alert("URL: "+url)
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
}

function call(page,func,callback)
{
	
	var xmlHttp = getAjaxObject();
	
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4)
		{
			if (callback != null)
			{
				//store the response in a global variable
				AJAX_BUFFER = RTrim(LTrim(xmlHttp.responseText));					
				AJAX_XML = xmlHttp.responseXML;//now into result tag.				
				AJAX_ARRAY = xmlToArray(AJAX_XML.firstChild);
								
				eval(callback+"()");
			}
		}
	}
	
	var url = page+"?function="+func;
	if (arguments.length > 3)
	for (var i = 3; i< arguments.length; i++)
		url += "&arg[]="+escape(arguments[i]);
	//alert("URL: "+url)
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function isArray(obj)
{
	return(typeof(obj.length)=="undefined")?false:true;
}

function dumpArray(array)
{
	var dump = "";
		
	for(var x in array) 
	{ 
		dump += x + " => ";
		dump += array[x];
		dump += "\n"; 
	}	
	return dump;
}

function xmlToArray(xml)
{
	var result = new Array(xml.childNodes.length);
	var count = xml.childNodes.length;
	if (count > 0)
	{
	//	alert(xml.nodeName + " " + count);
		for (var i=0; i < count; i++)
		{	
			var kid = xml.childNodes[i];
			if (kid.childNodes.length == 1)//only text node
			{
				result[i] = kid.childNodes[0].nodeValue;
			}
			else
			{
				result[i] = xmlToArray(kid);
			}		
		}
		
		return result;
	}
	else
	{
		result = new Array(1);
		result[0] = xml.nodeValue;
		return result;
	}

}

function getAjaxObject()
{
	var xmlHttp;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	return xmlHttp;
}