// JavaScript Document
function bancoFromNib(n){
	var b = n.substring(0, 4);
	var bNome = "";
	switch (b) {
		case "0010":  bNome = "BPI"; break; 
		case "0007":  bNome = "BES"; break;
		case "0018":  bNome = "Santander"; break;
		case "0019":  bNome = "BBVA"; break;
		case "0023":  bNome = "Activo Bank"; break;
		case "0025":  bNome = "Caixa BI"; break;
		case "0032":  bNome = "Barclays"; break;
		case "0033":  bNome = "BCP"; break;
		case "0035":  bNome = "CGD"; break;
		case "0036":  bNome = "Montepio"; break;
		case "0038":  bNome = "Banif"; break;
		case "0043":  bNome = "Deutsche Bank"; break;
		case "0045":  bNome = "CA Cr\xE9dito Agr\xEDcola"; break;
		case "0046":  bNome = "Popular"; break;
		case "0059":  bNome = "CEMAH - Caixa Econ\xF3mica da Miseric\xF3rdia de Angra do Hero\xEDsmo"; break;
		case "0061":  bNome = "BiG"; break;
		case "0076":  bNome = "Finibanco"; break;
		case "0079":  bNome = "BPN"; break;
		case "0160":  bNome = "BES dos Açores"; break;
		case "0781":  bNome = "Direc\xE7\xE3o Geral do Tesouro"; break;
		case "5180":  bNome = "Caixa Central de Cr\xE9dito Agr\xEDcola M\xFAtuo"; break;
		case "0012":  bNome = "BCA"; break;
		default: bNome = "";
	}
	if(bNome && bNome != ""){
		if(bNome == "BCA"){
			$('#bcaErr').show();
		} else {
			$('#BancoPagamentoQuotas').val(rCharsJScript(bNome));
			$('#BancoPagamentoQuotas').attr('readonly','readonly');
			$('#DependenciaPagamentoQuotas').focus();
			$('#bcaErr').hide();
		}
	} else {
		$('#BancoPagamentoQuotas').val(bNome);
		$('#BancoPagamentoQuotas').attr('readonly','');
	}
}

function validarBiNif(n)
{
	//variavel a armazenar a soma de controle
	var val=0;

	for(i=(n.length);i!=1;i--)
	    val += n.charAt(n.length-i) * i;

	//BUG DO ALGORITMO DE VALIDAO DO BI
	//se digito controle = 0, pode assumir valor 0 ou 10
	if(n.charAt(n.length-1)==0)
	{
		//ver se  +0
		if((val % 11)==0) return true;
		else
		{
			//ver se  +10
			val=val + 10;
			if((val % 11)==0) return true;
		}
	}
	else
	{
		//multiplicar por 1 para somar em vez de concatenar
	    val += n.charAt(n.length-1)*1;
		if((val % 11)==0) return true;
	}
	return false;
}

function validarNIB(n)
{
  n = n.replace(/ /g, '');
  aPesos = new Array();
  aPesos[0] = 73;   // 73
  aPesos[1] = 17;   // 17
  aPesos[2] = 89;   // 89
  aPesos[3] = 38;   // 38
  aPesos[4] = 62;   // 62
  aPesos[5] = 45;   // 45
  aPesos[6] = 53;   // 53
  aPesos[7] = 15;   // 15
  aPesos[8] = 50;   // 50
  aPesos[9] = 5;   // 05
  aPesos[10] = 49;   // 49
  aPesos[11] = 34;   // 34
  aPesos[12] = 81;   // 81
  aPesos[13] = 76;   // 76
  aPesos[14] = 27;   // 27
  aPesos[15] = 90;   // 90
  aPesos[16] = 9 ;   // 09
  aPesos[17] = 30;   // 30
  aPesos[18] = 3;   // 03

  var total = 0;
  for(i=0;i<=18;i++)
  {
  	total += Number(n.charAt(i)) * Number(aPesos[i]);
  }
  var check = 98 - (total % 97);
  var ctrl  = n.substring(19);
  if(check==ctrl) return true;
  return false;
}

function validarCCidadao(n)
{
  // remove spaces
  n = n.split(' ').join('');
  if(n.length != 12) return false;
  
  var digit2 = false;
  var sum = 0;
  
  for(i = (n.length - 1); i>=0; i--){
    letter = n.charAt(i);
    
    switch(letter.toUpperCase())
    {
      case 'A' : val =  10; break;
      case 'B' : val =  11; break;
      case 'C' : val =  12; break;
      case 'D' : val =  13; break;
      case 'E' : val =  14; break;
      case 'F' : val =  15; break;
      case 'G' : val =  16; break;
      case 'H' : val =  17; break;
      case 'I' : val =  18; break;
      case 'J' : val =  19; break;
      case 'K' : val =  20; break;
      case 'L' : val =  21; break;
      case 'M' : val =  22; break;
      case 'N' : val =  23; break;
      case 'O' : val =  24; break;
      case 'P' : val =  25; break;
      case 'Q' : val =  26; break;
      case 'R' : val =  27; break;
      case 'S' : val =  28; break;
      case 'T' : val =  29; break;
      case 'U' : val =  30; break;
      case 'V' : val =  31; break;
      case 'W' : val =  32; break;
      case 'X' : val =  33; break;
      case 'Y' : val =  34; break;
      case 'Z' : val =  35; break;
      default: val = parseInt(letter);
    }  
    
    if(digit2){
      val = 2 * val;
      if(val >= 10 ) val -= 9;
    }
    
    sum += val;
    
    digit2 = !digit2;
  }
  
  return (sum % 10) == 0;
}

function validarEmail(email){
  var re = "/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/"
  return email.match(re) 
}

function isDate(d) {
	dArray = d.split('/');
	var date = new Date();
	var year = dArray[0];
	var month = dArray[1];
	var day = dArray[2];
	var blnDay;
	var blnMonth;
	var blnYear;

	date.setFullYear(year, month -1, day);

	blnDay   = (date.getDate()      == day);
	blnMonth = (date.getMonth()     == month -1);
	blnYear  = (date.getFullYear()  == year);

	if (blnDay && blnMonth && blnYear){
		return true;
	} else {
		return false;
	}

}

function compareDates(d1, d2, interval, n, comp) {
	var d1Array = d1.split('/');
	var date1 = new Date();
	var year1 = d1Array[0];
	var month1 = d1Array[1];
	var day1 = d1Array[2];
	date1.setFullYear(year1, month1 -1, day1);
	var millisecond=1;
	var second=millisecond*1000;
	var minute=second*60;
	var hour=minute*60;
	var day=hour*24;
	var year=day*365;

	if(interval && n){
		var newDate;
		switch(interval) {
			case 'd': date1.setDate(date1.getDate() + n); break;
			case 's': date1.setDate(date1.getDate() + n*7); break;
			case "m": date1.setMonth(date1.getMonth() + n); break;
			case "y": date1.setFullYear(date1.getFullYear() + n); break;
		}
	}
	var date2 = new Date();
	if(d2 && d2 != ''){
		d2Array = d2.split('/');
		var year2 = d2Array[0];
		var month2 = d2Array[1];
		var day2 = d2Array[2];
		date2.setFullYear(year2, month2 -1, day2);
	}
	var falso = 1;
	switch(comp){
		case '>=': (date1 >= date2)?falso=0:falso=1; break;
		case '>': (date1 > date2)?falso=0:falso=1; break;
		case '==': (date1 == date2)?falso=0:falso=1; break;
		case '<': (date1 < date2)?falso=0:falso=1; break;
		case '<=': (date1 <= date2)?falso=0:falso=1; break;
	}
	if(falso == 1){
		return false;
	} else {
		return true;
	}
}



function numero(n)
{
	var nums="0123456789";
	for(i=0;i<n.length;i++)
		if(nums.indexOf(n.charAt(i))==-1) return false;
	return true;
}


function avisar(field)
{
	var errM = field + "Err";
	$('#' + errM).show();
	//return false;
}


function verificar(e){
	var elem = new Object();
	var err = 0;
	elem = document.getElementById(e);
	$('span[id*="Err"]').hide();
	if(elem.nome){
		if(elem.nome.value.length < 3 || elem.nome.value.indexOf(" ") == -1)
		{
			err = 1;
			avisar(elem.nome.id);
		}
	}
		
	if(elem.nif){
		if((elem.nif.value.length < 7) || (!numero(elem.nif.value)) || (!validarBiNif(elem.nif.value)))
		{
			err = 1;
			avisar(elem.nif.id);
		}
	}
	
	if(elem.docIDradio){
		var v = 0;
		for(i=0; i < elem.docIDradio.length; i++){
			if(elem.docIDradio[i].checked){
				v = elem.docIDradio[i].value;
			}
		}
		if(v==0){
			err = 1;
			avisar("docIDradio");
		} else {
			if(v==1){ // Cartão de Cidadão
				if(elem.cCidadao.value.split(' ').join('').length != 12 || !validarCCidadao(elem.cCidadao.value)){
					err = 1;
					avisar(elem.cCidadao.id);
				}
			} else { // Bilhete de Identidade
				if(elem.bi.value.length < 8 || !validarBiNif(elem.bi.value)){
					err = 1;
					avisar(elem.bi.id);
				}
			}
		}
	}
	if(elem.nasData){
		if(elem.nasData.value.length < 10 || !isDate(elem.nasData.value)){
			err = 1;
			avisar(elem.nasData.id);
		} else {
			if(!compareDates(elem.nasData.value, '', 'y',18,'<=')){
				err = 1;
				avisar('dataMenor');
			}
		}
	}
	
	if(elem.distritosSel){
		if(elem.distritosSel.value == -1){
			if(!elem.foraPortugal.value){
				err = 1;
				avisar(elem.foraPortugal.id);
			}
		} else {
			if(!elem.nasLocalidadeID.value){
				err = 1;
				avisar(elem.nasLocalidadeID.id);
			}
		}
	}
	
	if(elem.morada){
		if(elem.morada.value.length < 5)
		{ 
			err = 1;
			avisar(elem.morada.id);
		}
	}
	
	if(elem.localidade){
		if(elem.localidade.value.length < 3)
		{ 
			err = 1;
			avisar(elem.localidade.id);
		}
	}
	

	if(elem.cPostal){
		if(!elem.cPostal.value)
		{ 
			avisar(elem.cPostal.id);
		} else {
			if(elem.cPostal1.value.length != 8)
			{ 
				err = 1;
				avisar(elem.cPostal1.id);
			}
			if(elem.cPostal2.value.length < 3)
			{ 
				err = 1;
				avisar(elem.cPostal2.id);
			}
		}
	}
	
	if(elem.telemovel || elem.telefoneResidencia || elem.telefoneEmprego){
		if(!elem.telemovel.value && !elem.telefoneResidencia.value && !elem.telefoneEmprego.value){
			avisar('telefone');
		} else {
			var nt = ""
			if(elem.telemovel.value)
			{
				nt = elem.telemovel.value;
				nt = nt.replace(/ /g, '');
				nt = nt.replace(/\./g, '');
				if(nt.length < 9){
					err = 1;
					avisar(elem.telemovel.id);
				}
			}
			if(elem.telefoneResidencia.value)
			{
				nt = elem.telefoneResidencia.value;
				nt = nt.replace(/ /g, '');
				nt = nt.replace(/\./g, '');
				if(nt.length < 9){
					err = 1;
					avisar(elem.telefoneResidencia.id);
				}
			}
			if(elem.telefoneEmprego.value)
			{
				nt = elem.telefoneEmprego.value;
				nt = nt.replace(/ /g, '');
				nt = nt.replace(/\./g, '');
				if(nt.length < 9){
					err = 1;
					avisar(elem.telefoneEmprego.id);
				}
			}
		}
	}
	if(elem.formaPag){
		v = 0;
		for(i=0; i < elem.formaPag.length; i++){
			if(elem.formaPag[i].checked){
				v = elem.formaPag[i].value;
			}
		}
		v = 1; // eliminar se forma de pagamento é importante
		if(v==0){
			err = 1;
			avisar("formaPag");
		} else {
			if(v==1){ // Trasnferência Bancária
				if(elem.NIBPagamentoQuotas.value.split(' ').join('').length != 21 || !validarNIB(elem.NIBPagamentoQuotas.value)){
					err = 1;
					avisar(elem.NIBPagamentoQuotas.id);
				}
				if(!elem.BancoPagamentoQuotas.value){
					err = 1;
					avisar(elem.BancoPagamentoQuotas.id);
				}
				if(!elem.DependenciaPagamentoQuotas.value){
					err = 1;
					avisar(elem.DependenciaPagamentoQuotas.id);
				}
	
			}
		}
	}
	alert(elem.id);
	if(err!=1){
		elem.submit();
	} else {
		alert(rCharsJScript("Siga, por favor, as instruções a vermelho para correção dos dados introduzidos."));
	}
}


function validate(fArray){
	var err = "0";
	var errFinal = "0"
	$('span[id*="Err"]').hide();
	
	for(i=0; i < fArray.length ; i++){
		
		switch (fArray[i]){
			case "nome": validateNome(fArray[i], 1, 6, '', 1); break;
			case "dataNascimentoMaior":
		}
	}
		
}


function validateNome(field, riquered, minLength, maxLength, searchSpaces){
	var err = "";
	var v = $('#' + field).val();
	v = v.replace(/^\s+|\s+$/g,"");
	if(riquered == 1 && !v){
		err = "O campo Nome não pode conter valor nulo";
	} else {
		if(v.length < minLength || (maxLength && v.length > maxLength)){
			if(maxLength){
				err = "O campo Nome não pode ter menos de " + minLength + " e mais de " + maxLength + " caracteres ";
			} else {
				err = "O campo Nome não pode ter menos de " + minLength + " caracteres";
			}
		} else {
			if(searchSpaces == 1 && v.indexOf(' ') == -1){
				err = "O campo Nome exige a introdução de pelo menos o primeiro e o último nome, separados por espaço."
			}
		}
	}
	if(err){
		validateAlert(field, err);
	}
}

function validateDate(d) {
	dArray = d.split('/');
	var date = new Date();
	var year = dArray[0];
	var month = dArray[1];
	var day = dArray[2];
	var blnDay;
	var blnMonth;
	var blnYear;

	date.setFullYear(year, month -1, day);

	blnDay   = (date.getDate()      == day);
	blnMonth = (date.getMonth()     == month -1);
	blnYear  = (date.getFullYear()  == year);

	if (blnDay && blnMonth && blnYear){
		return true;
	} else {
		return false;
	}

}

function validateAlert(field, err){
		var o = new Object();
		$('#' + field + 'Err').attr('innerHTML', '<br />' + rCharsJScript(err));
		$('#' + field + 'Err').show()
}
