function Ajax(url) {
	
	
	ajax = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
	
	    ajax = new XMLHttpRequest();
	    
		if (ajax.overrideMimeType) {
		
	    	if (url.indexOf(".xml") != -1) {
		        ajax.overrideMimeType('text/xml');
			} else {
		        ajax.overrideMimeType('text/html');
			}
			
		}
		
	} else if (window.ActiveXObject) { // IE
	
	    try {
	    	
	        ajax = new ActiveXObject("Msxml2.XMLHTTP");
	        
	    } catch (e) {
	    	
	        try {
	        	
	            ajax = new ActiveXObject("Microsoft.XMLHTTP");
	            
	        } catch (e) {}
	        
	    }
	}

	if (!ajax) {
	    alert('Seu browser não suporta Ajax.');
	}
	return ajax;

}

function alertResponse(obj) {
	ajax = obj;
	if (ajax.readyState == 4) {
		// tudo bem, a respsota foi recebida
		if (ajax.status == 200) {
			// perfect!
			alert(ajax.responseText);
		} else {
			alert('Aconteceu um problema na requesição.');
		}
	} else {
		// ainda não fez a leitura	
	}
	
}

/*
Até este trecho da biblioteca o conteúdo foi RETIRADO e MODIFICADO do site http://developer.mozilla.org
Artigo "AJAX: Como começar"
Autor: Vários
*/

//Fila de conexões
fila=[];
ifila=0;

//Carrega via XMLHTTP a url recebida e coloca seu valor no objeto com o id recebido
function getResponse(objectReturnId,url,classname,loadphrase) {
	//Carregando...
	var recebe = document.getElementById(objectReturnId);
	recebe.innerHTML = loadphrase;
	
    //Adiciona à fila
    fila[fila.length]=[objectReturnId,url];
    //Se não há conexões pendentes, executa
    if((ifila+1)==fila.length)getResponseRun();	
}

function getResponseRun() {	
	//alert(fila[ifila][1]);	
	ajax = Ajax(fila[ifila][1]);
    //Abre a conexão
    ajax.open("GET",fila[ifila][1],true);
    //Função para tratamento do retorno
    ajax.onreadystatechange=function() {
        if (ajax.readyState==4){
            //Mostra o HTML recebido
			texto = ajax.responseText;
			texto = texto.replace(/\+/g," ");
			texto = unescape(texto);
			recebe= document.getElementById(fila[ifila][0]);
			recebe.innerHTML=texto;
			//Roda o próximo
            ifila++;
            if(ifila<fila.length)setTimeout("getResponseRun()",20)			
        }
    }
    //Executa
    ajax.send(null);	
}

function ajaxPost(url,form) {
	Ajax(url);
	ajax.onreadystatechange = alertResponse;
	// Fazendo a requesição
	ajax.open('POST', url, true);
	// Configura a aplicação para o charset=iso-8859-1 e para identificar o envio via POST
	ajax.setRequestHeader('Content-Type',"application/x-www-form-urlencoded; charset=iso-8859-1");
	// Resolução do problema de Cache
	ajax.setRequestHeader("Cache-Control","no-store, no-cache, must-revalidate");
	ajax.setRequestHeader("Cache-Control","post-check=0, pre-check=0");
	ajax.setRequestHeader("Pragma","no-cache");
	// Enviando
	ajax.send(getDadosForm(form));
}

function getDadosForm(form) {
	var frm = document.getElementById(form);
	var dados = "";
	for (var i = 0; i < frm.elements.length; i++) {
		dados += "&" + frm.elements[i].id + "=" + frm.elements[i].value;
	}
	return dados;
}



/*---------------------------------------------------------------------------------------------*/

/*
Problema com os acentos na RECUPERAÇÃO da página do servidor via AJAX?
Para resolver esse problema basta indicar o charset correto
no início do seu "script server side", com apenas 1 (uma) linha de código passadas abaixo. 

Em ASP:	<% Response.Charset="ISO-8859-1" %>
Em PHP: <?php header("Content-Type: text/html; charset=ISO-8859-1",true) ?>
Em JSP: <%@ page contentType="text/html; charset=ISO-8859-1" %>
Em HTML: <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

NOTA: Alguns BD's, guardam seus dados apenas em UTF-8, e aí ocorre a perda de caracteres

Saída caso o erro ainda persista:

Na linguagem de programação PHP pelo menos:
rawurlencode - http://br2.php.net/rawurlencode (para codificar)
rawurldecode - http://br2.php.net/rawurldecode (para decodificar) 

Exemplo:
if (isset($_GET["texto"])) { 
    $texto = $_GET["texto"]; 
    echo "<b>Texto codificado: </b>" . rawurlencode($texto) . "<br>"; 
    echo "<b>Texto decodificado: </b>" . rawurldecode($texto) . "<br><br>"; 
}
*/

// Funções Java Script para codificar e decodificar dados enviados

/* 
Exemplo:
... 
    xmlhttp.open("GET", "teste.php?texto=" + url_encode("teste... éé"), true); 
... 
	if (xmlhttp.status == 200) { 
	   document.getElementById("texto").innerHTML = url_decode(xmlhttp.responseText); 
	}
...
*/

// url_encode version 1.0 
function url_encode(str) { 
    var hex_chars = "0123456789ABCDEF"; 
    var noEncode = /^([a-zA-Z0-9\_\-\.])$/; 
    var n, strCode, hex1, hex2, strEncode = ""; 

    for(n = 0; n < str.length; n++) { 
        if (noEncode.test(str.charAt(n))) { 
            strEncode += str.charAt(n); 
        } else { 
            strCode = str.charCodeAt(n); 
            hex1 = hex_chars.charAt(Math.floor(strCode / 16)); 
            hex2 = hex_chars.charAt(strCode % 16); 
            strEncode += "%" + (hex1 + hex2); 
        } 
    } 
    return strEncode; 
} 

// url_decode version 1.0 
function url_decode(str) { 
    var n, strCode, strDecode = ""; 

    for (n = 0; n < str.length; n++) { 
        if (str.charAt(n) == "%") { 
            strCode = str.charAt(n + 1) + str.charAt(n + 2); 
            strDecode += String.fromCharCode(parseInt(strCode, 16)); 
            n += 2; 
        } else { 
            strDecode += str.charAt(n); 
        } 
    }
    return strDecode; 
}

function pega_valor(valor, tipo){	
  var carregar = "";
  carregar = "<span><img src='../img/ajax-loader.gif' /></span>";

  if (tipo == "clientes"){
    getResponse("pega_valor","../ajax/ajax_clientes.php?id="+valor,"",carregar);
  }else if (tipo == "filtrocli"){
    getResponse("pega_valor2","../ajax/ajax_filtroclientes.php?id="+valor,"", carregar);	  
  }else if (tipo == "pega_arquivos"){
    if(valor > 10) {
      alert("Só é permitido o envio de 10 arquivos simultêneamente. Digite um número de 1 a 10.");
      exit;
    }
    getResponse("listaArquivos","../ajax/ajax_arquivos.php?id="+valor,"", carregar);	  
  }else if (tipo == "filtroproj"){
    getResponse("pega_valorproj","../ajax/ajax_filtroprojetos.php?id="+valor,"", carregar);	  
  }else if (tipo == "filtroitens"){
    getResponse("pega_valoritens","../ajax/ajax_itensregistros.php?id="+valor,"", carregar);	  
  }else if (tipo == "validausuario"){
    getResponse("pega_validausuario","../ajax/ajax_validausuario.php?id="+valor,"", carregar);	  
  }else if (tipo == "exibirbtnusu"){
    getResponse("pega_exibebtnusu","../ajax/ajax_exibebtnusu.php?id="+valor,"", carregar);	  
  }else if (tipo == "exibirComissao"){
    getResponse("pegaComissao","../ajax/ajax_exibecomissao.php?id="+valor,"", carregar);	  	  
  }else if (tipo == "calculaAP"){
	getResponse("totPagto","../ajax/ajax_calcula_ap.php?id="+document.getElementById("valor").value,"", carregar);
  }else if (tipo == "exibirSemanas"){
    getResponse("pegaSemenas","../ajax/ajax_exibesemanas.php?id="+valor,"", carregar);	  	  
  }else if (tipo == "exibirSemanas2"){
    getResponse("pegaSemenas2","../ajax/ajax_exibesemanas2.php?id="+valor,"", carregar);
  }else if (tipo == "exibirQtdFecha"){
    getResponse("pegaQtdFecha","../ajax/ajax_fechamento.php?id="+valor,"", carregar);
  }else if (tipo == "exibirCidade"){
    getResponse("pegaCidade","../ajax/ajax_cidade.php?id="+valor,"", carregar);	
  }else if (tipo == "listaRepasse"){	  
	var novoarray = valor.split("#");
	getResponse("pegarRepasse","../ajax/ajax_repasse.php?sindic="+novoarray[1]+"&perc="+novoarray[0],"", carregar);
  }else if (tipo == "verificaFiliado"){	
	getResponse("verificaFiliadoExiste","../ajax/ajax_verifica_filiado.php?id="+valor,"", carregar);
  }

}

function pega_valor2param(valor1, valor2){	
	var carregar = "";
	carregar = "<span><img src='../img/ajax-loader.gif' /></span>";

	var i;
	var anoSelecionado;
	for (i = 0; i < valor2.options.length ; i++) {
		if (valor2.options[i].selected == true) {
			anoSelecionado = valor2.options[i].value;
		}
	}
	
	if (tipo == "verificaFiliado"){	
		getResponse("verificaFiliadoExiste","../ajax/ajax_verifica_filiado.php?id="+valor1+"&ano="+anoSelecionado,"", carregar);
	}

}
