/******************************************************
 * Javascript: Ficheiro para validação de formularios
 * Criado por Alvaro Figueiredo em 05-01-2008
 * Revisao por em
 *****************************************************/

//=================================================================
	var sPrefix = 'O campo ';
	var sSuffix = ' \u00E9 de preenchimento obrigat\u00F3rio!';
	var sSuffix_num = 'tem que ser um valor num\u00E9rico';

	var isIE = document.all?true:false;
	var isNS = document.layers?true:false;	
//=================================================================

//TODO Falta Validar
function isUrl(s) {
 	var regexp = /http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/;
 	return regexp.test(s);
}
//=================================================================

//Move opcoes 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 == rightOpt.options[j].value)
					containsValue = true;
			}	

			if (containsValue) {
				//alert(leftOpt.options[i].value + "-" + leftOpt.options[i].text);
				leftOpt.options[i] = null;
				i--;
			}
		}
	}
	return true;
}

//=================================================================

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 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) {

	checkElement(tag, mandatory, type, errmsg, '#bcbcbc', '');

}

function checkSize(tag, size, dif, mandatory, errmsg) {

	checkSize(tag, size, dif, mandatory, errmsg, '#bcbcbc', '#ffffff');

}

function checkElement(tag, mandatory, type, errmsg, errorcolor, okcolor) {

	elem = document.forms[0].elements[tag];

	if (elem == undefined)
	{
		return false;	
	}
	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 checkSize(tag, size, dif, mandatory, errmsg, errorcolor, okcolor) {

	elem = document.forms[0].elements[tag];

	if (!validateSize(elem, size, dif, mandatory)) {

		isError += "-" + errmsg  + "\n";

		if (firstElementError=="")

			firstElementError = tag;

		if(elem!=undefined)
		{
			elem.style.backgroundColor = errorcolor;
		}
		return false;

	}

	return true;

}

function checkSizeteste(tag, size, dif, mandatory, errmsg, errorcolor, okcolor) {

	elem = document.forms[0].elements[tag];

	if (!validateSize(elem, size, dif, mandatory)) {

		alert ("FALSE");

	}

	alert ("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;

			}	 

				 

		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;

			}	 



		case 1:

			// no maximo pode ter tamanho size

			if ((ElementValue(Element).length - size) >0) return false;

		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) {

if(Element != undefined)
{
	var stype = Element.type;
}
else{
	
	var stype= 'undefined'
	return(' ');
}
	//if (stype+''=='undefined') stype=Element[0].type;

	

	switch (stype) {

		case 'select-one':

			return (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) {

if(Element !=undefined)
{
	var stype=Element.type;
}
else{ var stype='undefined';}
	if (stype+''=='undefined') return 'undefined';

	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 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 == 8 || s.length == 10) && (s.charAt(2) == "/" || s.charAt(2) == "-") && (s.charAt(5) == "/" || s.charAt(5) == "-")) { 

			day = s.charAt(0) + s.charAt(1); 

			month = s.charAt(3) + s.charAt(4); 

			if (s.length == 8) year = s.charAt(6) + s.charAt(7); 

			else year = s.charAt(6) + s.charAt(7) + s.charAt(8) + s.charAt(9); 



			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 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;

	}

}



// -----------  Limite o tamanho do conte�do de um objecto ----------

//onkeyup="return limitlength(this, 20)"

function limitlength(obj, length){

	var maxlength=length;

	if (obj.value.length > maxlength)

		obj.value = obj.value.substring(0, maxlength);

}



// -----------  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

	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

	lista = field.options

	lista[pos++]=new Option("M�s","")

	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 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"]

	var names = (lang == null)? Months['pt'] : Months[lang]

    field.length=0;

	var pos = 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++;

    }

}





//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;

	

}
