function abreAjax(pagina, destino) {
	destino=document.getElementById(destino);
	ajaxGet(pagina,destino,false);
}

function ajaxGet(url, elemento_retorno, exibe_carregando, metodo, post){
  var ajax1 = pegaAjax();
  if( ajax1 ){
    url = antiCacheRand(url)
    ajax1.onreadystatechange = ajaxOnReady
   	ajax1.open("GET", url ,true);
    ajax1.setRequestHeader("Cache-Control", "no-cache");
    ajax1.setRequestHeader("Pragma", "no-cache");
    if( exibe_carregando ){
      put("Aguarde...")
    }
   	ajax1.send(null)
    return true;
  }
  else{
    return false;
  }

  function ajaxOnReady(){
    if( ajax1.readyState==4 ){
      if( ajax1.status == 200 ){
        var texto=ajax1.responseText;
        if( texto.indexOf(" ")<0 ){
          texto=texto.replace(/\+/g," ");
        }
        //texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
        put(texto);
        extraiScript(texto);
      }
      else{
        if( exibe_carregando ){
          put("Falha no carregamento. " + httpStatus(ajax1.status));
        }
      }
      ajax1 = null
    }
    else if( exibe_carregando ){//para mudar o status de cada carregando
      put("Aguarde..." )
    }
  }

  function put(valor){ //coloca o valor na variavel/elemento de retorno
    if( (typeof(elemento_retorno)).toLowerCase()=="function" ){ //se for uma função
      elemento_retorno(valor);
    }
    else if( (typeof(elemento_retorno)).toLowerCase()=="string" ){ //se for o nome da string
      if( valor!="Falha no carregamento" ){
        eval(elemento_retorno + '= unescape("' + escape(valor) + '")');
      }
    }
    else if( elemento_retorno.tagName.toLowerCase()=="input" ){
      valor = escape(valor).replace(/\%0D\%0A/g,"")
      elemento_retorno.value = unescape(valor);
    }
    else if( elemento_retorno.tagName.toLowerCase()=="select" ){
      select_innerHTML(elemento_retorno,valor)
    }
    else if( elemento_retorno.tagName ){
      elemento_retorno.innerHTML = valor;
      //alert(elemento_retorno.innerHTML)
    }
  }

  function pegaAjax(){ //instancia um novo xmlhttprequest
    if(typeof(window.XMLHttpRequest)!='undefined'){
      return new XMLHttpRequest();
    }

    var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];

    for( var i=0;i<axO.length;i++ ){
      try{
        return new ActiveXObject(axO[i]);
      }
      catch(e){}
    }
    return null;
  }

  function httpStatus(stat){ //retorna o texto do erro http
    switch(stat){
      case 0: return "Erro desconhecido de javascript";
      case 400: return "400: Solicitação incompreensível"; break;
      case 403: case 404: return "404: Não foi encontrada a URL solicitada"; break;
      case 405: return "405: O servidor não suporta o método solicitado"; break;
      case 500: return "500: Erro desconhecido de natureza do servidor"; break;
      case 503: return "503: Capacidade máxima do servidor alcançada"; break;
      default: return "Erro " + stat + ". Mais informações em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
    }
  }

  function antiCacheRand(aurl){
    var dt = new Date();
    if( aurl.indexOf("?")>=0 ){// já tem parametros
      return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
    }
    else{
      return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());
    }
  }
}

function select_innerHTML(objeto,innerHTML){
  objeto.innerHTML = ""
  var selTemp = document.createElement("profitselect")
  var opt;
  selTemp.id="profitselect1"
  document.body.appendChild(selTemp)
  selTemp = document.getElementById("profitselect1")
  selTemp.style.display="none"

  if( innerHTML.toLowerCase().indexOf("<option")<0 ){ //se não é option eu converto
    innerHTML = "<option>" + innerHTML + "</option>"
  }

  innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
  selTemp.innerHTML = innerHTML

  for( var i=0;i<selTemp.childNodes.length;i++ ){
    if( selTemp.childNodes[i].tagName ){
      opt = document.createElement("OPTION")

      for( var j=0;j<selTemp.childNodes[i].attributes.length;j++ ){
        opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
      }

      opt.value = selTemp.childNodes[i].getAttribute("value")
      opt.text = selTemp.childNodes[i].innerHTML

      if( document.all ){ //IEca
        objeto.add(opt)
      }
      else{
        objeto.appendChild(opt)
      }
    }
  }

  document.body.removeChild(selTemp)
  selTemp = null
}

function extraiScript(texto){
  var ini = 0;

  while (ini!=-1){ // loop enquanto achar um script
    ini = texto.indexOf('<script', ini); // procura uma tag de script

    if (ini >=0){ // se encontrar
      ini = texto.indexOf('>', ini) + 1; // define o inicio para depois do fechamento dessa tag
      var fim = texto.indexOf('</script>', ini); // procura o final do script
      codigo = texto.substring(ini,fim); // extrai apenas o script
      novo = document.createElement("script") // executa o script
      novo.text = codigo;
      document.body.appendChild(novo);
    }
  }
}
