/*
Script: mooValidator.js
	My Form Validation Script using MooTools Javascript Library.

Author:
	Carlos L. Gonzalez, <website>http://carlosluis.es</website>,
						<mail,im(gtalk,msn)>carlos[at]noxeloka.com</mail,im>

License:
	MIT-style license.

mooValidator Credits:
	- mooValidator idea bassed on Macromedia Dreamweaver form validation script snippet.
*/
var mooValidator = {
	validate : function(f){
		var eL,fN,v,cName, selectARR, txtAreaARR;
		var passed = true;
		var valid = true;
		mooValidator.msg = [];
		var alertmsg = '';
		mooValidator.foco = false;
		fN = $(f).getElements('input');
		selectARR = $(f).getElements('select');
		txtAreaARR = $(f).getElements('textarea');
		selectARR.each(function(e){
			fN.push(e);
		});
		txtAreaARR.each(function(e){
			fN.push(e);
		});
		/*
		fN.push($(f).getElements('select'));
		fN.push($(f).getElements('textarea'));*/
		fN.each(function(e){
			passed = true;
			eL = String(e.getTag());
			v = String(e.getProperty('class'));
			if(e.disabled)return;
			if(v === '')return;
			if(e.hasClass('error'))e.removeClass('error');
			v = v.split(' ');
			passed = mooValidator.inspect(e,eL,v);
			if(valid)if(!passed)valid = false;
		});
		if(!valid){
			//console.log(mooValidator.msg);
			//console.log(mooValidator.msg.sort());
			mooValidator.msg = mooValidator.msg.sort();
			if(window.Growl){
				alertmsg = mooValidator.msg.join('<br />');
				window.Growl(alertmsg);
			}else{
				alertmsg = 'Debe verificar los siguientes campos:\n'+mooValidator.msg.join('\n');
				alert(alertmsg);
			}
			return false;
		}
		return true;
	},
	searchCSSProp : function(s){
		var css;
		if(window.ie) { css = document.styleSheets[0].rules;  }
		else { css = document.styleSheets[0].cssRules }
				
	},
	inspect : function(e,t,v){
	//alert('algo');
		var eT;
		//console.write(t);
		//console.log(t);
		switch(t){
			case 'select':
				return mooValidator.parseSELECT(e,v);
			break;
			default:
				eT = e.getProperty('type');
				switch(eT){
					case 'radio':
						return true;
					break;
					case 'checkbox':
						return mooValidator.parseCHK(e,v);
					break;
					default:
						return mooValidator.parseTEXT(e,v);
				}
		}
		return true;
	},
	parseCHK : function(e,v){
		if (console.log) {console.log('parseando CHK');}
		var parse = false;
		var valid = true;
		v.each(function(vT){
			if(e.hasClass('error'))e.removeClass('error');
			if(parse)return parse;
			if (console.log) console.log(vT);
			switch(vT){
				case 'R':
					if(!e.checked){
						valid = false;
						parse = true;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Debe marcar esta casilla de verificaci'+String.fromCharCode(243)+'n.')
					}
				break;
				case 'RV':
					//if (console.log) console.log(css);
					if(!e.checked){
						valid = false;
						parse = true;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Debe marcar esta casilla de verificaci'+String.fromCharCode(243)+'n.')
					}
				break;
			}
		});
		if(!valid)e.addClass('error');
		if(!mooValidator.foco && !valid){mooValidator.foco = true;if(e.focus)e.focus();}
		return valid;
	},
	parseSELECT : function(e,v){
		if(e.hasClass('error'))e.removeClass('error');
		var parse = false;
		var valid = true;
		v.each(function(vT){
			if(parse)return parse;
			var ls, vTV;
			vTV = '';
			if(ls = vT.split('|')){
				vTV = ls[1]?ls[1]:'';
				vT = ls[0];
			}
			switch(vT){
				case 'R':
				/*alert(vTV);
				alert(e.getValue());*/
					//alert((vTV ) && (!(e.getValue()[0]) || e.getValue() == vTV));
					/*alert(e.getValue());
					alert(vTV);
					alert(!(e.getValue()) || e.getValue() == vTV);*/
					if(!(e.getValue()) || e.getValue() == vTV){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': La opci'+String.fromCharCode(243)+'n elegida no es correcta.')
					}
				break;
			}
		});
		if(!valid)e.addClass('error');
		if(!mooValidator.foco && !valid){mooValidator.foco = true;if(e.focus)e.focus();}
		return valid;
	},
	parseTEXT : function(e,v){
		var e2 = false;
		var parse = false;
		var valid = true;
		if(e.hasClass('error'))e.removeClass('error');
		if(document.mailregexp)var mailregexp = document.mailregexp;
		else var mailregexp = /^([\w-\.]+)@([\w-\.]+)\.[a-zA-Z]{2,4}$/;
		if(document.dni)var dni = document.dni;
		else var dni = /^([0-9]{1,8}[A-Z])$/;
		if(document.cif)var cif = document.cif;
		else var cif = /^([ABCDEFGHKLMNPQS][0-9]{7}[0-9|A-J])$/;
		if(document.nie)var nie = document.nie;
		else var nie = /^([XT][0-9]{1,7}[A-Z])$/;
		if(document.hregexp)var hregexp = document.hregexp;
		else var hregexp = /^([0-9]|[01][0-9]|2[0-3])\:(0[0-9]|[10-59])$/ 
		if(document.dregexp)var dregexp = document.dregexp;
		else var dregexp = /^([1-9]|0[1-9]|[12][0-9]|[3][01])\-([1-9]|0[1-9]|1[0-2])\-(19|20)\d\d$/
		if(document.tregexp)var tregexp = document.tregexp;
		else var tregexp = /^[689]{1}[0-9]{8}$/
		v.each(function(vT){
			if(parse)return parse;
			var ls, vTV;
			if(ls = vT.split('|')){
				vTV = ls[1];
				vT = ls[0];
			}
			var val = String(e.getValue());
			if($(vTV))vTV = String($(vTV).getValue());
			//console.log(vT.toUpperCase());
			switch(vT.toUpperCase()){
				case 'R':
					if(val.trim() == ''){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Obligatorio.')
					}else if(vTV && vTV != val){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con "'+vTV+'".')
					}
				break;
				case 'MAXL':
					if(val)
					if(val.length > vTV.toInt()){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No puede superar los "'+vTV+'" caract'+String.fromCharCode(233)+'res.')
					}
				break;
				case 'MINL':
					if(val)
					if(val.length < vTV.toInt()){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No puede tener menos de "'+vTV+'" caract'+String.fromCharCode(233)+'res.')
					}
				break;
				case 'NUM':
					if(val)
					if(isNaN(val)){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Debe ser un valor num'+String.fromCharCode(233)+'rico.')
					}
				break;
				case 'MAXV':
					if(val)
					if(isNaN(val) || val.toFloat() > vTV.toFloat()){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Debe ser un valor num'+String.fromCharCode(233)+'rico inferior a '+vTV+'.')
					}
				break;
				case 'MINV':
					if(val)
					if(isNaN(val) || val.toFloat() < vTV.toFloat()){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': Debe ser un valor num'+String.fromCharCode(233)+'rico superior a '+vTV+'.')
					}
				break;
				case 'DC':
					var ccc = vTV.split('-');
					/*if(console.log){
						console.log(vTV);
						console.log(val);
						console.log(ccc);
					}*/
					var Entidad = document.getElementById(ccc[0]).value;
					var Agencia = document.getElementById(ccc[1]).value;
					var Ncuenta = val;
					var DcINPUT = document.getElementById(ccc[2]);
					var Dc = DcINPUT.value;
					$(DcINPUT).removeClass('error');
/**/
					if (Dc > 0) {
						var dc = 0;
						for (cont2 = 0; cont2 < 2; cont2++) {
							var aux = "";
							if (cont2 == 1) 
								dc = dc * 10;
							if (cont2 == 0) {
								for (var i = 0; i < Entidad.length; i++) {
									var ch = Entidad.substring(i, i + 1);
									aux += ch;
								}
								for (var i = 0; i < Agencia.length; i++) {
									var ch = Agencia.substring(i, i + 1);
									aux += ch;
								}
							}
							else {
								for (var i = 0; i < Ncuenta.length; i++) {
									var ch = Ncuenta.substring(i, i + 1);
									aux += ch;
								}
							}
							var cont3 = 0;
							var suma = 0;
							for (var cont1 = aux.length - 1; cont1 >= 0; cont1--) {
								dig_buf = aux.substring(cont1, cont1 + 1);
								digito = parseFloat(dig_buf);
								if (cont3 == 0) 
									suma = suma + (digito * 6);
								else 
									if (cont3 == 1) 
										suma = suma + (digito * 3);
									else 
										if (cont3 == 2) 
											suma = suma + (digito * 7);
										else 
											if (cont3 == 3) 
												suma = suma + (digito * 9);
											else 
												if (cont3 == 4) 
													suma = suma + (digito * 10);
												else 
													if (cont3 == 5) 
														suma = suma + (digito * 5);
													else 
														if (cont3 == 6) 
															suma = suma + (digito * 8);
														else 
															if (cont3 == 7) 
																suma = suma + (digito * 4);
															else 
																if (cont3 == 8) 
																	suma = suma + (digito * 2);
																else 
																	if (cont3 == 9) 
																		suma = suma + (digito * 1);
								cont3++;
							}
							
							suma = suma % 11;
							digito = 11 - suma;
							if (digito == 10) 
								dc++;
							else 
								if (digito == 11) 
									;
								else 
									dc += digito;
						}
						if (dc < 10) 
							dc = "0" + dc;
						if (Dc != dc) {
							parse = true;
							valid = false;
							e2 = $(DcINPUT);
							mooValidator.msg.push('- '+(e2.title?e2.title:e2.name?e2.name.capitalize():e2.getTag())+': El valor no es correcto para la cuenta descrita.')
							if (console.log) console.log("HAY UN ERROR EN EL 'DC' DE LA CUENTA BANCARIA.\nDEBE SER: '" + dc + "'.\n\nCOMPROBAR QUE LOS DATOS SON CORRECTOS.");
						}
					}		
/**/
				break;
				case 'DNI':
			//console.log(vTV);
					if(val){
						if(dni.test(val.toUpperCase())){
								var letras = 'T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L,C,K,E,T'.split(',');
								var pos = val.substr(0,val.length-1) % 23
								var letra = val.substr(val.length-1,val.length);
								if (letra.toUpperCase() != letras[pos]) 
								{
									parse = true;
									valid = false;
									mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No es un DNI/NIF V'+String.fromCharCode(225)+'lido.')
								}
								//console.log(val);
								while (val.length-1 < 8) {
									val = '0' + val.substr(0,val.length);
								}
								//console.log(val);
								e.value = val;
						}else if(nie.test(val.toUpperCase())){
								var letras = 'T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L,C,K,E,T'.split(',');
								var pos = val.substr(1,val.length-2) % 23
								//alert(pos);
								//console.log(pos);
								var letra = val.substr(val.length-1,val.length);
								if (letra.toUpperCase() != letras[pos]) 
								{
									parse = true;
									valid = false;
									mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No es un NIE V'+String.fromCharCode(225)+'lido.')
								}
								//console.log(val);
								while (val.length-2 < 7) {
									val = 'X0' + val.substr(1,val.length);
								}
								//console.log(val);
								e.value = val;
						}else if(cif.test(val.toUpperCase())){
							var pares = 0;
							var impares = 0;
							var suma;
							var ultima;
							var unumero;
							var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
							var xxx;
							var texto = val.toUpperCase();
	 						ultima = texto.substr(8,1);
							for (var cont = 1 ; cont < 7 ; cont ++){
								xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
	 							impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
	 							pares += parseInt(texto.substr(cont,1));
	 						}
	 						xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
	 						impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
	 						suma = (pares + impares).toString();
	 						unumero = parseInt(suma.substr(suma.length - 1, 1));
	 						unumero = (10 - unumero).toString();
	 						if(unumero == 10) unumero = 0;
							//console.log(unumero +' || '+ uletra[unumero]);
							//console.log(ultima);
	 						if ((ultima == unumero) || (ultima == uletra[unumero])){
									parse = false;
									valid = true;
							}else{
								parse = true;
								valid = false;
								mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No es un CIF v'+String.fromCharCode(225)+'lido.')
							}
							//console.log(val);
							/*while (val.length-2 < 7) {
								val = 'X0' + val.substr(1,val.length-2);
							}*/
							//console.log(val);
							e.value = val;
						}else{
							parse = true;
							valid = false;
							mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No se corresponde con un NIF, CIF o NIE correcto.')
						}
					}
				break;
				case 'EMAIL':
					if(val)
					if(!mailregexp.test(val)){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No tiene la sintaxis de email correcta "nombre@dominio.tld".')
					}else if(vTV && vTV != val){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con "'+vTV+'".')
					}
				break;
				case 'H':
					if(val)
					if(!hregexp.test(val)){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No es una hora correcta[HH:MM].')
					}else if(vTV && vTV != val){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con "'+vTV+'".')
					}
				break;
				case 'D':
					if(val)
					if(!dregexp.test(val)){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con el formato correcto[dd-mm-aaaa].')
					}else if(vTV && vTV != val){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con "'+vTV+'".')
					}
				break;
				case 'TFN':
					if(val){
					if(!tregexp.test(val)){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con un N'+String.fromCharCode(186)+' de t'+String.fromCharCode(233)+'lefono vÃ¡lido.')
					}else if(vTV && vTV != val){
						parse = true;
						valid = false;
						mooValidator.msg.push('- '+(e.title?e.title:e.name?e.name.capitalize():e.getTag())+': No corresponde con "'+vTV+'".')
					}
					}
				break;
			}
		});
		if (!valid) {if (e2) {e2.addClass('error');} else {e.addClass('error');} }
		if(!mooValidator.foco && !valid){mooValidator.foco = true;if (e2) {if(e2.focus)e2.focus();} else {if(e.focus)e.focus();}}
		return valid;
	}
};
mooValidator.msg = [];

window.extend({Validator:mooValidator.validate});
window.extend({InspectE:mooValidator.inspect});
/*
Script: mooForm.js
	Validator Form integration Script using MooTools Javascript Library.

Author:
	Carlos L. González, <website>http://carlosluis.es</website>,
						<mail,im(gtalk,msn)>carlos[at]noxeloka.com</mail,im>

License:
	MIT-style license.

mooForm Credits:
	- 
*/

var mooForm = function(){
	var oldSubmit = []
	var oldBlur = []
	/*$('body').getElements('select').each(function(s){
		s.setStyles({'visibility':'hidden'});
	});*/
	var fN, selectARR, txtAreaARR;
	var i = 0;
	$$('form').each(function(f){
		i++;
		f.id=f.id?f.id:f.name?f.name:'FormSN-'+i;
		fN = $(f).getElements('input');
		selectARR = $(f).getElements('select');
		txtAreaARR = $(f).getElements('textarea');
		selectARR.each(function(e){
			fN.push(e);
		});
		txtAreaARR.each(function(e){
			fN.push(e);
		});
		if($type(f.onsubmit))f.oldSubmit = document.getElementById(f.id).onsubmit
		document.getElementById(f.id).onsubmit = function (e){
			var old = true;
			if(Window.Validator(this)){
				if(f.oldSubmit){
					old = f.oldSubmit(e);
					if($type(old) == 'boolean') return old;
					else return true;
				}
			}else return false;
		}
	});
	//console.log(fN);
	if(fN){
	fN.each(function(f){
		if($type(f.onblur))f.oldBlur = f.onblur;
		//console.log(f.name +' -> ' +f.onblur);
		f.onblur = function(e){
			//console.log(this.value);
			//console.log(String(this.getTag()));
			//console.log(String(this.getProperty('class')).split(' '));
			if (Window.InspectE(this, String(this.getTag()), String(this.getProperty('class')).split(' '))) {
				if (f.oldBlur) {
					f.oldBlur(e);
				}
			}
		}
		//console.log(f.name +' -> ' +f.onblur);
		/*if(f.name) f.id = f.id?f.id:f.name;
		var name = f.id?f.id:false;
		if (name){
			if($type(f.onblur))f.oldBlur = document.getElementById(f.id).onblur
			document.getElementById(f.id).onblur = function (e){
				var old = true;
				if(Window.InspectE(this, String(this.getTag()), String(this.getProperty('class')).split(' '))){
					if(f.oldBlur){
						f.oldBlur(e);
					}
				}else return false;
			}
		}*/
	});
	}
}
//window.onDomReady(mooForm);
