/*############################ FUNÇÃO QUE CRIA O OBJETO XMLHttpRequest #############################*/

/*Conexao assincrona
open(mode, url, boolean)

mode = Tipo de requisição GET ou POST;

url = URL do objeto solicitado no modo assíncrono, pro questões de segurança. O
Firefox não permite que a URL esteja em um servidor diferente da página que esta
fazendo a solicitação.

boolean: true (assíncrono) ou false (síncrono).

send() É o método SEND que ativa a conexão e faz a requisição de informações ao
documento aberto pelo método OPEN. Este método possui somente um parâmetro que
serve para enviarmos dados extras ao documento que estamos acessando. Usamos este
parâmetro quando, por exemplo, no método OPEN, acessamos o documento com POST
ao invés de GET, neste caso os dados do POST são passados neste parâmetro de SEND.

/*Valores de retorno do readystate
0 (uninitialized);
1 (a carregar);
2 (carregado);
3 (interativo);
4 (completo);
*/
function openajax() { 
	//cria a variavel xmlhttp;
    var xmlhttp;
	//verifica se o browser tem suporte a ajax 
    try { //IE atuais
        xmlhttp = new XMLHttpRequest();
    } catch(e) {
        try { //IE antigos
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(ex) {
            try { //Mozilla
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(exc) {
                alert("Esse browser não tem recursos para uso do Ajax");
                xmlhttp = null;
            }
        }
    }
    return xmlhttp;
    /* Retorna um Boleano*/
}

function busca(pagina){
	var busca = document.getElementById('busca').value;	
	carrega_pagina (pagina+'?busca='+busca);
}
function newsletter(pagina){
	var newsletter = document.getElementById('newsletter').value;	
	carrega_pagina (pagina+'?newsletter='+newsletter);
	//alert(pagina+'?newsletter='+newsletter);	
}

/*############# FUNÇÃO CARREGA PAGINAS DO CONTEÚDO PAGINAS SEM RELOAD #############*/
function carrega_pagina (pagina){
	var ajax = openajax(); /* Chama a Função que Instancia o AJAX */	
	var carregando = document.getElementById('carregando');	
	var conteudo = document.getElementById('conteudo');
	ajax.open("GET", pagina, true);
    /* ajax.open = Abri uma Solicitação ao Navegador */
    /* GET = Método Usado */
    /* plink = pagina que tratara o solicitado */
    /* true = Assicrono ou não = Dando o Refresh no Browser ou Nao*/
    ajax.onreadystatechange = function() {
        /* ajax.onreadystatechange = O que ele fara de acordo com o tempo de execuação*/
        if (ajax.readyState < 4) {
            carregando.style.display = 'block';
			conteudo.style.display = 'none';
			/* ajax.readystate = Estado que se encontra a Requisição*/			
        }
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
				var res = ajax.responseText;               
				carregando.style.display = 'none';
				conteudo.style.display = 'block';
				conteudo.innerHTML = res;				
				extraiScript(res);
            }
        }        
    }
    ajax.send(null);
}
/*##################################################################################################*/
function ajax(url) 
{ 
	req = null; 
	// Procura por um objeto nativo (Mozilla/Safari) 
	if (window.XMLHttpRequest) { 
		req = new XMLHttpRequest(); 
		req.onreadystatechange = processReqChange; 
		req.open("GET",url,true); 		
		req.send(null); 
	// Procura por uma versão ActiveX (IE) 
	} else if (window.ActiveXObject) { 
		req = new ActiveXObject("Microsoft.XMLHTTP"); 
		if (req) { 
			req.onreadystatechange = processReqChange; 
			req.open("GET",url,true);			
			req.send(); 
		} 
	} 
}
 
function processReqChange() 
{ 
	alert(req.readyState);
	alert(req.status);
	// apenas quando o estado for "completado" 
	//if (req.readyState == 4) { 
		// apenas se o servidor retornar "OK" 
		//if (req.status ==200) { 
			// procura pela div id="pagina" e insere o conteudo 
			// retornado nela, como texto HTML 
			//document.getElementById('pagina').innerHTML = req.responseText; 
		//} else { 
			alert("Houve um problema ao obter os dados:n" + req.statusText); 
		//} 
	//} 
}

function AtualizaCarrinho(nameform, url){
  	var xmlhttp = openajax();
	var formulario = document.getElementById(nameform);
	var metodo = formulario.method.toUpperCase();
    var action = url + "&";	
	var Variaveis = "";
  	var Varinput = "";
	var Vartxtarea = "";
	var Varufselecao = "";
	var textos = document.getElementById(nameform).getElementsByTagName("input");
	for(var x=0;x<textos.length;x++){
		if (textos[x].type == "radio") {
			if (textos[x].checked == true) {
				Varinput += textos[x].name + "=" + escape(textos[x].value) + "&";
			}
		} else {
			Varinput += textos[x].name + "=" + escape(textos[x].value) + "&";
		}
  	}
	var areatextos = document.getElementById(nameform).getElementsByTagName("textarea");
	for(var y=0;y<areatextos.length;y++){
		Vartxtarea += areatextos[y].name + "=" + escape(areatextos[y].value) + "&";
  	}
	var ufselecao = document.getElementById(nameform).getElementsByTagName("select");
	for(var z=0;z<ufselecao.length;z++){
		Varufselecao += ufselecao[z].name + "=" + escape(ufselecao[z].value) + "&";
  	}
	Variaveis = Varinput + Vartxtarea + Varufselecao;
	if(metodo == "GET")
  	{
    	action += Variaveis;
    	Variaveis = null;
  	}
    xmlhttp.open(metodo, action, true);
  	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	xmlhttp.onreadystatechange = function(){
		if (xmlhttp.readyState==4){
		   	var texto=xmlhttp.responseText;
			var conteudo=document.getElementById("conteudo");
		    conteudo.innerHTML=texto;
			extraiScript(texto);
		
		}
	}
  	xmlhttp.send(Variaveis);
}

function extraiScript(texto){
    var ini = 0;
    while (ini!=-1){
        ini = texto.indexOf("<script", ini);
        if (ini >=0){
            ini = texto.indexOf(">", ini) + 1;
            var fim = texto.indexOf("script>", ini) - 2;
            codigo = texto.substring(ini,fim);
            novo = document.createElement('script');
            novo.text = codigo;
            document.body.appendChild(novo);
        	}
	}
}