
function ActionAjax() {

	this.xmlhttp = "";
	cache = new Array();
	this.parameters = "";
		
	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){
			    alert("O seu browser não tem suporte a AJAX!");
			    return false;
			    
			}
		    }
		}
	
	}
	
	this.addParameter = function(name,value) {
		
		valor = ""+value;
		value = valor.replace(/\&/g, "[*amp*]"); 				
		this.parameters +=  (this.parameters=="") ? (name + "=" + value) : ("&"+name + "=" + value);		
		
	}
	
	function setPack(s) {
		
		s = ""+s;
		pack =  s.replace(/\./g,"/");
		
		return pack;
	
	}
	
	function scriptparser(s) {
		
		value = ""+s;	
		str = value.split("<script>");
					
		return str;
	
	}
	
	this.loadForm = function(myform) {		
		checkboxes = new Array();		
		frm = document.getElementById(myform);		
		inputs = frm.getElementsByTagName("input");		
		parans ="";				
		for(var i=0;i<inputs.length;i++) {			
			el = inputs.item(i);		
			if (el.type=="text" || el.type=="hidden" || el.type=="password") {				
				Ajax.addParameter(el.name,el.value);			
			}			
			if (el.type=="checkbox") {			
				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 = frm.getElementsByTagName("select");	
		for(var i=0;i<selects.length;i++) {			
			el = selects.item(i);			
			Ajax.addParameter(el.name,el.options[el.selectedIndex].value);						
		}	
		textareas = frm.getElementsByTagName("textarea");	
		for(var i=0;i<textareas.length;i++) {			
			el = textareas.item(i);			
			Ajax.addParameter(el.name,el.value);				
		}		
		for(var prop in checkboxes) {		
			Ajax.addParameter(prop,checkboxes[prop]);					
		}			
		
	}
	
	this.Submit = function(form) {
		
		
		this.loadForm(form);
		this.Request({
			url:document.getElementById(form).getAttribute("action"),			
			method:document.getElementById(form).getAttribute("method")
		});
	
	}
	
	this.Request = function(request){
				
		request.parameters = this.parameters;
		
		if (request.update!=undefined) {		
			
			if (document.getElementById(request.update))	{
			
				receiver=document.getElementById(request.update);
				
			} else {
					
				alert("O objeto ("+request.update.toUpperCase()+") não existe");
			
			}
		}
		var pack = setPack(request.pack);
		var xmlhttp = this.newRequest();
		
		myurl = (pack!="undefined") ? (pack+"/"+request.url):request.url;
		
		if (request.method=="get" || request.method==undefined) {
			
			myurl +="?"+request.parameters;
			
		}		
		if (!cache[myurl]) {
				
			xmlhttp.open((!request.method)?"GET":request.method,"/"+myurl,true);
		
		} else {
			
			response = cache[myurl];
			if (request.update!=undefined) {
				receiver.innerHTML=response[0];
			}
			eval(response[1]);			
			return false;
		}
				
						
		xmlhttp.onreadystatechange=function() {
					
			if (xmlhttp.readyState==4){
			
				var response = xmlhttp.responseText				
				response=response.replace(/\+/g," ");
				response=unescape(response);				
				response = scriptparser(response);
				
				if (request.cache) {
				
					cache[myurl] = response;
					
				}				
								
				if (request.update!=undefined) {
					receiver.innerHTML=response[0];
					
				} 
				
				if (request.debug) {
					alert(response[0]);
					alert(response[1]);
				}
				eval(response[1]);
				
							
			}
			
		}
		
		if (!cache[myurl]) {
		
			if (!request.method) {
				this.parameters = "";
				xmlhttp.send(null);
			
			} else {
			
				xmlhttp.setRequestHeader("Accept-Charset","iso-8859-1;q=1");
	
				xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				this.parameters = "";
				xmlhttp.send(request.parameters);
			}
		}
				
	}

}

var Ajax = new ActionAjax();