

    function isDataLessToday(dateToValidate)
    {
        var max_dt = new Date();
        var today = Date.UTC( max_dt.getFullYear(), max_dt.getMonth()+1, max_dt.getDate(),0,0,0);

        
        var dateToValidate_Day;
        var dateToValidate_Month;
        var dateToValidate_Year;
        
        var separator;
        var countSeparators = 0;

       
        // Valida se é data com pontos de separador
        if(dateToValidate.toString().indexOf(".",0) > -1)
        {
            separator = ".";       
            
        }else
        {
            return false;
        }
        
         // Se encontrou um separador válido, verifica se existem 2
        countSeparators = 1;

        // guardar a posição do primeiro encontrado
        lastPos = dateToValidate.toString().indexOf(separator,0);  

        // Valida se existe outro separador na data, têm de existir 2           
        if(dateToValidate.toString().indexOf(separator,lastPos+1) == -1)
        {
            return false;
        }
        countSeparators = 2;

        // Sabendo que existem 2 ocorrências do separador
        dateToValidate_Day = dateToValidate.toString().split(separator)[0];
        dateToValidate_Month = dateToValidate.toString().split(separator)[1]; // os mmonth começam em zero
        dateToValidate_Year = dateToValidate.toString().split(separator)[2];

        if(dateToValidate_Year.length == 2)        
            return false; // dateToValidate_Year = "20" + dateToValidate_Year;
        
//        alert(dateToValidate_Day + " " + dateToValidate_Month + " " + dateToValidate_Year );
        
        var inserted_dt = new Date();
        var insertedDate = Date.UTC(dateToValidate_Year, dateToValidate_Month ,dateToValidate_Day,0,0,0);
        
//        alert("Valida Date:" + parseFloat(insertedDate) + "\n" + "------today:" + parseFloat(today));

        if ( parseFloat(insertedDate) < parseFloat(today) ){
//            alert("A data inserida é válida por ser < data actual.");
            return true;
        } else
        {
//            alert("A data inserida tem de ser inferior à data actual.");
            return false;
        }
    }



function isNumeric(x) {

//alert(x);
    
    if(x.toString() == '')
        return null;

    // I use this function like this: if (isNumeric(myVar)) { } 
    // regular expression that validates a value is numeric 
    var RegExp = /^(-)?(\d*)(\.?)(\d*)$/; // Note: this WILL allow a number that ends in a decimal: -452. 
    // compare the argument to the RegEx 
    // the 'match' function returns 0 if the value didn't match 
    var result = x.toString().match(RegExp);

    return result;
}


function isEmail(email) {
  var str = email; // email string
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
  if (!reg1.test(str) && reg2.test(str)) { // if syntax is valid
    return true;
  }
  return false;
}



function CheckNIF(nif){
 var c;   

 if(nif == '999999999')
    return true;
 
 // verifica o tamanho
 if(nif.length != 9)
  return false;
            
 // valida primeiro digito
 c = nif.charAt(0);
 if((c=='0')||(c=='3')||(c=='4')||(c=='7')||(c=='8'))
  return false;
    
 // algoritmo de validação
 return AlgoritmoValidacao(nif);
}
                
function CheckBI(nbi, lastDigit){
 var BIformated;
 // verifica tamanhos
 if((nbi.length < 7) || (nbi.length > 8))
  return false;
 if(lastDigit.length != 1)
  return false;
 
 // prepara o numero de BI formatado
 if(nbi.length == 8){
  BIformated = nbi + lastDigit;
 } else {
  BIformated = '0' + nbi + lastDigit;
 }
 
 // algoritmo de validação
 return AlgoritmoValidacao(BIformated);
}

function AlgoritmoValidacao(numFormated){
 var pos, ctl, val = 0;
 for(pos=0; pos<8; ++pos){
  val += parseInt(numFormated.charAt(pos)) * (9 - pos);
 }
                   
 ctl = 0;
 if((val%11) != 0)
  ctl = (11 - val % 11) % 10;
 return ctl == parseInt(numFormated.charAt(8));
}
