/******************************
Biblioteca Ajax				  #	
Autor: Ilken Porfírio e Silva #
E-mail: ilkenps@gmail.com	  #  
******************************/

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() {
	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; 
}
/*
Estas duas funções de codificação e decodificação foram retiradas do site www.phpbrasil.com
Artigo: "Palavras acentuadas com Ajax"
Autor: por Fabrício Nogueira Magri
*/