﻿// JScript File


function getNome(elName) {
	if (elName.substring(0, 4) == "_ctl") {
		var n = elName.indexOf(":") + 1;
		elName = elName.substring(n, elName.length);
	}

	if (elName.charAt(0)=='P' && isDigit(elName.charAt(1)))
		return 'Pergunta ' + elName.substring(1, elName.length);
	else if (elName.length > 3 && elName.substring(0, 4) == 'cp1_')
		return elName.substring(4, elName.length-4);
	else if (elName.length > 3 && elName.substring(0, 4) == 'cp2_')
		return elName.substring(4, elName.length-4);
	else if (elName.length > 2 && elName.substring(0, 3) == 'lp_')
		return elName.substring(3, elName.length-3);
	else
		return elName;
}

/**********************************************/
function getElement(elName) {
	return document.getElementById(elName);
}

/**********************************************/
function CheckData(elName) {
	return (document.getElementById(elName).value+'' != '');
}

function ClearData(elName) {
	try {
		document.getElementById(elName).value = '';
	} catch(ex) {
	}
}


/**********************************************/
function RequiredField(el, HasData) {
	if (!HasData) {
		alert('Tem de preencher o campo obrigatório: ' + getNome(el.name) + ' !');
		el.focus();
		return false;
	}
	return true;
}

/**********************************************/
function RequiredDateField(elName, HasData) {
	if (!HasData) {
		alert('Tem de preencher o campo obrigatório: ' + getNome(elName) + ' !');
		el.focus();
		return false;
	}
	return true;
}

/**********************************************/
function VerifyIsValidEmail(elName) {
	var el = getElement(elName);
	if (el.value!='' && !IsValidEmail(el.value)) {
		alert('Endereço de email inválido: ' + getNome(elName) + ' !');
		el.focus();
		return false;
	}
	return true;
}

/**********************************************/
function CountElementsChecked(CheckboxName) {
	var checkboxGroup = document.forms[0].elements[CheckboxName];
	var nChecks = 0;
	for( var c=0 ; c < checkboxGroup.length ; c++ )
		if (checkboxGroup[c].checked)
			nChecks++;
	return nChecks;
}

function UncheckGroup(CheckboxName) {
	var checkboxGroup = document.forms[0].elements[CheckboxName];
	for( var c=0 ; c < checkboxGroup.length ; c++ )
		checkboxGroup[c].checked = false;
}

/**********************************************/
function VerifyMinMaxElementsChecked (CheckboxName, MinChecks, MaxChecks) {
	var nChecks = CountElementsChecked(CheckboxName);
	var checkboxGroup = document.forms[0].elements[CheckboxName];

	if (MinChecks > 0 && nChecks < MinChecks) {
		if (MinChecks < MaxChecks)
			alert('Tem de indicar pelo menos ' + MinChecks + ' opções: ' + getNome(CheckboxName) + ' !');
		else
			alert('Tem de indicar ' + MinChecks + ' opções: ' + getNome(CheckboxName) + ' !');
		checkboxGroup[0].focus();
		return false;
	}
	if (MaxChecks > 0 && nChecks > MaxChecks) {
		alert('Só pode indicar ' + MaxChecks + ' opções: ' + getNome(CheckboxName) + ' !');
		checkboxGroup[0].focus();
		return false;
	}
	return true;
}

/**********************************************/
function VerifyIsValidPhoneNumber(elName) {
	var el = getElement(elName);
	if (el.value.length == 0) return true;
	if (!isInteger(el.value) || el.value.length!=9) {
		alert('Número de telefone inválido: ' + getNome(elName) + ' !');
		el.focus();
		return false;
	}
	return true;
}

/**********************************************/
function VerifyIsValidNumber(elName) {
	var el = getElement(elName);
	if (el.value!='' && !isInteger(el.value)) {
		alert('Número inválido: ' + getNome(elName) + ' !');
		el.focus();
		return false;
	}
	return true;
}

/**********************************************/
function VerifyIsValidNIF(elName) {
	var el = getElement(elName);
	if (!isInteger(el.value) || !IsValidNIF(el.value)) {
		alert('Número de contribuinte inválido!');
		el.focus();
		return false;
	}
	return true;
}

function IsValidNIF(Ncontribuinte) {
	var s = Ncontribuinte;
	if (s.length != 9) return false;

	var c = s.charAt(0);
	if (c!='1' && c!='1' && c!='2' && c!='5' && c!='6' && c!='8' && c!='9') return false;

	var checkDigit = 0;
	for( var i=0 ; i<8 ; i++ ){
		c = s.charAt(i);
		checkDigit += (parseInt(c) * (9 - i));
	}
	checkDigit = (checkDigit % 11)? (11 - checkDigit % 11) % 10 : 0;
	c = s.charAt(8);
	return (checkDigit == parseInt(c));
}

/**********************************************/
function VerifyIsValidCodPostal(elName) {
	var el1 = getElement("cp1_" + elName);
	var el2 = getElement("cp2_" + elName);
	//var el3 = getElement("lp_" + elName);

	if (el1.value!='' && !isIntegerInRange(el1.value,1000,9999)) {
		alert('Código Postal inválido: ' + getNome(el1.name) + ' !');
		el1.focus();
		return false;
	}
	if (el2.value!='' && !isInteger(el2.value)) {
		alert('Código Postal inválido: ' + getNome(el2.name) + ' !');
		el2.focus();
		return false;
	}
	return true;
}

/**********************************************/
function VerifyIsValidDate(elName, formulaEaviso) {
	var el1 = getElement("Dia_" + elName);
	var el2 = getElement("Mes_" + elName);
	var el3 = getElement("Ano_" + elName);
	var formula = '';
	var aviso = 'Data inválida!';
	if (formulaEaviso != '') {
		if (formulaEaviso.indexOf('|')>0) {
			var arr = formulaEaviso.split('|');
			formula = arr[0];
			aviso = arr[1];
		}
		else
			formula = formulaEaviso;
	}
	
	if ((el1.value!='' || el2.value!='' || el3.value!='') && !IsValidDate(elName, formula)) {
		alert(aviso);
		el1.focus();
		return false;
	}
	return true;
}

function IsValidDate(nome, formula) {
	var dia = getElement("Dia_" + nome).value;
	var mes = getElement("Mes_" + nome).value;
	var ano = getElement("Ano_" + nome).value;

	var Today = new Date();
	if (!isIntegerInRange(dia, 1, 31) || !isIntegerInRange(mes, 1, 12) || !isIntegerInRange(ano,1900,Today.getFullYear()))
		return false;
	mes--;

	var dt = new Date(ano,mes,dia);
	if (dt==null) 
		return false;

	if (dt.getDate()!=dia || dt.getMonth()!=mes || dt.getFullYear()!=ano)
		return false;

	if (formula!="" && formula!="undefined") {
		formula = "var resFormula = (" + formula.replace(new RegExp("\\[VALUE]","gi"), "dt") + ");";
		eval(formula);
		return resFormula;
	}

	return true;
}

/**********************************************/
function isIntegerInRange(s, a, b) {   
	if (!isInteger(s)) return false;

	var num = parseInt(s,10);
	return ((num >= a) && (num <= b));
}

function isInteger(s) {
	if (isEmpty(s)) return false;

	for( var i=0 ; i<s.length ; i++ ) {
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}

	return true;
}

function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}

function isDigit(c) {
	return ((c >= "0") && (c <= "9"));
}

/**********************************************/
function CheckUploadLimitations(el, valid_extensions) {
	if (!valid_extensions || valid_extensions=='') return true;

	var filePath = el.value;
	var fileExt = filePath.substring(filePath.lastIndexOf('.')+1).toUpperCase();
	var exts = 	valid_extensions.split(",");

	for( var i=0 ; i<exts.length ; i++ ) {
		if (fileExt == exts[i])
			return true;
	}

	alert('Tipo de ficheiro inválido: ' + fileExt + ' !');

	return false;
}

function VerifyListItems(UploadFile, MinItems, MaxItems) {
	var list = getElement(UploadFile);
	var nItems = list.length;

	if (MinItems > 0 && nItems < MinItems) {
		if (MinItems < MaxItems)
			alert('Tem de enviar pelo menos ' + MinItems + ' ficheiros: ' + getNome(UploadFile) + ' !');
		else
			alert('Tem de enviar ' + MinItems + ' ficheiros: ' + getNome(UploadFile) + ' !');
		list.focus();
		return false;
	}
	if (MaxItems > 0 && nItems > MaxItems) {
		alert('Só pode enviar ' + MaxItems + ' ficheiros: ' + getNome(UploadFile) + ' !');
		list.focus();
		return false;
	}
	return true;
}

