﻿//-----------------------------------------------------------------
//guida
// validacoes_new.js
//
// funções auxiliares para validações de forms
//
// copyright (c) 2000 Ponto.C - Desenv. Sistemas de Informação, Lda 
//
//Autor: Nuno Santos
//Alterada por: Margarida Fernandes
//-----------------------------------------------------------------

//Inicio funções de ajuda************************************************************

//mostra msg de erro e coloca o ponteiro no input
function SPW_JS_MsgErro(theForm,campo,descerro,radio)
{
	if (campo == '[object]')
		var cam = campo;
	else
		var cam = eval(theForm + "." + campo);
	alert(descerro);
	if (radio > 1)
		cam[0].focus();
	else
		cam.focus();
}

//validar hora
function SPW_JS_Hora(checkStr) {

	var date = checkStr.split(':');
	var num = date.length;
                                
	var hora = date[0];
	var minutos = date[1];

	if (Number(hora) < 0 || Number(hora) > 23 || hora == "") {
		return (false);
	}
	if (Number(minutos) < 0  || Number(minutos) > 59 || minutos == "" ) {
		return (false);
	}
      	if (Number(hora) == 24 ) {
		if (Number(minutos) != 0 ) {
			return (false);
		}	  
	}        
	return (true);
}

//validar nº de horas (as horas não são limitadas a 24)
function SPW_JS_NumHora(checkStr) {

	var date = checkStr.split(':');
	var num = date.length;
                                
	var hora = date[0];
	var minutos = date[1];

	if (Number(hora) < 0 || hora == "") {
		return (false);
	}
	if (Number(minutos) < 0  || Number(minutos) > 59 || minutos == "" ) {
		return (false);
	}
      	     
	return (true);
}						

//ver se é ano bisexto
function SPW_JS_IsLeapYear(y) 
{
	return (y % 4 == 0  && (y % 400 == 0 || y % 100 != 0))
}

//validar data 
function SPW_JS_Data(checkStr,tipo) {

//tipo = 0 = ddmmaaaa
//tipo = 1 = aaaammdd
//tipo = 2 = aaaaddmm

	var daysOfMonth = new Object();
	daysOfMonth ['Jan'] = daysOfMonth ['January']   = daysOfMonth [1] = 31;
	daysOfMonth ['Feb'] = daysOfMonth ['February']  = daysOfMonth [2] = 28;
	daysOfMonth ['Mar'] = daysOfMonth ['March']     = daysOfMonth [3] = 31;
	daysOfMonth ['Apr'] = daysOfMonth ['April']     = daysOfMonth [4] = 30;
	daysOfMonth ['May'] = daysOfMonth ['May']       = daysOfMonth [5] = 31;
	daysOfMonth ['Jun'] = daysOfMonth ['June']      = daysOfMonth [6] = 30;
	daysOfMonth ['Jul'] = daysOfMonth ['July']      = daysOfMonth [7] = 31;
	daysOfMonth ['Aug'] = daysOfMonth ['August']    = daysOfMonth [8] = 31;
	daysOfMonth ['Sep'] = daysOfMonth ['September'] = daysOfMonth [9] = 30;
	daysOfMonth ['Oct'] = daysOfMonth ['October']   = daysOfMonth [10] = 31;
	daysOfMonth ['Nov'] = daysOfMonth ['November']  = daysOfMonth [11] = 30;
	daysOfMonth ['Dec'] = daysOfMonth ['December']  = daysOfMonth [12] = 31;
		
	if (checkStr.search("/") > -1)
		var date = checkStr.split('/');
	else if (checkStr.search("-") > -1)
		var date = checkStr.split('-');
	else
		return (false);
		
	var num = date.length;
	if (num != 3)
		return (false);
	
	var month = Number(date[1]);
	var day = Number(date[2]);
	var year = Number(date[0]);
	
	if (tipo == "0")	  
	{
		day = Number(date[0]);
		month = Number(date[1]);
		year = Number(date[2]);
	}
	if (tipo == "1")	  
	{
		month = Number(date[1]);
		day = Number(date[2]);
		year = Number(date[0]);
	}
	if (tipo == "2")	  
	{
		month = Number(date[2]);
		day = Number(date[1]);
		year = Number(date[0]);
	}
			
	if (month < 1 || month > 12 || month == "")
		return (false);

	if (day < 1  || day == "")
		return (false);
  
	if (month == 2 && SPW_JS_IsLeapYear(year))
		var dayLimit = 29;
	else 
		var dayLimit = daysOfMonth[month];
	
	if (day > dayLimit)
		return (false);
 
	if (year < 1000 || year == "" || year > 9999)
		return (false);
	
	return (true);
}					  

//validar email (esta função tarda muito com strings um pouco maiores)
function SPW_JS_Email(checkStr) 
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(checkStr))
	{
		return (true);
	}

return (false)
}


//validar email
function SPW_JS_Email1(checkStr) 
{
	var Viarroba = false;
	var Viponto = false;
	var Vispace = false;
	var i ;
	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		if (ch == "@") {
			Viarroba = true;
		} 
	}
	
	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		if (ch == ".") {
			Viponto = true;
		} 
	}

	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		if (ch == " ") {
			Vispace = true;
		} 
	}

	if (!Viarroba || !Viponto || Vispace)
		return (false);

return (true)
}

//função para ver se encontrou o caracter ' ou |
function SPW_JS_CaracteresEsp(checkStr) {

	var checkOK = "'|";
	var i ;
	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j)) {
			return (false);
		} 
	}
	return (true);
}

//verifica espaços
function SPW_JS_Espacos(checkStr)
{	
	var checkOk = " ";
	var i;
	var j;
	j = 0;
	
	for (i = 0; i  < checkStr.length; i++)
	{
		ch = checkStr.charAt(i);
		if (ch == checkOk.charAt(0))
			j ++;
	}
	
	if (j == i)
		return (false);
		
	return (true);
}

//função para ver se encontrou caracteres não permitidos pelo programador
//Retorna falso se encontrou, true caso contrário
function SPW_JS_ScanP(checkStr,checkOK) {

	var i ;
	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j)) {
				return (false);
			} 
	}
	return (true);
}

//função para ver se os caracteres usados são os pretendidos
//True se forem só caracteres válidos, false caso contrário
function SPW_JS_Scan(checkStr,checkOK) {

	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
		if (j == checkOK.length)  {
			return (false);
			break;
		}
	}
	return (true);
}

//valida um numero dado 
function SPW_JS_Num(checkStr,NumCasasInt,NumCasasDec)
{	
	if (Number(NumCasasInt) < 0) 
		NumCasasInt = 1;
	
	if (!Number(NumCasasInt)) 
		NumCasasInt = 1;
	
	if (Number(NumCasasDec) < 0)
		NumCasasDec = 1;
	
	if (!Number(NumCasasDec))
		NumCasasDec = 1;
	//******************************************************
	
	var ponto = checkStr.indexOf(".");
	var virgula = checkStr.indexOf(",");
	
	if (ponto > -1)
		var str = checkStr.split(".");
	else if (virgula > -1)
		var str = checkStr.split(",");
	else
	{
		var str = checkStr;
		if (!Number(str) && str != 0)
			return(false);
		else
		{
			if (str.length > NumCasasInt)
				return(false);
			else
				return(true);
		}				
	}
	
	if (!Number(str[0]) && str[0] != 0)
		return(false);
	
	if (!Number(str[1]) && str[1] != 0)
		return(false);
	
	var menos = checkStr.indexOf("-");
	if (menos > -1)
		NumCasasInt = NumCasasInt + 1;
	if (str[0].length > Number(NumCasasInt))
		return(false);
	
	if (str[1].length > Number(NumCasasDec))
		return(false);
	
return(true);
}

//validar hora
//Alterada pela Margarida para conter segundos no tipo opt=2
function SPW_validar_hora(checkStr,opt) {

	var date = checkStr.split(':');
	var num = date.length;
	
	if (opt == 1) {
		if (num < 1 || num > 2)
			return (false);       
		if (date[1] == ":")
			return (false);                      		                   
	}
	else {
		if (num != 2 && num !=3)
			return (false);       
		if (date[1] == ":")
			return (false);       
	}
                                
	var hora = date[0];
	var minutos = date[1];
	
	if (Number(hora) < 0 || Number(hora) > 23 || hora == "") {
		return (false);
	}
	if (Number(minutos) < 0  || Number(minutos) > 59 || minutos == "" ) {
		return (false);
	}
      	if (Number(hora) == 24 ) {
		if (Number(minutos) != 0 ) {
			return (false);
		}	  
	}
	if (num ==3){
		var segundos = date[2];
		
		if (Number(segundos) < 0  || Number(segundos) > 59 || segundos == "" ) {
			return (false);
		}
		if (Number(hora) == 24 ) {
			if (Number(segundos) != 0 ) {
				return (false);
			}	  
		}
	}        
	return (true);
}

//Fim funções de ajuda***************************************************************
//***********************************************************************************

//Valida uma data obrigatoria
function SPW_JS_ValidaDataObg(theForm,campo,nome,tipo)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
			
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório.");
		return(false);
	}
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789/-"))
	{
		SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ".");
		return(false);
	}

	if (!SPW_JS_Data(ncamp.value,tipo))
	{
		SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ". Verifique se o Mês é superior a 12 ou inferior a 1 ou se o dia é superior ao numero de dias do Mês.");
		return(false);
	}
return(true);
}

//Valida uma data opcional
function SPW_JS_ValidaDataOpc(theForm,campo,nome,tipo)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
		
	if (ncamp.value != "")
	{
		if (!SPW_JS_Data(ncamp.value,tipo))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ". Verifique se o Mês é superior a 12 ou inferior a 1 ou se o dia é superior ao numero de dias do Mês.");
			return(false);
		}
	}

	if (!SPW_JS_Scan(ncamp.value,"0123456789/-"))
	{
		SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ".");
		return(false);
	}

return(true);
}


//Valida hora obrigatória
function SPW_JS_ValidaHoraObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);

	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório.");
		return(false);
	}
		
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome  + ". Verifique que é do tipo HH:MM.");
		return(false);
	}

	//verifica que a hora não seja 00:00
	//Busca todos os zeros da hora
	//verifica que o comprimento da string obtida é >= 7
	//se a hora for 00:00 a string obtida é: 0,0,0,0
	if (ncamp.value.toString().indexOf("0") > 0){
		if (ncamp.value.toString().match(/0/g).toString().length >= 7)
		{
			SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório.");
			return(false);
		}
	}

	if (ncamp.value != "")
	{	
		if (!SPW_validar_hora(ncamp.value,2))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique que é do tipo HH:MM.");
			return(false);
		}
	}
	
	

return(true);

}


//Valida hora obrigatória com segundos
function SPW_JS_ValidaHoraSegObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);

	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório.");
		return(false);
	}
		
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome  + ". Verifique que é do tipo HH:MM:SS.");
		return(false);
	}

	if (ncamp.value != "")
	{	
		if (!SPW_validar_hora(ncamp.value,2))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique que é do tipo HH:MM:SS.");
			return(false);
		}
	}
	
	
return(true);

}

//Valida hora opcional
function SPW_JS_ValidaHoraOpc(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome  + ". Verifique que é do tipo HH:MM.");
		return(false);
	}


	if (ncamp.value != "")
	{	
		if (!SPW_validar_hora(ncamp.value,2))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o seu valor está compreendido entre 00:00 e 23:59.");
			return(false);
		}
	}

	

return(true);

}

//Valida Nº de horas obrigatória
function SPW_JS_ValidaNumHoraObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);	

	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório.");
		return(false);
	}
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome  + ". Verifique que é do tipo HH:MM.");
		return(false);
	}

	if (ncamp.value != "")
	{	
		if (!SPW_JS_NumHora(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o valor dos minutos inferior a 60.");
			return(false);
		}
	}

	

return(true);

}

//Valida Nº de horas opcional
function SPW_JS_ValidaNumHoraOpc(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome  + ". Verifique que é do tipo HH:MM.");
		return(false);
	}

	if (ncamp.value != "")
	{	
		if (!SPW_JS_NumHora(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o valor dos minutos inferior a 60.");
			return(false);
		}
	}

	

return(true);

}

//Valida uma string obrigatoria
//CNPPU = Caracteres não permitidos pelo utilizador
function SPW_JS_ValidaStrObg(theForm,campo,len,nome,CNPPU)
{	
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
		
	if (!SPW_JS_Espacos(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"O campo "+ nome +" é de preenchimento obrigatório.");
		return(false);
	}
	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo "+ nome +".");		
		return(false);
	}

	if (CNPPU)
	{
		if (CNPPU.length > 0)
		{//alert(CNPPU);
			if (!SPW_JS_ScanP(ncamp.value,CNPPU))
			{
				SPW_JS_MsgErro(theForm,campo,"Os seguintes caracteres [" + CNPPU + "] não são permitidos no campo " + nome + ".");
				return(false);
			}
		}
	}
	
	//só se for > 0 é que comparo, caso contrário quer dizer
	//que o campo não tem limite de caracteres.
	if (len > 0){
		if (ncamp.value.length > len)
		{
			SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo).");
			return(false);
		}
	}

return(true);
}

//Valida uma string opcional
//CNPPU = Caracteres não permitidos pelo utilizador
function SPW_JS_ValidaStrOpc(theForm,campo,len,nome,CNPPU)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value != "")
	{
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo "+ nome +".");		
			return(false);
		}

		if (CNPPU)
		{

			if (CNPPU.length > 0)
			{
				if (!SPW_JS_ScanP(ncamp.value,CNPPU))
				{
					SPW_JS_MsgErro(theForm,campo,"Os seguintes caracteres [" + CNPPU + "] não são permitidos no campo " + nome + ".");
					return(false);
				}
			}
		}
		
		//só se for > 0 é que comparo, caso contrário quer dizer
		//que o campo não tem limite de caracteres.
		if (len > 0){
			if (ncamp.value.length > len)
			{
				SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo " + nome + " supera o permitido ("+ len +" caracteres no máximo).");
				return(false);
			}
		}
	}
return(true);
}

//Valida um email obrigatorio
function SPW_JS_ValidaEmailObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}

	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo " + nome + ".");		
		return(false);
	}
	
	if (!SPW_JS_Email(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente.");
		return(false);
	}
return(true);
}

//Valida um email opcional
function SPW_JS_ValidaEmailOpc(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value != "")
	{
		if (!SPW_JS_Email(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente.");
			return(false);
		}
	
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Não utilize o(s) caracter(es) ' ou | para preencher o campo " + nome + ".");		
			return(false);	
		}
	}
return(true);
}


//Valida um email obrigatorio com validação também do seu comprimento
function SPW_JS_ValidaEmailObg1(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}

	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Não utilize o(s) caracter(es) ' ou | para preencher o campo " + nome + ".");		
		return(false);
	}
	
	if (!SPW_JS_Email(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente.");
		return(false);
	}
	
	if (ncamp.value.length > len)
	{
		SPW_JS_MsgErro(theForm,campo,"O tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo).");
		return(false);
	}

return(true);
}

//Valida um email opcional com validação também do seu comprimento
function SPW_JS_ValidaEmailOpc1(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value != "")
	{	

		/*if (ncamp.value.length > len)
		{
			SPW_JS_MsgErro(theForm,campo,"O tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo).");
			return(false);
		}*/

		if (!SPW_JS_Email1(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente.");
			return(false);
		}
		
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Não utilize o(s) caracter(es) ' ou | para preencher o campo " + nome + ".");		
			return(false);	
		}

	}
return(true);
}

//Valida um Numero Inteiro obrigatorio
function SPW_JS_ValidaIntObg(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789'))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +".");
		return(false);
	}
	
	if (!SPW_JS_Num(num,len,0))
	{	
		SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." );	
		return(false);
	}
return(true);	
}
//Valida um Numero Inteiro obrigatorio,tem que ser > 0
function SPW_JS_ValidaIntObg1(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num == "" || !Number(num))
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789'))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +".");
		return(false);
	}
	
	if (!SPW_JS_Num(num,len,0))
	{	
		SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." );	
		return(false);
	}
return(true);	
}

//Valida um Numero Inteiro opcional
function SPW_JS_ValidaIntOpc(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num != "")
	{
		if (!SPW_JS_Scan(num,'0123456789'))
		{
			SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +".");
			return(false);
		}
		
		if (!SPW_JS_Num (num,len,0))
		{	
			SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." );			
			return(false);
		}
	}
return(true);
}

//Valida um Numero Inteiro opcional,tem que ser > 0
function SPW_JS_ValidaIntOpc1(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num != "")
	{
		if (!SPW_JS_Scan(num,'0123456789'))
		{
			SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +".");
			return(false);
		}
		
		if (!SPW_JS_Num (num,len,0))
		{	
			SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." );			
			return(false);
		}

		if (num == 0)

		{
			SPW_JS_MsgErro(theForm,campo,"Utilize valores maiores que zero para preencher o campo " + nome +".");
			return(false); 
		}

	}
return(true);
}

//valida um Numero dado obrigatorio
function SPW_JS_ValidaNumObg(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");	
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}
	
	if (!SPW_JS_Scan(num,'0123456789.-'))
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" ou \"-\" para preencher o campo " + nome +".");
		return(false);
	}

	if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
	{
		SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal.");
		return(false);
	}
return(true);
}

//valida um Numero dado obrigatorio, tem que ser > 0
function SPW_JS_ValidaNumObg1(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
		
	num = ncamp.value.toString().replace(/ /g,"");	
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}
	
	if (!Number(num))
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é do tipo numérico e o valor deve ser maior que zero (0).\nUtilize apenas caracteres numéricos e \".\" para preencher o campo.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789.'))	
	{
		SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" para preencher o campo " + nome +".");
		return(false);
	}

	if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
	{
		SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal.");
		return(false);
	}
return(true);
}

//valida um Numero dado opcional
function SPW_JS_ValidaNumOpc(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	
	if (num != "")
	{
		if (!SPW_JS_Scan(num,'0123456789.-'))	
		{
			SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" ou \"-\" para preencher o campo " + nome +".");
			return(false);
		}
			
		if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
		{	
			SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal.");
			return(false);
		}
	}
return(true);
}

//valida um Select obrigatório
function SPW_JS_ValidaSelectObg(theForm,campo,nome,valor)
{	
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.value == valor)
	{
		SPW_JS_MsgErro(theForm,campo,"Por favor, escolha uma opção do campo " + nome + ".");
		return(false);
	}

return(true);
}

//valida um Check obrigatório
function SPW_JS_ValidaCheckObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (!ncamp.checked)
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório.");
		return(false);
	}

return(true);
}

//valida um radio obrigatorio
function SPW_JS_ValidaRadioObg(theForm,campo,nome,num)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	var i = 0;
	var aux = false;
	
	if (num > 1)	
	{
		if (num != ncamp.length)
		{
			alert("Número de radios incorrecto.");
			return(false);
		}
	
	}
	
	if (num ==1)
	{
		if (ncamp.checked)
			return (true);
	}
	else
	{
		for (i=0; i<num;i++)
		{
			if (ncamp[i].checked)
				aux = true;
		}
	}

	if (!aux)
	{
		SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de escolha obrigatória.",num);
		return(false);
	}
		
return(true);
}


//valida um select MULTIPLE SIZE obrigatorio
function SPW_JS_ValidaMultSizeObg(theForm,campo,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	if (ncamp.length == 0)
	{
		SPW_JS_MsgErro(theForm,campo,"Por favor, escolha pelo menos uma opção do campo " + nome + ".");
		return(false);
	}
		
return(true);
}


//unformat Numero
function unformatNum(str)
{
	if (!str) return str; // nothing to do
	str = ("" + str);
	var nstr = '';
	var code;
	var hasDot=false;
	
	for (var i=0; i<str.length; i++) 
	{	
		code=str.charCodeAt(i);
		if (code>=48 && code<=57) 
			nstr += str.charAt(i);
		else if ((code==44 || code==46)&& !hasDot)
		{	// transforma virgula em ponto
			nstr += '.';
			hasDot=true;
		}
		else if (code==45 && i==0) // minus sign
			nstr += str.charAt(i);
		
	}
	return nstr;
}
//formata numero
//(str, decPlaces, GroupDigits)
function SPW_JS_FormatNumber(str,decPlaces,GroupDigits) 
{
	var auxStr;
	if (str == "") str = 0;
	
	if (isNaN(Number(decPlaces))) {decPlaces = 2;}
	
	str = ("" + str);
	auxStr = unformatNum(str);
	
	var dotPos = auxStr.indexOf(".")
	var decStr = "";
	
	if (dotPos >= 0) 
	{		
		if (auxStr!="0") {auxStr = "" + Math.round(parseFloat(auxStr)*Math.pow(10,decPlaces))/Math.pow(10,decPlaces);}
		dotPos = auxStr.indexOf(".")    
	}
	
	if (dotPos > 0) 
	{		
		if (dotPos<(auxStr.length-1)) decStr = auxStr.substr(dotPos+1,3);
		auxStr = reverseStr(auxStr.substr(0,dotPos))
	}
	else
	{
		auxStr = reverseStr(auxStr);
	}
	
	var newStr = '';
	for (var i=0; i<auxStr.length; i++) 
	{
		if (i>0 && (i%3)==0) newStr += GroupDigits.toString();
		newStr += auxStr.charAt(i);
	}
	newStr = reverseStr(newStr)
	
	var _dp = "";
	for (var j=0; j < decPlaces; j++) {_dp += "0";}
	
	decStr += _dp ;
	decStr=decStr.substr(0,decPlaces);

	newStr += "." + decStr;
	return newStr;
}

//Devolve uma string invertida
function reverseStr(str) {
   if (!str) return str; // nothing to do
   var rstr = '';
   for (var i=str.length-1;i>=0;i--) rstr += str.charAt(i);
   return rstr;
}

// Se o caracter introduzido não fôr um número então não o mostra.
// no input onkeypress="return SPW_JS_CheckNum()"
function SPW_JS_CheckNum()
{
  var codigoTecla;
  
  codigoTecla=window.event.keyCode;
  
  if (codigoTecla == 8) return true;  // BS 
  if (codigoTecla<48 || codigoTecla>57) return false;
  return true;
}

// Se o caracter introduzido não fôr um número ou o ponto 
//ou a virgula então não o mostra.
//no input onkeypress="return SPW_JS_CheckNumDot()"
function SPW_JS_CheckNumDot()
{
  var codigoTecla;
  
  codigoTecla = window.event.keyCode;
  
  switch(codigoTecla)
  {
	// virgula ou ponto
	case 44: 
	case 46: if (event.srcElement.value=='') { event.srcElement.value='0,'; return false; }
			 return (event.srcElement.value.indexOf(",")<0 && event.srcElement.value.indexOf(".")<0 && event.srcElement.value.length>0);
			 break;	
	// Backspace
	case 8:  return true;
			 break;
  }
  if (codigoTecla<48 || codigoTecla>57) return false;
  return (true);
  
}

// Se o caracter introduzido não fôr um número ou o ponto ou a virgula,
//ou o sinal menos então não o mostra.
//no input onkeypress="return SPW_JS_CheckNumDot()"
function SPW_JS_CheckNumDotNeg()
{
  var codigoTecla;
  
  codigoTecla = window.event.keyCode;
  
  switch(codigoTecla)
  {
	// virgula ou ponto
	case 44: 
	case 46: if (event.srcElement.value=='') { event.srcElement.value='0,'; return false; }
			 return (event.srcElement.value.indexOf(",")<0 && event.srcElement.value.indexOf(".")<0 && event.srcElement.value.length>0);
			 break;	
	// menos "-"
	case 45: if (event.srcElement.value.indexOf("-")<0) event.srcElement.value = '-'+event.srcElement.value;
			 return false;
			 break;
	// Backspace
	case 8:  return true;
			 break;
  }
  if (codigoTecla<48 || codigoTecla>57) return false;
  return (true);
  
}

// verifica se uma data é maior que a outra, 
//retorna false se Datafim < DataIni
function SPW_JS_Compara_Data(DataIni,DataFim,Tipo) 
{	
	if (!SPW_JS_Scan(DataIni,"0123456789/-"))
		return (false);
		
	if (!SPW_JS_Scan(DataFim,"0123456789/-"))
		return (false);		
	
	if (!SPW_JS_Data(DataIni,Tipo))
		return (false);
	
	if (!SPW_JS_Data(DataFim,Tipo))
		return (false);
	
	if (DataIni.search("/") > -1){
		var a_dateini = DataIni.split('/');
		var a_datefim = DataFim.split('/');}
	else if (DataIni.search("-") > -1){
		var a_dateini = DataIni.split('-');
		var a_datefim = DataFim.split('-');}
	else
		return (false);
		
	var monthini = a_dateini[1];
	var dayini = a_dateini[2];
	var yearini = a_dateini[0];

	var monthfim = a_datefim[1];
	var dayfim = a_datefim[2];
	var yearfim = a_datefim[0];
	
	if (Tipo == "0")	  
	{
		var monthini = a_dateini[1];
		var dayini = a_dateini[0];
		var yearini = a_dateini[2];

		var monthfim = a_datefim[1];
		var dayfim = a_datefim[0];
		var yearfim = a_datefim[2];
	}
	if (Tipo == "1")	  
	{
		var monthini = a_dateini[1];
		var dayini = a_dateini[2];
		var yearini = a_dateini[0];

		var monthfim = a_datefim[1];
		var dayfim = a_datefim[2];
		var yearfim = a_datefim[0];
	}
	if (Tipo == "2")	  
	{		
		var monthini = a_dateini[2];
		var dayini = a_dateini[1];
		var yearini = a_dateini[0];

		var monthfim = a_datefim[2];
		var dayfim = a_datefim[1];
		var yearfim = a_datefim[0];
	}

	var DI = new Date(parseInt(yearini,10),parseInt(monthini,10) - 1, parseInt(dayini,10));
	var DF= new Date(parseInt(yearfim,10),parseInt(monthfim,10) - 1, parseInt(dayfim,10));
	
	if(DF < DI)
		return (false);
	else
		return (true);
}

// calcula a diferencia entre duas datas retorna dias
function SPW_JS_Dif_Data(DataIni,DataFim,Tipo) 
{	
	if (!SPW_JS_Scan(DataIni,"0123456789/-"))
		return (false);
		
	if (!SPW_JS_Scan(DataFim,"0123456789/-"))
		return (false);		
	
	if (!SPW_JS_Data(DataIni,Tipo))
		return (false);
	
	if (!SPW_JS_Data(DataFim,Tipo))
		return (false);
	
	if (DataIni.search("/") > -1){
		var a_dateini = DataIni.split('/');
		var a_datefim = DataFim.split('/');}
	else if (DataIni.search("-") > -1){
		var a_dateini = DataIni.split('-');
		var a_datefim = DataFim.split('-');}
	else
		return (false);
		
	var monthini = a_dateini[1];
	var dayini = a_dateini[2];
	var yearini = a_dateini[0];

	var monthfim = a_datefim[1];
	var dayfim = a_datefim[2];
	var yearfim = a_datefim[0];
	
	if (Tipo == "0")	  
	{
		var monthini = a_dateini[1];
		var dayini = a_dateini[0];
		var yearini = a_dateini[2];

		var monthfim = a_datefim[1];
		var dayfim = a_datefim[0];
		var yearfim = a_datefim[2];
	}
	if (Tipo == "1")	  
	{
		var monthini = a_dateini[1];
		var dayini = a_dateini[2];
		var yearini = a_dateini[0];

		var monthfim = a_datefim[1];
		var dayfim = a_datefim[2];
		var yearfim = a_datefim[0];
	}
	if (Tipo == "2")	  
	{		
		var monthini = a_dateini[2];
		var dayini = a_dateini[1];
		var yearini = a_dateini[0];

		var monthfim = a_datefim[2];
		var dayfim = a_datefim[1];
		var yearfim = a_datefim[0];
	}
	
	var d_DI = new Date();
	var d_DF = new Date();
	
	d_DI.setFullYear(yearini,monthini-1,dayini);
	d_DF.setFullYear(yearfim,monthfim-1,dayfim);
	
	// do mesmo mes e mesmo ano
	//var difer = d_DF.getDate() - d_DI.getDate();
		
	var difer = d_DF.getTime() - d_DI.getTime();
		difer = Math.floor(difer /(1000 * 60 * 60 * 24));

return(difer);
}

//calcula a data para um determinada dia da semana do ano
//necessita da Função SPW_JS_GetDayLimit()
function SPW_JS_WeekEnd(n_Week,n_WeekDay) 
{	
	a_Date = new Date()
	a_Date.setFullYear(a_Date.getFullYear(),0,1)		
	a_LastDate = new Date()
	a_LastDate.setFullYear(a_Date.getFullYear(),11,31)
	a_DateAct = new Date();	
	
	if (n_Week == null || n_Week == "") 
		return(a_DateAct.getFullYear() +"/"+ (a_DateAct.getMonth()+1) +"/"+ a_DateAct.getDate())
	
	a_Returns = new Array()
	if (n_WeekDay == null || n_WeekDay == "") 
		n_WeekDay = 0

	var MaxDay = 0; cont=1;
	
	for (var I = 0;I <= 11; I++)
	{	
		a_Date.setMonth(I);
		MaxDay = SPW_JS_GetDayLimit(a_Date.getFullYear(),(I + 1));
		for (var J = 1; J <= MaxDay; J++)
		{
			a_Date.setDate(a_Date.getDate() + 1);			
			if (a_Date.getDay() == n_WeekDay)
			{
				a_Returns[cont] = a_Date.getFullYear() +"/"+ (a_Date.getMonth()+1) +"/"+ a_Date.getDate()
				cont ++;
			}
		}		
	}	
		
return(a_Returns[n_Week])
}

//calcula a data para um determinada dia da semana do ano seguinte ao corrente
//necessita da Função SPW_JS_GetDayLimit()
function SPW_JS_NextYearWeekEnd(n_Week,n_WeekDay) 
{	
	a_Date = new Date()
	a_Date.setFullYear(a_Date.getFullYear(),0,1)		
	a_LastDate = new Date()
	a_LastDate.setFullYear(a_Date.getFullYear()+1,11,31)
	a_DateAct = new Date();	
	
	if (n_Week == null || n_Week == "") 
		return(a_DateAct.getFullYear() +"/"+ (a_DateAct.getMonth()+1) +"/"+ a_DateAct.getDate())
	
	a_Returns = new Array()
	if (n_WeekDay == null || n_WeekDay == "") 
		n_WeekDay = 0

	var MaxDay = 0; cont=1;
	
	for (var I = 0;I <= 11; I++)
	{	
		a_Date.setMonth(I);
		MaxDay = SPW_JS_GetDayLimit(a_Date.getFullYear(),(I + 1));
		for (var J = 1; J <= MaxDay; J++)
		{
			a_Date.setDate(a_Date.getDate() + 1);			
			if (a_Date.getDay() == n_WeekDay)
			{
				a_Returns[cont] = a_Date.getFullYear()+1 +"/"+ (a_Date.getMonth()+1) +"/"+ a_Date.getDate()
				cont ++;
			}
		}		
	}	
		
return(a_Returns[n_Week])
}

//busca o numero da semana para a data actual
//utiliza a função SPW_JS_getWeekFromDate
function SPW_JS_getWeekNr()
{	
	var today = new Date();
	Year = today.getFullYear();
	Month = today.getMonth()+1;
	Day = today.getDate();	
	return SPW_JS_getWeekFromDate(Year,Month,Day);
}

//verifica o ano
function y2k(number) { return (number < 1000) ? number + 1900 : number; }

//devolve o numero da semana para uma determinada data
//utiliza a função y2k
function SPW_JS_getWeekFromDate(year,month,day) {
    var when = new Date(year,month-1,day);
    var newYear = new Date(year,0,1);
    var modDay = newYear.getDay();
             	
    var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) -
                 Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
		
    var weeknum = Math.floor((daynum+modDay-1)/7)+1;
    if (weeknum == 0) {
        year--;
        var prevNewYear = new Date(year,0,1);
        var prevmodDay = prevNewYear.getDay();        
        if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
    }

    return  + weeknum;
}

//Calcula o ultimo dia de cada mes, tomando en conta o ano
//necessita da função SPW_JS_IsLeapYear()
//Apoia a Função SPW_JS_WeekEnd()
function SPW_JS_GetDayLimit(y,m)
{
	var daysOfMonth = new Object();
	daysOfMonth ['Jan'] = daysOfMonth ['January']   = daysOfMonth [1] = 31;
	daysOfMonth ['Feb'] = daysOfMonth ['February']  = daysOfMonth [2] = 28;
	daysOfMonth ['Mar'] = daysOfMonth ['March']     = daysOfMonth [3] = 31;
	daysOfMonth ['Apr'] = daysOfMonth ['April']     = daysOfMonth [4] = 30;
	daysOfMonth ['May'] = daysOfMonth ['May']       = daysOfMonth [5] = 31;
	daysOfMonth ['Jun'] = daysOfMonth ['June']      = daysOfMonth [6] = 30;
	daysOfMonth ['Jul'] = daysOfMonth ['July']      = daysOfMonth [7] = 31;
	daysOfMonth ['Aug'] = daysOfMonth ['August']    = daysOfMonth [8] = 31;
	daysOfMonth ['Sep'] = daysOfMonth ['September'] = daysOfMonth [9] = 30;
	daysOfMonth ['Oct'] = daysOfMonth ['October']   = daysOfMonth [10] = 31;
	daysOfMonth ['Nov'] = daysOfMonth ['November']  = daysOfMonth [11] = 30;
	daysOfMonth ['Dec'] = daysOfMonth ['December']  = daysOfMonth [12] = 31;
	
	if (m == 2 && SPW_JS_IsLeapYear(y))
		var dayLimit = 29;
	else 
		var dayLimit = daysOfMonth[m];
	
return(dayLimit);
}

//left pad
function SPW_JS_LeftPad(Str,NumMax,Pad)
{
    if (Str.length <= 0)
        return(Str);
    
    if (!Number(NumMax)) 
        return(Str);
    
    if (Pad.length <= 0)
        return(Str);
    
    var aux = "";
    
    for (var i = 1; i <= NumMax - Str.length; i++)
        aux = aux + Pad
        
    return(aux + Str)
}
//right pad
function SPW_JS_RightPad(Str,NumMax,Pad)
{
    if (Str.length <= 0)
        return(Str);
    
    if (!Number(NumMax)) 
        return(Str);
    
    if (Pad.length <= 0)
        return(Str);
    
    var aux = "";
    
    for (var i = 1; i <= NumMax - Str.length; i++)
        aux = aux + Pad
        
    return(Str + aux)
}

//valida que os intervalos de varias datas não se cruzam
//retorna false se existe um Intervalo de Datas que se cruzem
//utiliza a função SPW_JS_Compara_Data
//entra array com as Datas Inicio e Datas Fim
function SPW_JS_ValidaIntervaloDatas(arrDataIni,arrDataFim) 
{	
	//validar que os arrays tenham dados
	if (arrDataIni.length == 0 || arrDataFim.length == 0)
		return(false)
	
	//validar que os valores sejam datas bem formatadas
	for (var i=0; i < arrDataIni.length; i++){
		if (!SPW_JS_Scan(arrDataIni[i],"0123456789/-"))
			return (false);			
		if (!SPW_JS_Scan(arrDataFim[i],"0123456789/-"))
			return (false);	
		if (!SPW_JS_Data(arrDataIni[i]))
			return (false);	
		if (!SPW_JS_Data(arrDataFim[i]))
			return (false);
	}
	
	var arrDataIniAux = new Array();	
	var arrDataFimAux = new Array();
	for (var i=0; i < arrDataIni.length; i++){
		arrDataIniAux[i] = arrDataIni[i];
		arrDataFimAux[i] = arrDataFim[i];
		for (var j=0; j < arrDataIniAux.length; j++){
			if (!SPW_JS_Compara_Data(arrDataIni[i],arrDataIniAux[j]) && !SPW_JS_Compara_Data(arrDataFimAux[j],arrDataIni[i]))
				return(false)
			
			if (!SPW_JS_Compara_Data(arrDataIniAux[j],arrDataIni[i]) && !SPW_JS_Compara_Data(arrDataFim[i],arrDataIniAux[j]))
				return(false)
		}		
	}
	
	return(true);
}

//SPW_JS_MaxLength: limita o numero de caracteres num campo
//usa o maxlength como limite de caracteres
//<TEXTAREA rows=2 cols=20 id=textarea1 name=textarea1 maxlength=5
//onKeyUp="SPW_JS_MaxLength('frm1',this.name,'TextArea');"></TEXTAREA>
function SPW_JS_MaxLength(theForm,campo,nome) {
	var total = 0;
	var Input = eval(theForm + "." + campo);
	total = eval(Input.maxlength);
		
	if (Input.value.length > total){
		event.keyCode=0;
		Input.value = Input.value.substring(0,total);
		SPW_JS_MsgErro(theForm,campo,"O tamanho do campo " + nome + " supera o permitido ("+ total +" caracteres no máximo).");
		return;
	}
}

//formata hora
//coloca uma string Hora no formato HH:MM
//Utiliza a função SPW_JS_LeftPad(Str,NumMax,Pad)
//Utiliza a função SPW_JS_RightPad(Str,NumMax,Pad)
//MF: Acrescentei um parâmetro opcional que me diz se quero ou não preencher o campo
//    e comentei o if dentro do else pois posso ter horas com mais do que duas casas
function SPW_JS_FormatHora(strHora,opt) 
{	
	var auxStr;
	var HoraFormatada = strHora;
	
	if (opt !== 1){	
		if (strHora == "") return("00:00");
	}else if (strHora == "") return("");
	
	if (strHora.indexOf(":") > 0){
		var auxStr = strHora.toString().split(":");
		var H = auxStr[0];
		var M = auxStr[1];
		
		H = SPW_JS_LeftPad(H,2,0);				
		M = SPW_JS_RightPad(M,2,0);
		HoraFormatada = H +":"+ M;		
	}
	else{
		//if (strHora.toString().length <= 2)
			
		HoraFormatada = SPW_JS_LeftPad(strHora,2,0) + ":00"	
	}	
	return (HoraFormatada)
}

//Calcula o Dia da Semana 
//utiliza a função SPW_JS_Data para verificar que a data é válida
function SPW_JS_GetDiaDaSemana(year,month,day){
	
	var then = new Date(year,month-1,day) //-1 por que o mês  de JAN = 0
	var theday = then.getDay();
	
	var weekday = new Array(6);
	weekday[0]="Domingo";
	weekday[1]="Segunda-feira";
	weekday[2]="Terça-feira";
	weekday[3]="Quarta-feira";
	weekday[4]="Quinta-feira";
	weekday[5]="Sexta-feira";
	weekday[6]="Sábado";
		
	return(weekday[theday]);
}

//permite Somar ou Subtrair intervalos a uma data
//é semelhante à DateAdd do VB
//interval = w (semanas),d (dias),h (horas),m(minutos),s(segudos)
function SPW_JS_DateAdd(interval, number, Data) {
	        		
    // get the milliseconds for this Date object. 
    var buffer = Date.parse( Data ) ;
		
    // check that the start parameter is a valid Date. 
    if ( isNaN (buffer) ) return null ;
    	
    // check that an interval parameter was not numeric. 
    if ( interval.charAt == 'undefined' ) return null ;
    
    // check that the number parameter is numeric. 
    if ( isNaN ( number ) )	return null ;
    
    // so far, so good...
    //
    // what kind of add to do? 
    switch (interval.toString())
    {
		case 'w': case 'W': 
            number *= 7 ; // semanas to days
        case 'd': case 'D': 
            number *= 24 ; // days to hours
            // fall through! 
        case 'h': case 'H':
            number *= 60 ; // hours to minutes
            // fall through! 
        case 'm': case 'M':
            number *= 60 ; // minutes to seconds
            // fall through! 
        case 's': case 'S':
            number *= 1000 ; // seconds to milliseconds
            break ;
        default:
        // If we get to here then the interval parameter
        // didn't meet the w,d,h,m,s criteria.
        return null ;
    }    
    return new Date( buffer + number ) ;    
}


//Devolve um array com a Data de Inicio e Data de Fim
// para uma determinada data
//é caculada a semana a que pertence a data e depois
//são calculadas as duas datas
//utiliza a função SPW_JS_getWeekFromDate(),SPW_JS_DateAdd()
function SPW_JS_GetIntervaloSemana(Ano,Mes,Dia)
{
	var semana,inicio, fim;
	semana = SPW_JS_getWeekFromDate(Ano,Mes,Dia);
	
	var aux = SPW_JS_DateAdd("w",semana-1,"01/01/"+Ano);
	var arrDatas = new Array(1);

	var aData = new Date(aux) //-1 por que o mês  de JAN = 0
	var oDia = aData.getDay();
		
	arrDatas[0] = SPW_JS_DateAdd("d", - oDia, aux);	
	arrDatas[1] = SPW_JS_DateAdd("d",6,arrDatas[0]);	
		
	return arrDatas;
	
}

// verifica se uma hora é maior que a outra, 
// retorna false se HoraFim < HoraIni
function SPW_JS_Compara_Hora(HoraIni,HoraFim) 
{	
	HoraIni = SPW_JS_FormatHora(HoraIni)
	HoraFim = SPW_JS_FormatHora(HoraFim)
	
	var DI = "2000/01/01 " + HoraIni
	var DF = "2000/01/01 " + HoraFim

	var DIP = Date.parse(DI)
	var DFP = Date.parse(DF)  

	if (DFP < DIP)
		return (false);
	else
		return (true);
}

//Valida o Código Postal
function SPW_JS_ValidaCodPostal(theForm,campo,len,nome)
{
	if (campo == '[object]')
		var ncamp = campo;
	else
		var ncamp = eval(theForm + "." + campo);
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num != "")
	{
		if (!SPW_JS_Scan(num,'0123456789- '))
		{
			SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos,"-" ou espaço para preencher o campo " + nome +".");
			return(false);
		}
		
		if (ncamp.value.length > len)
		{
			SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo " + nome + " supera o permitido ("+ len +" caracteres no máximo).");
			return(false);
		}
	}
return(true);
}

//Valida que pelo menos um dos campos passados no array esteja preenchido
function SPW_JS_ValidaCamposObg(theForm,arrCampos,arrNomes){

	var isEmpty = true;
	var ncamp = new Object();
	var strDesc = new String();
	var strDescNomes = new String();
	for (var i = 0; i < arrCampos.length; i++ ) {
		ncamp = eval(theForm + "." + arrCampos[i]);
		strDescNomes += " - " + arrNomes[i] + "\n";
		if (ncamp.value != ""){
			isEmpty = false;
		}
    }
    
    if (isEmpty) {
		strDesc = "Um dos seguintes campos é de preenchimento obrigatório:\n"+ strDescNomes
		SPW_JS_MsgErro(theForm,arrCampos[0],strDesc)
		return(false);
    }
    return(true);
}
//********************************************
