function dhtmlpost(url,params)
{
	// create html form
	form = document.createElement('form');
	form.action = url;
	form.method = 'post';
	
	// if parameters, create input fields for form
	if (params)
	{ 
		params = params.split('&');
		for(key in params)
		{
			param = params[key].split('=');
			input = document.createElement('input');
			input.type = 'hidden';
			input.name = param[0];
			input.value = param[1];
			form.appendChild(input);
		}
	}
	document.body.appendChild(form);
	form.submit();
}
function run(url,params)
{
	if (typeof(params)=="undefined") { params=""; }
	var responsestr = ajaxgetcontents(url,params);
	response = responsestr.replace("\r\n","\n").split('\n');

	success = response.shift();
	returnval = response.join("\n");
	
	if (success==true) { return returnval;}
	else if (success==false) 
	{ 
		if (!params) { params=''; }
		if (returnval==null || returnval=='') { returnval = 'run("'+url+"' , '"+params.split('&').join(' &')+"')\nrun failed, no explanation message provided:\n"+responsestr; }
		alert("run failed: ".returnval); return false; 
	}
	else 
	{ 
		if (!params) { params=''; }
		errordiv = document.createElement('div');
		errordiv.style.position = 'absolute';
		errordiv.style.top = '10px'; 
		errordiv.style.left = '10px'; 
		errordiv.style.width = '400px'; 
		errordiv.innerHTML = '<fieldset style="background:white">Unexpected error: run("'+url+"' , '"+params.split('&').join(' &')+"') </fieldset>";
		errordiv.innerHTML += responsestr; 
		document.body.insertBefore(errordiv,document.body.firstChild);
		return false; 
	}
}
function ajaxgetcontents(url,params)
{		
	// Make AJAX request. If params are provided we'll
	// use the POST method. If not, we'll use the GET
	// method.
	
	if (params) 
	{ 
		var request = ajaxrequest('POST', url, false, params); // must be false
	}  
	else 
	{ 
		var request = ajaxrequest('GET', url, false); // must be false
	}
		
	// Wait for request to complete.
	
	do {} while ( request.readyState!=4 ); 
	
	// Return Response text:
	
	if (request.responseText=="loggedout") { alert("You're session has timed out. Please log out and log back in again."); throw error; }
	
	return request.responseText;
}
function ajaxcallback(url,params,callback)
{		
	// Make AJAX request. If params are provided we'll
	// use the POST method. If not, we'll use the GET
	// method.
	
	if (params) 
	{ 
		var request = ajaxrequest('POST', url,true,params,callback); // must be false
	}  
	else 
	{ 
		var request = ajaxrequest('GET',url,true,null,callback); // must be false
	}
	
	// Return the request:
	return request;
}
function ajaxrequest(method,url,asynch,params,callback)
{	
	// Create HTTP Request Object :
	// IE uses a different request object from other browsers. The following
	// code detects which object is appropriate and creates it.
	
	var request; // var needed, otherwise request will be global and will be overwritten by other requests
	if (window.XMLHttpRequest)	{ request = new XMLHttpRequest(); } // Non-IE browsers (Native XMLHttpRequest object)
	else if (window.ActiveXObject)	{ request = new ActiveXObject("Microsoft.XMLHTTP"); } // IE Browsers (ActiveX HTTP Request)
	if (!request) { alert('Ajax: request object could not be created.'); }

	// OnReadyStateChange Event Handler:
	// The request object fires a onreadystatechange event whenever
	// request.readyState changes. The following event handler checks
	// whether the request was successful. If yes, and a callback function
	// was provided, that callback function is run. If no, then an error
	// message is popped up.

	if (callback) 
	{ 	
		// request.callbackfunc = callback; // this doest work in IE! grr!
		var callbackfunc = callback;
		request.onreadystatechange = function() 
		{ 
			if (request.readyState == 4) // if request has completed
			{ 
				if (request.responseText=="loggedout") { alert("You're session has timed out. Please log out and log back in again."); throw error; }

				// request.callbackfunc(request.responseText); // this doest work in IE! grr!
				callbackfunc(request.responseText);
			}
		}
	}
	
	// Open Request :
	// Open the HTTP request (nothing is sent yet). 
	// If params were passed, the POST method is used 
	// If no params were passed, the GET method is used
	
	request.open(method, url, asynch); 
	
	// Send Request:
	// Send the HTTP request (now it gets sent). If parameters have been passed 
	// then an appropriate Content-Type header is set and the parameters are sent.
	
	if (params) 
	{ 
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); 
		request.send(params); 
	}
	else
	{ 
		if (window.XMLHttpRequest)	{ request.send(null); } // Non-IE browsers
		else if (window.ActiveXObject)	{ request.send(); } // IE browsers
	}
	
	// Return the Request Object:
	
	return request;
}
