// Verifica se a data está correta
function verifica_data(data, sMessage) {
  if (sMessage == undefined || sMessage == null) {
    sMessage = '';
  }

  var mydata = '';
  mydata = data.value.replace(' ', '');
  tam = mydata.length;

  situacao = "";

  if (tam == 7) {
    dia = "01";
    mes = (data.value.substring(0,2));
    ano = (data.value.substring(3,7));
  } else {
    if (tam < 8) { situacao = "falsa"; }
    dia = (data.value.substring(0,2));
    mes = (data.value.substring(3,5));
    ano = (data.value.substring(6,10));
  }

  // verifica o dia valido para cada mes
  if ((dia < 1) || (dia < 1 || dia > 30) && (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) {
    if (dia > 30) { // Supoe q o usuario quer digitar o ultimo dia do mes
      if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
        dia = 30;
      } else {
        dia = 31;
      }
      data.value = dia + '/' + mes + '/' + ano;
      verifica_data(data, sMessage);
      return;
    }
    situacao = "falsa";
  }

  // verifica se o mes e valido
  if (mes < 1 || mes > 12 ) {
    if (mes > 12) { // Se mes maior q 12, setar pra 12 ou setar pra 01
      mes = '12';
    } else {
      mes = '01';
    }
    if (tam == 7) {
      data.value = mes + '/' + ano;
    } else {
      data.value = dia + '/' + mes + '/' + ano;
    }
    verifica_data(data, sMessage);
    return;
//      situacao = "falsa";
  }

  // verifica se e ano bissexto
  if (mes == 2 && ( dia < 1 || dia > 29 || (dia > 28 && (parseInt(ano / 4) != ano / 4)))) {
    if (parseInt(ano / 4) != ano / 4) {// Forcando a data a ser valida
      dia = 28;
    } else {
      dia = 29;
    }
    if (tam == 7) {
      data.value = mes + '/' + ano;
    } else {
      data.value = dia + '/' + mes + '/' + ano;
    }
    verifica_data(data, sMessage);
    return;

//      situacao = "falsa";
  }

  if (data.value == "") {
    situacao = "falsa";
  }

  if (situacao == "falsa") {
    if (sMessage != '') {
      alert(sMessage);
    } else {
      alert("Data inválida!");
    }
    data.focus();
    data.select();
  }
}

// Datas em formato dd/mm/aaaa
// Para utilizá-las, devem ser associadas com os seguintes eventos:
//   onKeyDown  - trataDataBS(this, event)
//   onKeyPress - validaTeclaData(this, event)
//   onKeyUp    - mascara_data(this, event)
//   onBlur     - completa_ano(this)
function trataDataBS(campo, event) {
  var tecla;
  var BACKSPACE = 8;

  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla = event.which;
  else
    tecla = event.keyCode;

  if ((tecla == BACKSPACE) && ((campo.value.slice(-1) == '/') || (campo.value.slice(-1) == '-')))
    campo.value = campo.value.slice(0, -1);
}

function validaTeclaData(campo, event) {
  var ENTER = 13;
  var BACKSPACE = 8;
  var key;
  var tecla;

  CheckTAB=true;
  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla= event.which;
  else
    tecla= event.keyCode;

  key = String.fromCharCode(tecla);

  if (tecla == ENTER) {
    campo.blur();
    window.setTimeout("document." + campo.form.name + ".submit()", 500);
    return false;
  }

  if (tecla == BACKSPACE) {
    if ((campo.value.slice(-1) == '/') || (campo.value.slice(-1) == '-'))
      campo.value = campo.value.slice(0, -1);
    return true;
  }

  if ((tecla == 0) || isNum(key))
    return true;

  return false;
}

function mascara_data(dataField, event) {
  var data = dataField.value;
  var mydata = '';
  var tecla;

  CheckTAB=true;
  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla = event.which;
  else
    tecla = event.keyCode;
  if ((tecla == 9) || (tecla == 16))
    return true;

  data = data.replace(/[^0-9]/g, "");
  if (data.length > 0) {
    mydata = data.slice(0, 2);
    if (data.length > 1) {
      mydata = mydata + '/';
      if (data.length > 2) {
        mydata = mydata + data.slice(2, 4);
        if (data.length > 3) {
          mydata = mydata + '/';
          if (data.length > 4) {
            mydata = mydata + data.slice(4, 8);
          }
        }
      }
    }
  }
  dataField.value = mydata;
}

function completa_ano(dataField) {
  var data = dataField.value;
  var mydata = '';

  mydata = mydata + data;
  diames = (dataField.value.substring(0,6));

  if (mydata.length == 8) {
    ano = (dataField.value.substring(6,8));
    if (ano > 20) {
      dataField.value = diames + "19" + ano;
    } else {
      dataField.value = diames + "20" + ano;
    }
  } else if (mydata.length == 6) {
    ano = (dataField.value.substring(6,8));
    Today = new Date();
    dataField.value = diames + Today.getFullYear();
  }

  if (mydata.length != 0) {
    verifica_data(dataField);
  }
}

function isNum(caractere) {

  var strValidos = "0123456789";
  if (strValidos.indexOf(caractere) == -1) {
    return false;
  }

  return true;
}

/*
* função para permitir a digitação de números decimais e inteiros
*/
function forceNumericInput(event, This, AllowDecimal, AllowMinus) {
  if(arguments.length == 1) {
    var s = This.value;
     // garante que o sinal de "-" seja o primeiro do índice
     var i = s.lastIndexOf("-");
     if(i == -1)
       return;
     if(i != 0)
       This.value = s.substring(0,i)+s.substring(i+1);
     return;
  }

  if (window.event) {
    oEvent = event.keyCode;
  } else {
    oEvent = event.which;
  }

  switch(oEvent) {
    case 0:     // TAB FF
    case 8:     // backspace
    case 9:     // tab
    case 37:    // left arrow
    case 39:    // right arrow
    case 46:    // delete
    case 96:    // Num 0
    case 97:    // Num 1
    case 98:    // Num 2
    case 99:    // Num 3
    case 100:    // Num 4
    case 101:    // Num 5
    case 102:    // Num 6
    case 103:    // Num 7
    case 104:    // Num 8
    case 105:    // Num 9
      event.returnValue = true;
      return;
  }

  // sinal de número de negativo
  if(oEvent == 189) {
    if(AllowMinus == false) {
      CancelEventExecution(event);
      return;
    }
    // aguarda até que o controle tenha sido atualizado
    var s = "ForceNumericInput(document.getElementById('"+This.id+"'))";
    setTimeout(s, 250);
    return;
  }

  if(AllowDecimal && oEvent == 188) {
    if(This.value.indexOf(",") >= 0) {
      // restringe a digitação de apenas uma vírgula
      CancelEventExecution(event);
      return;
    }
    event.returnValue = true;
    return;
  }

  // permite caracteres entre 0 e 9
  if(oEvent >= 48 && oEvent <= 57) {
    event.returnValue = true;
    return;
  }

  CancelEventExecution(event);
}

/*
* Cancela a execução de uma function mapeada por um evento
*/
function CancelEventExecution(event) {
  if (navigator.appName == "Netscape") {
    event.preventDefault();
  } else {
    event.returnValue = false;
  }
}

/*
 * Muda o foco do elemento conforme o id do input passado
 */
function inputFocus(sValor, iNumChars, iIdInput) {
  if (sValor.length >= iNumChars) {
    document.getElementById(iIdInput).focus();
  }

}

function getEndereco(iCep) {
  // Se o campo CEP não estiver vazio
  if($.trim(iCep) != ""){
    //document.getElementById("load").style.display = 'block';
      /*
          Para conectar no serviço e executar o json, precisamos usar a função
          getScript do jQuery, o getScript e o dataType:"jsonp" conseguem fazer o cross-domain, os outros
          dataTypes não possibilitam esta interação entre domínios diferentes
          Estou chamando a url do serviço passando o parâmetro "formato=javascript" e o CEP digitado no formulário
          http://cep.republicavirtual.com.br/web_cep.php?formato=javascript&cep="+$("#cep").val()
      */
      $.getScript("http://cep.republicavirtual.com.br/web_cep.php?formato=javascript&cep="+iCep, function(){
          // o getScript dá um eval no script, então é só ler!
          //Se o resultado for igual a 1
          if(resultadoCEP["resultado"] && resultadoCEP["bairro"] != ""){
              // troca o valor dos elementos
              $("#address_1").val(unescape(resultadoCEP["tipo_logradouro"])+": "+unescape(resultadoCEP["logradouro"]));
              $("#bairro").val(unescape(resultadoCEP["bairro"]));
              $("#city").val(unescape(resultadoCEP["cidade"]));
              //$("#estado").val(unescape(resultadoCEP["uf"]));
              //$("#zone_id").val(unescape(441));
              //$("#enderecoCompleto").show("slow");
              $("#numero").focus();

              // Array com os códigos dos Estados
              aEstados = new Array();
              aEstados['AL'] = 441;
              aEstados['AP'] = 442;
              aEstados['AM'] = 443;
              aEstados['BA'] = 444;
              aEstados['CE'] = 445;
              aEstados['DF'] = 446;
              aEstados['ES'] = 447;
              aEstados['GO'] = 448;
              aEstados['MA'] = 449;
              aEstados['MT'] = 450;
              aEstados['MS'] = 451;
              aEstados['MG'] = 452;
              aEstados['PA'] = 453;
              aEstados['PB'] = 454;
              aEstados['PR'] = 455;
              aEstados['PE'] = 456;
              aEstados['PI'] = 457;
              aEstados['RN'] = 459;
              aEstados['RS'] = 460;
              aEstados['RJ'] = 458;
              aEstados['RO'] = 461;
              aEstados['RR'] = 462;
              aEstados['SC'] = 463;
              aEstados['SP'] = 464;
              aEstados['SE'] = 465;
              aEstados['TO'] = 466;

              //document.getElementById("load").style.display = 'none';
              //validate()
              $('select[name=\'zone_id\']').load('index.php?route=account/address/zone&country_id='+$('#country_id').val()+'&zone_id='+aEstados[unescape(resultadoCEP["uf"])]);
          }else{
              alert("Cep desconhecido");
              //$("#enderecoCompleto").show("slow");
              return false;
          }
      });
  } else {
        alert('Antes, preencha o campo CEP!')
    //document.getElementById("load").style.display = 'none';
  }

}

function formataCampos(objeto, sMask, evtKeyPress) {
  var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

  if(document.all) { // Internet Explorer
    nTecla = evtKeyPress.keyCode;
  } else if(document.layers) { // Nestcape
    nTecla = evtKeyPress.which;
  } else {
    nTecla = evtKeyPress.which;
    if (nTecla == 8) {
        return true;
    }
  }

  sValue = objeto.value;

  // Limpa todos os caracteres de formatação que
  // já estiverem no campo.
  sValue = sValue.toString().replace( "-", "" );
  sValue = sValue.toString().replace( "-", "" );
  sValue = sValue.toString().replace( ".", "" );
  sValue = sValue.toString().replace( ".", "" );
  sValue = sValue.toString().replace( "/", "" );
  sValue = sValue.toString().replace( "/", "" );
  sValue = sValue.toString().replace( ":", "" );
  sValue = sValue.toString().replace( ":", "" );
  sValue = sValue.toString().replace( "(", "" );
  sValue = sValue.toString().replace( "(", "" );
  sValue = sValue.toString().replace( ")", "" );
  sValue = sValue.toString().replace( ")", "" );
  sValue = sValue.toString().replace( " ", "" );
  sValue = sValue.toString().replace( " ", "" );
  fldLen = sValue.length;
  mskLen = sMask.length;

  i = 0;
  nCount = 0;
  sCod = "";
  mskLen = fldLen;

  while (i <= mskLen) {
    bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))
    bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

    if (bolMask) {
      sCod += sMask.charAt(i);
      mskLen++; }
    else {
      sCod += sValue.charAt(nCount);
      nCount++;
    }

    i++;
  }

  objeto.value = sCod;

  if (nTecla != 8) { // backspace
    if (sMask.charAt(i-1) == "9") { // apenas números...
      return ((nTecla > 47) && (nTecla < 58)); }
    else { // qualquer caracter...
      return true;
    }
  }
  else {
    return true;
  }
}
