Event.observe(window,'load',cargaEventosForm);

var campos = new Array();
var inputs = new Array();
var textareas = new Array();
var selects = new Array();

function cargaEventosForm() {
	/* funcion para cargar los valores por defecto a los campos */
	$$('form .campo').each(function(s,index) {
		campos.push([s,s.value]);
		s.c_def = s.value;
		/* funcion de foco en los campos */
		Event.observe(s,'focus',function(e) {
			asterisco = $(campos[index][0].id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco';
			}
			campos[index][0].removeClassName('input-formulario-alerta');
			if ( campos[index][0].value == campos[index][1] ) {
				campos[index][0].value = '';
			}
		});
		/* funcion de perdida de foco en los campos */
		Event.observe(s,'blur',function(e) {
			if ( campos[index][0].value == '' ) {
				campos[index][0].value = campos[index][1];
			}
		});
	});
	$$('form input').each(function(s,index) {
		inputs.push([s,s.value]);
		Event.observe(s,'focus',function(e) {
			asterisco = $(inputs[index][0].id+'_req');
			if ( ! inputs[index][0].hasClassName('radio') && ! inputs[index][0].hasClassName('checkbox') ) { 
				inputs[index][0].addClassName('input-formulario-seleccionado');
			}
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco';
			}
			inputs[index][0].removeClassName('input-formulario-alerta');
		});
		Event.observe(s,'blur',function(e) {
			inputs[index][0].removeClassName('input-formulario-seleccionado');
		});
	});
	$$('form textarea').each(function(s,index) {
		textareas.push([s,s.value]);
		Event.observe(s,'focus',function(e) {
			asterisco = $(textareas[index][0].id+'_req');
			textareas[index][0].addClassName('input-formulario-seleccionado');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco';
			}
			textareas[index][0].removeClassName('input-formulario-alerta');
		});
		Event.observe(s,'blur',function(e) {
			textareas[index][0].removeClassName('input-formulario-seleccionado');
		});
	});
	$$('form select').each(function(s,index) {
		selects.push([s,s.value]);
		Event.observe(s,'focus',function(e) {
			asterisco = $(selects[index][0].id+'_req');
			selects[index][0].addClassName('input-formulario-seleccionado');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco';
			}
			selects[index][0].removeClassName('input-formulario-alerta');
		});
		Event.observe(s,'blur',function(e) {
			selects[index][0].removeClassName('input-formulario-seleccionado');
		});
	});
	$$('form .numerico').each(function(s,index) { 
		Event.observe(s,'keyup',function(e) { campoNumerico(s) });
	});
	$$('form').each(function(s,index) {
		Event.observe(s,'reset',function(e) {
			$$('#'+s.id+' .input-formulario-alerta').each(function(s,index) {
				if ( $(s.id+'_req') != undefined ) {
					$(s.id+'_req').removeClassName('asterisco-alerta');
					$(s.id+'_req').addClassName('asterisco');
				}
				s.removeClassName('input-formulario-alerta');
			});
		});
	});
}


/* funcion de validacion de campos numericos: solo digitos una o infinitas veces */
function campoNumerico(c) {
	var valor = c.value;
	var regexp = /^([0-9]*)$/;
	
	if ( ! regexp.test(valor) ) {
		if ( ! regexp.test(RegExp.$1) ) {
			c.value = '';
		}
		else {
			c.value = RegExp.$1;
		}
	}
}

function enviaFormulario(formulario,AceptarCondiciones) {
	var enviar = true;
	
	/* Validacion de los campos requeridos: Validacion - no vacios y no valor por defecto */
	$$('#'+formulario.id+' .requerido').each(function(s,index) {
		if ( s.value == '' || s.value == s.c_def  ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});
	
	/* Validacion de los campos tipo email: Validacion - email valido */
	$$('#'+formulario.id+' .email').each(function(s,index) {
		if ( s.hasClassName('requerido') && ! correoValido(s.value) ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});	
	
	/* Validacion de los campos de tipo codigo postal: Validacion - 5 mumeros */
	$$('#'+formulario.id+' .cp').each(function(s,index) {
		regexp = /^\d{5}$/;
		if ( s.hasClassName('requerido') && ! regexp.test(s.value) ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});	
	
	/* Validacion de los campos de tipo telefono: Validacion - prefijo de pais opcional + 9 numeros */
	$$('#'+formulario.id+' .telefono').each(function(s,index) {
		regexp =  /^(\(?(\+)?\d{1,4}\)?)?(([ ])?(\d{1})){9}$/;
		if ( ! regexp.test(s.value) ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});
	
	$$('#'+formulario.id+' .cif').each(function(s,index) {
		if ( ! checkCIF(s.value) ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});

	/* Validacion de los campos de tipo fecha: Validacion - 2 numeros / 2 numeros / 4 numeros */
	$$('#'+formulario.id+' .fecha').each(function(s,index) {
		regexp = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
		if ( ! regexp.test(s.value) ) {
			asterisco = $(s.id+'_req');
			if ( asterisco != undefined ) {
				asterisco.className = 'asterisco-alerta';
			}
			s.addClassName('input-formulario-alerta');
			enviar = false;
		}
	});
	
	/* Comprobacion de si se han aceptado los terminos de uso */
	if (AceptarCondiciones) {
		if (enviar) {
			var checkbox = $('chkAceptoCondiciones');
			if ( checkbox == undefined || ! checkbox.checked ) {
				enviar = false;
				alert($('chkAceptoCondicionesTexto').value);
			}
		}
	}

	return enviar;
}
/* Funciones para el tamanyo maximo del textarea */
var ns6=document.getElementById&&!document.all;
function countlimit(maxlength,e,placeholder){
  var theform=eval(placeholder)
  var lengthleft=maxlength-theform.value.length
  var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
  if (window.event||e.target&&e.target==eval(placeholder)){
    if (lengthleft<0){
      theform.value=theform.value.substring(0,maxlength)
			lengthleft=0
		}
    placeholderobj.innerHTML=lengthleft
  }
}

function restrictinput(maxlength,e,placeholder){
  if (window.event&&event.srcElement.value.length>=maxlength)
    return false
  else
  if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
    var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
    if (pressedkey.test(String.fromCharCode(e.which)))
      e.stopPropagation()
  }
}

function displaylimit(theform,thelimit){
  var limit_text='<strong><span id="'+theform.toString()+'">'+thelimit+'</span></strong>'
  if (document.all||ns6)
    document.write(limit_text)
  if (document.all){
  	eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
  	eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
  } else if (ns6){
  	document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true);
  	document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true);
  }
}
/* Fin Funciones para el tamanyo maximo del textarea */
function correoValido(correo) {
	var expr = /^[a-zA-ZñÑ0-9\-_\.]{1,64}@[^\.][\w\.\-]+\.([a-zA-Z]{2,3})$/;
	
	return expr.test(correo);
}

/* Funcion para comprobar dni */
function checkCIF(cf)
    {
    var i = temp = 0;
    var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
    cf = cf.toUpperCase();
    if (checkNIF(cf)) return true;
    else if (!/^[A-Za-z0-9]{9}$/.test(cf)) return false
    else if (!/^[ABCDEFGHKLMNPQS]/.test(cf)) return false
    else
        {
        for(i=2; i<=6; i+=2)
            {
            temp += v1[parseInt(cf.substr(i-1, 1))];
            temp += parseInt(cf.substr(i, 1));
            }
        temp = temp + v1[parseInt(cf.substr(7,1))];
        temp = (10 - ( temp % 10));
        if(temp == 10 && (cf.charAt(cf.length-1) == 'J' || cf.charAt(cf.length-1) == 0)) return true;
        else if (cf.charAt(cf.length-1) == temp || cf.charAt(cf.length-1) == String.fromCharCode(64 + temp)) return true;
        else return false;
        }
    }

function checkNIF(nif) {
	if (!nif) return false;
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	if (nif.length != 9) return false;
	else {
		letra = nif.substr(8, 1); letra = letra.toUpperCase();
		dni = nif.substr(0, 8);
		dni = dni.toUpperCase(); dni = dni.replace('X','0');
		dni -= parseInt(dni/23) * 23;
		//alert (letras.charAt(dni) + " - " + letra);
		if (letras.charAt(dni) != letra) return false; 
		else return true;
	}
}
