﻿// global.js
//=================================================================
	var sPrefix = 'O campo ';
	var sSuffix = ' é de preenchimento obrigatório!';
	var sSuffix_num = 'tem que ser um valor numérico';

	var isIE = document.all?true:false;
	var isNS = document.layers?true:false;

	var Months  = new Array();
	Months['pt'] = ["-- Mês --"	 , "Janeiro" ,"Fevereiro","Março" ,"Abril" ,"Maio","Junho", "Julho"  , "Agosto", "Setembro"  , "Outubro", "Novembro" , "Dezembro"];
	Months['es'] = ["-- Mes --"	 , "Enero"   ,"Febrero"  ,"Marzo" ,"Abril" ,"Mayo","Junio", "Julio"  , "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
	Months['en'] = ["-- Month --", "January" ,"February" ,"March" ,"April" ,"May" ,"June" , "July"   , "August", "September" , "October", "November" , "December"];
	Months['fr'] = ["-- Mois --" , "Janvier" ,"Février"  ,"Mars"  ,"Avril" ,"Mai" ,"Juin" , "Juillet", "Août"  , "Septembre" , "Octobre", "Novembre" , "Décembre"];
//=================================================================
//=================================================================

// Funções Gerais
function GetForm(n) {
	return document.forms[n];
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);

		return [curleft,curtop];
	}
}
function centerPopup(popup_name,popup_url,popup_with,popup_height,myWidth,myHeight,myScrollbar) {
    if(!myWidth) {myWidth = 10;}
    if(!myHeight){myHeight = 50;}
    if(!myScrollbar){myScrollbar = 0;}
    var popup_left = (window.screen.width/2)  - (popup_with/2 + myWidth);
    var popup_top  = (window.screen.height/2) - (popup_height/2 + myHeight);
    window.open(popup_url ,popup_name,"toolbar=no,location=no,status=no,menubar=no,scrollbars=" + myScrollbar + ",resizable=no,width=" + popup_with + ",height=" + popup_height + ",left=" + popup_left + ",top=" + popup_top + ",screenX=" + popup_left + ",screenY=" + popup_top);
}
function Verified() {
	GetForm().submit();
}
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//Arredonda um número em pow casas decimais
function roundTo(num, pow) {
	num *= Math.pow(10, pow);
	num = (Math.round(num) / Math.pow(10,pow)) + "";
	if(num.indexOf(".") == -1)
		num += "." ;
	while(num.length - num.indexOf(".") - 1 < pow)
    	num += "0" ;
  return num ;
}
//=================================================================
//Move opções de um select multiple
//onclick="javascript:move(document.forms[0].object1,document.forms[0].object2);"
function moveSelectMultipleOptions(from, to) {
	var f;
	var SourceIndex; /* selected Index */
	if(from.options.length>0) {
		for(var i=0;i<from.length;i++) {
			if(from.options[i].selected) {
				SourceIndex = from.selectedIndex;
				f = from.options[SourceIndex].index;
				to.options[to.length]=new Option(from.options[SourceIndex].text,from.options[SourceIndex].value);

				from.options[f]=null;
				i--;
			}
		}
	}
	return true;
}

//Retirar da caixa de opções da esquerda as opções que estão na caixa do lado direito
//Tipicamente no onload da jsp
//removeSelectedOptions(document.forms[0].object1, document.forms[0].object2);
function removeSelectedOptions(leftOpt, rightOpt) {
	if (leftOpt!=undefined && rightOpt!=undefined) {
		for(var i=0;i<leftOpt.options.length;i++) {
			var auxValue = leftOpt.options[i].value;

			var containsValue = false;
			for(var j=0;j<rightOpt.options.length;j++) {
				if (auxValue.toLowerCase() == rightOpt.options[j].value.toLowerCase())
					containsValue = true;
			}

			if (containsValue) {
				leftOpt.options[i] = null;
				i--;
			}
		}
	}
	return true;
}
//=================================================================
function DateDiff(dtFrom, dtTo, DateTypeReturn) {
	switch (DateTypeReturn) {
		case 'MONTHS':
			var yearDiff  = dtTo.getFullYear() - dtFrom.getFullYear();
			diff = yearDiff * 12 + dtTo.getMonth() - dtFrom.getMonth();
			break;
		case 'YEARS':
			diff  = dtTo.getFullYear() - dtFrom.getFullYear();
			break;
		default:
			diff = 0;
	}
	return diff;
}
function daysInMonth(year, month) {
	var m = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (month != 2) return m[month - 1];
	if (year%4 != 0) return m[1];
	if (year%100 == 0 && year%400 != 0) return m[1];
	return m[1] + 1;
}
//=================================================================
//Calculo da próxima visita ao IPO
//carType -
// B - Ligeiros de passageiros
// X - Outros
function iposimulate(carType, dtPlate) {
	var cat = carType;
	if (cat=="")  return false;

	if (!isDate(dtPlate) ) return false;

	var day = dtPlate.charAt(8) + dtPlate.charAt(9); 
	var month = dtPlate.charAt(5) + dtPlate.charAt(6); 
	var year = dtPlate.charAt(0) + dtPlate.charAt(1) + dtPlate.charAt(2) + dtPlate.charAt(3); 

	var dataMatricula = new Date();
	dataMatricula.setFullYear(year,month-1,day);  // Base Zero

	var today = new Date();
	var yeardiff = (today.getFullYear() - dataMatricula.getFullYear());

	// B - Ligeiros de passageiros
	// X - Outros
	if (cat=="B") {
		if (yeardiff<4) {
			dataMatricula.setYear(dataMatricula.getFullYear()+4);
		} else if (yeardiff==4) {
			if(today.getMonth()>dataMatricula.getMonth())
				dataMatricula.setYear(dataMatricula.getFullYear()+6);
			else
				dataMatricula.setYear(dataMatricula.getFullYear()+4);
		} else if (yeardiff==5) {
			dataMatricula.setYear(dataMatricula.getFullYear()+6);
		} else if (yeardiff==6) {
			if(today.getMonth()<=dataMatricula.getMonth())
				dataMatricula.setYear(dataMatricula.getFullYear()+6);
			else
				dataMatricula.setYear(dataMatricula.getFullYear()+8);
		} else if (yeardiff==7) {
				dataMatricula.setYear(dataMatricula.getFullYear()+8);
		} else if (yeardiff==8) {
				if(today.getMonth()<=dataMatricula.getMonth())
					dataMatricula.setYear(dataMatricula.getFullYear()+8);
				else
					dataMatricula.setYear(dataMatricula.getFullYear()+10);
		} else {
				if(today.getMonth()<=dataMatricula.getMonth())
					dataMatricula.setYear(today.getFullYear());
				else
					dataMatricula.setYear(today.getFullYear()+1);
		}
	} else {
		if (yeardiff<2) {
			if(today.getMonth()<=dataMatricula.getMonth())
				dataMatricula.setYear(dataMatricula.getFullYear()+2);
			else
				dataMatricula.setYear(dataMatricula.getFullYear()+3);
		} else {
			if(today.getMonth()<=dataMatricula.getMonth())
				dataMatricula.setYear(today.getFullYear());
			else
				dataMatricula.setYear(today.getFullYear()+1);
		}
	}

	var res = dataMatricula.getTime();
	var result = new Date();
	result.setTime(res);

	var ano = result.getFullYear();
	var mes = result.getMonth()+1;
	var mes = Right('0' + mes, 2);
	var dia = Right('0' + day, 2);

	return ano + "-" + mes + "-" + dia;
}
function Right(str, n) {
	if (n <= 0) return "";
	else if (n > String(str).length)
		return str;
	else {
		var iLen = String(str).length;
		return String(str).substring(iLen, iLen - n);
	}
}

function getParameter(paramname) {
	var tLoc = "", tPairs = "";
	var tGet = [];
	tLoc = window.location + "";
	var foundGet = tLoc.indexOf('?');
	if (foundGet > -1) {
		tLoc = tLoc.substring(foundGet + 1, tLoc.length);
		tPairs = tLoc.split('&');
		for (var i = 0; i < tPairs.length; i++) {
			tGet = tPairs[i].split('=');
			if (tGet[0]==paramname) {
				return decodeURIComponent(tGet[1].replace(/\+/g,' '));
			}
		}
	}
	return "";
}
function cleanCharacter(myObject, character) {
	myObject.value = myObject.value.replace(character,'');
	if (myObject.value.indexOf(character)!=-1)
		cleanCharacter(myObject, character);
	return true;
}
function change_bgcolor(obj,color){
	obj.style.backgroundColor = color;
}

function toggle(id) {
	var listid = id.split(',');
	for(var i=0;i<listid.length;i++){
		x=listid[i];
		if (document.getElementById(x)!=null) {
			if( document.getElementById(x).style.display=='none' ) {
				document.getElementById(x).style.display = '';
			} else {
				document.getElementById(x).style.display = 'none';
			}
		}
	}
}

function hide(id) {
	var x;
	var listid = id.split(',');
	for(var i=0;i<listid.length;i++){
		x = listid[i];
		if (document.getElementById(x)!=null)
			document.getElementById(x).style.display = 'none';
	}
}
function show(id) {
	var x;
	var listid = id.split(',');
	for(var i=0;i<listid.length;i++) {
		x=listid[i];
		if (document.getElementById(x)!=null)
			document.getElementById(x).style.display = '';
	}
}
function isMobileNumber(Element) {
	tel= ElementValue(Element);
	var x=tel.toString();
	var ind=x.substring(0,2);

	if (x.length!=9) return false;
	if(!((ind=="91")||(ind=="92")||(ind=="93")||(ind=="96"))) return false;

	return true
}
function checkElement(tag, mandatory, type, errmsg, errorcolor, okcolor) {
	return checkFormElement(document.forms[0], tag, mandatory, type, errmsg, errorcolor, okcolor)
}
function checkSize(tag, size, dif, mandatory, errmsg, errorcolor, okcolor) {
	return checkFormElementSize(document.forms[0], tag, size, dif, mandatory, errmsg, errorcolor, okcolor);
}
function checkFormElement(form, tag, mandatory, type, errmsg, errorcolor, okcolor) {
	if(typeof errorcolor == 'undefined') { errorcolor = '#bcbcbc'; }
	if(typeof okcolor == 'undefined') { okcolor = ''; }
	elem = form.elements[tag];

	if (elem.style!=undefined)
		elem.style.backgroundColor = okcolor;

	if (!validateElement(elem, mandatory, type)) {
		isError += "-" + errmsg + "\n";
		if (firstElementError=="")
			firstElementError = tag;

		if (elem.style!=undefined)
			elem.style.backgroundColor = errorcolor;

		return false;
	}
	return true;
}
function checkFormElementSize(form, tag, size, dif, mandatory, errmsg, errorcolor, okcolor) {
	if(typeof errorcolor == 'undefined') { errorcolor = '#bcbcbc'; }
	if(typeof okcolor == 'undefined') { okcolor = '#ffffff'; }
	elem = form.elements[tag];
	if (!validateSize(elem, size, dif, mandatory)) {
		isError += "-" + errmsg  + "\n";
		if (firstElementError=="")
			firstElementError = tag;
		elem.style.backgroundColor = errorcolor;
		return false;
	}
	return true;
}

function validateElement(Element, mandatory, type, size) {
	var bElementEmpty = ElementEmpty(Element);
	if (mandatory && bElementEmpty) return false;

	if (size>0 && ElementValue(Element).length > size) return false;

	if (!bElementEmpty) {
		switch (type) {
			case 'email':
				if (isEMail(ElementValue(Element))) return true;
				else return false;
				break;
			case 'date':
				if (isDate(ElementValue(Element))) return true;
				else return false;
				break;
			case 'number':
				if (isNumeric(ElementValue(Element))) return true;
				else return false;
				break;
			case 'double':
				if (isNaN(ElementValue(Element))) return false;
				else return true;
				break;
			default:
				return true;
		}
	}
	return true;
}

function validateSize(Element,size,dif,mandatory) {
	
	// tem que ter exactamente o mesmo comprimento que size
	switch (dif) {
		case 0:				// tem que ter exactamente size posicoes
			var bElementEmpty = ElementEmpty(Element);
			if((mandatory==0)&&ElementValue(Element).length==0){
				return true;
			} else {
				if ((ElementValue(Element).length - size) !=0) 
					return false;
			}
			break;
		case -1:			//no minimo tem que ter size posicoes
			if((mandatory==0)&&ElementValue(Element).length==0){
				return true;
			} else {
				if ((ElementValue(Element).length - size) <0) 
					return false;
			}
			break;
		case 1:
			// no maximo pode ter tamanho size
			if ((ElementValue(Element).length - size) >0) return false;
			break;
		default:
			return true; 
		}
	return true;
}

function SelectOption(campo,valor) {
	
	var lista;
	var pos=0;
	var oForm = GetForm(0);
	lista = oForm[campo].options;

	for(var i=0; i<lista.length; i++)
		if(lista[i].value==valor)
			lista[i].selected=true;
}

function SelectRadioOption(campo,valor) {
	var lista;
	var pos=0;
	var oForm = GetForm(0);

	for (var i=0;i < oForm[campo].length;i++) 
		if (oForm[campo][i].value==valor)
			oForm[campo][i].checked =true
}

function SelectElement(Element) {
	var stype=Element.type;
	if (stype+''=='undefined') stype=Element[0].type;
	switch (stype) {
		case 'select-one':
			break;
		case 'radio':
			break;
		case 'select-multiple':
			break;		
		default:
			Element.select(); 
	}
}
	
function ElementEmpty(Element) {
	var stype = Element.type;
	if (stype+''=='undefined') stype=Element[0].type;
	
	switch (stype) {
		case 'select-one':
			return (Element.options.length == 0 || Element.options[Element.selectedIndex].value=='');
			break;
		case 'radio':
			return RadioEmpty(Element);
			break;
		case 'checkbox':
			return CheckBoxEmpty(Element);
			break;
		default:
			return (Element.value=='');
	}
	return (Element.value=='');
}
function CheckBoxEmpty(Element) {
	if (Element.length==undefined)
		return !isChecked(Element);
	for (var i=0;i < Element.length;i++) {
		if (Element[i].checked) return false;
	}
	return true;
}
function RadioEmpty(Element) {
	if (Element.length+''=='undefined')	
		return !Element.checked;

	for (var i=0;i < Element.length;i++) {
		if (Element[i].checked) return false;
	}		
	return true;
}

function ElementValue(Element) {
	var stype=Element.type;
	if (stype+''=='undefined') stype=Element[0].type;
	switch (stype) {
		case 'select-one':
			return Element.options[Element.selectedIndex].value;
			break;		
		case 'radio':
			return RadioValues(Element);
			break;
		default:
			return Element.value; 
	}
	return Element.value; 
}

function isChecked(Element) {
	if(Element.checked==true)
		return true;

	return false	
}

function RadioValues(Element) {
	for (var i=0;i < Element.length;i++) {
		if (Element[i].checked) return Element[i].value;
	}
	return '';
}
function RadioIndex(Element) {
	for (var i=0;i < Element.length;i++) {
		if (Element[i].checked) return i;
	}		
	return -1;
}		

function isNumeric(s) { 
	if (isEmpty(s)) 
	if (isNumeric.arguments.length == 1) return false; 
	else return (isNumeric.arguments[1] == true); 
	for (var i = 0; i < s.length; i++){
		if (!isDigit(s.charAt(i))) return false;
	}
	return true; 
} 

function isSignedNumeric(s) { 
	if (isEmpty(s)) {
		if (isSignedNumeric.arguments.length == 1) return false; 
	    else return (isSignedNumeric.arguments[1] == true); 
    } else {
  		var startPos = 0; 
    	var secondArg = false; 
    	if (isSignedNumeric.arguments.length > 1) secondArg = isSignedNumeric.arguments[1];
    	if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") ) startPos = 1; 
    	return (isNumeric(s.substring(startPos, s.length), secondArg)) 
  	} 
} 

function isvalidString(valor) {
	var position=-1;
	var strvalor = new String(ElementValue(valor));
	
	invalidchar = new Array(" ","'")
	for(var i=0;i<invalidchar.length; i++){
		if(strvalor.indexOf(invalidchar[i])!=-1)
			return false;
	}	
	return true;
}

function isNonnegativeNumeric (s) { 
	var secondArg = false; 
	if (isNonnegativeNumeric.arguments.length > 1) secondArg = isNonnegativeNumeric.arguments[1];
  	return (isSignedNumeric(s, secondArg) && ( (isEmpty(s) && secondArg) || (parseInt(s, 10) >= 0) ) );
} 

function isNumericInRange(s, a, b) { 
	if (isEmpty(s)) {
	  	if (isNumericInRange.arguments.length == 1) return defaultEmptyOK; 
    	else return (isNumericInRange.arguments[1] == true); 
    }
 	if (!isNumeric(s, false)) return false; 
	var num = parseInt (s, 10); 
	return ((num >= a) && (num <= b)); 
} 

function isDate(s) {
	var day,month,year;
	if (isEmpty(s)) {
		if (isDate.arguments.length == 1) return false; 
		else return (isDate.arguments[1] == true);
	} else {
		if (s.length == 10 && s.charAt(4) == "-" && s.charAt(7)== "-") {
			day = s.charAt(8) + s.charAt(9); 
			month = s.charAt(5) + s.charAt(6); 
			year = s.charAt(0) + s.charAt(1) + s.charAt(2) + s.charAt(3); 

			if (ValidateDate(year, month, day))return true; 
			else return false; 
	  	}
	  	else return false;
	}
} 

function isYear(s) { 
	if (isEmpty(s)) {
  		if (isYear.arguments.length == 1) return false; 
  		else return (isYear.arguments[1] == true); 
  	} else {
  		if (!isNonnegativeNumeric(s)) return false;
  		else return ((s.length == 2) || (s.length == 4));
  	}
}

function isMonth(s) { 
	if (isEmpty(s)) {
  		if (isMonth.arguments.length == 1) return false; 
    	else return (isMonth.arguments[1] == true); 
    } else return isNumericInRange (s, 1, 12);
}

function isDay(s) {
	if (isEmpty(s)) {
		if (isDay.arguments.length == 1) return false; 
		else return (isDay.arguments[1] == true); 
	}
	else return isNumericInRange (s, 1, 31); 
} 

function daysInFebruary(year) {return ( ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 ); } 

function ValidateDate(year, month, day) { 
	if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false; 
	var daysInMonth = new Array();
	daysInMonth[1] = 31;
	daysInMonth[2] = daysInFebruary(parseInt(year));
	daysInMonth[3] = 31; 
	daysInMonth[4] = 30; 
	daysInMonth[5] = 31; 
	daysInMonth[6] = 30; 
	daysInMonth[7] = 31; 
	daysInMonth[8] = 31; 
	daysInMonth[9] = 30; 
	daysInMonth[10] = 31; 
	daysInMonth[11] = 30; 
	daysInMonth[12] = 31;  
	if (parseInt(day) > daysInMonth[parseInt(month)]) return false; 
	else  return true;
}

function isEmpty(s) {return ((s == null) || (s.length == 0))} 

function isDigit(c) {return ((c >= "0") && (c <= "9"))} 

function isEMail (emailStr) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars='\\(\\)<>@,;:\\\\\\\"\\.\\[\\]';
	var validChars='\[^\\s' + specialChars + '\]';
	var quotedUser='(\"[^\"]*\")';
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word='(' + atom + '|' + quotedUser + ')';
	var userPat=new RegExp('^' + word + '(\\.' + word + ')*$');
	var domainPat=new RegExp('^' + atom + '(\\.' + atom + ')*$');

	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) return false;

	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat)==null) return false;

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {if (IPArray[i]>255) return false;}
    	return true;
	}

	var domainArray=domain.match(domainPat);
	if (domainArray==null) return false;

	var atomPat=new RegExp(atom,'g');
	var domArr=domain.match(atomPat);
	var len=domArr.length;

	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) return false;
	if (len<2) return false;
	return true;
}

function roundOff(value, precision) {
	value = new String(value);  //convert value to string
	value=value.replace(',','.');
	precision = parseInt(precision);

	var whole = '' + Math.round(value * Math.pow(10, precision));
	if (whole.length==2) whole='0' + whole;
	if (whole.length==1) whole='00' + whole;
	var decPoint = whole.length - precision;

	if(decPoint != 0)  {
	  	result = whole.substring(0, decPoint);
    	result += '.';
    	result += whole.substring(decPoint, whole.length);
    } else result = whole;

	if (result=='.0' || result=='N.aN') result='0.00';
	return result;
}

function ValidateChecked(Element) {
	for (var i=0;i<Element.length;i++)
		if(Element[i].checked)
			return true;

	return false;
}

function validateBI(nBi, nBiChk) {

	if (nBi=="" || nBiChk=="" || nBiChk.length!=1)
		return false;

	if (nBi=="12345678" && nBiChk=="9")
		return false;

	var totalSum = 0;
	for(var n=0; n<nBi.length; n++) {
		var pos =(nBi.length-n) + 1;
		var value = parseInt(nBi.substring(n,n+1));
		totalSum += value * pos;
	}
	var Resto = totalSum % 11;
	var Res2  = (Resto-11)*(-1);
	var ResultadoCalculo = 0;
	if( Res2>=10 )
		ResultadoCalculo= 0;
	else
		ResultadoCalculo= Res2;

	if(parseInt(nBiChk) == ResultadoCalculo)
		return true;

	return false;
}
function validateNIF(nNIF) {
	if (nNIF=="" || nNIF.length!=9)
		return false;

	if (nNIF=="123456789" || parseInt(nNIF)==0)
		return false;

	var chkDigit = parseInt(nNIF.substring(8,9));

	var totalSum =0;    // total por posição/valor
	for(var n=0; n<nNIF.length-1; n++) {
		var pos =(nNIF.length-n);
		var value = parseInt(nNIF.substring(n,n+1));
		totalSum += value * pos;
	}

	var chkDigitTemp=0;
	var resto = totalSum % 11;
	if(resto==0 || resto==1)
		chkDigitTemp=0;
	else
		chkDigitTemp=11-resto;

	if(chkDigitTemp==chkDigit)
		return true;

	return false;
}
function validateFullNib(nib){
	bank = nib.substring(0,4);
	outlet = nib.substring(4,8);
	accountNumber = nib.substring(8,19);
	nChk  = nib.substring(19);
	return validateNib(bank, outlet, accountNumber, nChk);
}

function validateNib(bank, outlet, accountNumber, nChk) {
	if (bank.length!=4 || outlet.length!=4 || accountNumber.length!=11 || nChk.length!=2){
		return false;
	} else {
		var nNIB = bank + outlet + accountNumber;
        var arrVal = new Array();
        arrVal[0]=73;arrVal[1]=17;arrVal[2]=89;arrVal[3]=38;arrVal[4]=62;
        arrVal[5]=45;arrVal[6]=53;arrVal[7]=15;arrVal[8]=50;arrVal[9]=5;
        arrVal[10]=49;arrVal[11]=34;arrVal[12]=81;arrVal[13]=76;arrVal[14]=27;
        arrVal[15]=90;arrVal[16]=9;arrVal[17]=30;arrVal[18]=3;

        var totalSum = 0;
    	for(n=0; n < nNIB.length; n++) {
    		var pos = arrVal[n];
    		var arrValue = nNIB.substring(n,n+1);
    		totalSum += arrValue * pos;
    	}

    	var resto = totalSum % 97;
    	var differ = 98 - resto;
        if(differ != nChk) {
			return false;
        }
    }
	return true;
}
function validateNISS(niss){
	if (!isNumeric(niss) && !niss.length==11) {
		return false;
	}
	
	var totalSum = 0;
	var intArray=new Array(29,23,19,17,13,11,7,5,3,2);
	for (var i=0;i<intArray.length ;i=i+1) {
		totalSum = totalSum + niss.charAt(i) * intArray[i];
	}
	var resto = 9 - totalSum % 10;

	if (niss.charAt(niss.length-1) != resto.toString()) {
		return false;
	} else {
		return true;
	}
}
function EnableALL(){
	var oForm = window.document.forms[0];
	var fields = oForm.elements;
	for(var x=0;x<fields.length;x++) {
//		alert(fields[x].name);
		fields[x].disabled=false;
	}
}

function gotoNextElement(currentElement) {
	var curIndex = (getIndex(currentElement)+1) % currentElement.form.length;
	currentElement.form[curIndex].focus();
	currentElement.form[curIndex].select();
}

function getIndex(input) {
	var index = -1, i = 0;
	
	var oForm = input.form;
	var formLength = oForm.length;
	
    while (i < formLength && index == -1) {
    	if (oForm[i] == input)
    		index = i;
        else 
        	i++;
	}

    return index;
}
// -----------  Só permite a introdução de numeros inteiros no campo  ----------
//onkeypress="return onlyDigits(event)"
function onlyDigits(e) {
	var unicode = (e.charCode!=undefined)? e.charCode : e.keyCode;

	var obj = getElement(e);
	var fieldValue = obj.value;

	//if the key isn't Dot(46) or Tab - Left Arrow - Right Arrow + Delete + BackSpace (Unicode = 0)
	if (unicode!=0) {
		if (unicode<48 || unicode>57) //if not a number
			return false //disable key press
	}
	return true;
}
// -----------  Só permite a introdução de numeros no campo  ----------
//onkeypress="return onlyNumbers(event)"
// OnlyNumbers_Aux(event, negative, integer)
// e - event from the object
// negative - (true|false) allow negative values or not
// integer - (true|false) only allow integer values or not
// nDecimals - number of decimals
function onlyNumbers(e, negative, integer, nDecimals) {	

	negative = negative || false;
	integer	 = integer || false;
	nDecimals = nDecimals || 99;
	
	var unicode = (e.charCode!=undefined)? e.charCode : e.keyCode;

	var obj = getElement(e);
	var value = obj.value;
	var length = value.length;
	var selection = getSelectionPosition(obj);
	var fieldValue = obj.value;
	var minusPos = fieldValue.indexOf('-');
	var dotPos = fieldValue.indexOf('.');
	
	// 45 unicode for -
	if (unicode==45){
		
		if(!negative || selection[0] != 0 || minusPos >= 0) {
			return false;
		}
	}
	
	// 46 unicode for .
	if(unicode==46){
		
		if(integer || selection[0] == 0 || (nDecimals < length-selection[1])) {
			return false;
		}
		
		if(dotPos >= 0 && !(selection[0] <= dotPos  && selection[1] > dotPos)) {
			return false;
		}
	}
	
	// decimals accepted and a number has been pressed
	if(!integer && unicode >= 48 && unicode <= 57) {
		
		if(dotPos > -1 && selection[0] > dotPos) {
			if(nDecimals < (length-dotPos-selection[1]+selection[0])) {
				return false;
			}
		}
	}

	//if the key isn't Dot(46) or Tab - Left Arrow - Right Arrow + Delete + BackSpace (Unicode = 0)
	if (unicode!=0 && unicode!=46 && unicode!=45) {
		if (unicode<48 || unicode>57) //if not a number
			return false //disable key press
	}
	return true;
}
//return an array with start and end position of an input selected text
//el - html input element
//return [start,end]
function getSelectionPosition(el) {
		
	var start = 0;
	var end = 0;
	
	if (el.createTextRange) {
	
		var r = document.selection.createRange().duplicate();
		r.moveEnd('character', el.value.length);
		start = (r.text == '') ? el.value.length : el.value.lastIndexOf(r.text);
		
		var r = document.selection.createRange().duplicate()
		r.moveStart('character', -el.value.length);
		end = r.text.length;
		
	} else {
		start =  el.selectionStart;
		end = el.selectionEnd;
	}
	
	return [start,end];
}

function getElement(e) {
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;

	return targ;
}
// -----------  Limite o tamanho do conteúdo de um objecto ----------
//onblur="return limitlength(this, 20)"
function limitlength(obj, length) {
	var maxlength=length;
	if (obj.value.length > maxlength) {
		obj.value = obj.value.substring(0, maxlength);
		alert('Ultrapassou o número máximo de '+ length +' caracteres permitidos.\nA mensagem foi truncada.');
	}
}

// -----------  Preenche o campo Dia  -------------------------------
function populate_day(field,sel) {
	var lista, pos;
	var dias = new Array("","01", "02", "03", "04", "05", "06", "07", "08", "09"); 
	pos=0;
	field.length = 0;
	lista = field.options;
	lista[pos++]=new Option("Dia","");
	for (var i=1; i<=9; i++){
		lista[pos]=new Option(dias[i],i);
		if(sel==i)
			lista[pos].selected=true;
		pos++;
	}
	for (var j=10; j<=31; j++){
		lista[pos]=new Option(j,j)
		if(sel==j)
			lista[pos].selected=true;

		pos++;
	}
}
// -----------  Preenche o campo Mês Númerico  -------------------------------
function populate_month(field, sel) {
	var lista, pos;
	var meses = new Array("", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"); 
	pos=0;
	field.length = 0;
	lista = field.options;
	for (var i=1; i<=12; i++){
		lista[pos]=new Option(meses[i],i)
		if(sel==i)
			lista[pos].selected=true;

		pos++
	}
}
// -----------  Preenche o campo Mês Extenso (MultiLingua) -------------------------------
function populate_monthDesc(field, sel, lang) {
	var names = (lang == null)? Months['pt'] : Months[lang];
    field.length=0;
	var pos = 0;
	field.length = 0;
	field[pos] = new Option(names[0],"");
	pos++;

    for (var j=1 ; j<=12; j++) {
        field[pos] = new Option(names[j],j);
		if (names[j]==sel || String(j)==sel)
			field[pos].selected=true;	
			
		pos++;
    }
}
// -----------  Preenche o campo Ano  -------------------------------
function populate_year(field, sel, startYear, endYear, lang) {
	var Year = new Array();
	Year['pt'] = ["-- Ano --"];
	Year['es'] = ["-- Año --"];
	Year['en'] = ["-- Year --"];
	Year['fr'] = ["-- Année --"];
	var names = (lang == null)? Year['pt'] : Year[lang]

	var lista, pos;
	pos=0;
	field.length = 0;
	lista = field.options;
	lista[pos++]=new Option(names[0],"")
	for (var i=endYear; i>=startYear; i--){
		lista[pos]=new Option(i,i)
		if(sel==i)
			lista[pos].selected=true;
		pos++;
	}
}
// ------------------------------------------------------------------------------
function ReplaceSpecialChar(str) {

	var SpecialChars =    "ÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇÝáàâãäéèêëíìîïóòôõöúùûüçý";
	var NonSpecialChars = "AAAAAEEEEIIIIOOOOOUUUUCYaaaaaeeeeiiiiooooouuuucy";
	for (var i = 0; i < SpecialChars.length; i++)
		str = str.replace(SpecialChars.charAt(i), NonSpecialChars.charAt(i));

	return str;
}

//tool: gets the timestamp, e.g. "2007-12-31 23:59:59"
function getCurrentTimestamp() {

	var curTimestamp = '';

	//variables
	var timeStampDate = qdat_TimeStampDate();
	var timeStampTime = qdat_TimeStampTime();
	
	//build it
	curTimestamp = timeStampDate + ' ' + timeStampTime;
	
	return curTimestamp;
	
}
// ------------------------------------------------------------------------------
function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);
