//**************************************************************************************************
//										validación de formas
//**************************************************************************************************
//valida que el string recibido posea la forma de una dirección de correo
function expCorreo(mail)
{
	var filter = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	if (filter.test(mail))
	{
		return(true)
	}
	else
	{
		return(false)
	}
}

//valida un campo con direcciones de correo múltiples
function validaCorreos(obj)
{	
	correos = obj.value;
	//elimina ; repetidos, y si están al principio o al final de la cadena
	re = /;+/g;
	correos = correos.replace(re,";");
	
	var primer = correos.substring(0,1)
	if (primer == ";")
		correos = correos.substring(1,correos.length)
	
	var ultimo = correos.substring(correos.length-1,correos.length)
	if (ultimo == ";")
		correos = correos.substring(0,correos.length-1)
	
	obj.value= correos;
	if (TrimJS(correos) != '')
	{
		correos = correos.split(";")
		for (x=0;x<correos.length;x++)
		{
			if (!expCorreo(correos[x]))
			{
				alert('Alguna de las direcciones de correo no es válida.')
				obj.focus();
				return(false)
			}
		}
		return(true)
	}
	else
	{
		alert('Debes proporcionar por lo menos una dirección de correo.')
		obj.focus();
		return(false)
	}
}

//valida un campo con una dirección de correo
function validaCorreo(obj,opcional)
{
	mail = TrimJS(obj.value);
	obj.value = mail;
	if (mail == '')
	{
		if (opcional == 1)
		{
			obj.value = '';
			return(true);
		}
		else
		{
			alert('Debes introducir una dirección de correo.');
			obj.focus();
			return (false)
		}
	}

	if (expCorreo(mail))
	{
		return(true);
	}
	else
	{
		alert('Debes introducir una dirección de correo válida.');
		obj.focus();
		return (false);
	}
}

//valida que un campo haya sido llenado
function FilledIn(obj,mensaje)
{
	cadena = obj.value;
	r = TrimJS(cadena)
	if (r != '')
	{
		return(true);
	}
	else
	{
		alert(mensaje)
		obj.focus();
		return(false);
	}
}

//valida que un campo haya sido llenado con un valor numérico
function FilledInNumeric(obj,mensaje)
{
	cadena = obj.value;
	r = TrimJS(cadena)
	if (r != '')
		if (isNaN(r))
		{
			alert(mensaje)
			obj.focus();
			return(false);
		}
		else
			return(true);
	else
	{
		alert(mensaje)
		obj.focus();
		return(false);
	}
}


//verifica que una fecha sea válida
function IsDate(fecha,formato,objDia,objMes) 
{
	switch(formato)
	{
		case 1://dd/mm/aa
			strFormato = "dd/mm/aa";
			intIndMes = 3;
			intIndDia = 1;
			var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$/;
			break;
		case 2://dd/mm/aaaa
			strFormato = "dd/mm/aaaa";
			intIndMes = 3;
			intIndDia = 1;
			var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
			break;
		case 3://mm/dd/aa
			strFormato = "mm/dd/aa";
			intIndMes = 1;
			intIndDia = 3;
			var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$/;
			break;
		case 4://mm/dd/aaaa
			strFormato = "mm/dd/aaaa";
			intIndMes = 1;
			intIndDia = 3;
			var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
			break;
				
	}

	var matchArray = fecha.match(datePat);

    if (matchArray == null) {
        alert("El formato de la fecha debe ser " + strFormato + ".");
        return false;
    }

    month = matchArray[intIndMes];
    day = matchArray[intIndDia];
    year = matchArray[5];

    if (month < 1 || month > 12) { // check month range
        alert("El número de mes debe estar entre 1 and 12.");
		objMes.focus();
        return false;
    }

    if (day < 1 || day > 31) {
        alert("El número de día debe estar entre 1 and 31.");
		objDia.focus();
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        alert("El mes "+month+" no tiene 31 días.")
			objMes.focus();
        return false;
    }

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            alert("Febrero del " + year + " no tiene " + day + " días.");
			objDia.focus();
            return false;
        }
    }
    return true; // date is valid
}

//para validar que la fecha no sea menor al dia en curso
function getFechaAnterior(anio, mes,dia)
{
	var my_date=new Date()
	var my_date2=new Date(anio, mes-1,dia)
	if(my_date>my_date2)
	{
		alert('La fecha no puede ser anterior al día de hoy');
		return(false);
	}
	else
		return(true);
}

//obtiene la edad
function getAge(dateString) {
	var now = new Date();
    var today = new Date(now.getYear(),now.getMonth(),now.getDate());

    var yearNow = now.getYear();
    var monthNow = now.getMonth();
    var dateNow = now.getDate();
	var dob = new Date(	dateString.substring(6,10),
						dateString.substring(3,5)-1,
                        dateString.substring(0,2));
			


	var yearDob = dob.getYear();
    var monthDob = dob.getMonth();
    var dateDob = dob.getDate();

	if (yearDob.toString().length==2)	yearDob = '19' + yearDob.toString();

    yearAge = yearNow - yearDob;
	
    if (monthNow >= monthDob)
        var monthAge = monthNow - monthDob;
    else {
        yearAge--;
        var monthAge = 12 + monthNow -monthDob;
    }

    if (dateNow >= dateDob)
        var dateAge = dateNow - dateDob;
    else {
        monthAge--;
        var dateAge = 31 + dateNow - dateDob;

        if (monthAge < 0) {
            monthAge = 11;
            yearAge--; 
        }
    }

    return yearAge + ',' + monthAge + ',' + dateAge;
}


//valida que un campo haya sido seleccionado
function Selected(obj,mensaje)
{
	cadena = obj.value;
	r = TrimJS(cadena)
	if (r != '')
	{
		return(true);
	}
	else
	{
		alert(mensaje)
		return(false);
	}
}

//**************************************************************************************************
//										funciones para combos dinámicos
//**************************************************************************************************
//llena un combo dinámicamente
//seleccionado corresponde al valor actual seleccionado en el combo
//combo corresponde al objeto que será poblado
//arreglo corresponde al nombre del arreglo del cual se tomarán los nuevos valores; debe estar definido en la página htm que contiene a los combos
//opcion0 corresponde al texto que será desplegado en la opción 0
function llenacombo(seleccionado, combo, arreglo, opcion0)
{
	limpiacombo(combo);
	if (arreglo[seleccionado]!=undefined)
	{
		var longitud = arreglo[seleccionado].length;
		var i = 0;
		combo.options[0] = new Option(opcion0,'0');
		for(i=0; i<longitud; i++)
		{
			ingresaopcion(combo, arreglo[seleccionado][i][1], arreglo[seleccionado][i][0])
		}
		combo.selectedIndex = 0;
	}
}

//agrega una nueva opción a un combo
function ingresaopcion(combo, texto, valor)
{
	combo.options[combo.options.length] = new Option(texto, valor);
}


//elimina todas las opciones existentes en un combo
function limpiacombo(combo)
{
	combo.options.length = 0;
}


//**************************************************************************************************
//							identificación de plataforma y browser
//**************************************************************************************************
function lib_bwcheck()
{ //Browsercheck (needed)
	this.ver=navigator.appVersion.toLowerCase();	
	this.agent=navigator.userAgent.toLowerCase();	
	this.mac=this.agent.indexOf("mac")>-1;
	this.lnx=this.agent.indexOf("konqueror")>-1;
	this.win=this.agent.indexOf("windows")>-1;
	this.unx=this.agent.indexOf("x11")>-1;
	this.so=(this.mac || this.lnx || this.win || this.unx);	
	this.dom=document.getElementById?1:0;
	this.opera5=this.agent.indexOf("opera 5")>-1;
	this.ie6=(this.ver.indexOf("msie 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie5=(this.ver.indexOf("msie 5")>-1 && this.dom && !this.opera5)?1:0;	
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=(this.ie4||this.ie5||this.ie6);		
	this.ns=this.agent.indexOf("netscape");		
	if (this.ns>-1){		
		this.ns7=(this.agent.substring(this.ns, this.agent.length).indexOf("7")>-1)?1:0;			
		this.ns6=(this.agent.substring(this.ns, this.agent.length).indexOf("6")>-1)?1:0;
	}
	this.ns4=(document.layers && !this.dom && this.agent.indexOf("netscape")>-1)?1:0;
	this.ns=(this.ns7||this.ns6||this.ns4);
	this.saf=this.agent.indexOf('safari')>-1;
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.ns7 || this.opera5 || this.saf);
	return this;
}


//**************************************************************************************************
//										funciones varias
//**************************************************************************************************
//elimina espacios en blanco
function TrimJS(cadena)
{
	re = / /g;
	r = cadena.replace(re,"");
	return(r)
}

//lee las variables enviadas por querystring a un htm
function LeeVars()
{
	cadVariables = location.search.substring(1,location.search.length);
	if (cadVariables.length>0)
	{
		arrVariables = cadVariables.split("&");
		for (i=0; i<arrVariables.length; i++)
		{
		  arrVariableActual = arrVariables[i].split("=");
		  if (isNaN(parseFloat(arrVariableActual[1])))
		    eval(arrVariableActual[0]+"='"+unescape(arrVariableActual[1])+"';");
		  else
		    eval(arrVariableActual[0]+"="+arrVariableActual[1]+";");
		}
	}
}

//cambia la clase de un objeto
function cambioClase(obj,clase)
{
	obj.className=clase
}


function ValidaSoloLetras(nombre)
	{
		var checkOK = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ" + "abcdefghijklmnñopqrstuvwxyzáéíóú ";
		eval ('var checkStr = document.frm.' + nombre + '.value');
		var allValid = true;
		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) {
					allValid = false;
					alert("Sólo se permite introducir letras")
					eval('document.frm.' + nombre + '.focus();')
					break;
				}
		}
		return allValid;
	}
