function _is($o,$c){
	return (typeof $o==($c||"undefined"))
}
function _($o,$d){
	if(_is($o,"object"))return $o
	if(_is($o,"string"))return ($d||document).getElementById($o)
	return 0
}
function _formData($data){
	if(!$data)return null
	if($data.elements){
		var uri=""
		for(var i=0;i<$data.elements.length;i++){
			var fld=$data.elements[i]
			if(fld.name)
				if(((/radio|checkbox/i.test(fld.type))?fld.checked:true))
					uri+=("&"+fld.name+"="+escape(fld.value))
		}		
		return uri.substr(1)
	}else
		return $data
}
function _clsAJAX($p){
	var _default = {file:'',target:'',opener:'',data:null,update:1,onchange:null,onload:null}
	for(var i in $p){this[i]=$p[i]}
	for(var i in _default){if(_is(this[i]))this[i]=_default[i]}
	if(this.file)this.send()
}
_clsAJAX.prototype.send=function(){
	this.target=_(this.target)
	if(!this.target){
		if(this.alert)alert("No AJAX target specified")
		return false
	}
	this.err=''
	try{this._xmr=new XMLHttpRequest()}
	catch($err){
		try{this._xmr=new ActiveXObject("Microsoft.XMLHTTP")}
		catch($err){
			alert("ERROR:"+$err.description+"\n\nAction aborted.")
			return false
		}
	}
	var fname=this.file.replace(/\&?ajx=[\d.]*/g,'')+(/\?/.test(this.file)?'&':'?')+'ajx='+Math.random()
	var self=this
	this._xmr.onreadystatechange=function(){if(self._xmr.readyState==4)self.received()}//use self. as this. bad in IE6
//alert("METHOD="+(this.data?'POST':'GET'))
	this._xmr.open((this.data?'POST':'GET'),fname, true);
	if(this.data)this._xmr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	this._xmr.send(this.data||null)

	return true
}	
_clsAJAX.prototype.received=function(){
	if(this._xmr.status==200){
		var data=this._xmr.responseText
		data=data.replace(/<scrip[^>]*>/ig,"\u0001")	
		data=data.replace(/<\/scrip[^>]*>/ig,"\u0002")
		if(this.update)
			if(this.onchange)
				this.onchange(this._xmr)
			else
				this.target.innerHTML=data.replace(/\u0001[^\u0002]*\u0002/ig,'')
			if(this.onload)this.onload()	
		this._evalScript(("\u0002"+data+"\u0001").replace(/\u0002[^\u0001]*\u0001/ig,''))
	}else{
		this.err+='\nError:'+this._xmr.status+', '+this._xmr.statusText+
		'\nLoading: '+this.file+
		'\nIn : '+document.location+
		'\nResponse Text:\n'+
		(this._xmr.status==404?'Page not found':this._xmr.responseText.replace(/<[^>]*>/g,''))+
		'\n--end--'
	}
	this._showErrors()
}	
_clsAJAX.prototype._showErrors=function(){
		var oT=this.target,eid=oT.id+"_error"
		var oD=_(eid)
		if(oD)oT.parentNode.removeChild(oD)
		if(this.err){
			if(oT.lastChild)if(/loading/.test(oT.lastChild.className))oT.removeChild(oT.lastChild)
			var msg='<a name=ajxerr></a><p>An error occurred while processing this page.</p><p>'+
			'Please <a href="/_post_error.asp?call='+escape(document.location)+'&data='+escape(this.err)+'">click here</a>'+
			' to report this error to the webmaster.</p>'
			oD=document.createElement("a")
			oD.name="ajxerr"
			oT.parentNode.insertBefore(oD,oT);
			oD=document.createElement("div")
			oD.id=eid
			oD.className="error"
			oD.innerHTML=msg
			oT.appendChild(oD);
			window.location.hash="ajxerr"
		}
	}
_clsAJAX.prototype._evalScript=function($script){
	if(!$script)return
	var msg='',self=this.target,opener=_(this.opener)
		try {eval($script)}
		catch($err){
			this.err+=('\nJS Error '+($err.number & 0xFFFF)+' : '+$err.description)
		}
}

