/*
campo de caracter obligatorio, no puede tener valor nulo
se llama en el envio del formulario
#por hacer# verificar para checkbox y radio
*/
function valObligatorio(objId, text){
	//cssValorObjeto('comunes.css', objId);
	if (objId.value != '') {
		fTagError(objId, 0);
		return true;
	}
	fTagError(objId, 1);
	alert('"' + text + '" no puede estar vacío.');
	return false;
}

/*version para radio buttons*/
function valObligatorioRadio(objName, text){
    var cnt = -1;
    for(var i=objName.length-1; i > -1; i--){
        if(objName[i].checked){cnt = i; i = -1;}
    }
    if(cnt > -1){
		fTagError(objName[0].parentNode, 0);
    	return true;
    }
    else{
		fTagError(objName[0].parentNode, 1);
		alert('En "' + text + '" debe marcar alguna opción.');
    	return false;
    }
}

/*
Copyrigth: Peter-Paul Koch (http://www.quirksmode.org/dom/maxlength.html)
maxlength para textareas
se usa poniendo maxlength="1234" en los "textarea" que interese
*/
function setMaxLength() {
	var x = document.getElementsByTagName('textarea');
	var counter = document.createElement('div');
	counter.className = 'counter';
	for (var i=0;i<x.length;i++) {
		if (x[i].getAttribute('maxlength')) {
			//var counterClone = counter.cloneNode(true);
			//counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			//x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			//x[i].relatedElement = counterClone.getElementsByTagName('span')[0];
			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();
		}
	}
}
function checkMaxLength(){
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	if (currentLength > maxLength) {
		this.value = this.value.substring(0, maxLength)
	}
		/*this.relatedElement.className = 'toomuch';
	else
		this.relatedElement.className = '';
	this.relatedElement.firstChild.nodeValue = currentLength;*/
	// not innerHTML
}
window.onload = setMaxLength; //carga en inicio y ejecuta el codigo sobre todos los "textarea" en la pagina

/*
maxlength para textareas
llamar con: onkeypress="return tamMaxTextArea(this, 1000);"
function tamMaxTextArea(objId, maxlength){
	alert(objId.value.length);
	return (objId.value.length <= maxlength);
}
*/


/*
fuerza la entrada de solo numeros y coma decimal
llamar con: onkeypress="return valTeclasNumeros(event);"
*/
function valTeclasNumeros(objEvent){
	var objId = objEvent.target || objEvent.srcElement; //obtiene el objeto que ha generado este evento

	var charCode;
	if (navigator.appName == "Netscape")
		charCode = objEvent.which;
	else charCode = objEvent.keyCode;
	//permite la entrada de numeros y punto decimal
	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
		return false; //alert("no es un numero")
	else {
		if(objId.value.indexOf('.') != -1 && charCode == 46) return false;
		return true;
	}
}

/*
validacion de numericos, con rango entre "menor" y "mayor" (opcionales ambos)
*/
function valNumeros(objId, menor, mayor){
	if(objId.value != ''){
		if(typeof menor == 'undefined')
			menor = 0;
		if(typeof mayor == 'undefined')
			mayor = Math.pow(10, objId.maxLength);
	
		num = parseInt(objId.value);
		if((num >= menor && num <= mayor) || objId.value == ''){
			fTagError(objId, 0);
			return true;
		}
		else{
			alert('Rango entre ' + menor + ' y ' + mayor);
			fTagError(objId, 1);
			return false;
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
fuerza la entrada de solo numeros y coma decimal
llamar con: onkeypress="return valTeclasFechas(event);"
*/
function valTeclasFechas(objEvent){
	var objId = objEvent.target || objEvent.srcElement; //obtiene el objeto que ha generado este evento
	var charCode;
	if (navigator.appName == "Netscape")
		charCode = objEvent.which;
	else charCode = objEvent.keyCode;
	//permite la entrada de numeros, espacio, dos puntos y barra
	if (charCode > 31 && (charCode < 48 || charCode > 58) && charCode != 32 && charCode != 47)
		return false; //alert("No son caracteres de fecha")
	else {
		if(objId.value.indexOf(' ') != -1 && charCode == 32) return false;
		return true;
	}
}

/*
validacion de campos de fechas
comprueba que una fecha introducida es valida y la convierte al formato aaaa/mm/dd hh:mm:ss; no distingue formato europeo de americano, puede dar errores en esa confusion
*/
function valFechas(objId){
	if (objId.value != ''){
		objId.value = objId.value.replace(/-/g, '/');
		var fechaInt = Date.parse(objId.value);
		if (!isNaN(fechaInt)){
			var fecha = new Date();
			fecha.setTime(fechaInt);
			if (fecha != 'Invalid Date') {
				//objId.value = (fecha.getFullYear() + '/' + (fecha.getMonth() + 1) + '/' + fecha.getDate() + ' ' + fecha.getHours() + ':' + fecha.getMinutes() + ':' + fecha.getSeconds());
				fTagError(objId, 0);
				return true;
			}
		}
		//fecha incorrecta
		fTagError(objId, 1);
		alert('Fecha incorrecta.\nFormato recomendado para las fechas: aaaa/mm/dd hh:mm:ss');
		return false;
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos e-mail
*/
function valEmail(objId){
	if (objId.value != '') {
		var filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (filtro.test(objId.value)) {
			fTagError(objId, 0);
			return true; //e-mail valido
		}
		else {
			alert('e-mail no válido');
			fTagError(objId, 1);
			return false; //e-mail no valido
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos URL
*/
function valUrl(objId){
	if (objId.value != '') {
		var filtro = /(((ht|f)tp(s?):\/\/)|(www\.[^ [\]()\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ [\](),;"'<>\n\r\t]+)([^. [\](),;"'<>\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})/;
		if (filtro.test(objId.value)) {
			fTagError(objId, 0);
			return true; //url valida
		}
		else {
			alert('URL no válida.\nFormato recomendado: "http://dominio.tld"');
			fTagError(objId, 1);
			return false; //url no valida
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos NIF/NIE
 NIF sin espacios, 10 caracteres (NIE) maximo
*/
function valNif(objId){
	objId.value = objId.value.toUpperCase();

	dni = objId.value.substr(0, objId.value.length-1); //NIF
	if(objId.value.charAt(0) == 'X') dni = dni.substr(1); //NIE

	letra = objId.value.charAt(objId.value.length-1);

	if (dni.length == 8 && isNaN(letra)) {
		var control = 'TRWAGMYFPDXBNJZSQVHLCKE';
		pos = dni % 23;
		control = control.charAt(pos);
		if(control==letra){
			//nif correcto
			fTagError(objId, 0);
			return true;
		}
	}

	if(objId.value.charAt(0) == 'X') alert('NIE incorrecto'); //NIE
	else alert('NIF incorrecto'); //NIF
	fTagError(objId, 1);
	return false; //nif incorrecto
}

/*
validacion de campos password
*/
function valClave(objId, objId2){
	if (objId.value != '' || objId2.value != '') {
		if (objId.value == objId2.value) {
			fTagError(objId, 0);
			fTagError(objId2, 0);
			return true; //url valida
		}
		else {
			alert('Compruebe que ha escrito la misma clave en ambas casillas');
			fTagError(objId, 1);
			fTagError(objId2, 1);
			return false; //url no valida
		}
	}

	fTagError(objId, 0);
	fTagError(objId2, 0);
	return true;
}

//marca los campos con error
//"marca" a 1 es error, a 0 correcto
function fTagError(objId, marca){
	if(!marca) marca = 0

	if(marca) objId.style.border = '1px solid red';
	else objId.style.border = document.getElementsByTagName(objId.parentNode.parentNode.tagName)[0].style.border;

	/*if(marca) objId.parentNode.style.color = 'red';
	else objId.parentNode.style.color = document.getElementsByTagName(objId.parentNode.parentNode.tagName)[0].style.color;*/
}

//limpiar los elementos del formulario
function fLimpiaForm(idFormulario){
	var idForm = document.getElementById(idFormulario).elements;
	for(i=0;i<idForm.length;i++){
		switch(idForm[i].type){
			case 'text':
			case 'password':
			case 'textarea':
				idForm[i].value = '';
				break;
			case 'select-one':
				idForm[i].selectedIndex = 0;
				break;
			case 'checkbox':
				idForm[i].checked = false;
				break;
			default:
				//alert(idForm[i].type);
		}
	}
	return true;
}

/*
 * corrige ancho de select en IE
 * 
 * obj -> objeto select
 * expandir -> bool, true expande select, false colapsa
 */
var nStartWidth = new Array();
function fCorrSelect(obj, expandir){
	if(!document.all) return true; //solo para IE

	//if(typeof nStartWidth != 'number') var nStartWidth = obj.offsetWidth;
	if(typeof nStartWidth[obj.name] != 'number') nStartWidth[obj.name] = obj.offsetWidth;
	var nEndWidth;

	if(expandir){
		var sDisplay = obj.parentNode.style.display.toLowerCase();

		//para no perder ancho y alto original
		var sTAnc = obj.parentNode.offsetWidth + 'px';
		var sTAlt = obj.parentNode.offsetHeight + 'px';

		//if (sDisplay == '' || sDisplay == 'inline' || sDisplay == 'inline-block'){
		if(sDisplay == '' || sDisplay == 'inline'){
			obj.parentNode.style.display = 'inline';
			obj.parentNode.style.width = sTAnc;
			obj.parentNode.style.height = sTAlt;
			//obj.parentNode.style.marginBottom = obj.style.marginBottom + 'px';
			obj.parentNode.style.position = 'relative';
			obj.style.position = 'absolute';
			obj.style.top = 0;
			obj.style.left = 0;
		}
		
		obj.style.width = 'auto';
		nEndWidth  = obj.offsetWidth;

		//si no es necesario expandir el ancho (comportamiento extraño en IE6 si descomentado)
		/*if(nEndWidth <= nStartWidth[obj.name]){
			//obj.style.width = nStartWidth[obj.name] + 'px';
		}*/
	}
	else{
		obj.style.width = nStartWidth[obj.name] + 'px';
	}
}

/***********/
/*no usadas*/
/***********/

/*
longitud maxima de un campo (input text, input password)
parametro "longitud" opcional
llamar con: onkeypress="return tamMax(this);"; si se llama a otra funcion en este evento, llamar a esta funcion desde esa funcion, no desde el evento
*/
function tamMax(objId, longitud){
	if(typeof longitud == 'undefined')
		objId.maxLength = 255;
	else
		objId.maxLength = longitud;

	return true;
}

/*version para checkbox*/
function valObligatorioCheck(objId, text){
	if (objId.checked) {
		fTagError(objId, 0);
		return true;
	}
	fTagError(objId, 1);
	alert('"' + text + '" no puede estar vacío.');
	return false;
}

/*
#por hacer#
busca el valor de un elemento html
*/
function cssValorObjeto(hojaCss, objId) {
	var cssRules;
	if (document.all) {
		cssRules = 'rules';
	}
	else if (document.getElementById) {
		cssRules = 'cssRules';
	}
	for(var i = 0; i < document.styleSheets.length; i++){
		for(var j = 0; j < document.styleSheets[i][cssRules].length; j++) {
			if (document.styleSheets[i].href.indexOf(hojaCss) != -1) {
				var a = document.styleSheets[i][cssRules][j];
				var b = document.getElementsByTagName(objId.parentNode.tagName)[0];
				if (document.styleSheets[i][cssRules][j].selectorText == document.getElementsByTagName(objId.parentNode.tagName)[0]) {
					alert(document.styleSheets[i][cssRules][j].style[element]);
				}
			}
		}
	}
	return false;
}

/*******************************
 Validación del CIF. Por Carlitos. carlosbernad@teleline.es
 Si usas este script, deja intactas estas líneas (créditos). Vale?
 También te agradecería un e-mail con tus comentarios.
*******************************/
function isValidCif(abc){
	par = 0;
	non = 0;
	letras = "ABCDEFGHKLMNPQS";
	let = abc.charAt(0);
 
	if (abc.length!=9) {
		//alert('El Cif debe tener 9 dígitos');
		return false;
	}
 
	if (letras.indexOf(let.toUpperCase())==-1) {
		//alert("El comienzo del Cif no es válido");
		return false;
	}
 
	for (zz=2;zz<8;zz+=2) {
		par = par+parseInt(abc.charAt(zz));
	}
 
	for (zz=1;zz<9;zz+=2) {
		nn = 2*parseInt(abc.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!=abc.charAt(8)) {
		//alert("El Cif no es válido");
		return false;
	}
	//alert("El Cif es válido");
	return true;
}

