
  function ValidaForm (form, formElAryDsc, formElAryCod){
    for (i=0; i<formElAryCod.length; i++){
      for (j=0;j<formElAryCod.length; j++){
        //if (form.elements[i].value.length==0 || form.elements[i].value=="N/A" || form.elements[i].value=="0"){
        if (form.elements[i].value.length==0){
          if (form.elements[i].name==formElAryCod[j]){
            alert("O campo '"+formElAryDsc[j]+"' não deverá estar vazio.");
            form.elements[i].focus();
            return false;
            break;
          }
        }  
      }
    }
    return true
  }
 
  function ValidaForm_v2 (form, formElAryDsc, formElAryCod){
    for (i=0; i<form.length; i++){
      for (j=0;j<formElAryCod.length; j++){
        if (form.elements[i].value.length==0){
          if (form.elements[i].name==formElAryCod[j]){
            alert("O campo '"+formElAryDsc[j]+"' não deverá estar vazio.");
            form.elements[i].focus();
            return false;
            break;
          }
        }  
      }
    }
    return true
  }

  function ValidaForm_v3 (form, formElAryDsc, formElAryCod){
    for (i=0; i<form.length; i++){
      for (j=0;j<formElAryCod.length; j++){
        if (form.elements[i].value.length==0){
          if (form.elements[i].name==formElAryCod[j]){
            alert("Please fill in the '"+formElAryDsc[j]+"' field.");
            form.elements[i].focus();
            return false;
            break;
          }
        }  
      }
    }
    return true
  }

  function validaUmCampoForm(form, formElAryDsc, formElAryCod){
    formCampos="";
    for (i=0; i<formElAryCod.length; i++){
      if (i>0) formCampos+=", ";
      formCampos+=formElAryDsc[i];  
      if (form.elements[i].value.length>0){
        return true;
        break;
      }
    }
    alert("Um dos campos '"+formCampos+"' deverá estar preenchido.");    
    return false;
  }


  function validaFormNumber(objecto){
    var numeroStr=objecto.value;
    for (i=0; i<numeroStr.length; i++){
      numero=false;
      for (j=0; j<10; j++){
        if (numeroStr.charAt(i)==j) numero=true;
      }
      if (!numero){
        alert("Número inválido");
        objecto.value="";
        objecto.focus();
        return false;
      }
    }
  }

  function validaFormNumber_v1(objecto){
    var numeroStr=objecto.value;
    for (i=0; i<numeroStr.length; i++){
      numero=false;
      for (j=0; j<10; j++){
        if (numeroStr.charAt(i)==j) numero=true;
      }
      if (!numero){
        alert("Número inválido. \n Number Invalid.");
        objecto.value="";
        objecto.focus();
        return false;
      }
    }
  }

  function validaFormDecimal(objecto){
    var numVFDStr=objecto.value;
    var decDotCnt=0;
    for (i=0; i<numVFDStr.length; i++){
      numVFD=false;
      for (j=0; j<10; j++){
        if (numVFDStr.charAt(i)==j) numVFD=true;
      }
      if (numVFDStr.charAt(i)==".") decDotCnt++;
      if (decDotCnt>0 && decDotCnt<2) numVFD=true;
      if (!numVFD){
        alert("Número inválido - deverá ter o seguinte formato : 1234.56");
        objecto.value="";
        objecto.focus();
        return false;
      }
    }
  }


  var tim=0;
  var _menuDiv;
  var _tdTable;
  var _id;
  var _newBgColor;
  var _newFontColor;
  var _tdId;  
  
  function changeBgColor(newBgColor, newFontColor, tdId){
    _newBgColor=newBgColor;
    _newFontColor=newFontColor;
    _tdId=tdId;
    eval(tdId).bgColor=newBgColor;
    eval(tdId+"f").style.color=newFontColor;
  }
  
  function showHideSubMenu(showHide, menuDiv, tdTable, id){
    clearTimeout(tim);
    _menuDiv=menuDiv;
    _tdTable=tdTable;
    _id=id;
    if (showHide=="show") {
      menuDiv.style.visibility="visible";
      //menuDiv.style.top=table_01.offsetTop+table_03.offsetTop+table_02.offsetHeight+tdTable.offsetTop;
      menuDiv.style.top=tdTable.offsetTop+120;
      menuDiv.style.left=table_01.offsetLeft+130;
      idMenu=id;
      actualizaSubMenu();
    }else{
      tim=setTimeout("hideSubMenu()",500);
    }
  }  

  function hideSubMenu(){
    _menuDiv.style.visibility="hidden";
  }
  
  function showHideMenu02(showHide){
    clearTimeout(tim);
    if (showHide=="show"){
      _menuDiv.style.visibility="visible";
      changeBgColor('#7396b5', '#FFFFFF', _tdId);
    }else{
      changeBgColor('', '#373737', _tdId);
      tim=setTimeout("hideSubMenu()",500);
    }  
  }  

  function actualizaSubMenu(){
    var divMenu="<table id='table_n2_02' width='150' align='left' border='0' cellspacing='0' cellpadding='0'>";
    subMenuTemp=eval("subMenuAry"+idMenu);
    for (i=0; i<subMenuTemp.length; i++){
      idMenuVal=i+1;
      if (idMenuVal<10) idMenuVal="0"+idMenuVal;
      (subMenuTemp[i].split("|")[2]=="1") ? 
        aHref="<a href=\""+subMenuTemp[i].split("|")[3]+"&id="+subMenuTemp[i].split("|")[1]+"\" target=\"_blank\" onMouseOver=showHideMenu02(\"show\"); onMouseOut=showHideMenu02(\"hide\"); class='sub_menu_01'>" :
        (subMenuTemp[i].split("|")[3].substring(0,11)=="javascript:") ?
        aHref="<a href=\""+subMenuTemp[i].split("|")[3]+"\" onMouseOver=showHideMenu02(\"show\"); onMouseOut=showHideMenu02(\"hide\"); class='menu_02'>" : 
        aHref="<a href=\""+subMenuTemp[i].split("|")[3]+"&id="+subMenuTemp[i].split("|")[1]+"\" onMouseOver=showHideMenu02(\"show\"); onMouseOut=showHideMenu02(\"hide\"); class='sub_menu_01'>";
      divMenu+="<tr>";
      divMenu+="<td class='td_sub_menu_01' width='5'onMouseOver=showHideMenu02(\"show\"); onMouseOut=showHideMenu02(\"hide\");>&nbsp;</td>";
      divMenu+="<td class='td_sub_menu_01a' height='18'onMouseOver=showHideMenu02(\"show\"); onMouseOut=showHideMenu02(\"hide\"); width='150'>"+aHref+""+subMenuTemp[i].split("|")[0].split(":")[0]+"</a></td>";
      divMenu+="</tr>";
      divMenu+="<tr><td height='2'><img src='images/transparent_dot.gif'></td></tr>";
    }
    divMenu+="</table>";
    document.getElementById("menu_nivel_02").innerHTML=divMenu;
  }


  var _formName;

  function increaseRow(){
    var span_01inner="";
    span_01inner="<table border='0' cellpadding='1' cellspacing='1' bgcolor='#CCCCCC' width='600'>";
    span_01inner+="<tr>";
    span_01inner+="<td width='55' bgcolor='#FFFFFF' align='center' class='titulo_02'>Refª</td>";
    span_01inner+="<td width='227' bgcolor='#FFFFFF' align='center' class='titulo_02'>Descrição</td>";  
    span_01inner+="<td width='68' bgcolor='#FFFFFF' align='center' class='titulo_02'>Qtd</td>";      
    span_01inner+="<td width='80' bgcolor='#FFFFFF' align='center' class='titulo_02'>Preço<br>Unitário</td>";
    span_01inner+="<td width='70' bgcolor='#FFFFFF' align='center' class='titulo_02'>Iva %</td>";
    span_01inner+="<td width='100' bgcolor='#FFFFFF' align='center' class='titulo_02'>Valor<br>c/IVA inc</td></tr>";
	ivaValAry=new Array("0","5","12","17","19");
	inputValAry=new Array();
	for (i=0; i<(_numRows-1);i++){
	  inputValAry[i]=eval(_formName+".ref"+i).value+"|"+eval(_formName+".desc"+i).value+"|"+eval(_formName+".qtd"+i).value+"|"+eval(_formName+".pu"+i).value;
	}
	for (i=0; i<_numRows; i++){
	  span_01inner+="<tr>";
	  tempVal="";
	  if (inputValAry[i]) tempVal=inputValAry[i].split("|")[0]; 
	  span_01inner+="<td valign='top' align='center' id='Fact_td_"+(i+1)+"a' bgcolor='#FFFFFF' align='center'><input type='text' name='ref"+i+"' size='4' maxlength='6' value='"+tempVal+"' class='inputform'></td>";
	  if (inputValAry[i]) tempVal=inputValAry[i].split("|")[1];
	  span_01inner+="<td valign='top' align='center' id='Fact_td_"+(i+1)+"b' bgcolor='#FFFFFF'><textarea name='desc"+i+"' COLS='36' ROWS='3' class='inputform'>"+tempVal+"</textarea><br>";
          span_01inner+="<select name='contasRazao"+(i+1)+"' class='inputform' size='1'>"; 
	  for (j=0; j<contasRazaoDescAry.length; j++){
            (i<_numRows-1 && eval(_formName+".contasRazao"+(i+1)).value==contasRazaoCodAry[j]) ? selectVal=" selected" : selectVal="";
            span_01inner+="<option value='"+contasRazaoCodAry[j]+"'"+selectVal+">"+contasRazaoDescAry[j]+"</option>";
	  }
          span_01inner+="</select></td>"; 
	  if (inputValAry[i]) tempVal=inputValAry[i].split("|")[2];
	  span_01inner+="<td valign='top' align='center' id='Fact_td_"+(i+1)+"c' bgcolor='#FFFFFF'><input type='text' name='qtd"+i+"' size='6' maxlength='10' value='"+tempVal+"' class='inputform' onfocusout=\"validaNumber(_formName,'qtd"+i+"'); calcValParcTotal(i);\"></td>";
	  if (inputValAry[i]) tempVal=inputValAry[i].split("|")[3];
	  span_01inner+="<td valign='top' align='center' id='Fact_td_"+(i+1)+"d' bgcolor='#FFFFFF'><input type='text' name='pu"+i+"' size='8' maxlength='20' value='"+tempVal+"' class='inputform' onfocusout=\"validaNumber(_formName,'pu"+i+"'); calcValParcTotal(i);\"></td>";
	  span_01inner+="<td valign='top' align='center' id='Fact_td_"+(i+1)+"e' bgcolor='#FFFFFF'>";
	  span_01inner+="<select name='iva"+i+"' class='inputform' size='1' onClick=calcValParcTotal(i); onfocusout=calcValParcTotal(i)>";
	  for (j=0; j<ivaValAry.length; j++){
	    var selectVal="";
        (i<_numRows-1 && eval(_formName+".iva"+i).value==ivaValAry[j]) ? selectVal=" selected" : selectVal="";
	    span_01inner+="<option value='"+ivaValAry[j]+"'"+selectVal+">"+ivaValAry[j]+"%</option>";
	  }
	  span_01inner+="</select>";
	  span_01inner+="</td>";
	  var somaParcela="";
	  span_01inner+="<td valign='top' align='right' id='Fact_td_"+(i+1)+"f' bgcolor='#FFFFFF' class='Normal'>"+formatCurrency(rounding(calcValParcela(i)))+"</td>";
	  span_01inner+="</tr>";  
	}
	span_01inner+="<tr><td id='FactIncRow' colspan='3' bgcolor='#FFFFFF' align='center'></td>";
        span_01inner+="<td colspan='3' width='254' bgcolor='#FFFFFF' align='right'>";
	span_01inner+="<table border ='0' cellpadding='1' cellspacing='1' bgcolor='#CCCCCC'>";
	span_01inner+="<tr><td width='154' bgcolor='#FFFFFF' align='right' class='Normal'>Iva</td>";
	span_01inner+="<td id='totalIva' width='100' bgcolor='#FFFFFF' align='right' class='Normal'>0,00</td></tr>";
	span_01inner+="<tr><td bgcolor='#FFFFFF' align='right' class='Normal'>Total Factura c/Iva</td>";
	span_01inner+="<td id='totalFactIva' bgcolor='#FFFFFF' align='right' class='Normal'>0,00</td></tr>";
	span_01inner+="</table>";
	span_01inner+="</td>";
	span_01inner+="</table>";
	span_01inner+="<input type='hidden' name='numRows' value='"+_numRows+"'>";
	span_01.innerHTML=span_01inner;
	_numRows++;
  }


  function calcValParcela(iVal){
    if (iVal<_numRows-1){
	  valParcela=eval(_formName+".qtd"+(i)).value*eval(_formName+".pu"+(i)).value;
	  valIva=eval(_formName+".qtd"+(i)).value*eval(_formName+".pu"+(i)).value*(eval(_formName+".iva"+(i)).value/100);
	  valParcela+=valIva;
    }else{
      valParcela="0";
    }
    return valParcela;
  }
  
  function calcValParcTotal(iVal){
    var totalIvaVal=0;
    var totalFactIvaVal=0;
    for (i=0; i<iVal; i++){
	valParcela_1=eval(_formName+".qtd"+(i)).value*eval(_formName+".pu"+(i)).value;
	valIva=eval(_formName+".qtd"+(i)).value*eval(_formName+".pu"+(i)).value*(eval(_formName+".iva"+(i)).value/100);
        //if (valIva==0) valIva=0.001; 
	eval("Fact_td_"+(i+1)+"f").innerHTML=formatCurrency(rounding(valParcela_1+valIva));
	totalIvaVal+=valIva;
	totalFactIvaVal+=valParcela_1+valIva;
    }
    totalIva.innerHTML=formatCurrency(rounding(totalIvaVal));
    totalFactIva.innerHTML=formatCurrency(rounding(totalFactIvaVal));
    if (totalFactIva.innerHTML!="0,00"){
      FactIncRow.innerHTML="<button class='BOTOES' id=\"incButton\" name=\"incButton\" onclick=\"increaseRow()\">Aumentar uma linha de facturação</button>";
      //incButton.focus();
    } 
  }
  
  function roundCents(num){
    numAry=new Array();
    for (iRC=0; iRC<num.length; iRC++) numAry[iRC]=num.substring(iRC, (iRC+1));
    for (iRC=numAry.length-1; iRC>=0; iRC--){
      if (iRC>1 && numAry[iRC]>=5) numAry[iRC-1]=Math.round(numAry[iRC-1])+1;
    }
    return numAry[0]+numAry[1];
  }


  function rounding(num){
    var numStr=""+num;
    if (numStr=="0.0") numStr+=".00";
    var dotPos=numStr.indexOf(".");
    if (dotPos==-1){
      numStr+=".00";
      dotPos=numStr.indexOf(".");
    }
    var incNxt=false;
    var prefixOne=false;
    var numStrFinal="";
    var numAry=new Array();
    for (iRC=0; iRC<numStr.length; iRC++){
      numAry[iRC]=numStr.substring(iRC, (iRC+1));
   } 
    for (iRC=numAry.length-1; iRC>=0; iRC--){
      if (iRC==dotPos) continue;
      if ((iRC)<dotPos-1 && !incNxt) break; //(iRC)<dotPos-1 - if 2º digit on the decimal dot's left
      if (incNxt){
        if (numAry[iRC]<9){
          numAry[iRC]=Math.round(numAry[iRC])+1;
          incNxt=false;
        }else{
          if (iRC==0) prefixOne=true;
          numAry[iRC]=0;
        }  
      }
      //iRC-dotPos>2 - if decimal length bigger then 2 
      if ((iRC-dotPos>2) && numAry[iRC]>=5) incNxt=true;
    }
    numStr="";
    for (iRC=0; iRC<numAry.length; iRC++){
      numExist=false;
      for (j=0; j<10; j++){
       if (numAry[iRC]==j){
         numExist=true;
         break;
       }
      }
      (numExist) ? numStr+=""+numAry[iRC] : numStr+=".";
    }
    if (prefixOne) numStrFinal="1";
    numStrFinal+=numStr.substring(0,numStr.indexOf("."))+"."+numStr.substring(numStr.indexOf(".")+1,numStr.indexOf(".")+3);
    if (numStrFinal=="0.00") numStrFinal="0";
    return numStrFinal;
  }


  function formatCurrency(num){
    num+="";
    numAry=new Array();
    numFinalStr="";
    countInc=0;
    if (num!=0 && num.indexOf(".")!=-1){
      numSplit_0=num.split(".")[0];
      numSplit_1=num.split(".")[1];
      if (numSplit_1.length==1) numSplit_1+="0";
    }else{
      numSplit_0=num;
      numSplit_1="00";
    }  
    incNum=Math.floor(numSplit_0.length/3);
    for (j=numSplit_0.length-1; j>=0; j--){
      if (j!=numSplit_0.length-1 && countInc%3==0){
        numAry[j]=num.substring(j, (j+1))+".";
      }else{
        numAry[j]=num.substring(j, (j+1));
      }
      countInc++;  
    }
    for (j=0; j<numAry.length; j++){
      numFinalStr+=numAry[j];
    }
    if (numFinalStr.length==0 && numFinalStr=="") numFinalStr=0;
    if (numSplit_1.length>0) numSplit_1=numSplit_1.substring(0,2);
    numFinalStr+=","+numSplit_1; //não apagar
    return numFinalStr;  
  }

 
  function formatCurrency_old(num){
    num+="";
    numAry=new Array();
    numFinalStr="";
    countInc=0;
    if (num!=0 && num.indexOf(".")!=-1){
      numSplit_0=num.split(".")[0];
      numSplit_1=num.split(".")[1];
      if (numSplit_1.length==1) numSplit_1+="0";
    }else{
      numSplit_0=num;
      numSplit_1="00";
    }  
    incNum=Math.floor(numSplit_0.length/3);
    for (j=numSplit_0.length-1; j>=0; j--){
      if (j!=numSplit_0.length-1 && countInc%3==0){
        numAry[j]=num.substring(j, (j+1))+".";
      }else{
        numAry[j]=num.substring(j, (j+1));
      }
      countInc++;  
    }
    for (j=0; j<numAry.length; j++){
      numFinalStr+=numAry[j];
    }
    if (numFinalStr.length==0 && numFinalStr=="") numFinalStr=0;
    numFinalStr+=","+roundCents(numSplit_1); //não apagar
    return numFinalStr;  
  }

 
  function novaJanela_01(ficheiro){
    window.open(ficheiro,'janela_01','menubar=yes,scrollbars=yes,resizable=yes,width=700,height=500');
  }


  function imprimirPag(){
     imprimeTD.innerHTML=""; 
     window.print();
  }


  function validaNumber(form, numObj){
    var tempObj=eval(form+"."+numObj);
    var numeroStr=tempObj.value;  
    isDecimalPoint=false;
    for (iVN=0; iVN<numeroStr.length; iVN++){
      numero=false;
      for (j=0; j<10; j++){
        if (numeroStr.charAt(iVN)==j) numero=true;
      }
      if (numeroStr.charAt(iVN)=="."){
         numero=true;
        if (isDecimalPoint){
          alert("Número inválido ["+numeroStr+"]. Só é permito 1 ponto decimal.");
          tempObj.value="";
          tempObj.focus();
          return false;
        }else{isDecimalPoint=true;}
      }  
      if (!numero){
        alert("Número inválido ["+numeroStr+"]");
        tempObj.value="";
        tempObj.focus();
        return false;
      }
    }
  }


  function novaJanela(theUrl, winName, features){
  window.open(theUrl, winName, features);
}
 
  function validaPesquisa(form){
  var pesqVal;
  if (form.pesquisa.value.length<4){
    alert("Inserir a pesquisa com mais de 3 caracteres.")
    form.pesquisa.focus();
    return false;
  }
  return true;
}


  function enableFieldsSubmit(form){
    for (i=0; i<form.length; i++){
     if (form.elements[i].isDisabled) form.elements[i].disabled=false;
    }
    form.submit();
  }

  function enableFieldsSubmit_v2(form,formElAryDsc,formElAryCod){
    for (i=0; i<form.length; i++){
     if (form.elements[i].isDisabled) form.elements[i].disabled=false;
    }
    if (ValidaForm(form,formElAryDsc,formElAryCod)) form.submit();
  }


  function limpaAcentos(objecto){
    comAcentosAry=new Array("Á","À","Ã","Â","É","È","Ê","Í","Ì","Î","Ó","Ò","Õ","Ô","Ú","Ù","Û","Ç","á","à","ã","â","ç","é","è","ê","í","ì","î","ó","ò","õ","ô","ú","ù","û","'");
    semAcentosAry=new Array("A","A","A","A","E","E","E","I","I","I","O","O","O","O","U","U","U","C","a","a","a","a","c","e","e","e","i","i","i","o","o","o","o","u","u","u","´");
    textoLA=objecto.value;
    for (i=0; i<textoLA.length; i++) {
      for (j=0; j<comAcentosAry.length; j++){
        if (comAcentosAry[j]==textoLA.charAt(i)){
          tempAry=textoLA.split(comAcentosAry[j]);
          textoLATemp="";
          for (z=0; z<tempAry.length; z++) textoLATemp+=tempAry[z]+semAcentosAry[j];
          textoLA=textoLATemp.substring(0, textoLATemp.length-1);
        }
      }
    }
    objecto.value=textoLA;
  } 


  function limpaAcentosEspaco(objecto){
    comAcentosAry=new Array("Á","À","Ã","Â","É","È","Ê","Í","Ì","Î","Ó","Ò","Õ","Ô","Ú","Ù","Û","Ç","á","à","ã","â","ç","é","è","ê","í","ì","î","ó","ò","õ","ô","ú","ù","û","'"," ","%");
    semAcentosAry=new Array("A","A","A","A","E","E","E","I","I","I","O","O","O","O","U","U","U","C","a","a","a","a","c","e","e","e","i","i","i","o","o","o","o","u","u","u","","","");
    textoLA=objecto.value;
    for (i=0; i<textoLA.length; i++) {
      for (j=0; j<comAcentosAry.length; j++){
        if (comAcentosAry[j]==textoLA.charAt(i)){
          tempAry=textoLA.split(comAcentosAry[j]);
          textoLATemp="";
          for (z=0; z<tempAry.length; z++) textoLATemp+=tempAry[z]+semAcentosAry[j];
          textoLA=textoLATemp.substring(0, textoLATemp.length-1);
        }
      }
    }
    objecto.value=textoLA;
  } 

  function validaPlicas(value){
    FormElement=eval(value);
    while(FormElement.value.indexOf("'")!=-1){
      valorALTERADO=FormElement.value.replace("'","´");
      FormElement.value=valorALTERADO;
    }
  }


  function validaPlicasAspas(value){
    FormElement=eval(value);
    while(FormElement.value.indexOf("'")!=-1){
      valorALTERADO=FormElement.value.replace("'","´");
      FormElement.value=valorALTERADO;
    }
    while(FormElement.value.indexOf("\"")!=-1){
      valorALTERADO=FormElement.value.replace("\"","´´");
      FormElement.value=valorALTERADO;
    }
  }


  function validaDataDoc_v1(objecto){
    dataNova=objecto.value;
    isBisexto=false;
    anoNovoStr=dataNova.substring(0,4);
    anoNovoNum=new Number(anoNovoStr);
    mesNovoStr=dataNova.substring(5,7);
    mesNovoNum=new Number(mesNovoStr);
    diaNovoStr=dataNova.substring(8,10);
    diaNovoNum=new Number(diaNovoStr);
    sepAnoMes=dataNova.substring(4,5);
    sepMesDia=dataNova.substring(7,8);
    //anosBisextoAry=new Array(1996,2000,2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044);
    anosBisextoAry=new Array();
    count=0;
    for (i=1900; i<2100; i+=4){
      anosBisextoAry[count]=i;
      count++;
    }
    for (i=0; i<anosBisextoAry.length; i++){
      if (anoNovoNum==anosBisextoAry[i]){
        isBisexto=true;
        break;
      }
    }
    if (sepAnoMes!="-" || sepMesDia!="-" || anoNovoStr.length!=4 || mesNovoStr.length!=2 || diaNovoStr.length!=2){
      alert("O fomato da data deverá ser\n \"AAAA-MM-DD\"");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (isBisexto && mesNovoNum==2 && diaNovoNum>29){
      alert("Número de dias em excesso para o mês de Fevereiro.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (!isBisexto && mesNovoNum==2 && diaNovoNum>28){
      alert("Número de dias em excesso para o mês de Fevereiro.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if ((mesNovoNum==4 || mesNovoNum==6 || mesNovoNum==9 || mesNovoNum==11) && diaNovoNum>30){
      alert("O mês em questão não tem 31 dias.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (mesNovoNum>12){
      alert("Mês inválido.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (diaNovoNum>31){
      alert("Dia inválido.");
      objecto.value="";
      objecto.focus();
      return false;
    }
    return true;
  }

  var docV2LastObj;
  var isLastDataDocV2Validated=true;

  function validaDataDoc_v2(objecto){
    if (!isLastDataDocV2Validated && objecto.name!=docV2LastObj.name) {
      docV2LastObj.focus();
      return false;
    }
    dataNova=objecto.value;
    isBisexto=false;
    anoNovoStr=dataNova.substring(0,4);
    anoNovoNum=new Number(anoNovoStr);
    mesNovoStr=dataNova.substring(5,7);
    mesNovoNum=new Number(mesNovoStr);
    diaNovoStr=dataNova.substring(8,10);
    diaNovoNum=new Number(diaNovoStr);
    sepAnoMes=dataNova.substring(4,5);
    sepMesDia=dataNova.substring(7,8);
    anosBisextoAry=new Array();
    count=0;
    for (i=1900; i<2100; i+=4){
      anosBisextoAry[count]=i;
      count++;
    }
    for (i=0; i<anosBisextoAry.length; i++){
      if (anoNovoNum==anosBisextoAry[i]){
        isBisexto=true;
        break;
      }
    }
    docV2LastObj=objecto;
    isLastDataDocV2Validated=false;
    if (sepAnoMes!="-" || sepMesDia!="-" || anoNovoStr.length!=4 || mesNovoStr.length!=2 || diaNovoStr.length!=2){
      alert("O fomato da data deverá ser\n \"AAAA-MM-DD\"");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (isBisexto && mesNovoNum==2 && diaNovoNum>29){
      alert("Número de dias em excesso para o mês de Fevereiro.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (!isBisexto && mesNovoNum==2 && diaNovoNum>28){
      alert("Número de dias em excesso para o mês de Fevereiro.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if ((mesNovoNum==4 || mesNovoNum==6 || mesNovoNum==9 || mesNovoNum==11) && diaNovoNum>30){
      alert("O mês em questão não tem 31 dias.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (mesNovoNum>12){
      alert("Mês inválido.");
      objecto.value="";
      objecto.focus();
      return false;
    }else if (diaNovoNum>31){
      alert("Dia inválido.");
      objecto.value="";
      objecto.focus();
      return false;
    }
    isLastDataDocV2Validated=true;
    return true;
  }


  function validaDataDoc_v3(objecto){
    if (objecto.value.length>0){
      dataNova=objecto.value;
      isBisexto=false;
      anoNovoStr=dataNova.substring(0,4);
      anoNovoNum=new Number(anoNovoStr);
      mesNovoStr=dataNova.substring(5,7);
      mesNovoNum=new Number(mesNovoStr);
      diaNovoStr=dataNova.substring(8,10);
      diaNovoNum=new Number(diaNovoStr);
      sepAnoMes=dataNova.substring(4,5);
      sepMesDia=dataNova.substring(7,8);
      anosBisextoAry=new Array();
      count=0;
      for (i=1900; i<2100; i+=4){
        anosBisextoAry[count]=i;
        count++;
      }
      for (i=0; i<anosBisextoAry.length; i++){
        if (anoNovoNum==anosBisextoAry[i]){
          isBisexto=true;
          break;
        }
      }
      if (sepAnoMes!="-" || sepMesDia!="-" || anoNovoStr.length!=4 || mesNovoStr.length!=2 || diaNovoStr.length!=2){
        alert("O fomato da data deverá ser\n \"AAAA-MM-DD\"");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (isBisexto && mesNovoNum==2 && diaNovoNum>29){
        alert("Número de dias em excesso para o mês de Fevereiro.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (!isBisexto && mesNovoNum==2 && diaNovoNum>28){
        alert("Número de dias em excesso para o mês de Fevereiro.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if ((mesNovoNum==4 || mesNovoNum==6 || mesNovoNum==9 || mesNovoNum==11) && diaNovoNum>30){
        alert("O mês em questão não tem 31 dias.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (mesNovoNum>12){
        alert("Mês inválido.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (diaNovoNum>31){
        alert("Dia inválido.");
        objecto.value="";
        objecto.focus();
        return false;
      }
      return true;
    }else{
      return true;
    }
  }


  function validaDataDoc_v4(objecto){
    if (objecto.value.length>0){
      dataNova=objecto.value;
      isBisexto=false;
      anoNovoStr=dataNova.substring(0,4);
      anoNovoNum=new Number(anoNovoStr);
      mesNovoStr=dataNova.substring(5,7);
      mesNovoNum=new Number(mesNovoStr);
      diaNovoStr=dataNova.substring(8,10);
      diaNovoNum=new Number(diaNovoStr);
      sepAnoMes=dataNova.substring(4,5);
      sepMesDia=dataNova.substring(7,8);
      anosBisextoAry=new Array();
      count=0;
      for (i=1900; i<2100; i+=4){
        anosBisextoAry[count]=i;
        count++;
      }
      for (i=0; i<anosBisextoAry.length; i++){
        if (anoNovoNum==anosBisextoAry[i]){
          isBisexto=true;
          break;
        }
      }
      if (sepAnoMes!="-" || sepMesDia!="-" || anoNovoStr.length!=4 || mesNovoStr.length!=2 || diaNovoStr.length!=2){
        alert("O fomato da data deverá ser - The date format should be\n \"AAAA-MM-DD\"");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (isBisexto && mesNovoNum==2 && diaNovoNum>29){
        alert("Número de dias em excesso para o mês de Fevereiro.\n Number of days in excess for February.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (!isBisexto && mesNovoNum==2 && diaNovoNum>28){
        alert("Número de dias em excesso para o mês de Fevereiro.\n Number of days in excess for February.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if ((mesNovoNum==4 || mesNovoNum==6 || mesNovoNum==9 || mesNovoNum==11) && diaNovoNum>30){
        alert("O mês em questão não tem 31 dias.\n The choosen month does not have 31 days.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (mesNovoNum>12){
        alert("Mês inválido.\n Invalid Month.");
        objecto.value="";
        objecto.focus();
        return false;
      }else if (diaNovoNum>31){
        alert("Dia inválido.\n Invalid Day.");
        objecto.value="";
        objecto.focus();
        return false;
      }
      return true;
    }else{
      return true;
    }
  }