MyXMLHttpRequest = function (callback, param) { 
	 this.callback = callback;
	 this.param = param;
	 this.xmlhttp = Ajax.getTransport();

   this.parseForm = function(form) {
		 var str = '', gE = 'getElementsByTagName', inputs = [
		  (form[gE] ? form[gE]('input') : form.all ? form.all.tags('input') : []),
		  (form[gE] ? form[gE]('select') : form.all ? form.all.tags('select') : []),
		  (form[gE] ? form[gE]('textarea') : form.all ? form.all.tags('textarea') : [])
		 ];
		 for (var i = 0; i < inputs.length; i++)
		  for (j = 0; j < inputs[i].length; j++)
		   if (inputs[i][j])
		   {
				str += URLEncode(inputs[i][j].getAttribute('name')) +
				 '=' + URLEncode(inputs[i][j].value) + '&';		 
		   }
		 return str.substring(0, str.length - 1);
	}

	this.xmlhttpSend = function(uri, formStr) {
		 this.xmlhttp.open(formStr ? 'POST' : 'GET', uri, true);
		 var myXmlHttprequestRef = this;
		 var xmlhttpref =this.xmlhttp;
		 this.xmlhttp.onreadystatechange = function() {
			  if (xmlhttpref.readyState == 4){
				  if (xmlhttpref.status < 400) {
					 if(callback){
					      var response = new Object();
					      response.responseText = xmlhttpref.responseText;
					      response.responseXML = xmlhttpref.responseXML;
					      response.status = xmlhttpref.status;
					      response.statusText = xmlhttpref.statusText;
					      response.param = myXmlHttprequestRef.param;
						  callback(response);
         			  }
				  } else {
				  }				
			  }
		 }
		this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.xmlhttp.send(formStr);
		return true;
	}

	this.load = function(uri) {
		 if (!uri || (!this.xmlhttp)) return false;
		 if (this.xmlhttp){
		 	return this.xmlhttpSend(uri+(uri.indexOf('?') == -1 ? '?' : '&')+'now='+new Date().getTime(), '');
		}else return false;
	}

	this.submit = function(formRef) { 
		 var method = formRef.getAttribute('method');
		 var uri = formRef.getAttribute('action');
     if (method && (method.toString() == 'post' || method.toString() == 'POST')){
			 if (this.xmlhttp) { 
			 	 return this.xmlhttpSend(uri+(uri.indexOf('?') == -1 ? '?' : '&')+'now='+new Date().getTime(), this.parseForm(formRef));
			  }else {return false;}
		 } else{
		   return this.load(uri + (uri.indexOf('?') == -1 ? '?' : '&')+ 'now='+ new Date().getTime() + '&' + this.parseForm(formRef));
		 }
	}
}

var MyXMLHttpReqUtil = new Object();
MyXMLHttpReqUtil.getInstance = function(destRef) {
	 var instance = new MyXMLHttpRequest(
		 function callback(response){
			if (response.responseText){destRef.innerHTML = response.responseText;}
		 	else if (response.body){destRef.innerHTML = response.body.innerHTML;}
	     	match = new RegExp('(?:<script.*?>)((\n|.)*?)(?:<\/script>)', 'im'); 		 
			var scripts  = destRef.innerHTML.match(match); 
	       if(scripts)
		     setTimeout((function() {
		        if(scripts && scripts.length){
			        for (var i = 0; i < scripts.length; i++){ 
			          if(scripts[i] && scripts[i].match(match) && scripts[i].match(match)[1]){
			          		eval(scripts[i].match(match)[1]); 
			          }
			        }   
		        }  
		     }).bind(this), 100); 
		  });
	 return instance;
}

MyXMLHttpReqUtil.getInstanceByCallback = function(callback,param) { 
	 var instance = new MyXMLHttpRequest(callback, param);
	 return instance;
}
function httpLoadInto(url, destRef){
	MyXMLHttpReqUtil.getInstance(destRef).load(url);
}
function httpLoad(url, callback,param){	
	MyXMLHttpReqUtil.getInstanceByCallback(callback,param).load(url);
}

function httpSubmitInto(formRef, destRef){
	MyXMLHttpReqUtil.getInstance(destRef).submit(formRef);
}
function httpSubmit(formRef, callback, param){
	MyXMLHttpReqUtil.getInstanceByCallback(callback,param).submit(formRef);
}