/*******************************************************************
 * funções básicas de manipulação
 *******************************************************************/

// verifica se o argumento passado é um valor válido
function valorValido(tV)
{ /* theValue */
    if (tV == "")
        return false;
    var tER=/[a-z0-9]/gi;
    return tER.test(tV);
}

// obtém o objeto, dado o id (cross-browser)
function getElement(id)
{
    if (document.getElementById)
    {
        return document.getElementById(id);
    }
    else if (document.all)
    {
        return document.all[id];
    }
    else if (document.layers[id])
    {
        return document.layers[id];
    }
    else
        return false;
}

// cria um elemento (cross-browser)
function criaElemento(tag, id, classe, inner)
{ /* tagName, id, className, innerHTML */
    if (!document.createElement)
        return false;
    var nE, tER;
    nE= document.createElement(tag);
    if (valorValido(id))
    {
        nE.id= id;
    }
    if (valorValido(classe))
    {
        nE.className= classe;
    }
    if (valorValido(inner))
    {
        nE.innerHTML= inner;
    }
    return nE;
}

function criaTextNode(valor)
{  /* theValue */
      return (valor && document.createTextNode) ? document.createTextNode(valor) : false;
}

// addEvento - registra um handler para um evento
function addEvento(obj, evento, func)
{ 
    if (obj.addEventListener)
    {
        obj.addEventListener(evento, func, true);
        return true;
    }
    else if (obj.attachEvent)
    {
        return obj.attachEvent('on'+evento, func);
    }
    else
    {
        alert("Seu browser não possui suporte a eventos.");
        return false;
    }
}

// remEvento - remove o handler para do evento
function remEvento(obj, evento, func)
{
    if (obj.removeEventListener)
    {
        obj.removeEventListener(evento, func, false);
        return true;
    }
    else if (obj.detachEvent)
    {
        return obj.detachEvent('on'+evento, func);
    }
    else
    {
        alert("Seu browser não possui suporte a eventos.");
        return false;
    }
}




/*******************************************************************
 * Funções do AJAX
 ****************************************************************** */
 
// retorna o objeto xmlhttprequest
function ajaxGetHTTPObject()
{
    var xmlhttp;

    try
    {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
        try
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlhttp = new XMLHttpRequest();
            }
            catch (e)
            {
                xmlhttp = false;
            }
        }
    }
    return xmlhttp;
}

// criação do objeto xmlhttprequest
var http = ajaxGetHTTPObject();

// fila de conexões
// fila= [];
// ifila= 0;

var id_carrega; // armazena o id do div "Carregando..."

var id_select_src;  // armazena o id do select origem
var id_select_target;  // armazena o id do select destino

var id_div;  // armazena o id do div a ser preenchido

// exibe o div "Carregando..."
function exibeCarrega()
{
    //obj=getElement("carrega");
    //obj.innerHTML="<b><font size=3>Carregando...</font></b><br>";
}

// oculta o div "Carregando..."
function ocultaCarrega()
{
     //obj=getElement("carrega");
     //obj.innerHTML="";
}

// Preenche o select com os elementos option, utilizando a resposta da solicitação
function handleHttpResponseSelect()
{
    exibeCarrega(id_carrega); // exibe o "Carregando..."
    // obtém o select de destino (que será preenchido)
    campo_select = getElement(id_select_target);
    if (http.readyState == 4)
    {
        campo_select.options.length = 0;
        // pega a resposta da solicitação e "quebra" a string em um array
        results = http.responseText.split(","); 
        // percorre o array results. Para cada elemento será criado um option
        for (i = 0; i < results.length; i++)
        {
            // separa os valores value e texto do option
            string = results[i].split( "|" ); 
            var novo= criaElemento("OPTION", "", "", string[0]); // cria o option
            novo.setAttribute("value", string[1]);  // cria o atributo value do option
            campo_select.appendChild(novo);  // insere o option no select
        }
    }
    ocultaCarrega(id_carrega);
}

function handleHttpResponseDiv(){
  var elem = getElement(id_div);
  //elem.style.display= "block";
  if (http.readyState == 4)
  {
      resposta=http.responseText;
      elem.innerHTML=resposta;
  }
  //ocultaCarrega();
}
//  Preenche um div com conteúdo html
//      url: url do script
//      id: id do div a ser preenchido
function ajaxFillDiv(url,id,cr,oc)
{
    id_div=id;
    obj=getElement(id);
    if (cr!=""){
       obj.innerHTML=cr;
    }
    if (oc!=""){
       //alert('teste');
       //obj.style.display="none";
    }
    http.open("GET", url, true);
    http.onreadystatechange = handleHttpResponseDiv;
    http.send(null);
}

//  Preenche um select destino usando o argumento de um select origem
//      url: a url do script (ex: "script.php")
//      arg: nome do parâmetro a ser passado na url  (script.php?arg=valor)
//      idsrc: id do select de origem, que vai fornecer o parâmetro da pesquisa
//      idtarget: id do select de destino, que será "preenchido"
function ajaxFillSelect(url, arg, idsrc, idtarget)
{
    id_select_src= idsrc;
    id_select_target= idtarget;

    var sel= getElement(id_select_src);
    var indice= sel.selectedIndex;
    var value_arg= sel.options[indice].value;
    var Url;

    if(url.indexOf('?') == -1)
        Url= url+"?"+arg+"="+value_arg;
    else
        Url= url+"&"+arg+"="+value_arg;
    http.open("GET", Url, true);
    http.onreadystatechange = handleHttpResponseSelect;
    http.send(null);
}

//  Submete o formulário pelo método POST
//      url: url do script
//      id: id do div que receberá a resposta
//      parms: parâmetros no formato chave1=valor1&chave2=valor2...
function ajaxForm(url, id, parms)
{
    id_div= id;
    
    http.open("POST", url, true);
    http.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
	http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    http.onreadystatechange = handleHttpResponseDiv;
    http.send(parms);
}
