var Ajax = {	
	
	instance : function(){
		var xmlHttp;		
		try{ 
			xmlHttp = new XMLHttpRequest();
		}catch (e){			
			try{
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e){
				try{
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				}catch (e){
					alert("Seu navegador nao da suporte a tecnologia AJAX");
					return false;
				}
			}
		}		
		return xmlHttp;
	},
	
	load : function (url, target){
		var oAjax = new this.instance();		
		var _targ = document.getElementById(target);
		oAjax.onreadystatechange = function(){			
			if(oAjax.readyState == 4)	{ 
				_targ.innerHTML = oAjax.responseText; 
				Ajax.doScript(oAjax.responseText);
			}
		}		
		with (oAjax){
			open("GET", url, true);
			send(null);
		}		
	},
	
	send : function(url, Ref, target){
		var oAjax =  this.instance();
		var oTypes = new Array("INPUT","TEXTAREA","SELECT");	
		var params = "";
		
		//MONTA OS PARAMENTROS	
		for(i=0;i<oTypes.length;i++){
			obj = Ref.getElementsByTagName(oTypes[i]);
			for(j=0;j<obj.length;j++){
				switch ( oTypes[i] ){
					case "INPUT" :  if (obj[j].type == 'text' || obj[j].type == 'password' || obj[j].type == 'hidden'){
														params += obj[j].id + "=" + escape(obj[j].value) + "&" ;
													}else{
														params += obj[j].checked ? obj[j].id + "=" + escape(obj[j].value) + "&" : '' ;
													};
													break;						
					default : params += obj[j].id + "=" + escape(obj[j].value) + "&"; 
										break;
				}
			}
		}		
		//LIMPA PARAMETRO
		params = params.substring(0,params.length-1);
		
		//EXECUTA ENQUANTO PROCESSA
		oAjax.onreadystatechange = function(){
			if( oAjax.readyState == 4 ){ target.innerHTML = oAjax.responseText; }
		}		
		with (oAjax){			
			open("POST", url, true);
			setRequestHeader( "Content-type", "application/x-www-form-urlencoded" )
			setRequestHeader( "Content-length", params.length );
			//setRequestHeader( "Content-type", "multipart/form-data" ) ;
			send(params);
		}	
		return false;
	},
	
	loadList : function(url,target,iniValue){		
		var oAjax = new this.instance();			
		oAjax.onreadystatechange = function(){
			if (oAjax.readyState==4){				
				try{
					while(target.options.length>0) target.options[0] = null;			
					var ret=eval(oAjax.responseText);			
					for(var i=0;i<ret.length;i++){
						opt = ret[i].split(':');
						target.options[target.options.length] = new Option(opt[1],opt[0]);
						if( opt[0] == iniValue ) target.selectedIndex = target.options.length - 1; // seleciona um valor inicial				
					}
				}catch (err){
					return false;
				}
			}			
		}		
		with (oAjax){
			open("GET", url, true);
			send(null);
		}		
	},
	
	setValues : function(url,target){		
		var oAjax = new this.instance();		
		oAjax.onreadystatechange = function(){			
			if(oAjax.readyState == 4)	{ 
				try{
					ret = eval(oAjax.responseText);
					for(i=0;i<target.length;i++){					
						target[i].value = ret[i];
					}
				}catch (err){
					return false;
				}
			}
		}		
		with (oAjax){
			open("GET", url, true);
			send(null);
		}	
	},
	
	doScript : function(texto){
    var ini, pos_src, fim, codigo;
    var objScript = null;
    ini = texto.indexOf('<script', 0);
    while (ini!=-1){
			var objScript = document.createElement("script");
			//Busca se tem algum src a partir do inicio do script
			pos_src = texto.indexOf(' src', ini)
			ini = texto.indexOf('>', ini) + 1;
			//Verifica se este e um bloco de script ou include para um arquivo de scripts
			if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
					//Marca como sendo o inicio do nome do arquivo para depois do src
					ini = pos_src + 4;
					//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
					fim = texto.indexOf('.', ini)+4;
					//Pega o nome do arquivo
					codigo = texto.substring(ini,fim);
					//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
					codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
					// Adiciona o arquivo de script ao objeto que sera adicionado ao documento
					objScript.src = codigo;
			}else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
					// Procura o final do script
					fim = texto.indexOf('</script>', ini);
					// Extrai apenas o script
					codigo = texto.substring(ini,fim);
					// Adiciona o bloco de script ao objeto que sera adicionado ao documento
					objScript.text = codigo;
			}
			//Adiciona o script ao documento
			document.body.appendChild(objScript);
			// Procura a proxima tag de <script
			ini = texto.indexOf('<script', fim);
			//Limpa o objeto de script
			objScript = null;
    }
	}
	
}


