document.write('<iframe id="ajaxTransferFrame" name="ajaxTransferFrame" src="" style="display:none"></iframe>');
function AjaxTransfer(instanceName){
	this.init=function(){
		try {ajaxTransfer = new ActiveXObject("Msxml2.XMLHTTP");}
		catch(e){
			try{
				ajaxTransfer = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(f){
				ajaxTransfer = null;
			}
		}
		if(!ajaxTransfer && typeof(XMLHttpRequest) != 'undefined'){
			ajaxTransfer = new XMLHttpRequest();
		}
		this.target=undefined;
		this.setDefault();
	}
	this.setDefault=function(){		
		this.responseText_=undefined;
		this.responseXML_=undefined;
		this.status='undefined';
	}
	this.sendGet=function(URL,param){
		this.setDefault();
		this.responseText_=undefined;
		this.responseXML_=undefined;
		this.status='undefined';	
		ajaxTransfer.open('GET',URL+this.rightParam(param),true);
		eval('ajaxTransfer.onreadystatechange=function(){'+instanceName+'.response_();}');
		ajaxTransfer.send(null);
	}
	this.sendPost=function(URL,param){
		this.setDefault();	
		ajaxTransfer.open('POST',URL,true);
		eval('ajaxTransfer.onreadystatechange=function(){'+instanceName+'.response_();}');
		ajaxTransfer.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		ajaxTransfer.send(this.rightParam(param));
	}
	this.sendForm=function(obj){
		param=new Array();
		for(i=0;i<obj.elements.length;i++){
			if(obj.elements[i].name!=''){
				switch(obj.elements[i].type){
					case 'file':
						if(obj.elements[i].value!=''){
							this.sendFrame(obj);
							return;
						}
					break;
					case 'radio':case 'checkbox':
						if(obj.elements[i].checked)
							param[obj.elements[i].name]=obj.elements[i].value;	
					break;
					default:
						param[obj.elements[i].name]=obj.elements[i].value;
					break;
				}
				
			}
		}
		action=obj.action;
		if(action=='')action="./";
		if(obj.method.match(/^get$/i))
			this.sendGet(action,param);
		else
			this.sendPost(action,param);
			
	}
	this.sendFrame=function(obj){
		idFrame='ajaxTransferFrame';	
		objFrame=document.getElementById(idFrame);
		
		objFrame.onreadystatechange=
			function(){
				if(objFrame.readyState=='complete')
					eval(instanceName+'.setContentFrame()');
			}
		document.getElementById(idFrame).onload=
			function(){
				eval(instanceName+'.setContentFrame()');
			};
		obj.target='ajaxTransferFrame';
		obj.method='POST';
		obj.submit();
	}
	this.abort=function(){
		ajaxTransfer.abort();
	}
	this.setContentFrame=function(){
		this.responseText_=ajaxTransferFrame.document.body.innerHTML;	
		this.setOnEvent();
	}
	this.response_=function(){
		this.readyState=ajaxTransfer.readyState;
		if(this.readyState==4)this.status=ajaxTransfer.status;
		if(this.readyState==4&&(this.status==200||this.status==405)){
			this.responseText_=ajaxTransfer.responseText;
			this.responseXML_=ajaxTransfer.responseXML;
			this.runJavaScript();
			this.setOnEvent();
		}		
		try{this.responseTextAll(this.readyState,this.status,this.responseText_);}
		catch(e){}
		try{this.responseXMLAll(this.readyState,this.status,this.responseXML_);}
		catch(e){};
	}
	this.runJavaScript=function(){
		this.responseText_=this.responseText_.replace(/(\n|\t|\r)/g,'');
		if(scripts=this.responseText_.match(/<script(| *)(|type="text\/javascript")>.*?<\/script>/ig)){
			for(i=0;i<scripts.length;i++){
				content=/^<script(| *)(|type="text\/javascript")>(.*?)<\/script>/i.exec(scripts[i]);
				eval(content[3]);				
			}				
		}
	}
	this.setOnEvent=function(){
		if(!this.target){
				try{this.responseText(this.responseText_);}
				catch(e){}
				try{this.responseXML(this.responseXML_);}
				catch(e){};
		}
		else
			if(!this.mask)
				innerHTML(this.target,this.responseText_);
			else
				this.buildOnMask();
					
	}	
	this.rightParam=function(param){
		str=null;
		switch(typeof(param)){
			case 'string':
				if(!param.match(/^\?/))
					param='?'+param;
				str=param;
			break;
			case 'object':
				str='?';
				for(key in param)
					str+='&'+key+'='+param[key];
			break;
			default: str=null;break;
		}
		return str;
	}
	this.setTarget=function(idObj){
		this.target=idObj;
	}	
	this.init();
}


function createNewAjaxTransfer(instanceName){
	try{eval(instanceName+';');}
	catch(e){
		eval(instanceName+'= new AjaxTransfer("'+instanceName+'");');
	}
}

function innerHTML(id,str){
	if(str==undefined)return document.getElementById(id).innerHTML;
	document.getElementById(id).innerHTML=str;
}

function show(obj){
		str='';
		for(key in obj)
				str+=key+'='+obj[key]+'<br>';
		document.getElementById('control').innerHTML=str;
	}
