/******************************************************************************
* restringe algun caracter en particular
******************************************************************************/
function restringir(evt, ascii) //event
{
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode; 
	return (key!=ascii);
}

/******************************************************************************
* Funcion que valida si hay espacios
******************************************************************************/
function sin_espacios(valor) //event
{
	return (valor.indexOf(" ") == -1);
}

/******************************************************************************
* Funcion que valida si hay espacios en la posicion inicial
******************************************************************************/
function sin_espacios_inicial(valor)
{    //event	  
	return (valor.charAt(0)!=" ");
}

/******************************************************************************
* Funcion que permite solo numeros
******************************************************************************/
function solo_numeros(evt)
{	
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode;
	return ((key >= 48 && key <= 57) || (key == 8) || ( key == 0));
}

/******************************************************************************
* Funcion que permite solo letras mayusculas y minusculas
******************************************************************************/
function solo_letras(evt)
{	
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode;
	return ((key >= 65 && key <= 90) || (key >= 97 && key <= 122)|| (key == 8)|| ( key == 0));
}
/******************************************************************************
* Funcion que permite solo letras mayusculas y minusculas y numeros
******************************************************************************/
function solo_alfa(evt)
{	
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode;
	return ((key >= 65 && key <= 90) || (key >= 97 && key <= 122)) || (key >= 48 && key <= 57)|| (key == 8)|| ( key == 0);
}



/******************************************************************************
* Funcion que evalua si el ascii pertenece a una letra con tilde
******************************************************************************/
function letras_con_tilde(evt)
{
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode;
	var val = new Array(193,201,205,211,218,225,233,237,243,250);  
	for(var i=0; i< val.length; i++){
		if( key == val[i] )  return true;
	}
	return false;
}

/******************************************************************************
* Funcion que permite solo texto entre lo cual permite:
* Letras mayusculas y minusculas, tildes y espacios.
* No permite caracteres especiales ni numeros
******************************************************************************/
function solo_texto(evt)
{	
	if (solo_letras(evt) || letras_con_tilde(evt)) return true;  
	var nav4 = window.Event ? true : false;
	var key = nav4 ? evt.which : evt.keyCode;
	return (key == 32 || key == 241 || key == 209 || key == 46);  //241 = ñ,  209= Ñ
}

/******************************************************************************
* Funcion que valida un email con formato
******************************************************************************/
function validar_email(valor) 
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
		return true
	}   
	return false;  
}

/******************************************************************************
* Funcion que limita el ingreso por teclado a un tamaño
* definido dentro de un textarea
******************************************************************************/
function limitetxtarea(fld, e, maxlimite) 
{
	var key = '';  // usada		 
	if (fld.value.length >= maxlimite) return false; 	 	 
	return true;
}
/*
*verifica email
*/
function fncCheckEmail(emailStr) {

	if (emailStr.length == 0)
		return true;
		
	var emailPat=/^(.+)@(.+)$/;
	var domainPat=/^(.+)[.](.+)$/;

	var matchArray=emailStr.match(emailPat);
	
	if (matchArray == null)
		return false;
	
	var user=matchArray[1];
	var domain=matchArray[2];
	
	var matchArray2=domain.match(domainPat);

	if (matchArray2 == null)
		return false;
	
	var host=matchArray2[1];
	var domain=matchArray2[2];
	
	if (user=="" || host=="" || domain =="")
		return false;
	
	return true;
}
/*
*funcion SpaceString
*descripcion devuelve si es una cadena de espacios en blanco
*/
function spaceString(elm){
	var lng = elm.length;
	if(lng==1 && !sin_espacios_inicial(elm)){
		return  true;
	}else{
		for (i=0;i<lng;i++){
			if(sin_espacios_inicial(elm)){
				return false;
			}else{
				return SpaceString(elm.substr(i+1,lng));			
			}
		}		
	}
}

/*
*funcion SpecialChar
*descripcion devuelve si la cadena contiene algun caracter especial
*			 diferente de texto, numeros, y todos los imprimibles dede el teclado menos el espacio
*/
function specialChar(elm,espacio,tilde,arroba,enie){
	var lng = elm.length;
	var esp = 33;//inicio de el primer intervalo
	var cod = 193;
	var lm = 63;
	var en_mi=97, en_my=97;
	if(enie){en_mi=241; en_my=209;}
	if(arroba){ lm = 64;}
	if(espacio){ esp = 32;}
	for (i=0;i<lng;i++){
		key = elm.charCodeAt(i);
		if(tilde){cod = key;}else{cod = 97;}
		if(!((key >= esp && key <= lm)|| (key >= 65 && key <= 91) || (key==93)|| (key==10) ||(key==92) || (key==95) || (key==241) || (key==209) || (key==en_mi)||(key==en_my) || (key >= 97 && key <= 125)|| (charTilde(cod)) ) ){
			return true;
		}
	}
	
	return false;
}

/*
*
*/
function prueba(elm){
	var lng = elm.length;
	for (i=0;i<lng;i++){
		key = elm.charCodeAt(i);
		alert(key);
	}
}
/*
*funcion alfaChar
*descripcion devuelve si la cadena solo tiene caracteres alfa numericos
*			 si espacio es igual verdadero permitira espacio tambien
*/
function alfaChar(elm,espacio,tilde,enie){
	var lng = elm.length;
	var esp = 97;//o cualquiera permitido
	var cod = 193;
	var en_mi=97, en_my=97;
	if(espacio){esp = 32;}
	if(enie){en_mi=241; en_my=209;}
	if(lng==0){
		return false;
	}else{
		for (i=0;i<lng;i++){
			key = elm.charCodeAt(i);
			if(tilde){cod = key;}else{cod = 97;}
			if( !( (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key>=97 && key<=122) || (key==esp) || (charTilde(cod)) || (key==en_mi)||(key==en_my) ) ){		
				return false;
			}
		}
	}
	return true;
}

/*
*funcion charNum
*descripcion devuelve si la cadena solo tiene caracteres numericos
*			 si espacio es igual verdadero permitira espacio tambien
*/
function charNum(elm,espacio){
	var lng = elm.length;
	var esp = 97;//o cualquiera permitido
	if(espacio){esp = 32;}
	if(lng==0){
		return false;
	}else{
		for (i=0;i<lng;i++){
			key = elm.charCodeAt(i);
			if( !( (key >= 48 && key <= 57) || (key==esp) ) ){		
				//alert(key);
				return false;
			}
		}
	}
	return true;
}

function hayNum(cad){
	var num = /\d/;
	return num.test(cad);
}

function hayLetra(cad){
	var num = /\D/;
	return num.test(cad);
}

/*
*funcion charText
*descripcion devuelve si la cadena solo tiene caracteres (letras a-z o A-Z)
*			 si espacio es igual verdadero permitira espacio tambien, y tilde de igual manera
*/
function charText(elm,espacio,tilde){
	var lng = elm.length;
	var esp = 97;//o cualquiera permitido
	var cod = 193;
	if(espacio){esp = 32;}
	if(lng==0){
		return false;
	}else{
		for (i=0;i<lng;i++){
			key = elm.charCodeAt(i);
			if(tilde){cod = key;}else{cod = 97;}
			if( !( (key >= 65 && key <= 90) || (key>=97 && key<=122) || (key==esp) || (charTilde(cod)) ) ){		
				//alert(key);
				return false;
			}
		}
	}
	return true;
}
/*
*funcion charTilde
*descripcion evalua si el caracter es una letra con tilde
*/
function charTilde(code){

	var val = new Array(193,201,205,211,218,225,233,237,243,250);  
	for(var i=0; i< val.length; i++){
		if( code == val[i] )  return true;
	}
	return false;
}

/*
*funcion espacio_final
*descripcion devuelve si hay espacios al final de la cadena
*/
function espacio_final(elm){    
	var lng = elm.length;
	if(lng==0){
		return false;
	}
	return (elm.charAt(lng-1)==" ");
	
}
/*
*funcion espacio_inicial
*descripcion devuelve si hay espacios al inicio de la cadena
*/
function espacio_inicial(elm){    
	var lng = elm.length;
	if(lng==0){
		return false;
	}
	return (elm.charAt(0)==" ");
	
}

/*
*funcion lengSpaceNess
*descripcion devuelve el tamaño de la cadena sin contar espacios al
			 inicio y al final de esta
*/
function lengSpaceNess(elm){
	var lng = elm.length;
	if( ((lng==1) && espacio_inicial(elm))|| (lng==0) ){
		//alert(0);
		return 0;
	}
	if(espacio_inicial(elm)){
		lengSpaceNess(elm.substr(1,lng));
	}else{
		if(espacio_final(elm)){
			lengSpaceNess(elm.substr(0,lng-1));
		}else{
			//alert(lng);
			return lng;		
		}
	}
}
/*
*verifica que se haya seleccionado una fecha y que la persona 
*sea mayor de 10 años
*/
function fecha(frm){
	var ind = frm.dia.selectedIndex;
	if(ind==0){
		alert('Debe seleccionar su dia de nacimiento!');
		frm.dia.focus();
		return false;		
	}
	var ind = frm.mes.selectedIndex;
	if(ind==0){
		alert('Debe seleccionar su mes de nacimiento!');
		frm.mes.focus();
		return false;		
	}
	var ind = frm.anio.value;
	if(ind.length<4 || !sin_espacios(ind)){
		alert('Debe ingresar un año valido de nacimiento!');
		frm.anio.focus();
		return false;		
	}
	var fech = new Date();
	var ano = fech.getFullYear();
	if(parseInt(ind,10)>ano-10){
		alert('Debe ser mayor de 10 años de edad para registrarse!');
		frm.anio.focus();
		return false;		
	}
	return true;	
}


/*
*funcion que valida el contenido de un formulario
*/
function fncCheckFormRegistro(form) {

	var fields = new Array(); /* Arreglo de campos obligatorios del formulario */
	var frm = new Object();
	frm = fields[0];
	var params = fncCheckFormRegistro.arguments; /* Arreglo de parametros de la funcion */
	for (var i=1; i<params.length; i++) {
		fields[i-1] = form.elements[params[i]];
	}
	
	for (var i=0; i<fields.length; i++) {
		var cad = fields[i].name;
		if( cad!="email" && cad!="login" && cad!="password" && cad!="nombre" && cad!="nit" && cad!="representante" && cad!="contacto" && cad!="email2" && cad!="telefono_fijo"){
			if (( fields[i].value.length>0 )&& ( espacio_inicial(fields[i].value) || espacio_final(fields[i].value) || specialChar(fields[i].value,true,true,true,true)) ) {
				alert("Si ingresa El campo '"+(fields[i].name).toUpperCase()+"' del formulario!\nEste campo no debe iniciar o terminar con espacios en blanco, o contener caracteres diferentes a letras y números!.");
				fields[i].focus();
				return false;
			}			
			
		}else{
			if (fields[i].name=="email") { 
				if (!validar_email(fields[i].value)) {
					alert("Email Invalido !");
					fields[i].focus();
					return false;
				}
			}
			if (fields[i].name=="email2") { 
				if(fields[i].value.length>0){
					if (!validar_email(fields[i].value)) {
						alert("Email Invalido !");
						fields[i].focus();
						return false;
					}
				}
			}
			
			/*if( ( (fields[i].name=="nombre")||(fields[i].name=="representante")||(fields[i].name=="contacto")) && ( !(lengSpaceNess(fields[i].value) ) || specialChar(fields[i].value,true,true,true,true) || hayNum(fields[i].value))  ){
				//alert("El campo '"+(fields[i].name).toUpperCase()+"' no debe de empezar o terminar con espacios en blanco, o contener caracteres diferentes a letras!");
				fields[i].focus();
				return false;			
			}
			if( (fields[i].name=="nit") &&  ( !sin_espacios(fields[i].value) || specialChar(fields[i].value,false,false,true,true) || !(lengSpaceNess(fields[i].value)) || hayLetra(fields[i].value) || (lengSpaceNess(fields[i].value)<3 ) ) ) {
				alert("El campo NIT no debe de contener caracteres diferentes a números y debe de tener minimo 10 cifras!");
				fields[i].focus();
				return false;
			}*/
			if( (fields[i].name=="login") && ( !sin_espacios(fields[i].value) || !alfaChar(fields[i].value,false,false,false) )  ){
				alert("El campo login no debe de contener espacios en blanco o caracteres diferentes a letras y números!");
				fields[i].focus();
				return false;
			}
			if( (fields[i].name=="login") && (lengSpaceNess(fields[i].value)<3 ) ){
				alert("El campo login debe de contener minimo 3 caracteres!");
				fields[i].focus();
				return false;			
			}
			/*if( (fields[i].name=="telefono_fijo") && (lengSpaceNess(fields[i].value)<7 ) ){
				alert("El campo TELEFONO es obligatorio!");
				fields[i].focus();
				return false;
			}*/
			if(  (fields[i].name=="password") &&  ( !sin_espacios(fields[i].value) || specialChar(fields[i].value,false,false,true,true) || !(lengSpaceNess(fields[i].value)) ) ) {
				alert("El campo PASSWORD no debe de contener espacios en blanco o caracteres diferentes a los imprimibles directamente por el teclado!");
				fields[i].focus();
				return false;			
			}
			if( (fields[i].name=="password") && (lengSpaceNess(fields[i].value)<3 ) ){
				alert("El campo password debe de contener minimo 3 caracteres!");
				fields[i].focus();
				return false;			
			}			

			if(fields.length>3){
				var m=i+1;
				if((fields[i].name=="password") && (fields[i].value != fields[m].value)){
					alert("El campo PASSWORD y su confirmación no coinciden!");
					fields[i].focus();
					return false;			
				}
			}
		}//1er else
	}
	return true;
}



/*
*funcion
*/
/*
*funcion que valida el contenido de un formulario
*/
function fncCheckFormContacto(form) {

	var fields = new Array(); /* Arreglo de campos obligatorios del formulario */
	var params = fncCheckFormContacto.arguments; /* Arreglo de parametros de la funcion */
	for (var i=1; i<params.length; i++) {
		fields[i-1] = form.elements[params[i]];
	}
	
	for (var i=0; i<fields.length; i++) {
		if (fields[i].name=="email") { 
			if (!validar_email(fields[i].value)) {
				alert("Email Invalido !");
				fields[i].focus();
				return false;
			}
		}
		if( ( (fields[i].name=="nombre")||(fields[i].name=="mensaje")||(fields[i].name=="asunto")||(fields[i].name=="ciudad" && fields[i].value!="")||(fields[i].name=="telefono" && fields[i].value!="") ) && ( !(lengSpaceNess(fields[i].value) ) || specialChar(fields[i].value,true,true,true,true) )  ){
			alert("El campo '"+(fields[i].name).toUpperCase()+"' no debe de empezar o terminar con espacios en blanco, o caracteres diferentes a los imprimibles directamente por el teclado!");
			fields[i].focus();
			return false;
		}
	}
	return true;
}


/*
*funcion que valida el contenido de un formulario
*/
function fncCheckFormGeneral(form) {

	var fields = new Array(); /* Arreglo de campos obligatorios del formulario */
	var params = fncCheckFormGeneral.arguments; /* Arreglo de parametros de la funcion */
	for (var i=1; i<params.length; i++) {
		fields[i-1] = form.elements[params[i]];
	}
	
	for (var i=0; i<fields.length; i++) {
		if ((fields[i].name=="email") && (fields[i].value!="")) { 
			if (!validar_email(fields[i].value)) {
				alert("Email Invalido !");
				fields[i].focus();
				return false;
			}
		} 
		if (fields[i].value=="") {
			alert("El campo '"+(fields[i].name).toUpperCase()+"' del formulario es necesario!");
			fields[i].focus();
			return false;
		}
	}
	
	return true;
}
 
 
/*devuelve la cadena original cambiada por el valor reemplazar
*en lugar del buscado
*/
function StringReplace( buscar, reemplazar, original ) { 
	var cadena = original;
	var pos = 0;
	// Se validan los parametros de entrada
	if (buscar == "") return cadena;	
	var len = buscar.length;     //Obtiene la longitud de la cadena que esta buscando
	var limit = cadena.length;   //Obtiene la longitud de la cadena que va a reemplazar
	
	pos = cadena.indexOf(buscar);
	while (pos != -1) { 
		preString = cadena.substring(0, pos);
		postString = cadena.substring(pos+len, cadena.length);
		cadena = preString + reemplazar + postString;
		pos = cadena.indexOf(buscar);		
	} 	
	return cadena;	
}
/*
*funcion concatPreferencias
*descripcion concatena todas las selecciones del usuario en una sola cadena
*/
function concatPreferencias(general){
	if(!general){
		var prefer="1-General";
	}else{
		var prefer="";
	}
	var tmp;
	var tmp2;
	var cant=0;
	var nm ="";
	var j=0;
	for (i = 0; i < document.frmNewsletter.elements.length; i++){
		  nm =document.frmNewsletter.elements[i].name.substr(0,5);
		if(document.frmNewsletter.elements[i].type=="checkbox" && document.frmNewsletter.elements[i].checked && nm=="tema_"){
			tmp = document.frmNewsletter.elements[i].value;
			if(j==0){
				if(general){
					prefer += tmp;
				}else{
					prefer+="[|]"+tmp;
				}
				j++;
			}
			else{
				prefer+="[|]"+tmp;
			}
			cant++;
		}
	}
	if(cant==0 && (general)){
		return false;
	}else{
		return prefer;
	}
}
/*
*funcion concatPreferenciasUser
*descripcion concatena todas las selecciones del usuario en una sola cadena
* 			 en el formulario de adicionar usuario completo
*/
function concatPreferenciasUser(general,frm){
	if(!general){
		var prefer="1-General";
	}else{
		var prefer="";
	}
	var tmp;
	var tmp2;
	var cant=0;
	var nm ="";
	var j=0;
	for (i = 0; i < frm.elements.length; i++){
		  nm =frm.elements[i].name.substr(0,5);
		if(frm.elements[i].type=="checkbox" && frm.elements[i].checked && nm=="tema_"){
			tmp = frm.elements[i].value;
			if(j==0){
				if(general){
					prefer += tmp;
				}else{
					prefer+="[|]"+tmp;
				}
				j++;
			}
			else{
				prefer+="[|]"+tmp;
			}
			cant++;
		}
	}
	if(cant==0 && (general)){
		return false;
	}else{
		return prefer;
	}
}

/*
*funcion fncCheckFormNews()
*		 general = false,true
*		  			false indica que NO se incluyo el tema general en el listado
*					true indica que SE incluyo el tema general en el listado, por lo cual 
*					ahi que solicitar que se escoja un tema de la lista
*/
function fncCheckFormNews(general){
	var cadena = document.frmNewsletter.email.value;
	if (!validar_email(cadena)) {
		alert("Email Invalido !");
		document.frmNewsletter.email.focus();
		return false;
	}		
	var tm = concatPreferencias(general);
	document.frmNewsletter.temas.value = tm
	if(general){
		if(!tm){
			alert("Debe seleccionar por lo menos un tema de interes!");
			return false;
		}
	}
	return true;
}
/*
*funcion fncCheckFormNewsUser()
*/
function fncCheckFormNewsUser(general,frm){
	var cadena = frm.email.value;
	if (!validar_email(cadena)) {
		alert("Email Invalido !");
		frm.email.focus();
		return false;
	}		
	var tm = concatPreferenciasUser(general,frm);
	frm.temas.value = tm
	if(general){
		if(!tm){
			alert("Debe seleccionar por lo menos un tema de interes!");
			return false;
		}
	}
	return true;
}