/*
 * Variaveis globais
 **/
//CARACTERES DIVERSOS
var letrasmai = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var letrasmin = "abcdefghijklmnopqrstuvwxyz";
var numeros   = "0123456789";
var emails    = letrasmin+"_."+numeros;
var telefones = "()-x "+numeros;
//CARACTERES UNICOS
var emailsc   = "@";
var moeda     = ",";
//MASCARAS
var datas     = "  /  /    ";
var horas     = "  :  ";

/*
 * Tipo do navegador
 **/
var agt = navigator.userAgent.toLowerCase();
var is_ie	    = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_opera  = (agt.indexOf("opera") != -1);
var is_mac    = (agt.indexOf("mac") != -1);
var is_mac_ie = (is_ie && is_mac);
var is_win_ie = (is_ie && !is_mac);
var is_gecko  = (navigator.product == "Gecko");

/*
 * Abre uma janela pop-up no centro da tela
 **/
function abrePop(pPagina,pLargura,pAltura,pScroll,pResize,autoClose) {
  var name = pPagina.substr(pPagina.lastIndexOf("/")+1,pPagina.lastIndexOf(".")-pPagina.lastIndexOf("/")-1);
  if(pLargura = "auto"){
  pLargura = window.screen.width;
  }
  if(pAltura = "auto"){
  pAltura = window.screen.height;
  }
  var posX = (window.screen.width - pLargura - 16) / 2;
  var posY = (window.screen.height - pAltura) / 2;
  var win = window.open(pPagina,"name","width=" + pLargura + ",height=" + pAltura + ",top=" + posY + ",left=" + posX + ",scrollbars=" + pScroll + (pResize ? ",resizable=yes" : ""));
  if(win){
    win.focus();
    if (autoClose){
      if (is_ie) {
        attachEvent("onunload", function(){closePop(win)});
      } else {
        addEventListener("unload", function(){closePop(win)}, true);
      }
    }
  }
}

/*
 * Testa se a popup existe e fecha a mesma
 **/
function closePop(obj){
  if(!isnull(obj))
    if(!obj.closed)
      obj.close();
  return true;
}

/*
 * Executa o metodo submit do formulario
 **/
function doSubmit(tform){
  if (tform) {
    if (!tform.onsubmit || tform.onsubmit()){
      tform.submit();
    }
  } else {
    alert("Formulario nao encontrado!");
  }
}

/*
 * Verifica se a tecla pressionada pode ser incluida no campo
 **/
function testaMascara(obj,str,strone,mask,mykey){
  //SE O CAMPO EH READONLY CAI FORA
  if (obj.readOnly) return false;

  if (document.selection){
      document.selection.createRange().text = "";
  }else if (obj.selectionStart || obj.selectionStart == "0"){
    var selectionStart = obj.selectionStart;
    var selectionEnd = obj.selectionEnd;
    obj.value = obj.value.substring(0, selectionStart) + obj.value.substring(selectionEnd);
    obj.setSelectionRange(selectionStart, selectionStart);
  }

  //VERIFICA TECLA EH IGUAL A MASCARA OU VALIDA EM "str" E "strone"
  if (mykey == mask.charAt(obj.value.length) && mykey != " " && mykey != "%") return true;
  if ((str+strone)!="" && (str+strone).indexOf(mykey) ==-1) return false;
  if (strone!="" && obj.value.indexOf(mykey)!=-1 && strone.indexOf(mykey)!=-1) return false;

  //VERIFICA MASCARA
  if(mask.charAt(0)=="%"){
    var mylength=0;
    var i=mask.length;
    while(i>0 && mylength==0){
      i--;
      if(obj.value.lastIndexOf(mask.charAt(i))!=-1) mylength=i;
    }
    obj.value=obj.value.substr(0,obj.value.length-mylength)+mykey+mask.substr(1,mask.length);
    return false;
  }

  if(mask.charAt(mask.length-1)=="%"){
    if(obj.value=="") obj.value=mask.substr(0,mask.indexOf("%"));
    return true;
  }

  var tam=obj.value.length;
  while (mask.charAt(tam) && mask.charAt(tam)!=" " && tam<=mask.length){
    if(mask.charAt(tam)!=" ") obj.value+=mask.charAt(tam);
    tam++;
  }
  if(mask.substr(tam+1,mask.length-tam).indexOf(" ")==-1 && tam<mask.length && mask.length-tam!=1){
    obj.value+=mykey+mask.substr(tam+1,mask.length-tam);
    return false;
  }

  if(obj.value.length<mask.length || mask.length==0) return true;
  if(obj.value.length>mask.length) obj.value=obj.value.substr(0,mask.length);
  return false;
}

/*
 * Verifica a mascara e retorna se a tecla pressionada pode ser incluida no campo
 **/
function maskedit(eve,obj,str,strone,mask) {
  var codesIE = new Array(8,9,13);
  var codesMZ = new Array(8,9,13,33,35,36,37,38,39,40,46,112,113,114,115,116,117,118,119,120,121,122,123);
  if (!eve) eve = window.event;
  var code;
  var li;
  if (is_gecko){
    code = eve.keyCode;
    for (li=0; li<codesMZ.length; li++) if(code == codesMZ[li]) return true;
    code = eve.charCode;
  }else{
    code = eve.keyCode ? eve.keyCode : eve.which ? eve.which : void 0;
    for (li=0; li<codesIE.length; li++) if(code == codesIE[li]) return true;
  }
  return testaMascara(obj,str,strone,mask,String.fromCharCode(code));
}

/*
 * Verifica se o valor eh valido
 **/
function isnull(str){ return (str+"" == "null"); }
function isundef(str){ return (str+"" == "undefined"); }
function isblank(str){
  return (str+"" == "") || (str+"" == ".") || (str+"" == " ");
/*
  var invalid = " .\n\t";
  for(var li=0;li<str.length;li++) {
    if(invalid.indexOf(str.charAt(li)) != -1) return false;
  }
  return true;
*/
}

/*
 * Retorna se o campo TEXT foi preenchido
 **/
function okText(obj,desc,value){
  if (isnull(obj.value) || isundef(obj.value) || ""+obj.value == "" || obj.value == value) {
    alert("Preencha o campo "+desc+"!");
    obj.focus();
    return false;
  }
  if (isblank(obj.value)) {
    alert("Preencha corretamente o campo "+desc+"!");
    obj.focus();
    return false;
  }
  return true;
}

/*
 * Verifica se o numero de caracteres nao excede o limite
 **/
function okLeng(obj,desc,tam){
  if (obj.value.length>tam) {
    alert("O numero de caracteres excedeu o limite no campo "+desc+"!");
    obj.focus();
    return false;
  } else return true;
}
function okEqualLeng(obj,desc,tam){
  if (obj.value.length != tam) {
    alert("O campo "+desc+" deve ter "+tam+" digitos!");
    obj.focus();
    return false;
  } else return true;
}
function okLessLeng(obj,desc,tam){
  if (obj.value.length < tam) {
    alert("O campo "+desc+" deve ter no minimo "+tam+" digitos!");
    obj.focus();
    return false;
  } else return true;
}

/*
 * Retorna se o campo SELECT foi selecionado
 **/
function okList(obj,desc){
  if (isblank(obj.value)) {
    alert("Selecione o campo "+desc+"!");
    obj.focus();
    return false;
  } else return true;
}

/*
 * Retorna se o campo RADIO foi marcado
 **/
function okRadio(obj,desc){
  if (!obj.length) {
    if(obj.checked) return true;
    alert("Selecione o campo "+desc+"!");
    obj.focus();
    return false;
  }

  for(var li=0;li<obj.length;li++){
    if(obj[li].checked) return true;
  }
  alert("Selecione o campo "+desc+"!");
  obj[0].focus();
  return false;
}

/*
 * Retorna se o campo DATA foi preenchido corretamente
 **/
function okDate(obj,desc) {
  if (obj.value == "") return true;
  
  var meses = new Array(31,29,31,30,31,30,31,31,30,31,30,31);

  if (obj.value.length==5) obj.value = obj.value + "/2004";
  if (obj.value.length<10 && obj.value.substr(1,1)=="/") obj.value = "0"+obj.value;
  if (obj.value.length<10 && obj.value.substr(4,1)=="/") obj.value = obj.value.substr(0,3)+"0"+obj.value.substr(3);
  if (obj.value.length==8 && obj.value.substr(2,1)=="/" && obj.value.substr(5,1)=="/") obj.value = obj.value.substr(0,6)+"20"+obj.value.substr(6);

  if (obj.value.substr(2,1)!="/" || obj.value.substr(5,1)!="/" || isNaN(obj.value.substr(0,2)) || isNaN(obj.value.substr(3,2)) || isNaN(obj.value.substr(6,4))){
    alert("Preencha corretamente o campo "+desc+"!");
    obj.focus();
    return false;
  }
  
  if (0+obj.value.substr(6,4)<1900 || 0+obj.value.substr(6,4)>2010){
    alert("Ano invalido no campo "+desc+"!");
    obj.focus();
    return false;
  }
  
  if (0+obj.value.substr(3,2)<1 || 0+obj.value.substr(3,2)>12){
    alert("Mes invalido no campo "+desc+"!");
    obj.focus();
    return false;
  }
  
  if (0+obj.value.substr(0,2)<1 || 0+obj.value.substr(0,2)>31 || 0+obj.value.substr(0,2) > meses[obj.value.substr(3,2)-1]){
    alert("Dia invalido para o mes especificado no campo "+desc+"!");
    obj.focus();
    return false;
  }
  
  return true;
}

/*
 * Retorna se o campo EMAIL foi preenchido corretamente
 **/
function okEmail(obj,desc,value) {
  if (!okText(obj,desc,value)) {
    return false;
  } else
  if((obj.value.indexOf("@")<2)||(obj.value.substring(obj.value.indexOf("@")+1,obj.value.length).indexOf(".")<2) ||
     (obj.value.indexOf("@") != obj.value.lastIndexOf("@"))||(obj.value.lastIndexOf(".")>=obj.value.length-2)){
       alert("Preencha corretamente o campo "+desc+"!");
       obj.focus();
       return false;
  } else return true;
}

/*
 * Verifica se o digito de um CPF/CNPJ eh valido
 */
function okCPFCNPJ(obj, desc) {
	var s_aux = obj.value;
	sOK = false;
	if (s_aux.length == 11 ) {
		var d1, d2;
		var digito1, digito2, resto;
		var digitoCPF;
		var nDigResult;
		d1 = d2 = 0;
		digito1 = digito2 = resto = 0;
		for (var n_Count = 1; n_Count < s_aux.length -1; n_Count++) {
			digitoCPF = eval(s_aux.charAt(n_Count -1));
			d1 = d1 + ( 11 - n_Count ) * digitoCPF;
			d2 = d2 + ( 12 - n_Count ) * digitoCPF;
		}
		resto = (d1 % 11);
		if (resto < 2) digito1 = 0;
		else digito1 = 11 - resto;
		d2 += 2 * digito1;
		resto = (d2 % 11);
		if (resto < 2) digito2 = 0;
		else digito2 = 11 - resto;
		var nDigVerific = s_aux.substring (s_aux.length-2, s_aux.length);
		nDigResult = (""+digito1) + (""+digito2);
		sOK = nDigVerific == nDigResult;
	} else if (s_aux.length == 14) {
		var soma = 0, dig;
		var cnpj_calc = s_aux.substring(0,12);
		var chr_cnpj = s_aux;
		for(var i = 0; i < 4; i++ ) soma += chr_cnpj.charAt(i) * (6 - (i + 1));
		for(var i = 0; i < 8; i++ ) soma += chr_cnpj.charAt(i+4) * (10 - (i + 1));
		dig = 11 - (soma % 11);
		cnpj_calc += ( dig == 10 || dig == 11 ) ? "0" : ""+dig;
		soma = 0;
		for (var i = 0; i < 5; i++ ) soma += chr_cnpj.charAt(i) * (7 - (i + 1));
		for (var i = 0; i < 8; i++ ) soma += chr_cnpj.charAt(i+5) * (10 - (i + 1));
		dig = 11 - (soma % 11);
		cnpj_calc += ( dig == 10 || dig == 11 ) ? "0" : ""+dig;
		sOK = s_aux == cnpj_calc;
	}
	if (!sOK) {
       alert(desc);
       obj.focus();
	}
	return sOK;
}