var cont_editores; /* variable global para saber si hay editores tinyMCE */
var pass='';
/**
	*	function trim(str)
	* [str] contiene la cadena de origen.
	*
	*	Devuelve la cadena sin espacios por los flancos, es decir, quita los espacios
	*	que encuentre al inicio y final de la cadena. Si la cadena contiene solo espacios
	*	devolvera la cadena vacia.
**/
function trim(str) {
	return str.replace(/(^\s+)|(\s+$)/g, '');
}

/** function es_numerico(val)
	*	[val] valor que queremos saber si es o no numerico
	*
	* Determina si el valor recibido es numerico o no.
**/
function es_numerico(val) {
	return ( ! isNaN(val) );
}

function es_telefono(telefono) {
	if(telefono == '') return true;	
	return telefono.match(/^[0-9]{7,9}$/);
}

function es_cif(cif) {
	if(cif == '') return true;
	par = 0;
	non = 0;
	letras = "ABCDEFGHKLMNPQS";
	let = cif.charAt(0);

	if (cif.length!=9) {
		return false; // El Cif debe tener 9 digitos
	}
	if (letras.indexOf(let.toUpperCase())==-1) {
		return false; // El comienzo del Cif no es valido
	}
	for (zz=2;zz<8;zz+=2) {
		par = par+parseInt(cif.charAt(zz));
	}
	for (zz=1;zz<9;zz+=2) {
		nn = 2*parseInt(cif.charAt(zz));
		if (nn > 9) nn = 1+(nn-10);
		non = non+nn;
	}
	parcial = par + non;
	control = (10 - ( parcial % 10));
	if (control==10) control=0;
	if (control!=cif.charAt(8)) {
		return false; // El Cif no es valido
	}
	return true; // El Cif es valido
}

function es_nif(nif) {
	if(nif == '') return true;
	dni=nif.substring(0,nif.length-1);
	let=nif.charAt(nif.length-1);
	if(!isNaN(let)) {
		return false; // Falta la letra
	} else {
		cadena = 'TRWAGMYFPDXBNJZSQVHLCKET';
		posicion = dni % 23;
		letra = cadena.substring(posicion,posicion+1);
		if(letra!=let.toUpperCase()) {
			return false; // Nif no valido
		}
	}
	return true; // Nif valido
}

function es_email(email) {
	if(email == '') return true;
	return email.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/);
}

function es_cp(cp) {
	if(cp == '') return true;
	return cp.match(/^[0-9]{5}$/);
}

function es_url(miurl) {
	if(miurl == '') return true;
	return miurl.match(/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\’\/\\\+&amp;%\$#_]*)?$/);
}

function es_fecha(fecha) {
	if(fecha == '') return true;
	if( ! fecha.match(/^(\d{2}\/\d{2}\/\d{4})$/)
	
	 ) return false; // formato incorrecto
	dia = parseInt(fecha.substring(0,2),10);
	mes = parseInt(fecha.substring(3,5),10) - 1;
	ano = parseInt(fecha.substring(6),10);
	f_date = new Date(ano,mes,dia);
	if(f_date.getFullYear()!=ano || f_date.getMonth()!=mes || f_date.getDate()!=dia) return false;
	return true;
}

/** function set_msg_err(campo, mensaje)
	*	[campo] representa el campo del formulario.
	*	[mensaje] es el mensaje de error que se desea visualizar.
	*
	*	La funcion muestra el mensaje en una capa cuyo id sera
	*	msg_err_ y el nombre asociado al campo. Para quitar el
	*	mensaje de error basta con llamar a esta funcion pasandole
	*	la cadena vacia como mensaje.
**/
function set_msg_err(campo, mensaje) {
	arrClases = campo.className.split(' ');
	if(arrClases.toString().indexOf('form_prensa')==-1) { //esto es, no es de prensa	
		if( document.getElementById( 'msg_err_' + campo.name ) ) {
			document.getElementById( 'msg_err_' + campo.name ).innerHTML = mensaje;
		}
		if(mensaje == '' && $( 'msg_err_' + campo.name )!=null) {$( 'msg_err_' + campo.name ).setStyle("visibility","hidden");}
		else {
			if($( 'msg_err_' + campo.name )!=null) {
				$( 'msg_err_' + campo.name ).setStyle("visibility","visible");
			}
		}
	}
	else {
		if( document.getElementById( 'msg_err_' + campo.name + '_p' ) ) {
			document.getElementById( 'msg_err_' + campo.name + '_p').innerHTML = mensaje;
		}
		if(mensaje == '' && $( 'msg_err_' + campo.name + '_p' )!=null) {$( 'msg_err_' + campo.name + '_p').setStyle("visibility","hidden");}
		else {
			if($( 'msg_err_' + campo.name + '_p')!=null) {
				$( 'msg_err_' + campo.name + '_p').setStyle("visibility","visible");
			}
		}
	}
}

/** function es_correcto(campo)
	*	[campo] representa el campo del formulario.
	*
	* Determina si el campo es correcto. Para ello aplica diversas validaciones
	*	en funcion de los diversos valores que presente en su className.
**/
function es_correcto(campo) {	
	arrClases = campo.className.split(' ');
	/* Este método es del editor de texto, lo que hacemos es forzarlo a que guarde el valor que contiene en el campo del textarea antes de ser enviado */
	if(arrClases.toString().indexOf('editor_undanet') != -1) {
		tinyMCE.getInstanceById(campo.id).save();
		cont_editores++;
	}
	if(arrClases.indexOf('trim') != -1) {
		campo.value = trim(campo.value);
	}
	if(arrClases.indexOf('obligatorio') != -1) {
		if( campo.value == '' ) {			
			set_msg_err(campo,'Error: el campo es obligatorio.');
			return false;
		}
	}
	if(arrClases.indexOf('telefono')!=-1){
		if( ! es_telefono(campo.value) ) {
			set_msg_err(campo,'Error: el teléfono no es correcto.');
			return false;
		}
    }		
	if(arrClases.indexOf('numerico') != -1) {
		if( ! es_numerico(campo.value) ) {
			set_msg_err(campo,'Error: el campo debe ser numerico.');
			return false;
		}
	}
	if(arrClases.indexOf('email') != -1) {
		if( ! es_email(campo.value) ) {
			set_msg_err(campo,'Error: el email no es correcto.');
			return false;
		}
	}
	if(arrClases.indexOf('url') != -1) {
		if( ! es_url(campo.value) ) {
			set_msg_err(campo,'Error: la url no es correcta.');
			return false;
		}
	}
	if(arrClases.indexOf('fecha') != -1) {
		if( ! es_fecha(campo.value) ) {
			set_msg_err(campo,'Error: la fecha no es correcta.');
			return false;
		}
	}
	if(arrClases.indexOf('nif') != -1) {
		if( ! es_nif(campo.value) ) {
			set_msg_err(campo,'Error: el nif no es correcto.');
			return false;
		}
	}
	if(arrClases.indexOf('cif') != -1) {
		if( ! es_cif(campo.value) ) {
			set_msg_err(campo,'Error: el cif no es correcto.');
			return false;
		}
	}
	if(arrClases.indexOf('nif-cif') != -1) {
		if( (! es_nif(campo.value)) && (! es_cif(campo.value)) ) {
			set_msg_err(campo,'Error: el nif/cif no es correcto.');
			return false;
		}
	}
	if(arrClases.indexOf('cp') != -1) {
		if( (! es_cp(campo.value)) ) {
			set_msg_err(campo,'Error: el código postal no es correcto.');
			return false;
		}
	}
	
	if(arrClases.indexOf('igual') != -1) {
		if(pass=='') {
			pass = campo.value;
		}
		else {			
			if (campo.value != pass) {
				set_msg_err(campo,'Error: debe repetir el password.');
				pass='';
				return false;
			}
		}
		
	}
	return true;
}

function validar_campo(campo) {
	if( es_correcto(campo) ) { set_msg_err(campo,''); }
}

/** function validar_formulario_activo(formulario)
	*	[formulario] es el formulario que queremos validar.
	*
	* Esta funcion valida el formulario y devuelve true en caso de que se pueda enviar.
	*	Si encuentra errores muestra los mensajes de error en las capas correspondientes.
	*	Para ello recorre todos los campos y les aplica la funcion es_correcto
	*	uno a uno. Para los campos correctos limpia el posible mensaje de error que
	*	tubiera previamente asociado.
**/
function validar_formulario(formulario) {
	var sin_errores = true;	
	for(i=0 ; i < formulario.elements.length ; ++i) {
		if( es_correcto(formulario.elements[i]) ) {
			set_msg_err(formulario.elements[i],'');
		} else {
			sin_errores = false;
		}
	}

	return sin_errores;
}

function submit_formulario(formulario) {
	cont_editores = 0;
	if(validar_formulario(formulario)) {
		if(cont_editores>0) tinyMCE.triggerSave();
		formulario.submit();
	}
}

function ir_a_validado(id_j_frame,id_formulario,formulario,run_js,codificacion){

	if(validar_formulario(formulario)==true) {
		if(formulario.name=="frm_prensa")
		{
			//ñapaza del pepe
			//asignamos el tipo de usuario despues de las validaciones 
			//en funcion del tipo de medio
			formulario.c_tipo_usuario_id.value=formulario.frm_tipomedio_prensa.value;
		}
		ir_a_formulario(id_j_frame,id_formulario,run_js,codificacion);
	}
}

function seleccionar_todos_sinformulario(class_name,valor) {
 	$$('.'+class_name).each( function(casilla) {
									casilla.checked= valor;
								} );
}
function obtener_seleccionados_sinformulario(class_name) {
	seleccionados='';
	nexo='';
 	$$('.'+class_name).each( function(casilla) {
									if (casilla.checked) {
										seleccionados += nexo+casilla.value;
										nexo='+';
									}
								} );
	return seleccionados;
}
function seguro_borrar_seleccion_sinformulario(id_j_frame,class_name,servicio,parametros) {
	seleccionados=obtener_seleccionados_sinformulario(class_name);
	if (seleccionados=='') {
		show_error('Debe seleccionar algun registro');
	}else if (confirm('Desea borrar los registros seleccionados')){
		if(parametros==null){parametros='';}
		ir_a(id_j_frame, servicio,'&check='+seleccionados+parametros);
	}
}

function clear_all (formulario) {
	for(i=0 ; i < formulario.elements.length ; ++i) {		
		if(document.getElementById('msg_err_' + formulario.elements[i].name)!=null)
		{
			document.getElementById('msg_err_' + formulario.elements[i].name).setStyle("visibility","hidden");
		}	
	}
	formulario.reset();	
}