//Função respectiva aos campos obrigatórios dos eventos
function valida() {
	var vValida = new Array(7);
	vValida[0] = new ObjectoValida("email", 'Email', "Email", "Obrigatorio", "", "", "");
	vValida[1] = new ObjectoValida("nome",  'Nome', "String", "Obrigatorio", "6", "", "");
	vValida[2] = new ObjectoValida("telefone",  'Telefone', "String", "Obrigatorio", "9", "", "");
	vValida[3] = new ObjectoValida("morada",  'Morada', "String", "Obrigatorio", "9", "", "");
	vValida[4] = new ObjectoValida("codPostal",  'Codigo Postal', "String", "Obrigatorio", "4", "", "");
	vValida[5] = new ObjectoValida("localidade",  'Localidade', "String", "Obrigatorio", "6", "", "");
	vValida[6] = new ObjectoValida("pais",  'Pais', "String", "Obrigatorio", "3", "", "");
	
		if (verificaForm("dados",vValida,false)){
			document.dados.submit()										
		}
		return false;
}

function validaEventos() {
	var vValida = new Array(5);
	vValida[0] = new ObjectoValida("nome",  'Nome', "String", "Obrigatorio", "6", "", "");
	vValida[1] = new ObjectoValida("email", 'Email', "Email", "Obrigatorio", "", "", "");
	vValida[2] = new ObjectoValida("morada",  'Morada', "String", "Obrigatorio", "9", "", "");
	vValida[3] = new ObjectoValida("codPostal",  'Codigo Postal', "String", "Obrigatorio", "4", "", "");
	vValida[4] = new ObjectoValida("localidade",  'Localidade', "String", "Obrigatorio", "6", "", "");
	
		if (verificaForm("dados",vValida,false)){
			document.dados.submit()										
		}
		return false;
}

function validaContacto() {
	var vValida = new Array(4);
	vValida[0] = new ObjectoValida("nome",  'Nome', "String", "Obrigatorio", "6", "", "");
	vValida[1] = new ObjectoValida("email", 'Email', "Email", "Obrigatorio", "", "", "");
	vValida[2] = new ObjectoValida("telefone",  'Telefone', "String", "Obrigatorio", "9", "", "");
	vValida[3] = new ObjectoValida("mensagem",  'Mensagem', "String", "Obrigatorio", "9", "", "");
	
		if (verificaForm("dados",vValida,false)){
			document.dados.submit()										
		}
		return false;
}	

function validaContactoSimples() {
	var vValida = new Array(2);
	vValida[0] = new ObjectoValida("nome",  'Nome', "String", "Obrigatorio", "6", "", "");
	vValida[1] = new ObjectoValida("mensagem",  'Mensagem', "String", "Obrigatorio", "9", "", "");
	
		if (verificaForm("dados",vValida,false)){
			document.dados.submit()										
		}
		return false;
}	


/*******************************************************************************************************/
	                                 //COMEÇA O SCRIPT//
/*******************************************************************************************************/
var isNetscape, isMicrosoft;

if (parseInt(navigator.appVersion.charAt(0)) >= 4) {
  isNetscape = (navigator.appName == "Netscape") ? true : false;
  isMicrosoft = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
}

var msg;
var campos_vazios = "";
var erros = "";
var daysofmonth   = new makeArray(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysofmonthLY = new makeArray(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var monthsofyear  = new makeArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
var today = new Date();
var year = today.getYear();
var month = today.getMonth()+1;
var day = today.getDate();
var flagConfirma = 0;
var campoData = false;
function makeArray() {
  this[0] = makeArray.arguments.length;
  for (i = 0; i<makeArray.arguments.length; i++)
    this[i+1] = makeArray.arguments[i];
}

compara = new Array("?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"," ","!","\"","?","$","%","&","'","(",")","*","+","\,","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","?","_","?","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"," ","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","A","A","A","A","A","A","?","C","E","E","E","E","I","I","I","I","?","?","O","O","O","O","O","?","?","U","U","U","U","?","?","?","a","a","a","a","a","a","?","c","e","e","e","e","i","i","i","i","?","?","o","o","o","o","o","÷","?","u","u","u","u","?","?","?","?");
inicializa=0;


function converte(campo,nome,j){
  result="";
  tamanho=campo.length;
  
  for(i=0;i<tamanho;i++) {
    codigo=campo.charCodeAt(i);
    if (codigo<0 || codigo>255)
      codigo = 256;
    if (compara[codigo] != campo.charAt(i) && flagConfirma == 0){
      flagConfirma=1;
    }
    result+=compara[codigo];
  }
  document.forms[0].elements[j].value=result;
}


function confirma() {
  if (confirm('Os dados introduzidos contÃ£ªm caracteres invÃ£¡lidos! \n\n           Foi efectuada conversÃ£o automÃ£¡tica\n\n                 Confirma esta operaçÃ£o '))
    return true;
  return false;
}


function ObjectoValida(parametro,label,tipo,obrigatorio,min,max,dependencia){
  this.parametro = parametro;
  this.label = label;
  this.tipo = tipo;
  this.obrigatorio = obrigatorio;
  this.min = min;
  this.max = max;
  this.dependencia = dependencia;
}

function bissexto(year) {
  if ((year/4)   != Math.floor(year/4))
    return false;
  if ((year/100) != Math.floor(year/100))
    return true;
  if ((year/400) != Math.floor(year/400))
    return false;
  return true;
}

function ValidDate(day,month,year) {
  if ((bissexto(year) && (day>daysofmonthLY[month])) || (!bissexto(year) && (day>daysofmonth[month]))) {
    return false;
  }
  else{
    return true;
  }
}

function UltimoDia(ano,mes) {
  if (bissexto(ano))
    return(daysofmonthLY[mes]);
  else
    return(daysofmonth[mes]);
}

function verificatexto(campo) {
  tamanho= campo.length;
  temp=0;
  
  for (i=0,j=0;i<tamanho;i++) {
    if ((campo.charCodeAt(i)!=10) && (campo.charCodeAt(i)!=13) && (campo.charCodeAt(i)!=32) ){
      temp[j]+=campo[i];
      j++;
    }
  }
        
  if (j == 0)
    return true;
  else
    return false;
} 

function positivo(campo) {
  if  (parseInt(campo) > 0)
    return "11";
  else
    return "0";
}

function tiraEspacos(campo){
  tamanho= campo.length;
  result = "";
  for (i=0;i<tamanho;i++) {
    if (campo.charCodeAt(i)!=32)
      result+=campo.charAt(i);
  }
  return result;
}


function vSoTexto(campo){
  for (i=0;i<campo.length;i++) {
    if ((campo.charCodeAt(i)<48) || (campo.charCodeAt(i)>57) &&
				(campo.charCodeAt(i)<64) || (campo.charCodeAt(i)>90) &&
				(campo.charCodeAt(i)<97) || (campo.charCodeAt(i)>122) )
      return false;
  }
  return true;
}

function vNumero(campo) {
  campo=tiraEspacos(campo);
  for (i=0;i<campo.length;i++) {
    if ((campo.charCodeAt(i)<48) || (campo.charCodeAt(i)>57))
      return "4";
  }
  return "0";
}

function vTaxa(campo){
  for (i=0;i<campo.length;i++) {
    if (((campo.charCodeAt(i)<48) || (campo.charCodeAt(i)>57)) && (campo.charCodeAt(i)!=46) && (campo.charCodeAt(i)!=37))
      return "12";
  }
  return "0";
}

function comprimento (campo,min,max,rows,columns) {
  tamanho= campo.length-1;
  linhas=1;
  j=0;
  
  for (i=0;i<tamanho;i++) {
    if (campo.charCodeAt(i)==10) {
      linhas++;
      j=i+2;
    }
    else {
      if (i-j>=columns){
	linhas++;
	j=i+2;
      }
    }
  }

  if  ((parseInt(min)!= null) || (parseInt(max)!= null)){
    if (campo.length < parseInt(min))
      return "9";
    if (campo.length > parseInt(max))
      return "10";
  }
  return "0";
}

function limite (campo,min,max){
  if (!isNaN(campo)){
    if (min!= "") {
      if (parseInt(campo) < parseInt(min))
	return "5";
    }
    if (max!= ""){
      if (parseInt(campo) > parseInt(max))
	return "6";
    }
  }
  else
    return "4";
}

function vData (data) {
  datum = data.split("/");
  ano = datum[0];
  mes = datum[1];
  dia = datum[2];

  if (ano.length!=4)
    return "1";
  if ((isNaN(ano)) || (isNaN(mes)) || (isNaN(dia)) || (dia.length!=2))
    return "1";
  if (mes.length!=2)
    return "1";
  if ((mes>12)||(mes<1))
    return "1";
  else{ 
    if (!ValidDate(dia-0,mes-0,ano))
      return "1";
  }
}

function vEmail(email){
  var i = email.indexOf("@");
  var j = email.indexOf(".");
  
  if (j < i)
    j = email.indexOf(".",i);
  
  if ((i==-1) || (j==-1) || i < 1 || (j<i+2))
    return "22";
  var z = email.indexOf("@",i+1);
  if (z != -1)
    return "22";   
}

function vContribuinte(contribuinte){
  var reg=/[0-9]+/;
	
  if (contribuinte.length<9 || !reg.test(contribuinte) || contribuinte=="000000000" || contribuinte=="123456789") // validar nÃºmero.
     return "23";
  produto=0;
  j=8;
  for (i=1; i<10; i++){
    produto+=contribuinte.substring(j,j+1)*i;
    j--;	
  }  
  resto=produto%11;
  if(resto==0 || (resto==1 && contribuinte.substring(8,9)==0))
    return true;    
  else 
    return "23";
}

function erro(numero,label,min,max,rows) {

  switch(numero) {
  case "1":
    erros+= '\n      - '+label+':  deve ser do tipo data (AAAA/MM/DD) ';
    return true;
  case "2":
    erros+= '\n      - '+label+': o formato data deve ser (MM/AA) ';
    return true;
  case "4":
    erros+= '\n      - '+label+':  deverÃ£¡ ser numÃ©rico (Ex: 123) ';
    return true;
  case "5":
    erros+= '\n      - '+label+':  deverÃ£¡ ter no mÃnimo: '+ min;
    return true;
  case "6":
    erros+= '\n      - '+label+':  deverÃ£¡ ter no mÃ£¡ximo: '+ max;
    return true;
  case "9":
    erros+= '\n      - '+label+':  nÃºmero de caracteres minimos: '+min;
    return true;
  case "10":
    erros+= '\n      - '+label+':  nÃºmero de caracteres mÃ£¡ximos: '+max;
    return true;
  case "11":
    erros+= '\n      - '+label+':  o valor tem que ser positivo ';
    return true;
  case "12":
    erros+= '\n      - '+label+':  o formato do tipo Taxa deve ser (XX%) ';
    return true;
  case "15":
    erros+= '\n      - '+label+':  as duas casas decimais devem ser zeros (Ex: 99.00) ';
    return true;
  case "16":
    erros+= '\n      - '+label+':  sÃ³ deverÃ£¡ ter um separador decimal (Ex: 99.00) ';
    return true;
  case "17":
    erros+= '\n      - '+label+':  deverÃ£¡  ser composto por duas casas decimais (Ex: 99.00) ';
    return true;
  case "18":
    erros+= '\n      - '+label+':  o formato deve ser (Ex: 99.00) ';
    return true;
  case "19":
    erros+= '\n      - '+label+':  deverÃ£¡ ter duas casas decimais (Ex: 99.99) ';
    return true;
  case "20":
    erros+= '\n      - '+label+':  o formato hora deve ser (HH:MM) ';
    return true;
  case "21":
    erros+= '\n      - '+label+':  o formato hora deve ser (HH:MM:SS) ';
    return true;  
  case "22":
    erros+= '\n      - '+label+':  o formato deve ser do tipo Email ';
    return true;  
  case "23":
    erros+= '\n      - '+label+':  nº de contribuinte invÃ£¡lido ';
    return true;
  case "24":
    erros+= '\n      - '+label+': o formato data deve ser (MM/AAAA) ';
    return true;
  default: 
    return false;    
  }
}



function verificaForm(form,aValida,conversao) {

  flagConfirma = 0; //inicializacao flagConfirma
  flagPrimeiroErro = 0;
  campoPrimeiroErro = "";

  for (var i = 0; i < eval("document." + form + ".length"); i++) {
    var e = eval("document." + form + ".elements[i]");
    for (var j = 0; j < aValida.length; j++) {
      if (e.name==aValida[j].parametro) {
	var campo=e.value;
	if (aValida[j].obrigatorio!="") {
	  //Primeiro verifica se o campo estÃ£¡ vazio
	  if (verificatexto(campo)){
	    campos_vazios += "\n      - " + aValida[j].label;
	    if (flagPrimeiroErro == 0){
	      flagPrimeiroErro = 1;
	      campoPrimeiroErro = e.name;
	    } 
	  }
	}
	//Vai verificar se existem dependencias
	else{
	  if(aValida[j].dependencia!="") {
	    depende=aValida[j].dependencia;
	    if (eval("document."+ form + "." +depende+".value")!="") {
	      if (verificatexto(campo)){
		campos_vazios += "\n           - " + aValida[j].label;
		if (flagPrimeiroErro == 0){
		  flagPrimeiroErro = 1;
		  campoPrimeiroErro = e.name;
		}
	      }
	    }
	  }
	}
	
	if(!verificatexto(campo)){
	  switch(aValida[j].tipo) {	  
	  case "String" :
	    if (erro(comprimento(campo,aValida[j].min,aValida[j].max,e.rows,e.columns),aValida[j].label,aValida[j].min,aValida[j].max,e.rows)){
	      if (flagPrimeiroErro == 0){
	        flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
	      }    
	    }
	    break;
	  case "Date" :
	    if (erro(vData(campo),aValida[j].label,aValida[j].min,aValida[j].max)){
	      if (flagPrimeiroErro == 0){
		flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
		campoData = true;
	      }
	    }
	    break;
	  case "tax" :
	    if (erro(vTaxa(campo),aValida[j].label,aValida[j].min,aValida[j].max)){
	      if (flagPrimeiroErro == 0){
		flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
	      }
	    }
	    break;
	  case "Number" :
	    if ((aValida[j].min != "") || (aValida[j].max != "")){
	      if (erro(limite(campo,aValida[j].min,aValida[j].max),aValida[j].label,aValida[j].min,aValida[j].max)){
		if (flagPrimeiroErro == 0){
		  flagPrimeiroErro = 1;
		  campoPrimeiroErro = e.name;
		}
	      }
	      break;
	    }
	    else {
	      if (erro(vNumero(campo),aValida[j].label,aValida[j].min,aValida[j].max)){
		if (flagPrimeiroErro == 0){
		  flagPrimeiroErro = 1;
		  campoPrimeiroErro = e.name;
		}
	      }
	      break;
	    }
	  case "Email" :
	    if (erro(vEmail(campo),aValida[j].label,aValida[j].min,aValida[j].max)){
	      if (flagPrimeiroErro == 0){
		flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
	      }
	    }
	    break;
	  case "Contribuinte" :
	    if (erro(vContribuinte(campo),aValida[j].label,aValida[j].min,aValida[j].max)){
	      if (flagPrimeiroErro == 0){
		flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
	      }
	    }
	    break;
	  default :
	    if (erro(comprimento(campo,aValida[j].min,aValida[j].max,e.rows,e.columns),aValida[j].label,aValida[j].min,aValida[j].max,e.rows)){
	      if (flagPrimeiroErro == 0){
		flagPrimeiroErro = 1;
		campoPrimeiroErro = e.name;
	      }
	    }
	  }
	}
      }
    }
  }

  // Se ocorrer erros, dispara mensagens e retorna falso ao fazer submit,senÃ£o retorna verdadeiro
  if (!campos_vazios && !erros) {
    for (var i = 0; i < eval("document." + form + ".length"); i++) {
      var e = eval("document." + form + ".elements[" + i + "]");
      
      if (conversao == true)
        converte(e.value,e.name,i);
    }
    if (flagConfirma==1){
      if (!confirma())
	return false;
      return true;
    }
    else
      return true;
  }
  
  msg = '';

    
  if (campos_vazios)
    msg += 'Os seguintes campos sÃ£o de preenchimento obrigatÃ³rio:' + campos_vazios + '\n';
  if (erros)
    msg += '\nOs seguintes campos encontram-se mal formatados:\n';
  
  msg += erros;
  alert(msg);
  msg = "";
  campos_vazios = "";
  erros = "";
  
  //faz o focus do campo em que ocorreu o primeiro erro
  if (campoPrimeiroErro!=""){
    if (campoData==false) 
      eval("document." + form + "." + campoPrimeiroErro + ".focus()");
    campoData=false;
  }

  return false;
}

function formataData(campo, descricao, valor, separador){
  tem_barra=0;
  result="";
  tamanho=valor.length;

  if (tamanho==8 && !isNaN(valor)){
    for (i=0;i<tamanho;i++){
      if (i==4) {
	if (valor.charAt(i)==separador)
	  tem_barra=1;
	else
	  result=result.concat(separador);
      }
      else {
	if (tem_barra==0 && i==6)
	  result=result.concat(separador);
      }
      result=result.concat(valor.charAt(i));
    }
    campo.value=result;
    valor=result;
  }
  
}



function validaDatas(DataInicio,DataFim) {

datum1 = DataInicio.split("/");
  ano1 = datum1[0];
  mes1 = datum1[1];
  dia1 = datum1[2];
  
datum2 = DataFim.split("/");
  ano2 = datum2[0];
  mes2 = datum2[1];
  dia2 = datum2[2];
  
if (ano1>ano2){
flag=true;
}
else {
	flag=false;
	if (ano1==ano2){
		if (mes1>mes2){
			flag=true;
			}
			else{
			if (mes1==mes2){
				if (dia1>dia2){
					flag=true;
					}
				}
			}
		}
	}
if (flag==true){	
  msg = 'Por favor, carregue em OK e verifique a informaçÃ£o inserida.\n';
  msg += "____________________________________________________\n\n";
  msg += 'O intervalo da Data Inicio e Data Fim estÃ£¡ incorrecto';
  alert(msg);
  }
 return flag;
}

function constroi(linkImagem, ficheiro, largura, altura, title, actionOver, actionOut, nameImg, classtxt, alt, onClick, borderimg, borderimgcor) {
           // alert('entrou no constroi')
	var html = "";
	var extensao = "";
	if (ficheiro != null || !ficheiro.equals(""))
	{
		extensao = ficheiro.substring(ficheiro.length-3, ficheiro.length);
	}

	if (extensao == "swf" || extensao == "SWF") {
        if ( altura != "" && largura != "") {    
		html="<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width="+largura+" Height ="+altura+">"
        } else {
		html="<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0'>"  
        }            
		html+="<param name=movie value='"+ficheiro+"'><param name=quality value=High>"
		html+=" <PARAM NAME=menu VALUE=0>"
		html+=' <param name="_cx" value="24236">'
		html+='  <param name="_cy" value="16484">'
		html+='  <param name="FlashVars" value="-1">'
		html+="  <param name=Src value='"+ficheiro+"'>"
		html+='  <param name="WMode" value="Window">'
		html+='  <param name="Play" value="-1">'
		html+='  <param name="Loop" value="-1">'
		html+='  <param name="SAlign" value>'
		html+='  <param name="Base" value>'
		html+='  <param name="Scale" value="ShowAll">'
		html+='  <param name="DeviceFont" value="0">'
		html+='  <param name="EmbedMovie" value="0">'
		html+='  <param name="BGColor" value>'
		html+='  <param name="SWRemote" value>'
		html+="  <embed src='"+ficheiro+"' name="+nameImg+" quality=high pluginspage=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash width="+largura+" Height ="+altura+"></embed>"
		html+='</object>'
	} 

	if (extensao == "IPX" || extensao == "ipx") {
		html="<OBJECT 	ID=IpixX1 	WIDTH="+largura+" 	HEIGHT="+altura+" 	CLASSID=CLSID:11260943-421B-11D0-8EAC-0000C07D88CF 	CODEBASE=http://www.ipix.com/download.html>"
		html+="	<PARAM 		VALUE='"+ficheiro+"' 		NAME=IPXFILENAME>"
        if ( altura != "" && largura != "") {
		//alert('tamanho <> 0')
		html+="	<EMBED 		SRC='"+ficheiro+"' 	NAME="+nameImg+"	 WIDTH="+largura+" 		HEIGHT="+altura+" 		PLUGINURL=http://www.ipix.com/cgi-bin/download.cgi		PALETTE=foreground 		BORDER=0>"
        }else{
                    //alert('tamanho 0')
		html+="	<EMBED 		SRC='"+ficheiro+"' 	NAME="+nameImg+"	 WIDTH=200		HEIGHT=420 		PLUGINURL=http://www.ipix.com/cgi-bin/download.cgi		PALETTE=foreground 		BORDER=0>"        	    		
	}	
		html+="<NOEMBED>"
		html+="		You need Netscape Navigator or Internet Explorer 3 or higher with IPIX-plugin."
		html+="</NOEMBED>"
		html+="</OBJECT>"
	}

 // e' uma imagem ou outra coisa
	 if (extensao != "swf" && extensao != "SWF" && extensao != "ipx" && extensao != "IPX" ) { 
 		if (linkImagem == "") {
			html="<img src='"+ficheiro+"'";
			if (largura != "") 
				html+= " width="+largura;
			if (altura != "") 
				html += " height="+altura;
			if (borderimg != "") 
			        html += " border="+borderimg;
			if (borderimg == "") 
			        html += " border=0";
			if (borderimgcor != "") 
			        html += " style=border-color:"+borderimgcor;
			html+=">";
		} else {
			html="<a href="+linkImagem;
			if (title != "")
				html+=" title="+title;
			if (actionOver != "")
				html+=" onMouseOver="+actionOver;
			if (actionOut != "")
				html+=" onMouseOut="+actionOut;
			if (classtxt != "")
				html+=" class="+classtxt;
			if (onClick != "")
				html+=" onClick="+onClick;				
			html+="><img ";
			if (nameImg != "")						
				html+=" name="+nameImg;
			if (alt != "")
				html+=" alt='"+alt+"'";
			html+=" src='"+ficheiro+"'";
			if (largura != "") 
				html+= " width="+largura;
			if (altura != "") 
				html += "height="+altura;
			if (borderimg != "") 
			        html += " border="+borderimg;
			if (borderimg == "") 
			        html += " border=0";
			if (borderimgcor != "") 
			        html += " style=border-color:"+borderimgcor;
			html+=">;</a>";
		}
	 }  
//	 if (extensao == "IPX" || extensao == "ipx")
//	    alert(html)
        //alert(html)
	return html;
}


