// ******************************************************************
// Conta o número de caracteres numa textarea
// ******************************************************************

var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}


function displaylimit(theform,thelimit){
var limit_text='<b><span id="'+theform.toString()+'">'+thelimit+'</span></b>'
if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
}
}

// ******************************************************************
// ENTER
// ******************************************************************
function submitenter(myfield,e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;

if (keycode == 13)
   {
   myfield.form.submit();
   return false;
   }
else
   return true;
}

// ******************************************************************
// Só Numeros
// ******************************************************************
function numbersonly(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

// numbers
else if ((("0123456789").indexOf(keychar) > -1))
   return true;

// decimal point jump
else if (dec && (keychar == ","))
   {
   myfield.form.elements[dec].focus();
   return false;
   }
else
   return false;
}

// ******************************************************************
// Numeros e Letras
// ******************************************************************
function letternumber(e)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);
keychar = keychar.toLowerCase();

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

// alphas and numbers
else if ((("abcdefghijklmnopqrstuvwxyz0123456789").indexOf(keychar) > -1))
   return true;
else
   return false;
}

// ******************************************************************
// Numeros com casas decimais
// ******************************************************************
function extractNumber(obj, decimalPlaces, allowNegative)
{
  var temp = obj.value;
  
  // avoid changing things if already formatted correctly
  var reg0Str = '[0-9]*';
  if (decimalPlaces > 0) {
    reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
  } else if (decimalPlaces < 0) {
    reg0Str += '\\.?[0-9]*';
  }
  reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
  reg0Str = reg0Str + '$';
  var reg0 = new RegExp(reg0Str);
  if (reg0.test(temp)) return true;

  // first replace all non numbers
  var reg1Str = '[^0-9' + (decimalPlaces != 0 ? ',' : '') + (allowNegative ? '-' : '') + ']';
  var reg1 = new RegExp(reg1Str, 'g');
  temp = temp.replace(reg1, '');

  if (allowNegative) {
    // replace extra negative
    var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
    var reg2 = /-/g;
    temp = temp.replace(reg2, '');
    if (hasNegative) temp = '-' + temp;
  }
  
  if (decimalPlaces != 0) {
    var reg3 = /\,/g;
    var reg3Array = reg3.exec(temp);
    if (reg3Array != null) {
      // keep only first occurrence of .
      //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
      var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
      reg3Right = reg3Right.replace(reg3, '');
      reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
      temp = temp.substring(0,reg3Array.index) + ',' + reg3Right;
    }
  }
  
  obj.value = temp;
}

function blockNonNumbers(obj, e, allowDecimal, allowNegative)
{
  var key;
  var isCtrl = false;
  var keychar;
  var reg;
    
  if(window.event) {
    key = e.keyCode;
    isCtrl = window.event.ctrlKey
  }
  else if(e.which) {
    key = e.which;
    isCtrl = e.ctrlKey;
  }
  
  if (isNaN(key)) return true;
  
  keychar = String.fromCharCode(key);
  
  // check for backspace or delete, or if Ctrl was pressed
  if (key == 8 || isCtrl)
  {
    return true;
  }

  reg = /\d/;
  var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
  var isFirstD = allowDecimal ? keychar == ',' && obj.value.indexOf(',') == -1 : false;
  
  return isFirstN || isFirstD || reg.test(keychar);
}

// ******************************************************************
// Verifica se o valor introduzido é numerico
// ******************************************************************
  function isNumeric(strString)
    {
    var strValidChars = "0123456789";
    var strChar;
    var blnResult = true;
    
    if (strString.length ==0) return false;
    
    for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      
      if (strValidChars.indexOf(strChar) == -1)
        {
        blnResult = false;
        }
      }
    return blnResult;
    }

// ******************************************************************
// Verifica se o campos esta vazio
// ******************************************************************

  function isEmpty(strString)
    {   
    if ((strString.value.length ==0) || (strString.value==null))
      {
      return true;
      }
    else
      {
      return false;
      }
    }

// ******************************************************************
// Verifica se a data é valida
// ******************************************************************

  function isDate(dateStr)
    {

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    var datestatus=true;
    datemsg="";

    if (matchArray == null || matchArray[1]==null)
      {
      datemsg="Erro, formato da data invalido (dd/mm/yyyy)" + "\n";
      return false;
      }
    else
      {
      if(matchArray[3]=null || matchArray[5]==null)
        {
        datemsg="Erro, formato da data invalido (dd/mm/yyyy)" + "\n";
        return false;
        }
      }

    day = matchArray[1];  // p@rse date into variables
    month = matchArray[3];
    year = matchArray[5];

    if (month < 1 || month > 12)
      { // check month range
      datemsg=datemsg + "Erro, mês invalido (1 a 12)" + "\n";
      datestatus=false;
      }

    if (day < 1 || day > 31)
      {
      datemsg=datemsg + "Erro, dia invalido (1 a 31)" + "\n";
      datestatus=false;
      }

    if ((month==4 || month==6 || month==9 || month==11) && day==31)
      {
      datemsg=datemsg + "Erro, o nês " + month + " não têm 31 days!" + "\n";
      datestatus=false;
      }

    if (month == 2)
      { // check for february 29th
      var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
      if (day > 29 || (day==29 && !isleap))
        {
        datemsg=datemsg + "Erro, o mês de fevereiro do ano " + year + " não têm " + day + " dias!" + "\n";
        datestatus=false;
        }
      }
    return datestatus;
    }


// ******************************************************************
// Verifica se o endereço de email e valido - 1
// ******************************************************************
function isEmail(who) {
  function isEmpty(who) {
    var testArr=who.split("");
    if(testArr.length==0)
      return true;
    var toggle=0;
    for(var i=0; i<testArr.length; i++) {
      if(testArr[i]==" ") {
        toggle=1;
        break;
      }
    }
    if(toggle)
      return true;
    return false;
  }

  function isValid(who) {
    var invalidChars=new Array("~","!","@","#","$","%","^","&","*","(",")","+","=","[","]",":",";",",","\"","'","|","{","}","\\","/","<",">","?");
    var testArr=who.split("");
    for(var i=0; i<testArr.length; i++) {
      for(var j=0; j<invalidChars.length; j++) {
        if(testArr[i]==invalidChars[j]) {
          return false;
        }
      }
    }
    return true;
  }

  function isfl(who) {
    var invalidChars=new Array("-","_",".");
    var testArr=who.split("");
    which=0;
    for(var i=0; i<2; i++) {
      for(var j=0; j<invalidChars.length; j++) {
        if(testArr[which]==invalidChars[j]) {
          return false;
        }
      }
      which=testArr.length-1;
    }
    return true;
  }

  function isDomain(who) {
    var invalidChars=new Array("-","_",".");
    var testArr=who.split("");
    if(testArr.length<2||testArr.length>4) {
      return false;
    }
    for(var i=0; i<testArr.length; i++) {
      for(var j=0; j<invalidChars.length; j++) {
        if(testArr[i]==invalidChars[j]) {
          return false;
        }
      }
    }
    return true;
  }


  var testArr=who.split("@");
  if(testArr.length<=1||testArr.length>2) {
    return false;
  }
  else {
    if(isValid(testArr[0])&&isfl(testArr[0])&&isValid(testArr[1])) {
      if(!isEmpty(testArr[testArr.length-1])&&!isEmpty(testArr[0])) {
        var testArr2=testArr[testArr.length-1].split(".");
        if(testArr2.length>=2) {
          var toggle=1;
          for(var i=0; i<testArr2.length; i++) {
            if(isEmpty(testArr2[i])||!isfl(testArr2[i])) {
              toggle=0;
              break;
            }
          }
          if(toggle&&isDomain(testArr2[testArr2.length-1]))
            return true;
          return false;
        }
        return false;
      }
    }
  }
}


// ******************************************************************
// Verifica se o endereço de email e valido - 2
// ******************************************************************
/* With RegExp */
function isEmail2(who) {
  var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
  return(email.test(who));
}
