function ActionAjax() {

	this.xmlhttp = "";
	cache = new Array();
			
	this.newRequest = function() {
	
		try{
		    this.xmlhttp = new XMLHttpRequest();
		    return this.xmlhttp
		}catch(ee){
		    try{
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			return this.xmlhttp
		    }catch(e){
			try{
			    this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			    return this.xmlhttp
			}catch(E){
			    return false;
			    
			}
		    }
		}
	
	}
	
	this.addParameter = function(param,name,value) {
		
		valor = ""+value;

		value = valor.replace(/\&/g, "[*amp*]"); 
				
		param +=  (param=="") ? (name + "=" + value) : ("&"+name + "=" + value);
		
		return param;
		
	}
	
	function setPack(s) {
		
		s = ""+s;
		pack =  s.replace(/\./g,"/");
		
		return pack;
	
	}
	
	function scriptparser(s) {
		
		value = ""+s;	
		str = value.split("<script>");
					
		return str;
	
	}
	
	this.getInputs = function(myform) {		
		checkboxes = new Array();		
		frm = $(myform);		
		inputs = tags(frm,"input");		
		parans ="";				
		for(var i=0;i<inputs.length;i++) {			
			el = inputs.item(i);		
			if (el.type=="text" || el.type=="hidden" || el.type=="password") {				
				parans = this.addParameter(parans,el.name,el.value);			
			}			
			if (el.type=="checkbox" || el.type=="radio") {			
				if (el.checked) {
					if (checkboxes[el.name]) {						
						checkboxes[el.name]+="[*item*]"+el.value;					
					} else {						
						checkboxes[el.name]=el.value;					
					}								
				} else {				
					if (!checkboxes[el.name]) {						
						checkboxes[el.name] = "";					
					}				
				}				
			}			
		}		
		selects = tags(frm,"select");	
		for(var i=0;i<selects.length;i++) {			
			el = selects.item(i);			
			parans = this.addParameter(parans,el.name,el.options[el.selectedIndex].value);						
		}	
		textareas = tags(frm,"textarea");	
		for(var i=0;i<textareas.length;i++) {			
			el = textareas.item(i);			
			parans = this.addParameter(parans,el.name,el.value);				
		}		
		for(var prop in checkboxes) {		
			parans = this.addParameter(parans,prop,checkboxes[prop]);					
		}			
		return parans;		
	}
	
	this.Request = function(request){
			
		var pag=$(request.div);
		var pack = setPack(request.pack);
		xmlhttp = this.newRequest();
				
		myurl = (pack!="undefined") ? (pack+"/"+request.url+"?"+request.parameters):request.url+"?"+request.parameters;
				
		if (!cache[myurl]) {
		
			xmlhttp.open((!request.method)?"GET":request.method,myurl,true);
		
		} else {
			
			texto = cache[myurl];
			pag.innerHTML=texto[0];
			eval(texto[1]);
			pag.style.display="block";	
			return false;
		}
				
		xmlhttp.onreadystatechange=function() {
					
			if (xmlhttp.readyState==4){
			
				var texto=xmlhttp.responseText				
				texto=texto.replace(/\+/g," ");
				texto=unescape(texto);	
				
				

				texto = scriptparser(texto);
				
				if (request.cache) {
				
					cache[myurl] = texto;
					
				}
				
				pag.innerHTML=texto[0];
				eval(texto[1]);
				pag.style.display="block";
				
				
			}
			
		}
		
		if (!cache[myurl]) {
		
			if (!request.method) {
			
				xmlhttp.send(null);
			
			} else {
			
				xmlhttp.setRequestHeader("Accept-Charset","iso-8859-1;q=1");
	
				xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			
				xmlhttp.send(request.parameters);
			}
		}
				
	}

}

var ajax = new ActionAjax();