// $Header: /Cidadebcp/Cm/cidadebcp/site/js/validar.js 1     14-06-05 13:11 Dtrony $

////////////////////////////////////////////////////////////////////////////////////
///Descripción: Se separan las funciones para que sean operativas
///				con cadenas directamente en vez de cajas de texto



////////////////////////////////////////////////////////////////////////////////////
// Comprobar que los campos no están vacíos
////////////////////////////////////////////////////////////////////////////////////


function vacio(objeto,notificacion,nombre)
{
	if (objeto.value=='')
	{
	    if (notificacion==true)
	    {
			alert('O campo '+nombre+' é de preenchimento obrigatório.');
			objeto.focus();
		}
		return true;
	}	
	else
    {
	    return false;
	}	
}	

function vaciocb(objeto,elemento,notificacion,nombre)
{
	if (objeto.selectedIndex==elemento)
	{
	    if (notificacion==true)
	    {
			alert('O campo '+nombre+' é de preenchimento obrigatório.');
			objeto.focus();
		}
		return true;
	}	
	else
    {
	    return false;
	}	
}	

function vaciorb(objeto, notificacion, nombre) {
    if (typeof(objeto.length) == "undefined") {
        if(objeto.checked) {
            return false;
        }
    } else {
        for(var i=0; i < objeto.length; i++) {
            if(objeto[i].checked) {
                return false;
            }
        }
    }
    if (notificacion) {
	alert('O campo '+nombre+' é de preenchimento obrigatório.');
    }
    return true;
}






////////////////////////////////////////////////////////////////////////////////////
// Comprobar mail valido
////////////////////////////////////////////////////////////////////////////////////
function esmailstr(strTexto)
{
    if (strTexto.indexOf ('@', 0) == -1 || strTexto.indexOf ('.', 0) == -1) 
        return false;
    else
        return true;
}

function esmail(caja) 
{
    if (!esmailstr(caja.value))
    {  
   		alert("É necessário especificar um endereço de e-mail válido.");
        caja.focus();
        return false;
    } 
    return true;
}


function emailCheck (emailStr) 
{
var checkTLD=1;
var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
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) 
   {
   alert("O campo e-mail não está correcto");
   return "1";
   }

var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++) 
   {
   if (user.charCodeAt(i)>127) 
      {
      alert("O campo e-mail não está correcto");
      return "1";
      }
   }
   
for (i=0; i<domain.length; i++) 
   {
   if (domain.charCodeAt(i)>127) 
      {
      alert("O campo e-mail não está correcto");
      return "2";
      }
   }

if (user.match(userPat)==null) 
   {
   alert("O campo e-mail não está correcto");
   return "1";
   }

var IPArray=domain.match(ipDomainPat);

if (IPArray!=null) 
   {
   for (var i=1;i<=4;i++) 
      {
      if (IPArray[i]>255) 
         {
         alert("O campo e-mail não está correcto");
         return "2";
         }
      }
      
   return "0";
   }

var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;

for (i=0;i<len;i++) 
   {
   if (domArr[i].search(atomPat)==-1) 
      {
      alert("O campo e-mail não está correcto");
      return "2";
      }
   }

if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) 
   {
   alert("O campo e-mail não está correcto");
   return "2";
   }

if (len<2) 
   {
   alert("O campo e-mail não está correcto");
   return "2";
   }

return "0";
}


////////////////////////////////////////////////////////////////////////////////////
// Validar un textarea: Darle un número máximo de caracteres
////////////////////////////////////////////////////////////////////////////////////
function maxcaracteres (caja,num) {
	var t;
	t = caja.value.length;
	if (t > num)
	{
		eval ("alert('O conteúdo deste campo não deve ter mais de "+num+" caracteres.')");
		caja.focus();
        return false;
	}
	else 
	{
		return true;	
	}
}



////////////////////////////////////////////////////////////////////////////////////
// Comprobar si es numero
////////////////////////////////////////////////////////////////////////////////////
function esnumerostr(strTexto) {
	if (strTexto.length > 0) {
		for (var i = 0; i < strTexto.length; i++) {
		  var caracter = strTexto.charAt(i);
		  if (caracter < "0" || caracter > "9") 
		      return false;
		}
	    return true;
	} else {
		return false;
	}
}

function esnumero(caja, notificacion,descripcion) {
	if (!esnumerostr(caja.value))
	{
	  if (notificacion==true)
	    {
		   alert("O campo " + descripcion + " deve ser \npreenchido com um valor numérico."); 
		   caja.select();
		}   
       return false;
    }
    return true;
}
////////////////////////////////////////////////////////////////////////////////////
// Comprobar si es numero decimal
////////////////////////////////////////////////////////////////////////////////////

function esnumerodecimalstr(strTexto) 
{
	strTexto = strTexto.toString();
	var comas=0;
    for (var i = 0; i < strTexto.length; i++) 
    {
		var caracter = strTexto.charAt(i);
		if (caracter < "0" || caracter > "9") 
		{
			if (((caracter == ",") || (caracter == ".")) && comas==0) 
			{
				if(i==0 || i==strTexto.length-1)
	     		{ 	
					return false;  
				}
				else
				{	              
					comas=1;
				}
			}
			else
			{ 	
			return false;  
			}              
		}
    }
    return true;
}

function esnumerodecimal(caja, descripcion) 
{
	if (!esnumerodecimalstr(caja.value))
	{
		alert("O campo " + descripcion + " deve ser \npreenchido com um valor decimal.");
		caja.focus();
		return false;  
	}
    return true;
}




////////////////////////////////////////////////////////////////////////////////////
// Funciones de Fechas
////////////////////////////////////////////////////////////////////////////////////

var ventanaFechas = 20; // Por debajo de este valor se suma 2000 
						// y por encima se suma 1900.

function esFechaCB(cajadia,cajames,cajaano){
var cadena;
var strSalida;
cadena=cajadia.value + "/" + cajames.value + "/" + cajaano.value;
strSalida=esfechastr(cadena);
if (strSalida!=""){
	alert(strSalida);
 	cajadia.focus();	
	return false;	
}
return true;	
}

function esfecha(caja)
{	
	var strSalida = esfechastr(caja.value);
	if(strSalida!="")
	{			
		alert(strSalida);
		caja.focus();
		return false;
	}
	else
	{
		//formatea en la caja la fecha
		caja.value=formatearFechaStr (caja.value, "DDMMAAAA", "/");
	}
				 
	return true;
}						
function esfechastr (strTexto) {		
		
		var error = false;
		var separador = "/";

		var dd;
		var mm;
		var yyyy;
		
		var ff = strTexto;
		lg=ff.length;
        f="";
        for (i=0;i<lg;i++) {
                ch = ff.charAt(i);
                if (ch!=' ')
                        f+=ch;
        }
        
        sdm=f.indexOf('-');
        sma=f.lastIndexOf('-');
        sep='-';
        if (sdm==-1) {
                sdm=f.indexOf('/');
                sma=f.lastIndexOf('/');
                sep='/';
        }
        
        if (sdm==-1 || sma==-1 || sdm==sma){
                return("O formato correcto do campo data é 'dd/mm/AAAA'.") ;
        }
        dd = f.substring(0,sdm);
  
        mm = f.substring(sdm+1,sma);
  
        yyyy = f.substring(sma+1);
  
        dd = (dd.length==2) ? dd : '0'+dd;
  
        mm = (mm.length==2) ? mm : '0'+mm;
		
						
		month = mm;
		day = dd;
		year = yyyy;


		if (!esnumerostr(dd)){
			return("O valor inserido em 'Dia' está incorrecto.");
		}

		if (!esnumerostr(mm)){
			return("O valor inserido em 'Mês' está incorrecto.");
		}

		if (!esnumerostr(yyyy)){
			return("O valor inserido em 'Ano' está incorrecto.");
		} else if ((yyyy>100) && (yyyy<1800)) {
			return("O 'Ano' está incorrecto.");
		}

		//mes
		if (month < 1 || month > 12) 
		{
			return("O Mês deve estar entre 1 e 12.");
		}

		//día
		if (day < 1 || day > 31) 
		{
			return("O Dia deve estar entre 1 e 31.");
		}


		//mes de 30 días
		if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		{
			return("¡El mes " + month + " no tiene 31 dias!");
		}
				
		//29 de Febrero
		if (month == 2) 
		{
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) 
			{
				return("¡Febrero de " + year + " no tiene " + day + " dias!");
			}
		}   
				 
		return ""
}

////////////////////////////////////////////////////////////////////////////////////
// Formatear fechas
////////////////////////////////////////////////////////////////////////////////////
function formatearFechaStr (strTexto, formato, separador) {
		var fechaFormateada = "";

		if (esfechastr (strTexto)!="") {
			return "";
		}
		
		var error = false;

		var dd;
		var mm;
		var yyyy;
		
		var ff = strTexto;
		lg=ff.length;
        f="";
        for (i=0;i<lg;i++) {
                ch = ff.charAt(i);
                if (ch!=' ')
                        f+=ch;
        }
        
        sdm=f.indexOf('-');
        sma=f.lastIndexOf('-');
        sep='-';
        if (sdm==-1) {
                sdm=f.indexOf('/');
                sma=f.lastIndexOf('/');
                sep='/';
        }
        
        if (sdm==-1 || sma==-1 || sdm==sma){
			return("") ;
        }
        dd = f.substring(0,sdm);
  
        mm = f.substring(sdm+1,sma);
  
        yyyy = f.substring(sma+1);
  
        dd = (dd.length==2) ? dd : '0'+dd;
  
        mm = (mm.length==2) ? mm : '0'+mm;
		
						
		month = mm;
		day = dd;
		year = yyyy;

		if (yyyy>9999){
			return "";
		}

		if (yyyy<100){
			if (yyyy<ventanaFechas){
				yyyy = 2000 + parseInt(yyyy);
			} else {
				yyyy = 1900 + parseInt(yyyy);
			}
		} else if (yyyy==100){
			return "";
		}

		if (formato!=""){
			formato= formato.toUpperCase();
		}

		if ((formato=="") || (formato=="DDMMAAAA")){	
			fechaFormateada = dd + separador + mm + separador + yyyy;
		} else if (formato=="MMDDAAAA") {
			fechaFormateada = mm + separador + dd + separador + yyyy;
		} else if (formato=="AAAAMMDD") {
			fechaFormateada = yyyy + separador + mm + separador + dd;
		} else {
			fechaFormateada = dd + separador + mm + separador + yyyy;
		}

		return fechaFormateada;
}

function formatearFecha(caja, formato, separador) {	
	var strSalida = formatearFechaStr (caja.value, formato, separador);
	if ((strSalida=="") && (caja.value!="")){
		alert("El formato de la fecha debe ser: dd/mm/aaaa");
	}
	caja.value = strSalida;
}


function formatearAnyoStr(strTexto, formato, separador, dd, mm) {
	if (strTexto==""){
		return "";
	}
	if ((dd=="") || (!esnumerostr(dd))){
		dd = "01"
	}
	if ((mm=="") ||	(!esnumerostr(mm))){
		mm = "01"
	}
	var fechaSalida = formatearFechaStr(strTexto, formato, separador);
	if (fechaSalida!="") {
		return fechaSalida;
	}
	if (!esnumerostr(strTexto)){
		return "";
	} else {
		var fechaAux = dd + "/" + mm + "/" + strTexto;
		fechaSalida = formatearFechaStr(fechaAux, formato, separador);
		return fechaSalida;
	}
}

function formatearAnyo(caja, formato, separador, dd, mm) {
	var strSalida = formatearAnyoStr(caja.value, formato, separador, dd, mm);
	if ((strSalida=="") && (caja.value!="")){
		alert("Deve introduzir um Ano válido ou uma data com o formato: dd/mm/AAAA");
	}
	caja.value = strSalida;
	
}

////////////////////////////////////////////////////////////////////////////////////
// Comparar fechas
////////////////////////////////////////////////////////////////////////////////////

function fechaMayorCB (cajadia1,cajames1,cajaano1,cajadia2,cajames2,cajaano2) {

	fecha1=cajadia1.value + "/" + cajames1.value + "/" + cajaano1.value;
	fecha2=cajadia2.value + "/" + cajames2.value + "/" + cajaano2.value;

	var f;
	f = fechaMayor (fecha1,fecha2);
	
	if (f==1) 
	{
		alert("A data fim deve ser posterior á data de inicio.");
		cajadia2.focus();
		return true;  
	}	
}

function fechaMayor (fecha1, fecha2) {		
// devuelve 1 si fecha1 >= fecha2, 
//			0 si fecha2 > fecha1,
//		   -1 si alguna de las fechas no es válida
		
		if (esfechastr(fecha1)!='' || esfechastr(fecha2)!=''){
			return "-1";
		}
		
		var error = false;
		var separador = "/";

		var dd;
		var mm;
		var yyyy;
		
		var ff = fecha1;
		lg=ff.length;
        f="";
        for (i=0;i<lg;i++) {
                ch = ff.charAt(i);
                if (ch!=' ')
                        f+=ch;
        }
        
        sdm=f.indexOf('-');
        sma=f.lastIndexOf('-');
        sep='-';
        if (sdm==-1) {
                sdm=f.indexOf('/');
                sma=f.lastIndexOf('/');
                sep='/';
        }
        
        if (sdm==-1 || sma==-1 || sdm==sma){
                return f;
        }
        dd = f.substring(0,sdm);
  
        mm = f.substring(sdm+1,sma);
  
        yyyy = f.substring(sma+1);
  
        dd = (dd.length==2) ? dd : '0'+dd;
  
        mm = (mm.length==2) ? mm : '0'+mm;
		
						
		month1 = mm;
		day1 = dd;
		year1 = yyyy;

		//alert("f1=" + day1+"/" + month1+"/" + year1);

		var ff = fecha2;
		lg=ff.length;
        f="";
        for (i=0;i<lg;i++) {
                ch = ff.charAt(i);
                if (ch!=' ')
                        f+=ch;
        }
        
        sdm=f.indexOf('-');
        sma=f.lastIndexOf('-');
        sep='-';
        if (sdm==-1) {
                sdm=f.indexOf('/');
                sma=f.lastIndexOf('/');
                sep='/';
        }
        
        if (sdm==-1 || sma==-1 || sdm==sma){
                return f;
        }
        dd = f.substring(0,sdm);
  
        mm = f.substring(sdm+1,sma);
  
        yyyy = f.substring(sma+1);
  
        dd = (dd.length==2) ? dd : '0'+dd;
  
        mm = (mm.length==2) ? mm : '0'+mm;
		
						
		month2 = mm;
		day2 = dd;
		year2 = yyyy;

		//alert("f2=" + day2+"/" + month2+"/" + year2);


		if (year1<100){
			if (year1<ventanaFechas){
				year1 = 2000 + parseInt(year1);
			} else {
				year1 = 1900 + parseInt(year1);
			}
		}	 
		if (year2<100){
			if (year2<ventanaFechas){
				year2 = 2000 + parseInt(year2);
			} else {
				year2 = 1900 + parseInt(year2);
			}
		}	 

		//alert("f2=" + day2+"/" + month2+"/" + year2);
		//alert("f1=" + day1+"/" + month1+"/" + year1);
		
		if (year1>year2){
			return "1";
		} else if (year2>year1){
			return "0";
		} else {
			if (month1>month2) {
				return "1";
			} else if (month2>month1) {
				return "0";	
			} else {
				if (day1>day2) {
					return "1";
				} else if (day2>day1) {
					return "0";	
				} else {
					return "1";
				}
			}
		}

	
}



////////////////////////////////////////////////////////////////////////////////////
// Comprobar si es año
////////////////////////////////////////////////////////////////////////////////////

function esAnyo(caja, descripcion) {
	if (!esnumerostr(caja.value))
	{
       alert("O campo " + descripcion + " \ndebe ser preenchido com um Ano válido."); 
       caja.focus();
       return false;
    }
    return true;
}



////////////////////////////////////////////////////////////////////////////////////
// Formateo de Nombres Propios
////////////////////////////////////////////////////////////////////////////////////

function aNombrePropioStr(str, mayusculas) {
//	Si mayusculas es =="" coloca la primera letra en mayúscula y 
//	el resto en minúsculas, con un máximo de un blanco entre 
//	caracteres y sin blancos al principio.
//  Si mayusculas es !="" quita los blancos excepto uno
//  y devuelve todo en mayúsculas.
//  Ejemplo 1:	entrada="   abc   def   ghi jkl", ""
//				salida ="Abc Def Ghi Jkl"
//  Ejemplo 2:	entrada="   abc   def   ghi jkl", "may"
//				salida ="ABC DEF GHI JKL"

	var inicial = "";
	if (str!=""){
		str = str.toLowerCase();
		var indice = str.indexOf(" ",0);
		for (var i = 0; i < str.length; i++){
			if (str.charAt(i)==" ") {
				j = i + 1;
				while (str.charAt(j)==" "){
					j++;
				}
				var cadena = str.substr(0, i + 1);
				cadena += str.charAt(j).toUpperCase();
				cadena += str.substr(j + 1);
				str = cadena;
			}
		}
		if (str.charAt(0)!=" "){
			str = str.charAt(0).toUpperCase() + str.substr(1);
		} else {
			str = str.substr(1);
		}
	}
	if (mayusculas!=""){
		str = str.toUpperCase();
	}
	return str;
}

function aNombrePropio(caja, mayusculas) {
	var strSalida = aNombrePropioStr(caja.value, mayusculas);
	caja.value = strSalida;
}

function confirmar(formulario){
var respuesta=confirm('¿Está seguro/a que desea eliminar este registro?');
if(respuesta){
	formulario.submit();
	return true
}
else{
	return false
}
}

function abrirventana(url,ancho,alto,scroll,_resize,_menu){
	if ( _resize != 'no' ) {
		_resize='yes';
	}
	if (_menu != 'yes' ) _menu = 'no';
	
	var _top=(screen.height - alto) / 2;
	var _left=(screen.width - ancho) / 2;
	popup=window.open(url,'winpopup','resizable='+_resize+',width='+ancho+',height='+alto+',scrollbars='+scroll+',dependent=yes,screenx=1,screeny=1,top='+_top+',left='+_left+',menubar='+_menu);
	popup.resizeTo(ancho,alto);
	popup.moveTo(_top, _left);
	popup.focus();
}


// función para que solamente se pueda marcar un checkbox
	function chequear(objetos, j)
	{
		if (objetos.length)
		{
			for (var i=0;i<objetos.length;i++)
			{
				if (i!=j) objetos[i].checked=false;
			}	
		}		
	}
	
// función para habilitar o desabilitar un control en cliente
	function habilitar(control, valor) {
		if (control.length) {
			for (var i=0;i<control.length;i++) {
				control[i].disabled=!valor;
			}
		} else {
			control.disabled = !valor;
		}
	}

