/* Funções JavaScript */

//Disactiva um elemento do form enviado para a função através do seu ID
function elemDisabeld(id){
  document.getElementById(id).disabled = true;
}


function imprimir() {
	window.print();
}

function abreJanela(ficheiro,dWidth,dHeight,dTop,dLeft)
{ 
    var fich;
	fich=ficheiro;
    window.open(fich,'my_new_window','toolbar=no, location=no, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=' + dWidth +', height=' + dHeight + ',top=' + dTop+',left='+dLeft);
}

function abreNovaJanela(ficheiro,dWidth,dHeight,dTop,dLeft)
{ 
    var fich;
	fich=ficheiro;
    window.open(fich,'my_new_window','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=yes, width=' + dWidth +', height=' + dHeight + ',top=' + dTop+',left='+dLeft);
}

function resetCampos(){
//Limpa campos do tipo <input> e cujo o inicio do nome comece com "_"
   frm=window.document.frmIndex;

   for (i = 1; i < frmIndex.length; i++){
      var str=frm[i].name;
      var pos=str.indexOf("_");
	   if (pos>=0){
		   frm(str).value="";
	   }
   }
}
function anobissexto(){
//Rotina para saber se o ano e bissexto
   var nData=new Date();
   var ano,fev;

   ano=nData.getFullYear();
   //Formula para ver se o ano e bissexto

  if ((ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0)){
      fev=29;
  }
  else{
      fev=28;
  }
   return fev;
}


function validaData(dia,mes,ano){
	var data=new Date();
    
	if (dia=="" || mes=="" || ano==""){
	    alert("Introduza a data!");
		return true;
	}
    
	switch (data.getMonth()+1)
	{
		case 1:
		  if (dia > 31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break    
		case 2:
		  if (dia >anobissexto() || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break
		case 3:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break
		case 4:
		  if (dia >30 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break
		case 5:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break
		case 6:
		  if (dia >30 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
		  break
	    case 7:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break
		case 8:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break 
		case 9:
		  if (dia >30 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break
		case 10:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break
		case 11:
		  if (dia >30 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break
		case 12:
		  if (dia >31 || dia<1){
	        alert("Dia inválido!");
			return true;
		  }
	      break
	}
	if (mes > 12 || mes<1){
	    alert("Mês inválido!"); 
		return true;
    }
	if (ano<1){
	   alert("Ano inválido!");
	   return true;
	}
}



/*---------------------------------------------------------------
Nome: valida_obrigatorio
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo obrigatorio foi preenchido
---------------------------------------------------------------*/
function valida_obrigatorio(campo,nomeCampo,msgErro)
{
  flgOK = true
  switch(campo.type)
  {
    case 'textarea':
	case 'hidden':
	case 'file':
	  if (campo.value == "")
	  {
	     alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
		 campo.focus();
		 flgOK = false;
	  }
	  break
	case 'password':
	  if (campo.value == "")
	  {
	     alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
		 campo.focus();
		 flgOK = false;
	  }
	  break
	case 'text':
	  if (campo.value == "")
      {
	     alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
		 campo.focus();
	     flgOK = false;
      }
	  break
	case 'checkbox':
	  if (!campo.checked)
      {
	     alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
	     flgOK = false;
      }
	  break
	default:
	  if (campo[0].type=='radio')
      {
		flgCheck = false;
	    for (var intCount = 0; intCount < campo.length; intCount++) 
		{
		  if (campo[intCount].checked) 
		  {
			flgCheck = true;
			break;
		  }
		}    
		if (flgCheck == false)
		{
	     alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
	     flgOK = false;
        }
	    break
     } // end if
  } // end switch
  
return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_select
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo select obrigatorio foi preenchido
---------------------------------------------------------------*/
function valida_select(campo,nomeCampo,msgErro)
{
  flgOK = true
  
  if (campo.options[campo.selectedIndex].value == 0)
  {
	alert (nomeCampo + ': ' + msgErro); //Campo de preenchimento obrigatório
	campo.focus();
	flgOK = false;
  }
  
return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_numero
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo é numérico
---------------------------------------------------------------*/
function valida_numero(campo,nomeCampo,msgErro)
{
  flgOK = true
  if (isNaN(campo.value))
  {
    alert ( nomeCampo + ': ' + msgErro); //Campo numérico
	campo.focus();
    flgOK = false;
  } 
  return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_zero
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo é igual a zero
---------------------------------------------------------------*/
function valida_zero(campo,nomeCampo,msgErro)
{
  flgOK = true
  if (campo.value == 0)
  {
    alert ( nomeCampo + ': ' + msgErro); //Campo numérico
	campo.focus();
    flgOK = false;
  } 
  return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_texto
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo é texto
---------------------------------------------------------------*/
function valida_texto(campo,nomeCampo,msgErro)
{
  flgOK = false
  if (!isNaN(campo.value))
  {
    alert (nomeCampo + ': ' + msgErro); //Campo de texto
    flgOK = true;
  } 
  return flgOK;
}
/*---------------------------------------------------------------
Nome: valida_email
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se o campo está bem preenchido
---------------------------------------------------------------*/

function valida_email(campo,nomeCampo,msgErro)
{
	Ctrl = campo;
	ind = Ctrl.value.indexOf ('@', 0);
	if (Ctrl.value.length==0) {
		//validatePrompt(Ctrl, "Por favor, introduza o seu e-mail!");
		//return (false);
		return (true);
	} else if (ind==-1) {
		alert(nomeCampo + ": " + msgErro); //Formato inválido
		campo.focus();
		return (false);
	} else if (ind==0) {
		alert(nomeCampo + ": " + msgErro); //Formato inválido
		campo.focus();
		return (false);
	} else if (ind==Ctrl.value.length-1) {
		alert(nomeCampo + ": " + msgErro); //Formato inválido
		campo.focus();
		return (false);
	} else
		return (true);
}

//------------------ validar a data----------------------------------
function decodeDate(dtStr)
{
	sep = '-';
	len = dtStr.length;
	p1 = dtStr.indexOf(sep);
	if( p1 < 0 )			{ return null; }
	day = dtStr.substr(0, p1);
	if( day.length != 2 )	{ return null; }
	p2 = dtStr.indexOf(sep, p1 + 1);
	if( p2 < 0 )			{ return null; }
	mon = dtStr.substr(p1 + 1, p2 - p1 - 1);
	if( mon.length != 2 )	{ return null; }
	year = dtStr.substr(p2 + 1, len);
	if (year.length != 4)	{ return null; }
	
	return new Array(year, mon - 1, day);
}

function makeDate(dtArr)
{
	if (dtArr == null)		{ return null; }
	return new Date(dtArr[0], dtArr[1], dtArr[2]); 
}

function compareDate(dtArr, dtObj)
{
	if (dtObj == null) { return false; }
	return ((dtArr[0] == dtObj.getFullYear()) && (dtArr[1] == dtObj.getMonth()) && (dtArr[2] == dtObj.getDate()) )
}

function checkDate(dtStr)
{
	dtArr = decodeDate(dtStr);
	//if (dtArr==null){alert("formato inválido "+dtArr);}
	return compareDate(dtArr, makeDate(dtArr));
}

function compareTwoDates(Data1,Data2,flag) {
	
	var Data1Str = new String(Data1);
	var Data2Str = new String(Data2);
	oneDayTimeStamp = 86400000;
	
	Data1Array = Data1Str.split("-"); 
	Data2Array = Data2Str.split("-"); 
	
	_data1 = new Date( Date.UTC(Math.round(Data1Array[2]), Math.round(Data1Array[1]) - 1, Math.round(Data1Array[0]), 0, 0, 0));
	_data2 = new Date( Date.UTC(Math.round(Data2Array[2]), Math.round(Data2Array[1]) - 1, Math.round(Data2Array[0]), 0, 0, 0));
	//alert(_data1);
	//alert(_data2);
	diff = _data2.getTime() - _data1.getTime();
	//alert(diff);
	
	if( flag == "I")
	{
		if ( diff >= 0 ) return false; //a data2 tem que ser igual ou superior que o dia de hoje(data1)
		return true;
	} 
	else
	{
		if ( diff > 0 ) return false; //a data2 tem que ser superior à data1 
		return true;
	}
}


function valida_data(dtStr, field, label, msgerro1, msgerro2)
{
	flgOK = true
	if( dtStr!="" )
	{
		result = checkDate(dtStr);
		if( dtArr==null )
		{
			alert( label + ": "+ msgerro1); //Formato de data inválido
			field.focus();
			field.select();
			flgOK = false;
		}
		else if( !result )
		{
			alert( label + ": "+ msgerro2); //Data Inválida
			field.focus();
			field.select();
			flgOK = false;
		}
	}
	return flgOK;
}

/*---------------------------------------------------------------
Nome: limitText
Parâmetros : limitField, limitCount, limitNum
Descrição:	Limita o nº de caracteres inseridos nu textarea ou text field

Ex. de utilização:

--- TextArea---
<textarea name="limitedtextarea" onKeyDown="limitText(this.form.limitedtextarea,this.form.countdown,100);" 
onKeyUp="limitText(this.form.limitedtextarea,this.form.countdown,100);">
</textarea><br>
<font size="1">(Maximum characters: 100)<br>
You have <input readonly type="text" name="countdown" size="3" value="100"> characters left.</font>

--- Input Field ---
<input name="limitedtextfield" type="text" onKeyDown="limitText(this.form.limitedtextfield,this.form.countdown,15);" 
onKeyUp="limitText(this.form.limitedtextfield,this.form.countdown,15);" maxlength="15"><br>
<font size="1">(Maximum characters: 15)<br>
You have <input readonly type="text" name="countdown" size="3" value="15"> characters left.</font>

---------------------------------------------------------------*/
function limitText(limitField, limitCount, limitNum) {
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	} else {
		limitCount.value = limitNum - limitField.value.length;
	}
}
