﻿//-----------------------------------------------------------------
//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)
{
	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);
}					

//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
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)
			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);
		}	  
	}        
	return (true);
}

//Fim funções de ajuda***************************************************************
//***********************************************************************************

//Valida uma data obrigatoria
function SPW_JS_ValidaDataObg(theForm,campo,nome,tipo)
{
	var ncamp = eval(theForm + "." + campo)	
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the " + nome +" field.");
		return(false);
	}
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789/-"))
	{
		SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ".");
		return(false);
	}

	if (!SPW_JS_Data(ncamp.value,tipo))
	{
		SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ".");
		return(false);
	}
return(true);
}

//Valida uma data opcional
function SPW_JS_ValidaDataOpc(theForm,campo,nome,tipo)
{
	var ncamp = eval(theForm + "." + campo)	
	if (ncamp.value != "")
	{
		if (!SPW_JS_Data(ncamp.value,tipo))
		{
			SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ".");
			return(false);
		}
	}

	if (!SPW_JS_Scan(ncamp.value,"0123456789/-"))
	{
		SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ".");
		return(false);
	}

return(true);
}


//Valida hora obrigatória
function SPW_JS_ValidaHoraObg(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)

	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the " + nome +" field.");
		return(false);
	}
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \":\" in the field " + nome  + ". Verify that is of the type 00:00.");
		return(false);
	}


	if (ncamp.value != "")
	{	
		if (!SPW_validar_hora(ncamp.value,2))
		{
			SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ". Verify that is of the type 00:00.");
			return(false);
		}
	}


return(true);

}


//Valida hora opcional
function SPW_JS_ValidaHoraOpc(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)	
	
	if (!SPW_JS_Scan(ncamp.value,"0123456789:"))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \":\" in the field " + nome  + ". Verify that is of the type 00:00.");
		return(false);
	}


	if (ncamp.value != "")
	{	
		if (!SPW_validar_hora(ncamp.value,2))
		{
			SPW_JS_MsgErro(theForm,campo,"Insert a valid date in the field " + nome + ". Verify that is of the type 00:00.");
			return(false);
		}
	}

	

return(true);

}

//Valida uma string obrigatoria
//CNPPU = Caracteres não permitidos pelo utilizador
function SPW_JS_ValidaStrObg(theForm,campo,len,nome,CNPPU)
{	
	var ncamp = eval(theForm + "." + campo)
	
	if (!SPW_JS_Espacos(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}
	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"The field "+ nome +" cannot contain the character ' or | .");		
		return(false);
	}

	if (CNPPU)
	{
		if (CNPPU.length > 0)
		{//alert(CNPPU);
			if (!SPW_JS_ScanP(ncamp.value,CNPPU))
			{
				SPW_JS_MsgErro(theForm,campo,"The field "+ nome +" cannot contain the character [" + CNPPU + "] .");
				return(false);
			}
		}
	}
	
	if (ncamp.value.length > len)
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field.");
		return(false);
	}

return(true);
}

//Valida uma string opcional
//CNPPU = Caracteres não permitidos pelo utilizador
function SPW_JS_ValidaStrOpc(theForm,campo,len,nome,CNPPU)
{
	var ncamp = eval(theForm + "." + campo)
	if (ncamp.value != "")
	{
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Dont use caracter ' or | to fill the field "+ nome +".");		
			return(false);
		}

		if (CNPPU)
		{

			if (CNPPU.length > 0)
			{
				if (!SPW_JS_ScanP(ncamp.value,CNPPU))
				{
					SPW_JS_MsgErro(theForm,campo,"The field "+ nome +" cannot contain the character [" + CNPPU + "].");
					return(false);
				}
			}
		}

		if (ncamp.value.length > len)
		{
			SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field.");
			return(false);
		}
	}
return(true);
}

//Valida um email obrigatorio
function SPW_JS_ValidaEmailObg(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}

	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Dont use caracter ' or | to fill the field "+ nome +".");		
		return(false);
	}
	
	if (!SPW_JS_Email(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Insert a valid value in the field " + nome + "."); 
		return(false);
	}
return(true);
}

//Valida um email opcional
function SPW_JS_ValidaEmailOpc(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)
	if (ncamp.value != "")
	{
		if (!SPW_JS_Email(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Insert a valid value in the field " + nome + ".");
			return(false);
		}
	
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Dont use caracter ' or | to fill the field "+ 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)
{
	var ncamp = eval(theForm + "." + campo)
	if (ncamp.value == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}

	if (!SPW_JS_CaracteresEsp(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Dont use caracter ' or | to fill the field "+ nome +".");		
		return(false);
	}
	
	if (!SPW_JS_Email(ncamp.value))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}
	
	if (ncamp.value.length > len)
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field.");
		return(false);
	}

return(true);
}

//Valida um email opcional com validação também do seu comprimento
function SPW_JS_ValidaEmailOpc1(theForm,campo,len,nome)
{
	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,"Insert a valid value in the field " + nome + ".");
			return(false);
		}
		
		if (!SPW_JS_CaracteresEsp(ncamp.value))
		{
			SPW_JS_MsgErro(theForm,campo,"Dont use caracter ' or | to fill the field "+ nome +".");		
			return(false);	
		}

	}
return(true);
}

//Valida um Numero Inteiro obrigatorio
function SPW_JS_ValidaIntObg(theForm,campo,len,nome)
{
	var ncamp = eval(theForm + "." + campo)
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789'))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters in the " + nome +" field.");
		return(false);
	}
	
	if (!SPW_JS_Num(num,len,0))
	{	
		SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field." );	
		return(false);
	}
return(true);	
}
//Valida um Numero Inteiro obrigatorio,tem que ser > 0
function SPW_JS_ValidaIntObg1(theForm,campo,len,nome)
{
	var ncamp = eval(theForm + "." + campo)
	
	num = ncamp.value.toString().replace(/ /g,"");
	num = num.replace(/\$|\,/g,'');
	
	if (num == "" || !Number(num))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789'))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field.");
		return(false);
	}
	
	if (!SPW_JS_Num(num,len,0))
	{	
		SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field." );	
		return(false);
	}
return(true);	
}

//Valida um Numero Inteiro opcional
function SPW_JS_ValidaIntOpc(theForm,campo,len,nome)
{
	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,"Please enter only numeric characters in the " + nome +" field.");
			return(false);
		}
		
		if (!SPW_JS_Num (num,len,0))
		{	
			SPW_JS_MsgErro(theForm,campo,"Please enter at most "+ len +" characters in "+ nome +" field." );			
			return(false);
		}
	}
return(true);
}

//valida um Numero dado obrigatorio
function SPW_JS_ValidaNumObg(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	var ncamp = eval(theForm + "." + campo)
	
	num = ncamp.value.toString().replace(/ /g,"");	
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}
	
	if (!SPW_JS_Scan(num,'0123456789.-'))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \".\" or \"-\" in the " + nome +" field.");
		return(false);
	}

	if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
	{
		SPW_JS_MsgErro(theForm,campo,"The inserted value in the field " + nome +" is not allowed. the field should have at the most " + NumCasasInt + " characters in the entire part and " + NumCasasDec +" in the decimal.");
		return(false);
	}
return(true);
}

//valida um Numero dado obrigatorio, tem que ser > 0
function SPW_JS_ValidaNumObg1(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	var ncamp = eval(theForm + "." + campo)
	
	num = ncamp.value.toString().replace(/ /g,"");	
	
	if (num == "")
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}
	
	if (!Number(num))
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \".\" in the " + nome +" field.");
		return(false);
	}

	if (!SPW_JS_Scan(num,'0123456789.'))	
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \".\" in the " + nome +" field.");
		return(false);
	}

	if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
	{
		SPW_JS_MsgErro(theForm,campo,"The inserted value in the field " + nome +" is not allowed. the field should have at the most " + NumCasasInt + " characters in the entire part and " + NumCasasDec +" in the decimal.");
		return(false);
	}
return(true);
}

//valida um Numero dado opcional
function SPW_JS_ValidaNumOpc(theForm,campo,nome,NumCasasInt,NumCasasDec)
{
	var ncamp = eval(theForm + "." + campo)
	
	num = ncamp.value.toString().replace(/ /g,"");
	
	if (num != "")
	{
		if (!SPW_JS_Scan(num,'0123456789.-'))	
		{
			SPW_JS_MsgErro(theForm,campo,"Please enter only numeric characters and \".\" or \"-\" in the " + nome +" field.");
			return(false);
		}
			
		if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec))
		{	
			SPW_JS_MsgErro(theForm,campo,"The inserted value in the field " + nome +" is not allowed. the field should have at the most " + NumCasasInt + " characters in the entire part and " + NumCasasDec +" in the decimal.");
			return(false);
		}
	}
return(true);
}

//valida um Select obrigatório
function SPW_JS_ValidaSelectObg(theForm,campo,nome,valor)
{	
	var ncamp = eval(theForm + "." + campo)
		
	if (ncamp.value == valor)
	{
		SPW_JS_MsgErro(theForm,campo,"Please select a " + nome + ".");
		return(false);
	}

return(true);
}

//valida um Check obrigatório
function SPW_JS_ValidaCheckObg(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)
	if (!ncamp.checked)
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		return(false);
	}

return(true);
}

//valida um radio obrigatorio
function SPW_JS_ValidaRadioObg(theForm,campo,nome,num)
{
	var ncamp = eval(theForm + "." + campo)
	var i = 0;
	var aux = false;
	
	if (num > 1)	
	{
		if (num != ncamp.length)
		{
			alert("Invalid number of radios buttons .");
			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,"Please enter a value for the "+ nome +" field.",num);
		return(false);
	}
		
return(true);
}


//valida um select MULTIPLE SIZE obrigatorio
function SPW_JS_ValidaMultSizeObg(theForm,campo,nome)
{
	var ncamp = eval(theForm + "." + campo)
	if (ncamp.length == 0)
	{
		SPW_JS_MsgErro(theForm,campo,"Please enter a value for the "+ nome +" field.");
		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);
  
}

/*
//formata numero
function SPW_JS_FormatNumber(num, decplaces, GroupDigits) 
{			
	var aux = new Array();
	aux = num.toString().split(GroupDigits.toString());
	num = aux.join("");		
		
	if (!Number(num))
		return num ;
	
	var str = "" + Math.round(eval(num) * Math.pow(10,decplaces));

	while (str.length <= decplaces) 
		str = "0" + str;
	
	if (isNaN(str))
		str = "0";
	
	var decpoint = str.length - decplaces;

	num = str.substring(0,decpoint); 
	
	if (isNaN(num))
		num = "0";
	
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+ GroupDigits +num.substring(num.length-(4*i+3));
	
	if (decplaces == 0)
		var point = ""
	else
		var point= "."
	
	num = num + point + str.substring(decpoint, str.length);
	
return num;
}
*/
// 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;	
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,dayini);
	d_DF.setFullYear(yearfim,monthfim,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 uma determinada 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])
}

//busca o numero da semana para uma data actual
function SPW_JS_getWeekNr()
{
	var today = new Date();
	Year = today.getFullYear();
	Month = today.getMonth();
	Day = today.getDate();
	now = Date.UTC(Year,Month,Day+1,0,0,0);
	var Firstday = new Date();
	Firstday.setYear(Year);
	Firstday.setMonth(0);
	Firstday.setDate(1);
	then = Date.UTC(Year,0,1,0,0,0);
	var Compensation = Firstday.getDay();
	if (Compensation > 3) Compensation -= 4;
	else Compensation += 3;
	NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
	return NumberOfWeek;
}

//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)
}

//********************************************
//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 (total ==0) return;
			
	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;
	}
}
