// By Rodrigo Araujo
//JavaScript Document
// DOM para Opera para pegar corretamente os elementos
isDOM = document.getElementById ? 1:0; 

//******************************************************************************
function validar(f) 
//******************************************************************************
{    
     for( var i=0; i < campos_checar.length; ++i ) 
     { if (! campos_checar[i][1] (f,campos_checar[i][0],campos_checar[i][2],campos_checar[i][3]) ) 
		   { return false ; }
     }
   
    alert('Sua mensagem foi enviado com sucesso!');     
    return true ;
}

//******************************************************************************
//
//******************************************************************************
function stripSpaces(x) {
    while (x.substring(0,1) == ' ') x = x.substring(1);
    return x;
}

//******************************************************************************
function empty(x) { if (x.length > 0) return false; else return true; }
//******************************************************************************

//******************************************************************************
// Função para TEXT and TEXTAREA
//******************************************************************************
function chkForNonblank (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]
    if ( ! empty(stripSpaces(e.value))  ) 
		return true; 
		alert( msg ); 
		e.focus();
		e.select();
	
    return false;
}

//******************************************************************************
// Função para RADIO e CHECKBOX
//******************************************************************************
function chkForChecked (f,fld,msg) {
    var frm = f ;
    var e ;
    var j = 0 ; // Qual elemento de RADIO/CHECKBOX a retornar.
    if(isDOM) {
    // Para Opera   
        e = document.getElementsByTagName('INPUT'); // returns a Node List
        for (var i=0; i<=e.length-1; ++i){
            if(e[i].name == fld) {
                if(j==0)j=i;
                if ( e[i].checked ) return true;
            }
        }
        
    }else{
    
        e = f.elements[fld] ; // retorna a array de elementos
        
        for( var i=0; i < e.length; ++i ) { 
            if ( e[i].checked ) { 
                return true;
                break; 
            } 
        }
    }
    
    alert( msg );
    e[j].focus() ;
    return false; 
}

//******************************************************************************
// Funcao para SELECT
//******************************************************************************
function chkForIsSelected (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]
    if ( ! e.selectedIndex == 0 ) return true; 
    alert( msg );
    e.focus() ;
    return false;
}

//******************************************************************************
// Funcao para checar entrada de valores numéricos
//******************************************************************************
function chkNumeric (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]
    if ( !isNaN(parseInt(e.value)) ) return true; 
    alert( msg );
    e.focus() ;
    return false;
}

//******************************************************************************
// Fucao para validar email.
//******************************************************************************
function chkEmail (f,fld,msg) {
  var frm = f ;
  var e = f.elements[fld]
  if (e.value == null){
    alert(msg);
    e.focus();
    return (false);}
  //tirando os espaços vazios no endereço
  for (x = 1; x < e.value.length; x ++) 
     { e.value= e.value.replace(' ', '')}
	
  var emailStr
  emailStr = e.value;
  var emailPat=/^(.+)@(.+)$/
  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
  var validChars="\[^\\s" + specialChars + "\]"
  var quotedUser="(\"[^\"]*\")"
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
  var atom=validChars + '+'
  var word="(" + atom + "|" + quotedUser + ")"
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
  var matchArray = emailStr.match(emailPat)
  if (matchArray==null){
    alert('O email informado não é válido.');
    e.value="";
    e.focus();
    return (false);}
	
  var user=matchArray[1]
  var domain=matchArray[2]
  if (user.match(userPat)==null){
    alert("O seu Nome de usuário parece não ser válido.");
    e.value="";
    e.focus();
    return (false);}
	
  var IPArray=domain.match(ipDomainPat)
  if (IPArray!=null){
  for (var i=1;i<=4;i++){
  if (IPArray[i]>255){
    alert('O endereço do IP parece não ser válido!');
    e.value="";
    e.focus();
    return (false);}
  }
  return true;}

  var domainArray=domain.match(domainPat)
  if (domainArray==null){
    alert('O domínio parece não ser válido !');
    e.value="";
    e.focus();
    return (false);}
	
  var atomPat=new RegExp(atom,"g")
  var domArr=domain.match(atomPat)
  if (domArr[domArr.length-1].length<2 ||
    domArr[domArr.length-1].length>3){
    alert('O endereço deve conter três letras de domínio, ou duas letras do país.');
    e.value="";
    e.focus();
    return (false);}
	
  if (domArr.length<2){
    var errStr="Este endereço não está encontrando o seu provedor!"
    alert(errStr);
    e.value="";
    e.focus();
    return (false);}
	
return true;
}

//******************************************************************************
// Função para validação de Datas - Permitindo valores nulos na datas
//******************************************************************************
function chkDate(f,fld,msg,vazio) { 
  var frm = f 
  var e = f.elements[fld]
	dataStr = e.value;

  if (vazio == "sim") {
     return true;
  } else { 
	   if (dataStr == "") {
        alert(msg);e.focus(); e.select(); return false;
	   }
     var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; 
     var matchArray = dataStr.match(datePat); // formato da data ok? 
     if (matchArray == null) {
        alert("Data Inválida com formato inválido.");
				e.focus(); 
				e.select(); 
				return false;
     } 
     dia= matchArray[1]; 
     mes = matchArray[3]; 
     ano = matchArray[4]; 

     if (dia < 1 || dia > 31) {
   	    alert("Favor digitar um Dia Válido."); 
				e.focus(); 
				e.select();
				return false;
     } 

     if ((mes==4 || mes==6 || mes==9 || mes==11) && dia==31) {
        alert("O Mês "+mes+" não possue 31 dias!"); 
				e.focus(); 
				e.select(); 
				return false;
     } 

     if (mes == 2) {
        // checando Fevereiro para dia 29  
	      var isleap = (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0)); 
	      if (dia>29 || (dia==29 && !isleap)) {
	         alert("Fevereiro de " + ano + " não tem " + dia + " dias!"); 
					 e.focus(); 
					 e.select(); 
					 return false;
        } 
     } 

     if (mes < 1 || mes > 12) {
        alert("Favor digitar um Mês Válido."); e.focus(); e.select(); 
				return false;
     } 

     return true; // Data válida
		 
  }
}