﻿var oXML=false;
var enviando=0;
FORM = {
	boton : new Array(),
	cargar : function() {
		// Primero conecto el método FORM.comprobar_campo a todos los INPUT de texto
		for (i=0;(inp = document.getElementsByTagName("input")[i]);i++) 
		{
			if (inp.type=="text" || inp.type=="password")
			{
				EXTRAS.insertarEvento(inp,"keyup",FORM.comprobar_campo2,false);
				EXTRAS.insertarEvento(inp,"blur",FORM.comprobar_campo2,false);
			}
		}
		// Primero conecto el método FORM.comprobar_campo a todos los TEXTAREA
		for (i=0;(inp = document.getElementsByTagName("textarea")[i]);i++) 
		{
			EXTRAS.insertarEvento(inp,"keyup",FORM.comprobar_campo2,false);
			EXTRAS.insertarEvento(inp,"blur",FORM.comprobar_campo2,false);
		}
		
		// Conecto el método comprobar_form a los formularios
		for (i=0;(fm = document.getElementsByTagName("form")[i]);i++) {
			// Esta manera añadera el método FORM.comprobar_form al evento submit del formulario,
			// pero no sobreescribira al método submit de un objeto FORM, por lo que éste 
			// seguira devolviendo TRUE y seguira ejecutándose.
			//EXTRAS.insertarEvento(fm,"submit",FORM.comprobar_form,true);
			
			// Debo sobreescribir el método del objeto FORM de la siguiente manera
			fm.onsubmit = FORM.comprobar_form;
			
		}
	},
/*
	Método encargado de identificar el input que estamos comprobando
	y mandarlo a método FORM.__comprobar_campo
*/
	comprobar_campo2 : function(e) {
		var e = (e)? e:window.event;
		var target = (e.target)? e.target:e.srcElement;
		FORM.comprobar_campo(target);
	},
	
	comprobar_campo : function(target) {
		var t;
		var c;
		if (target.getAttribute("requerido")=="true" && target.value=="")
		{
			FORM.error(target);
			return false;
		}
		else
		{
			c=0;
			if (target.getAttribute("tipo"))
			{
				switch (target.getAttribute("tipo"))
				{
					case "fecha":
						if (FORM.comprobar_fecha(target)==false)
							c=1;
						break;
					case "cp":
						if (FORM.comprobar_numero(target,5)==false)
							c=1;
						break;
					case "email":
						if (FORM.comprobar_email(target)==false)
							c=1;
						break;
					case "ssempresa":
						if (FORM.es_numero(target.value)==false)
							c=1;
						break;
					case "sstrabajador":
						if (FORM.es_numero(target.value)==false)
							c=1;
						break;
					case "numero":
						if (FORM.es_numero(target.value)==false)
							c=1;
						break;
					case "decimal":
						if (FORM.comprobar_decimal(target)==false)
							c=1;
						break;
					case "nif":
						if (FORM.comprobar_nif(target)==false && FORM.comprobar_nie(target)==false)
							c=1;
						break;
					case "cif":
						if (FORM.comprobar_cif(target)==false && FORM.comprobar_nif(target)==false && FORM.comprobar_nie(target)==false)
							c=1;
						break;
					case "telefono":
						if (FORM.comprobar_telefono(target)==false)
							c=1;
				}


			}
			if (c==0)
				FORM.correcto(target);
			else
			{
				FORM.error(target);
				return false;
			}
		}

	},

/*	
	Método que se encarga de comprobar Todos los INPUT que cuelguen de él.
	Tener en cuenta que el evento al que está unido este método,
	se puede disarar desde un objeto difetente al FORMULARIO en si.
	El formulario procedera a hacer el "submit", en funcion al valor de retorno de este método.
*/
	comprobar_form : function(e) {
		var e = (e)? e:window.event;
		var target = (e.target)? e.target:e.srcElement;
		var correcto=0;
		for (i=0;(inp = document.getElementsByTagName("input")[i]);i++) 
		{
			if (inp.type=="text" || inp.type=="password")
			{
				if (FORM.comprobar_campo(inp)==false)
					correcto=1;
			}

		}
		for (i=0;(inp = document.getElementsByTagName("textarea")[i]);i++) 
		{
			if (FORM.comprobar_campo(inp)==false)
				correcto=1;
		}
		for (i=0;(inp = document.getElementsByTagName("select")[i]);i++) 
		{
			if (inp.getAttribute("requerido")=="true" && inp.value=="0")
				correcto=1;
		}
		if (target.getAttribute("paso")=="1" && correcto==0) //para comprobar que en añadir alumno se esta en la primera parte
		{
			target.setAttribute("paso","2");
			AJAX.ver_datos();
			correcto=3;
			return false;
		}
		if (correcto==0)
		{
			if (enviando == 0)
			{
				enviando=1;
				return true;
			}
			else 
			{
				alert("El formulario ya está siendo enviado, por favor aguarde un instante.");
				return false;
			}
		}
		else if (correcto==1)
		{
			alert ("Algunos de los campos no estan bien");
			return false;
		}
	},
/*
	Este método devolvera true/false	en función a su valor
  y a sus atributos requerido y tipo, ayudandose de los métodos que continuan...

*/
	comprobar_telefono : function(obj) {
		var num = "0123456789";
		var ok=0;
		var i;
		var uno;
		if (obj.value.length==9)
		{
			uno=obj.value.charAt(0);
			if (uno=="6" || uno=="8" || uno=="9")
			{
				for (i=0;i<9;i++)
				{
					if (num.indexOf(obj.value.charAt(i))==-1)
						ok=1;
				}
				if (ok==0)
					return true;
				else
					return false;
			}
			else
				return false;
		}
		else if (obj.value.length>0)
			return false;
		else
			return true;
	},
	comprobar_decimal : function(obj) {
		var num = "0123456789.";
		var ok=0;
		var i;
		var punto=0;
		var max=obj.value.length;
		if (max>0)
		{
			if (obj.value.charAt(0)=="." || obj.value.charAt(max-1)==".")
				ok=1;
			for (i=0;i<max;i++)
			{
				if (num.indexOf(obj.value.charAt(i))==-1)
					ok=1;
				if (obj.value.charAt(i)==".")
					punto++;
				if (obj.value.charAt(i)=="." && i<max-3)
					ok=1;
			}
			if (ok==0 && punto<2)
				return true;
			else
				return false;
		}
		else
			return true;
	},
	comprobar_numero : function(obj,max) 
	{
		var num = "0123456789";
		var ok=0;
		var i;
		if (obj.value.length==max)
		{
			for (i=0;i<max;i++)
			{
				if (num.indexOf(obj.value.charAt(i))==-1)
					ok=1;
			}
			if (ok==0)
				return true;
			else
				return false;
		}
		else if (obj.value.length>0)
			return false;
		else
			return true;
	},
	comprobar_email : function(obj) 
	{
                 var emailPat=/^(.+)@(.+)$/;
                 var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
                 var validChars="\[^\\s" + specialChars + "\]";
                 var quotedUser="(\"[^\"]*\")";
                 var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
                 var atom=validChars + '+';
                 var word="(" + atom + "|" + quotedUser + ")";
                 var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
                 var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
                 var matchArray=obj.value.match(emailPat);
		 if (obj.value=="")
		 	return true;
                 if (matchArray==null) 
                    return false;
                 var user=matchArray[1];
                 var domain=matchArray[2];
                 if (user.match(userPat)==null) 
                    return false;
                 var IPArray=domain.match(ipDomainPat);
                 if (IPArray!=null)
		 {
                    for (var i=1;i<=4;i++) 
		    {
                        if (IPArray[i]>255) 
	                      return false;
                    }
                    return true;
                 }

                 var domainArray=domain.match(domainPat);
                 if (domainArray==null)
                    return false;
                 var atomPat=new RegExp(atom,"g");
                 var domArr=domain.match(atomPat);
                 var len=domArr.length;
                 if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4)
                    return false;
                 if (len<2) 
                    return false;
                 return true;
	},
	es_numero : function(numero) 
	{
		var num = "0123456789";
		var ok=0;
		var i;
		if (numero.length>0)
		{
			for (i=0;i<numero.length;i++)
			{
				if (num.indexOf(numero.charAt(i))==-1)
					ok=1;
			}
			if (ok==0)
				return true;
			else
				return false;
		}
		else
			return true;
	},
	comprobar_nie : function(obj) 
	{ 
		var cadena="TRWAGMYFPDXBNJZSQVHLCKET"; 
		var tmp=obj.value;
		var NIF=tmp.substring(1,8);
		var ultimo=tmp.charAt(8);
		var primero=tmp.charAt(0);
		ultimo=ultimo.toUpperCase();
		primero=primero.toUpperCase();
		if (tmp.length==9 && FORM.es_numero(NIF)==true)
		{
			posicion=NIF % 23; 
			letra=cadena.substring(posicion,posicion+1); 
			if (primero=="X" && ultimo==letra)
				return true;
			else
				return false;
		}
		else if (tmp.length==0)
			return true;
		else
			return false;
	},
	comprobar_nif : function (obj)
	{ 
		var cadena="TRWAGMYFPDXBNJZSQVHLCKET";
		var tmp=obj.value;
		var NIF=tmp.substring(0,8);
		var ultimo=tmp.charAt(8);
		ultimo=ultimo.toUpperCase();
		if (tmp.length==9 && FORM.es_numero(NIF)==true)
		{
			posicion = NIF % 23;
			letra = cadena.substring(posicion,posicion+1); 
			if (ultimo==letra)
				return true;
			else
				return false;
		}
		else if (tmp.length==0)
			return true;
		else
			return false;
	},
	comprobar_cif : function (obj)
	{
		var cif=obj.value;
		var suma;
		var ultima;
		var unumero;
		var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I"); 
		var par = 0;
		var non = 0;
		var letras="ABCDEFGHKLMNPQS";
		var xxx; 
		texto = cif.toUpperCase(); 

		var regular =/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g; 
		if (!regular.exec(texto)) 
			return false;
             
		ultima = texto.substr(8,1); 

		for (zz=2;zz<8;zz+=2)
		{
			par = par+parseInt(texto.charAt(zz))
		}
		for (zz=1;zz<9;zz+=2)
		{
			nn = 2*parseInt(texto.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 ((ultima == control) || (ultima == uletra[control])) 
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	error : function(obj) {
		obj.style.background="#ff7070";
	},
	correcto : function(obj) {
		obj.style.background="#ffffff";
	}
}

/*
	Compruebo que el navegador soporte W3C con la expresión getElementsByTagName
	Conecto el método FORM.cargar al evento "LOAD" de window,
	de este modo lanzo mi cargador de eventos cuanto estoy seguro que todo existen
*/
if (document.getElementsByTagName) {
	EXTRAS.insertarEvento(window,"load",FORM.cargar,false);

}
