<!--

/**
 * Retorna o tipo do objeto de formulário (select,select-one,select-multiple,radio,checkbox,text)
 * @param string nomeCampo Nome do ID do campo
 * @return String
 */

function tipoCampo(nomeCampo) {
    obj = achaObjeto(nomeCampo);
    if(!obj) {
        alert('tipoCampo() : Campo "'+nomeCampo+'" não foi encontrado');
        return null;
    }
    if(!obj.type) {
      if(!obj[0].type) {
          alert('tipoCampo() : não conseguiu determinar o tipo do campo para "'+nomeCampo+'"');
          return null;
      }else{
          tipo = obj[0].type;
      }
    }else{
        tipo = obj.type;
    }
    if(!tipo) {
        alert('tipoCampo() : não conseguiu determinar o tipo do campo para "'+nomeCampo+'"');
        return null;
    }
    return tipo;
}

/**
 * Retorna o valor de um objeto de formulário. Para campo multi seleção, retorna uma Array com os índices selecionados.
 * @param string nomeCampo Nome do ID do campo
 * @return mixed
 * @version 1.0
 */

function pegaValor(nomeCampo) {
  var obj = achaObjeto(nomeCampo);
  if(!obj) {
      window.status = 'pegaValor() : Campo "'+nomeCampo+'" não foi encontrado';
      return '';
  }

  var tipo = tipoCampo(nomeCampo); //alert(nomeCampo+'='+tipo); //debug

  switch(tipo) {
    case 'select' :
    case 'select-one' :
        return (obj.selectedIndex != -1) ? obj.options[obj.selectedIndex].value : '';
    case 'select-multiple' :
        var temp = Array(), i = 0;
        for(var j = 0; j < obj.length; ++j) {
            if(obj.options[j].selected) {
              temp[i] = (obj.options[j].value) ? obj.options[j].value : obj.options[j].text;
              i++;
            }
        }
        return temp;
    case 'radio' :
        for(var j = 0 ; j < obj.length ; ++j) {
          if(obj[j].checked) return obj[j].value;
        }
        return '';
    case 'checkbox' :
        if(obj.length > 0) {
      var temp = Array(), i = 0;
      for(var j = 0 ; j < obj.length ; ++j) {
        if(obj[j].checked) {
          temp[i] = obj[j].value;
          i++;
        }
      }
    }else{
      var temp = (obj.checked) ? obj.value : '';
    }
    return temp;
    break;
    case 'text' :
        while(''+obj.value.charAt(0)==' ') obj.value=obj.value.substring(1,obj.value.length); //trim
        while(''+obj.value.charAt(obj.value.length-1)==' ') obj.value=obj.value.substring(0,obj.value.length-1); //trim
        return (obj.value) ? obj.value : '';
    default :
        return (obj.value) ? obj.value : '';
    break;
  }
}

/**
 * Define um valor/conteúdo/opções selecionadas para um objeto de formulário
 * @param string nomeCampo Nome do ID do campo de formulário
 * @version EXPERIMENTAL
 * @return void
 */

function setaValor(nomeCampo,novoValor) {
  var obj = achaObjeto(nomeCampo);
  if(!obj) {
      alert('setaValor() : Campo "'+nomeCampo+'" não foi encontrado');
      return null;
  }

  var tipo = tipoCampo(nomeCampo); //alert(tipo); //debug

  //alert('setaValor() : Campo "'+nomeCampo+'" tipo "'+tipo+'"');

  switch(tipo) {
    case 'select' :
    case 'select-one' :
      for(var j = 0; j < obj.length; ++j) {
          if(obj.options[j].value == novoValor) {
              obj.selectedIndex = j;
              break;
          }
      }
    break;
    case 'select-multiple' :
      var mount = Array(), m = 0;
      for(var j = 0; j < obj.length; ++j) {
        if(obj.options[j].selected) { mount[m] = (obj.options[j].value) ? obj.options[j].value : obj.options[j].text; m++; }
      }
    break;
    case 'radio' :
      for(var j = 0 ; j < obj.length ; ++j) {
          if(obj[j].value == novoValor)
          obj[j].checked = true;
      }
    break;
    case 'checkbox' :
      var mount = Array(), m = 0;
      if(obj.length) {
          for(var j = 0 ; j < obj.length ; ++j) {
            if(obj[j].checked) { mount[m] = obj[j].value; m++; }
          }
      }else{
          obj.checked = (novoValor) ? true : false;
      }
    break;
    case 'text' :
    default :
        obj.value = novoValor;
    break;
  }
}

/**
 * Cria um efeito de fade para o layer correpondente ao campo que contém erro. Este efeito parte do branco para o vermelho.
 * @param string nomeLayer Nome do ID da layer
 * @return void
 * @version 1.0
 */

var fadeIn = 204;

function fadeError(nomeLayer) {
    achaObjeto(nomeLayer).style.color = "rgb(204," + fadeIn + "," + fadeIn + ")";
    fadeIn-=5;
    if(fadeIn > 0) setTimeout("fadeError('"+nomeLayer+"')", 50);
}

/**
 * Destaca um campo com erro. Muda-se o className do objeto e exibe o layer responsável pela mensagem de erro correspondente.
 * @param string nomeCampo Nome do ID do campo do formulário
 * @param string msg A mensagem de erro
 * @param string tipoCampo Tipo de Campo do Formulário, por motivos de implementação, não é possível deduzi-lo automaticamente.
 * @return void
 * @version 1.0
 */

function campoOnError(nomeCampo,msg,tipoCampo) {

    fadeIn = 204; // importante

    switch(tipoCampo) {
      case 'radio' :
        if(!achaObjeto(nomeCampo+'BorderError')) { alert('campoOnError() : campo '+nomeCampo+'BorderError não encontrado.'); return; }
        achaObjeto(nomeCampo+'BorderError').className = 'radio-error';
      break;
      case 'select' :
        if(!achaObjeto(nomeCampo+'BorderError')) { alert('campoOnError() : campo '+nomeCampo+'BorderError não encontrado.'); return; }
        achaObjeto(nomeCampo+'BorderError').className = 'area-error';
      break;
      case 'table' :
        if(!achaObjeto(nomeCampo)) { alert('campoOnError() : campo '+nomeCampo+' não encontrado.'); return; }
        achaObjeto(nomeCampo).className = 'area-error';
      break;
      default :
        if(!achaObjeto(nomeCampo)) { alert('campoOnError() : campo '+nomeCampo+' não encontrado.'); return; }
        achaObjeto(nomeCampo).className = 'inputfield-error';
      break;
    }

    if(!msg) return;

    if(!achaObjeto(nomeCampo+'DivError')) { alert('campoOnError() : campo '+nomeCampo+'DivError não encontrado.'); return; }
    achaObjeto(nomeCampo+'DivError').style.display = 'block';

    if(tipoCampo == 'checkbox') {
        if(!achaObjeto(nomeCampo+'DivErrorMsg')) { alert('campoOnError() : campo '+nomeCampo+'DivErrorMsg não encontrado.'); return; }
        MM_setTextOfLayer(nomeCampo+'DivErrorMsg','','<img src="../../img/ico_error2.gif" width="12" height="13" align="absmiddle"> '+msg);
        fadeError(nomeCampo+'DivErrorMsg');
    }else{
        MM_setTextOfLayer(nomeCampo+'DivError','','<img src="../../img/ico_error2.gif" width="12" height="13" align="absmiddle"> '+msg);
        fadeError(nomeCampo+'DivError');
    }

}

/**
 * Retira o destaque de um campo com erro. Muda-se o className do objeto e oculta o layer de mensagem correspondente.
 * @param string nomeCampo Nome do ID do campo do formulário
 * @param string tipoCampo Tipo de Campo do Formulário, por motivos de implementação, não é possível deduzi-lo automaticamente.
 * @return void
 */

function campoBlurError(nomeCampo,tipoCampo) {
    //if(!achaObjeto(nomeCampo)) {
        //alert('campoBlurError : campo '+nomeCampo+' nao foi encontrado');
        //return null;
    //}
    if(tipoCampo == 'radio' || tipoCampo == 'select') {
        achaObjeto(nomeCampo+'BorderError').className = '';
    }else{
        achaObjeto(nomeCampo).className = '';
    }
    if(!achaObjeto(nomeCampo+'DivError')) {
        alert('campoBlurError : DivError '+nomeCampo+' nao foi encontrado');
        return null;
    }
    achaObjeto(nomeCampo+'DivError').style.display = 'none';
}

/**
 *
 * @param string
 * @param string
 * @return void
 */

function limpaMenu(nomeCampo, defaultMessage, toDisabled)
{
    var obj = achaObjeto(nomeCampo);
    if(!obj) { window.status = 'pegaObjeto() : field '+nomeCampo+' not found.'; return; }
    if(!defaultMessage) defaultMessage = 'Selecione:';
    if(!toDisabled) toDisabled = true;

    for (i = obj.options.length; i >= 0; i--) {
        obj.options[i] = null;
    }

    obj.options[0] = new Option(defaultMessage,'');

    if(toDisabled) obj.disabled = true;
}

/**
 *
 */

var telaCorrente;

function exibirTela(nomeTela,forcaTela,inutilizarTelaAnterior)
{
    //alert('exibirTela: '+nomeTela); //debug

    if(!formModules[nomeTela]) {
        alert('A tela '+nomeTela+' não existe ou não foi carregada corretamente. Avisar o webmaster.');
        return false;
    }

    if(telaCorrente) ocultarTela(telaCorrente,inutilizarTelaAnterior);

    if(achaObjeto(nomeTela+'Div')) {
        achaObjeto(nomeTela+'Div').style.display = 'block';
    }else{
        alert('A tela '+nomeTela+' não está acessível. Avisar o webmaster.');
        return false;
    }

    telaCorrente = nomeTela;

    if(achaObjeto('tela')) {
        achaObjeto('tela').value = (forcaTela) ? forcaTela : nomeTela;
        //alert(achaObjeto('tela').value);
    }else{
        alert('Não foi encontrado o identificador de telas. Avisar o webmaster.');
        return false;
    }

    eval(telaCorrente+'.Init()');

    topPage();

}

/**
 *
 */

function ocultarTela(nomeTela,inutilizar)
{
    achaObjeto(nomeTela+'Div').style.display = 'none';

    if(inutilizar) {
        for (var i=0; i < formModules[nomeTela].length; i++)
        {
            var moduloNome = formModules[nomeTela][i];
            if(achaObjeto(moduloNome+'AcaoSQL'))
            achaObjeto(moduloNome+'AcaoSQL').value = 'naoUtilizar';
            if(achaObjeto(moduloNome+'Acao'))
            achaObjeto(moduloNome+'Acao').value = 'indefinido';
        }
    }
}

/**
 *
 */

function initmodulos(telaNome)
{

    //alert('initmodulos('+telaNome+')');

    for (var i=0; i < formModules[telaNome].length; i++)
    {
        var moduloNome = formModules[telaNome][i];

        eval('var teste1 = ('+moduloNome+');');

        if(teste1) {
            eval(moduloNome+'.Init()');
        }else{
            alert('O módulo '+moduloNome+' não possue classe. Avisar o webmaster urgentemente.');
            return false;
        }

        eval('var teste2 = '+moduloNome+'.SQLable;');

        //alert(moduloNome+' SQLable: '+teste2);

        if(teste2 === false) {
            //alert('O módulo '+moduloNome+' não é manupulável pelo banco.');

        }else if(teste2 === true) {

            if(achaObjeto(moduloNome+'AcaoSQL')) {
                //alert(achaObjeto(moduloNome+'AcaoSQL').value);
                if(achaObjeto(moduloNome+'AcaoSQL').value == 'naoUtilizar') {
                    //alert('Módulo '+moduloNome+' é manipulável, alterando AcaoSQL para insert');
                    achaObjeto(moduloNome+'AcaoSQL').value = 'insert';
                }else{
                    //alert('Módulo '+moduloNome+' é manipulável, porém AcaoSQL já está definido como "'+achaObjeto(moduloNome+'AcaoSQL').value+'"');
                }
            }else{
                alert('Erro\nNão foi encontrado o identificador de ação sql para o módulo '+moduloNome+'.\nAvisar o webmaster.');
                return false;
            }
        }else{
            alert('Erro\nO módulo '+moduloNome+' não possui a informação se é manupulável pelo banco. Avisar o webmaster');
            return false;

        }
    }
}

/**
 *
 */

var submitForm_class = function()
{
    this.UltimaTela = null;
    this.AcaoLabel = null;
    this.VoltaBotao = true;
    this.NextFunction = '';
}

submitForm_class.prototype.Submit = function(NextFunction)
{
    var acaoBotao = achaObjeto('acao_'+telaCorrente);

    if(acaoBotao) {
        this.UltimaTela    = telaCorrente;
        this.AcaoLabel     = acaoBotao.value;
        acaoBotao.disabled = true;
        acaoBotao.value    = 'Aguarde ...';
    }

    if(NextFunction) this.NextFunction = NextFunction;

    document.mainForm.submit();

}

submitForm_class.prototype.Submitted = function()
{
    if(this.NextFunction != '') { eval(telaCorrente+'.'+this.NextFunction+'()'); }

    var acaoBotao = achaObjeto('acao_'+this.UltimaTela);

    if(this.VoltaBotao && (acaoBotao)) {
        acaoBotao.disabled = false;
        acaoBotao.value    = this.AcaoLabel;
        this.UltimaTela    = null;
        this.AcaoLabel     = null;
    }

}

var submitForm = new submitForm_class();

/**
 *
 */

var modulatedForm_class = function()
{
}

modulatedForm_class.prototype.IgnoreModule = function(moduleName)
{
    if(!achaObjeto(moduleName+'Acao')) return false;
    setaValor(moduleName+'Acao','ignorar');
    ocultarLayer(moduleName+'DivIgnore');
    return true;
}


modulatedForm_class.prototype.unIgnoreModule = function(moduleName)
{
    if(!achaObjeto(moduleName+'Acao')) return false;
    setaValor(moduleName+'Acao','naoUtilizar');
    exibirLayer(moduleName+'DivIgnore');
    return true;
}

var modulatedForm = new modulatedForm_class();

//-->