xmlhttpPost = function(target, strURL, params, callback)
{
//	var xmlHttpReq = false;
	var self = window;
	if (!params) 
		params = '';

	//if((self.responseTarget!=null&&self.responseTarget!=undefined) || (self.responseCallback!=null && self.responseCallback!=undefined))
	if(self.xmlHttpReq!=undefined && self.xmlHttpReq!=null && 
		self.xmlHttpReq.readyState!=4)
	{// we dont want to have multiple http request being made so create a que
		var newque = new Object();
		newque['target']=target;
		newque['strurl']=strURL;
		newque['params']=params;
		newque['callback']=callback;
		self.ajaxque.push(newque);
		return;
	}
	//alert('your params are ' + target + ' ' + strURL + ' ');

	delete self.xmlHttpReq;
	// Mozilla/Safari
	if (window.XMLHttpRequest) 
	{
		self.xmlHttpReq = new XMLHttpRequest();
	}
	// IE
	else if (window.ActiveXObject) 
	{
		self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	self.xmlHttpReq.open('POST', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	self.xmlHttpReq.setRequestHeader("Content-length", params.length);
	self.xmlHttpReq.setRequestHeader("Connection", "close");
	self.responseTarget = target;
	self.responseCallback = callback;
	self.xmlHttpReq.onreadystatechange = function()
	{

		var self = window;
		var xmlHttpReq = self.xmlHttpReq;		
		if (xmlHttpReq.readyState == 4) 
		{
			//updatepage(self.xmlHttpReq.responseText);
			if(self.responseTarget!=null && self.responseTarget!='#')
				updatepage(self.responseTarget, xmlHttpReq.responseText);


			if(self.responseCallback!=null &&
			self.responseCallback!=undefined)
			{
				if(typeof self.responseCallback == 'string')
					eval(self.responseCallback);
				else
					self.responseCallback(xmlHttpReq.responseText);
			}
			
			if(self.ajaxque.length)
			{
				var usedque = self.ajaxque.shift();
				xmlhttpPost(usedque['target'],usedque['strurl'],usedque['params'],usedque['callback']);
			}
			
		}
		
	}
	self.xmlHttpReq.send(params);
}
this.ajaxque = new Array(0);
this.responseTarget = null;
this.responseCallback = null;

function encode_form_recursive(obj)
{
	var getstr = "";
	if (obj) 
	{
		for (var i = 0; i < obj.childNodes.length; i++) 
		{
			if (obj.childNodes[i].tagName == "INPUT") 
			{
				if (obj.childNodes[i].type == "text" ||
				obj.childNodes[i].type == "password" ||
				obj.childNodes[i].type == 'hidden') 
				{
					getstr += obj.childNodes[i].name + "=" + encodeURIComponent(obj.childNodes[i].value) + "&";
				}
				if (obj.childNodes[i].type == "checkbox") 
				{
					if (obj.childNodes[i].checked) 
					{
						getstr += obj.childNodes[i].name + "=" + encodeURIComponent(obj.childNodes[i].value) + "&";
					}
					else 
					{
						getstr += obj.childNodes[i].name + "=&";
					}
				}
				if (obj.childNodes[i].type == "radio") 
				{
					if (obj.childNodes[i].checked) 
					{
						getstr += obj.childNodes[i].name + "=" + encodeURIComponent(obj.childNodes[i].value) + "&";
					}
				}
				
			}
			else if (obj.childNodes[i].tagName == 'TEXTAREA') 
			{
				getstr += obj.childNodes[i].name + "=" + encodeURIComponent(obj.childNodes[i].value) + "&";
			}
			else if (obj.childNodes[i].tagName == "SELECT") 
			{
				var sel = obj.childNodes[i];
				getstr += sel.name + "=" + encodeURIComponent(sel.options[sel.selectedIndex].value) + "&";
			}
			else if(obj.childNodes[i].tagName)
			{
				getstr += encode_form_recursive(obj.childNodes[i]);
			}
		}
	}
	return getstr;
}

function encode_form(obj)
{
	var getstr = "";
	getstr = encode_form_recursive(obj);
	return getstr;
}

function getElementByName(parentobj,target)
{
	var list = parentobj.getElementsByTagName('*');
	for(var i=0; i<list.length; i++)
	{
		if(list[i].getAttribute("name")==target)
			return list[i];
	}
	return null;
}

function getElementByClass(parentobj,target)
{
	var list = parentobj.getElementsByTagName('*');
	for(var i=0; i<list.length; i++)
	{
		var classlist = list[i].className.split(' ');
		for (var j = 0; j < classlist.length; j++) 
		{
			if (classlist[j] == target) 
				return list[i];
		}
	}
	return null;
}

function startUpload(targetform){
	var obj = document.getElementById(targetform+'form');
	var process=getElementByName(obj,'upload_process');
	var form=getElementByName(obj,'upload_form');

      process.style.display = 'block';
      form.style.display = 'none';
      return true;
}

function stopUpload(success,targetform)
{
	var obj = document.getElementById(targetform+'form');
	if(!obj)return;
	var process=getElementByName(obj,'upload_process');
	var form=getElementByName(obj,'upload_form');
	var result=getElementByName(obj,'upload_result');

	var resulttxt = '';
	if (success == '0')
	{
	 resulttxt = '<span class="msg">The file was uploaded successfully!<\/span><br/><br/>';
	}
	else
	{
	 resulttxt = '<span class="emsg">There was an error during file upload!'+success+'<\/span><br/><br/>';
	}
	process.style.display = 'none';
	form.style.display = 'block';
	if(result)
		result.innerHTML = resulttxt;
	else
	{
		obj.innerHTML += '<div name=\'upload_result\'>'+resulttxt+'</div>';
	}
	
	return true;   
}

updatepage = function(id, str)
{
	var obj;
	if (id) 
	{
		if (typeof id == "string" ||
		typeof id == "number") 
			obj = document.getElementById(id);
		else 
			obj = id;
		if (obj) 
			obj.innerHTML = str;
		else 
			document.innerHTML = 'javascript error';
	}
}

function submit_form_then_reload(formid, outputdiv, url)
{
	var  obj =document.getElementById(outputdiv);
	obj.innerHTML='submitting form and awaiting response...';
	var form;
	if(typeof formid == 'string')
		form = document.getElementById(formid);
	else
		form = formid;
	var params=encode_form(form);

	xmlhttpPost(outputdiv,url,params,"setTimeout('location.reload(true);',3000);");
}


function display_toggle(target)
{
	var obj=document.getElementById(target);
	if(obj)
	{
		if(obj.style.display=='none')
			obj.style.display='block';
		else
			obj.style.display='none';
	}
	return false;
}

function form_response(object)
{
	var form=document.getElementById(object);
	if (form) 
	{
	
		var progress = getElementByName(form, 'progress');
		if(this && this.xmlHttpReq && this.xmlHttpReq.responseText)
		{
			
			//progress.innerHTML = 'form returned ' + this.xmlHttpReq.responseText;
			eval(this.xmlHttpReq.responseText);
		}
		else
		{
			progress.innerHTML = 'form returned with unknown code';
		}
	}
}


function form_submit(url,object)
{
	var form=document.getElementById(object);
	if(form)
	{
		var progress = getElementByName(form,'progress');
		if(progress)
		{
			progress.innerHTML = 'submitting form...';
		}
		var params = encode_form(form);
		xmlhttpPost('#', url, params, "form_response('"+object+"');");
	}
//asdfklkjl
	return false;
}
