xhr = function(url, callback){ // optional: progressbarid, parameters
	var xhro = new ajax(url, callback, arguments[2], arguments[3]);
	xhro.get();
	xhrActiv = xhro;
	return xhrActiv;
}

xhrpost = function(url, body, callback){ // optional: progressbarid, parameters
	var xhro = new ajax(url, callback, arguments[2], arguments[3]);
	xhro.post(body);
	xhro = null;
}

var xhrError = { error: false, code: 0 };

ajax=function(url,callback){//optional: progressbarid,parameter1,parameter2, ... ,parametern (paramaters needed by the callback function)
	//the parameters are passed on to the callback function as a single comma-delimited parameter (you cannot pass objects)
	var me = this;
	me.url = url;
	me.callback = callback;
	me.progressbar = null;
	me.parameters=new Array();
	me.method = null;	// 0 = GET, 1 = POST
	me.body = null;
	
	this.init=function(){
		if(window.XMLHttpRequest){
			return new XMLHttpRequest();
		}else if(window.ActiveXObject){
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	if ( typeof(ajax.arguments[2]) == 'string') me.progressbar = document.getElementById(ajax.arguments[2]);
	
	if (me.url.toLowerCase().indexOf('http://') == -1) {
		if ( me.url.substr(0,1) != '/' ) me.url = '/' + me.url;
		if (typeof(urlpfx) != 'undefined')me.url = urlpfx + me.url;
	}
	//alert(me.url);
	
	if (String(ajax.arguments[3])!='undefined') {
		me.parameters[0] = "'"+ajax.arguments[3] + "'";
		for (var i = 4;i < ajax.arguments.length; i++) {
			me.parameters[i-2] = "'" + ajax.arguments[i] + "'";
		}
	} else {
		me.parameters[0] = "''";
	}
	
	this.forumulateresponse=function(){
		var emsg='An error occurred while trying to load your data.\n';
		try{
			if(me.response.readyState==4){
				if(me.response.status==200||String(me.response.status)=='undefined'){
					if ( me.progressbar ) me.progressbar.style.display = 'none';
					var cookies=me.response.getResponseHeader('Set-Cookie');
					if(cookies!='')document.cookie=cookies;
					
					if(me.callback){
						if(!me.response.responseXML||me.response.responseXML.childNodes.length==0){//if no XML was returned
							if(me.response.responseText.indexOf('Parse error')>-1){//show the error message
								alert(me.response.responseText);
							}else{
								eval('me.callback(me.response.responseText,'+me.parameters+')');//then return the text plus any parameters
							}
						}else{
							eval('me.callback(me.response.responseXML,'+me.parameters+')');//else return the XML plus any parameters
						}
					}
				} else if(me.response.status == 408 || me.response.status == 504){
					if ( me.method == 0 ) {
						me.get();
					} else {
						me.post(me.body);
					}
				}else{
					if ( me.progressbar ) me.progressbar.style.display = 'none';
					xhrError.error = true;
					xhrError.code = me.response.status;
					eval("callback('',"+me.parameters+")");
				}
			}
		}catch(e){
			if ( me.progressbar ) me.progressbar.style.display = 'none';
			throw(e);
		}
	}
	
	me.response = me.init();
	me.response.onreadystatechange = me.forumulateresponse;
	
	this.abort=function(){
		me.response.abort();
	}
	
	this.get=function(){
		me.method = 0;
		xhrError.error = false;
		if ( me.progressbar ) me.progressbar.style.display = 'block';
		//add unique identifier to force IE to re-request the data and not cache
		//even though this seems not to work, i'm leaving it in here for now
		//also: i'm using 'random_num=IEBuffer' as well as 'IEBuffer=random_num
		var dd=new Date();
		var tstamp=dd.getTime();//our unique identifier
		
		if(me.url.indexOf('?')==-1)me.url+='?';else me.url+='&';
		me.response.open("GET",me.url+'IEBluffer='+tstamp+'&'+tstamp+'=IEBluffer',true);
		
		//apparently a null value causes IE to cache...	
		//response.send(null);	
		
		if ( navigator.appVersion.indexOf('MSIE 6') > -1 ) {
			me.response.send(null);
		}else{
			//so i will add the same unique timestamp to the send command
			me.response.send('IEBluffer='+tstamp);
		}
	}
	
	this.post=function(body){
		me.method = 1;
		me.body = body;
		xhrError.error = false;
		if ( me.progressbar ) me.progressbar.style.display = 'block';
		me.response.open("POST",me.url,true);
		me.response.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		me.response.send(body);
	}
}