/*
  Descricao : biblioteca de funcoes JavaScript
*/

/* Verifica se string eh uma data valida */
String.prototype.isDate = function() {
    return (/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/).test(this);
};

/* Verifica se string eh um email valido */
String.prototype.isEMail = function() {
  return (/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/).test(this);
}

/* Verifica se string eh uma hora valida */
String.prototype.isTime = function() {
  return (/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/).test(this);
}

/* Verifica se string eh um CNPJ valido */
String.prototype.isCNPJ = function() {
  var d = this.split("");
  var m1 = [d[0]*5,d[1]*4,d[2]*3,d[3]*2,d[4]*9,d[5]*8,d[6]*7,d[7]*6,d[8]*5,d[9]*4,d[10]*3,d[11]*2];
  var s1 = 0;
  for(i in m1){ s1 += m1[i]; }
  var d1 = (s1%11<2)?0:11-(s1%11);
  var m2 = [d[0]*6,d[1]*5,d[2]*4,d[3]*3,d[4]*2,d[5]*9,d[6]*8,d[7]*7,d[8]*6,d[9]*5,d[10]*4,d[11]*3,d1*2];
  var s2 = 0;
  for(i in m2){ s2 += m2[i]; }
  var d2 = (s2%11<2)?0:11-(s2%11);
  return (d1 == d[12] && d2 == d[13] && this.length == 14)? true: false;
} 

/* Verifica se string eh um CPF valido */
String.prototype.isCPF = function() {
  var d = this.split("");
  var m1 = [d[0]*10,d[1]*9,d[2]*8,d[3]*7,d[4]*6,d[5]*5,d[6]*4,d[7]*3,d[8]*2];
  var s1 = 0;
  for(i in m1){ s1 += m1[i]; }
  var d1 = (s1%11<2)?0:11-(s1%11);
  var m2 = [d[0]*11,d[1]*10,d[2]*9,d[3]*8,d[4]*7,d[5]*6,d[6]*5,d[7]*4,d[8]*3,d1*2];
  var s2 = 0;
  for(i in m2){ s2 += m2[i]; }
  var d2 = (s2%11<2)?0:11-(s2%11);
  return (d1 == d[9] && d2 == d[10] && this.length == 11)? true: false;
}

/* Elimina espacos no inicio e fim da string */
String.prototype.trim = function() {
  return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

/* Verifica se string eh um numero decimal valido */
String.prototype.isFloat = function(){
  return !isNaN(parseFloat(c.value.replace(/\./g, "").replace(/,/g, ".")))
}

/* Verifica se string eh um numero inteiro valido */
String.prototype.isInteger = function(){
  return (/^[0-9]+$/).test(this);
}

/* Verifica se string eh um inteiro de ate 9 posicoes */
String.prototype.isCd = function(){
  return (/^[0-9]{1,9}$/).test(this);
}

/* Flag para Netscape ou Internet Explorer */
var ns6=document.getElementById && !document.all?1:0;

/* Retornar o estilo do objeto atraves do ID */
function obtemEstilo(n) {
  return ns6?document.getElementById(n).style:document.all[n].style;
}

/* Retornar o objeto atraves do ID */
function obtemObjeto(n) {
  return ns6?document.getElementById(n):document.all[n];
}

/* Foco automatico do campo padrao */
function focaCampo() {
  var foco=obtemObjeto("foco");
  if (foco) {
    foco.focus();
  }
}

/* Controle de envio de formularios */
function verificaForm(form) {
  if (form[form.length - 1].disabled) {
    return false;
  }
  var inputs = document.getElementsByTagName("input");
  for (i = 0; i < inputs.length; i++) {
    if (inputs[i].type.toLowerCase() == "submit" || inputs[i].type.toLowerCase() == "reset" || inputs[i].type.toLowerCase() == "button") {
      inputs[i].disabled = true;
    }
  }
  return true;
}

/* Reabilita botoes do formularios */
function reabilitaBotoes() {
  var inputs = document.getElementsByTagName("input");
  for (i = 0; i < inputs.length; i++) {
    inputs[i].disabled = false;
  }
}

/* Filtra apenas digitos em uma string */
function filtraDigito(s) {
  s = s.split("");
  var r = "";
  for(i in s) {
    r += (isNaN(s[i]) || s[i] == " ")?"":s[i];
  }
  return r
}

/* Formata exibicao de CPF ou CNPJ */
function formataCPFCNPJ(s) {
  s = filtraDigito(s);
  var l = s.length;
  if (l == 11) {
    return s.substr(0, 3) + "." + s.substr(3, 3) + "." + s.substr(6, 3) + "/" + s.substr(9, 2)
  } else if (l == 14) {
    return s.substr(0, 2) + "." + s.substr(2, 3) + "." + s.substr(5, 3) + "/" + s.substr(8, 4) + "-" + s.substr(12, 2)
  } else {
    return s
  }
}

/* Cancelamento de envio de formularios */
function cancelaEnvio(form, msg) {
  alert(msg);
  reabilitaBotoes();
  return false;
}

/* Valida o preenchimento de todos os campos do formulario */
function verificaTodosCampos(form) {
  for (i = 0; i < form.length; i++) {
    if (form.elements[i].value.trim() == "") {
      form.elements[i].focus();
      return cancelaEnvio(form, "Todos os campos solicitados devem ser informados.");
    }
  }
  return true;
}

/* Preenche automaticamente o campo apelido */
function preencheApelido(form) {
  if (form.ds_apelido.value == "") {
    var s = form.ds_nome.value;
    var i = s.indexOf(" ");
    form.ds_apelido.value = (i <= 0 || i > 25)?s.substring(0, 25):s.substring(0, i);
  }
}

/* Exibe ou nao o drop de DDD (pesquisa) */
function exibeArea(fl) {
  if (fl) {
    obtemEstilo("tipo_area").display="";
    obtemEstilo("ds_referencia").width="117px";
    obtemObjeto('cd_tipo_area').focus()
  } else {
    obtemEstilo("tipo_area").display="none";
    obtemEstilo("ds_referencia").width="180px";
    obtemObjeto('ds_referencia').focus()
  }
}

/* Exibe ou nao o drop de DDD (cadastro) */
function exibeAreaCadastro(fl) {
  if (fl) {
    obtemEstilo("tipo_area_cadastro").display="";
    obtemEstilo("ds_identificador_cadastro").width="117px";
    obtemObjeto('cd_tipo_area_cadastro').focus()
  } else {
    obtemEstilo("tipo_area_cadastro").display="none";
    obtemEstilo("ds_identificador_cadastro").width="180px";
    obtemObjeto('ds_identificador_cadastro').focus()
  }
}

/* Validacao do formulario de cadastro */
function verificaFormCadastro(form) {
  if (!verificaTodosCampos(form)) {
    return false;
  }
  if (form.ds_senha.value.trim().length < 6) {
    form.ds_senha.focus();
    form.ds_senha.select();
    return cancelaEnvio(form, "Informe a senha com pelo menos seis letras ou digitos.");
  }
  if (form.ds_senha.value != form.ds_senha2.value) {
    form.ds_senha.focus();
    form.ds_senha.select();
    return cancelaEnvio(form, "As senhas informadas nao sao iguais.");
  }
  return true;
}

/* Validacao dos campos de senha */
function verificaSenha(form) {
  if (form.ds_senha.value != form.ds_senha2.value) {
    form.ds_senha.focus();
    form.ds_senha.select();
    return cancelaEnvio(form, "As senhas informadas nao sao iguais.");
  }
  return true;
}

/* Exibe tela de visualizacao do cadastro */
function exibeMeuCadastro() {
  var j = window.open("", "VisualizaCadastro", "height=450, width=500, status=1, scrollbars=1, resizable=0");
  j.location.replace("Index.cfm?p=VisualizaCadastro");
  j.focus();
}

/* Cofirma a exclusao de um item */
function verificaExclusao(item) {
  if (confirm("Confirma a exclusao deste " + item + "?")) {
    document.form.excluir.value = "1";
    regraFormLista = new Array();
    return true;
  } else {
    return false;
  }
}

/* Gera flag para inclusao de item */
function incluirItem() {
  document.form.incluir.value = "1";
  regraFormLista = new Array();
  return true;
}

/* Controle das opcoes de item preferencial e atual */
function desabilitaFlAtual(campo) {
  document.form.fl_atual[0].checked=true;;
  document.form.fl_atual[0].disabled=campo.checked;
  document.form.fl_atual[1].disabled=campo.checked;
}

/* Confirma tornar um item preferencial */
function verificaPreferencial(item) {
  if (document.form.fl_preferencial && document.form.fl_preferencial.checked) {
    return confirm("Confirma tornar este o " + item + " preferencial?")
  } else {
    return true;
  }
}

/* Exige codigo de area para telefones com menos de 9 digitos */
function verificaCodigoArea(form, telefone, area) {
  var l = form[telefone].value.trim().length;
  if (l > 0 && l < 9 && form[area][form[area].selectedIndex].value.trim() == "") {
    form[area].focus();
    return cancelaEnvio(form, "Selecione o Codigo de area.");
  } else {
    return true;
  }
}

/* --------------------------------------------------
    Estrutura de validacao de formulario client side
   -------------------------------------------------- */
var regraFormLista = new Array();
var regraFormRetorno = new Array();

function regraFormObj(formulario, obrigatorio, descricao, formato, mensagem, valormin, valormax, tamanhomin, tamanhomax) {
  if (formulario == "") {
    formulario = "form";
  }
  this.formulario = formulario;
  this.obrigatorio = obrigatorio;
  this.descricao = descricao;
  this.formato = formato;
  this.mensagem = mensagem;
  this.valormin = valormin;
  this.valormax = valormax;
  this.tamanhomin = tamanhomin;
  this.tamanhomax = tamanhomax;
}

function regraForm(formulario, campo, obrigatorio, descricao, formato, mensagem, valormin, valormax, tamanhomin, tamanhomax) {
  regraFormLista[campo] = new regraFormObj(formulario, obrigatorio, descricao, formato, mensagem, valormin, valormax, tamanhomin, tamanhomax);
}

function regraFormVerifica(form) {
  verificaForm(form);
  regraFormRetorno.length = 0;
  var flfocar = false;
  var focar = undefined;
  for (i in regraFormLista) {
    var r = regraFormLista[i]; /* regra */
    /* Campo pertence ao formulario? */
    if (form.name != r.formulario) {
      continue; /* Proximo loop */
    }
    var c = form[i]; /* Campo do form */
    /* Verifica existencia do campo */
    if (!c) {
      /* Nao localizou campo citado na regra */
      return cancelaEnvio(form, 'regraFormVerifica - Campo "' + i + '" nao localizado.');
    }
    /* Verifica descricao do campo */
    if (!r.descricao) {
      /* Nao localizou descricao do campo */
      return cancelaEnvio(form, 'regraFormVerifica - Descricao do campo "' + i + '" nao localizada.');
    }
    /* Verifica clausula "obrigatorio" */
    if (r.obrigatorio) {
      /* Campo obrigatorio */
      if (c.type) {
        var t = c.type.toLowerCase();
      } else {
        var t = c[0].type.toLowerCase();
      }
      var vazio = true;
      if (t == "text" || t == "textarea" || t == "password") {
        /* Campo texto ou senha */
        vazio = c.value.trim() ? false : true;
      } else if (t == "radio") {
        /* Campo radio */
        for (i = 0; i < c.length; i++) {
          if (c[i].checked) {
            vazio = false;
            break;
          }
        }
        if (vazio) {
          c = c[0];
        }
      } else if (t == "checkbox") {
        /* Campo checkbox */
        for (i = 0; i < c.length; i++) {
          if (c[i].checked) {
            vazio = false;
            break;
          }
        }
        if (vazio) {
          c = c[0];
        }
      } else if (t == "select-one") {
        /* Drop down */
        vazio = c.selectedIndex == -1 || c[c.selectedIndex].value == "";
      } else if (t == "select-multiple") {
        /* List box */
        for (i = 0; i < c.length; i++) {
          if (c[i].selected) {
            vazio = false;
            break;
          }
        }
        if (vazio) {
          c = c[0];
        }
      }
      if (vazio) {
        if (!focar) {
          focar = c;
        }
        if (r.mensagem) {
          regraFormRetorno[regraFormRetorno.length] = r.mensagem;
        } else {
          regraFormRetorno[regraFormRetorno.length] = r.descricao + " deve ser informado.";
        }
      }
    }
    /* Verifica clausula "formato" */
    if (r.formato && c.value) {
      /* Testa formato */
      var rf = r.formato.toLowerCase(); /* regra.formato */
      var v = c.value; /* valor do campo */
      var msg = null;
      /* Verifica o tipo formato informado */
      if ("t,d,n,i,cd,c,cpf,cnpj,email".indexOf(rf) == -1) {
        return cancelaEnvio(form, 'regraFormVerifica - Formato do campo "' + i + '" invalido.');
      /* Data */
      } else if (rf == "d" && !v.isDate()) {
        flfocar = true;
        msg = r.descricao + " deve conter uma data (formato DD/MM/AAAA).";
      /* NUmero decimal */
      } else if (rf == "n" && !v.isFloat()) {
        flfocar = true;
        msg = r.descricao + " deve conter um numero valido (decimais separados por virgula).";
      /* Numero inteiro */
      } else if (rf == "i" && (isNaN(v) || !v.isInteger())) {
        flfocar = true;
        msg = r.descricao + " deve conter um numero inteiro valido.";
      /* Codigo */
      } else if (rf == "cd" && (isNaN(v) || !v.isCd())) {
        flfocar = true;
        msg = r.descricao + " deve conter um codigo numerico com ate 9 posicoes.";
      /* CPF ou CNPJ */
      } else if (rf == "c" && !filtraDigito(v).isCPF() && !filtraDigito(v).isCNPJ()) {
        flfocar = true;
        msg = r.descricao + " deve conter um CPF ou CNPJ valido.";
      /* CPF */
      } else if (rf == "cpf" && !filtraDigito(v).isCPF()) {
        flfocar = true;
        msg = r.descricao + " deve conter um CPF valido.";
      /* CNPJ */
      } else if (rf == "cnpj" && !filtraDigito(v).isCNPJ()) {
        flfocar = true;
        msg = r.descricao + " deve conter um CNPJ valido.";
      /* E-mail */
      } else if (rf == "email" && !v.isEMail()) {
        flfocar = true;
        msg = r.descricao + " deve conter um endereco valido.";
      }
      if (flfocar && !focar) {
        focar = c;
      }
      if (msg) {
        if (r.mensagem) {
          regraFormRetorno[regraFormRetorno.length] = r.mensagem;
        } else {
          regraFormRetorno[regraFormRetorno.length] = msg;
        }
      }
    }
    /* Verifica clausula "valormin" */
    if (r.valormin && c.value) {
      /* Testa valor minimo */
      if (c.value < r.valormin) {
        if (!focar) {
          focar = c;
        }
        regraFormRetorno[regraFormRetorno.length] = r.descricao + " deve ser maior ou igual a " + r.valormin + ".";
      }
    }
    /* Verifica clausula "valormax" */
    if (r.valormax && c.value) {
      /* Testa valor maximo */
      if (c.value < r.valormax) {
        if (!focar) {
          focar = c;
        }
        regraFormRetorno[regraFormRetorno.length] = r.descricao + " deve ser menor ou igual a " + r.valormax + ".";
      }
    }
    /* Verifica clausula "tamanhomin" */
    if (r.tamanhomin && c.value) {
      /* Testa tamanho minimo */
      if (c.value.length < r.tamanhomin) {
        if (!focar) {
          focar = c;
        }
        regraFormRetorno[regraFormRetorno.length] = r.descricao + " deve possuir no minimo " + r.tamanhomin + " posicoes.";
      }
    }
    /* Verifica clausula "tamanhomax" */
    if (r.tamanhomax && c.value) {
      /* Testa tamanho maximo */
      if (c.value.length > r.tamanhomax) {
        if (!focar) {
          focar = c;
        }
        regraFormRetorno[regraFormRetorno.length] = r.descricao + " deve possuir no maximo " + r.tamanhomax + " posicoes.";
      }
    }
  }
  if (regraFormRetorno[0]) {
    var m = "";
    for (i = 0; i < regraFormRetorno.length; i++) {
      m += regraFormRetorno[i] + "\n";
    }
    cancelaEnvio(form, m);
    if (focar) {
      if (focar.type == "text" || t == "password") {
        focar.select();
      }
      focar.focus();
    }
    return false;
  }

  return true;
}
/* -------------------------------------------------- */

/* Verifica exigencia dos dados complementares quando e-mail for informado */
function verificaCadastroEMail(indice) {
  regraFormLista["cd_tipo_email" + indice].obrigatorio = obtemObjeto("ds_email" + indice).value.trim() != "";
}

/* Verifica exigencia dos dados complementares quando telefone for informado */
function verificaCadastroTelefone(indice) {
  var t = obtemObjeto("ds_telefone" + indice).value.trim() != "";
  regraFormLista["cd_tipo_operadora" + indice].obrigatorio = t;
  regraFormLista["cd_tipo_telefone" + indice].obrigatorio = t;
}

/* Verifica exigencia de CNPJ e Razao Social no cadastro de Parceiro */
function verificaCNPJRazao(item) {
  if (item[item.selectedIndex].value == 10) {
    var d = "none";
    var o = false;
  } else {
    var d = "";
    var o = true;
  }
  obtemEstilo("CNPJ").display=d;
  obtemEstilo("Razao").display=d;
  regraFormLista["ds_cpf_cnpj"].obrigatorio = o;
  regraFormLista["ds_razao_social"].obrigatorio = o;
}

/* Funcoes do Menu */
function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
/* -------------------------------------------------- */
