function ValidateForm(id){
	this.form = document.getElementById(id);
		this.text = new Object();
		this.password = new Object();
		this.radio = new Object();
		this.checkbox = new Object();
		this.hidden = new Object();
		this.submit = new Object();
		this.reset = new Object();
		this.button = new Object();
		this.image = new Object();
		this.textarea = new Object();
		this.select = new Object();
		this.label = new Object();
		this.components = new Object();
	
	this.getComponents = function(){
		this.l = this.form.getElementsByTagName('label');
		this.ta = this.form.getElementsByTagName('textarea');
		this.sl = this.form.getElementsByTagName('select');
		this.it = this.form.getElementsByTagName('input');
	
		var qLabel = this.l.length+0;
		for(d=0;d<qLabel;d++){
			this.label[this.l[d].htmlFor] = this.l[d];
		}
		
		var qTextArea = this.ta.length+0;
		if(qTextArea>0){
			for(b=0;b<qTextArea;b++){
				this.textarea[this.ta[b].name] = this.ta[b];
				this.components[this.ta[b].name] = this.ta[b];
			}
		}

		var qSelect = this.sl.length+0;
		if(qSelect>0){
			for(c=0;c<qSelect;c++){
				this.select[this.sl[c].name] = this.sl[c];
				this.components[this.sl[c].name] = this.sl[c];
			}
		}
		
		var qInput = this.it.length+0;
		if(qInput>0){
			for(a=0;a<qInput;a++){
				var type = this.it[a].type;
				switch(type){
					case 'text':
						this.text[this.it[a].name] = this.it[a];
						this.components[this.it[a].name] = this.it[a];
					break;    
					case 'password':
						this.password[this.it[a].name] = this.it[a];
						this.components[this.it[a].name] = this.it[a];
					break;
					case 'radio':
						this.radio[this.it[a].name][this.it[a].id] = this.it[a].checked;
						this.components[this.it[a].name] = this.it[a];
					break;
					case 'checkbox':
						this.checkbox[this.it[a].name] = this.it[a];
						this.components[this.it[a].name] = this.it[a];
					break;
					case 'hidden':
						this.hidden[this.it[a].name] = this.it[a];
					break;
					case 'submit':
						this.submit[this.it[a].name] = this.it[a];
					break;
					case 'reset':
						this.reset[this.it[a].name] = this.it[a];
					break;
					case 'button':
						this.button[this.it[a].name] = this.it[a];
					break;
					case 'image':
						this.image[this.it[a].name] = this.it[a];
						this.components[this.it[a].name] = this.it[a];
					break;
					default:
						alert('default');
				}
			}
		}
		
		for(var c in this.components){ 

			var text = document.createTextNode(this.components[c].title);
			var span = document.createElement('span');
				span.className = 'nV';
				span.appendChild(text);

			var e = this.label[this.components[c].id];
				e.appendChild(span);
				
			this.components[c].label = this.label;
			this.components[c].obj = this;
			
			this.components[c].validate = this.validate; // valida el campo
			
			this.components[c].onblur = function(){this.validate();}
		}
	}
	
	this.validate = function(){
		var isValid = false;
		switch(this.v){
			case 'noEmpty':
				isValid = this.obj.noEmpty(this.value);
			break;    
			case 'checkMail':
				isValid = this.obj.checkMail(this.value);
			break;
			case 'checkString':
				isValid = this.obj.checkString(this.value);
			break;
			case 'checkNumber':
				isValid = this.obj.checkNumber(this.value);
			break;
			case 'checkNumberSpace':
				isValid = this.obj.checkNumberSpace(this.value);
			break;
			default:
				//alert('default');
			break;
		}

		var span = this.label[this.name].getElementsByTagName('span')[0];
		var valid = false;
		if(isValid){
				span.className = 'nV';
				valid = true;
		} else {
				span.className = 'mensaje';
		}
		
		return valid;
	}
	
	
	
	this.setSubmit = function(id){ //setea la accion al boton enviar
		var btnSubmit = document.getElementById(id);
			btnSubmit.ref = this;
			btnSubmit.onclick = function(){
				var valid = 0; // es valido cuando menor a cero
				for(var c in this.ref.components){
					var d = this.ref.components[c].validate(); 
						valid += (d)?0:1; // si no valido suma
				}
				(valid<=0)?this.ref.form.submit():null;
			}
	}
	
	this.isCR = function(name){
		var temp = this.form.getElementsByTagName('input');
		var tArr = new Array();
		for(a=0;a<temp.length;a++){
			if(temp[a].type=='radio' && temp[a].name==name){
				//tArr[tArr.length] = temp[a].checked;
				alert(temp[a].name);
			}
			
		}
	}
	
	this.isCC = function(name){
		
	}
	
	this.checkString = function(cadena){
		var str = cadena;
		var mayu = 0;
		var minu = 0;
		var space = 0;
		var desc = 0;
		for(i=0;i<=str.length-1;i++){
			if((str.charCodeAt(i)>=65) && (str.charCodeAt(i)<=91)){
				mayu+=1;
			} else if((str.charCodeAt(i)>=97) && (str.charCodeAt(i)<=122)){
				minu+=1;
			} else if(str.charCodeAt(i)==32){
				space+=1;
			} else {
				desc+=1;
			}
		}
		if(cadena==''){desc+=1;}
		if(desc >=1){return false;} else {return true;}
	}
	
	this.checkNumber = function(cadena){
		var str = cadena;
		var valid = 0;
		var rtrn = false;
		for(i=0;i<=str.length-1;i++){
			var ch = str.charCodeAt(i);
			if((ch>=48) && (ch<=57)){
				valid += 0;			
			} else {
				valid += 1;
			}
		}
		if(cadena==''){valid += 1}
		rtrn = (valid>0)?false:true;
		return rtrn;
	}
	
	this.checkNumberSpace = function(cadena){
		var str = cadena;
		var valid = 0;
		var rtrn = false;
		for(i=0;i<=str.length-1;i++){
			var ch = str.charCodeAt(i);
			if((ch>=48) && (ch<=57)){
				valid += 0;			
			} else if(str.charCodeAt(i)==32){
				valid += 0;
			} else {
				valid += 1;
			}
		}
		if(cadena==''){valid += 1}
		rtrn = (valid>0)?false:true;
		return rtrn;
	}

	this.noEmpty = function(cadena){
		var str = cadena;
		var mayu = 0;
		var minu = 0;
		var space = 0;
		var desc = 0;
		if(cadena==''){desc+=1;}
		if(desc >=1){return false;} else {return true;}
	}

	this.checkMail = function(cadena){
		var mail = cadena;
		var arrobas = 0;
		var valido = 0;
		var noValido = 0;
		//cuento la cantidad de arrobas
		for(i=0;i<=mail.length-1;i++){
			if(mail.charCodeAt(i)==64){
				arrobas+=1;
			}
		}
		//parte anterior a la arroba
			//si hay una arroba 
			if((arrobas>0) && (arrobas<2)){
				var posArroba = mail.indexOf("@");
				var nombreMail = mail.substring(0,posArroba);
				var cantPuntos = 0;
				//busco la cantidad de puntos dentro del nombre del mail
				for(a=0;a<=nombreMail.length-1;a++){
					if(mail.charCodeAt(a)==46) {
						cantPuntos+=1;
					}
				}
				//si hay un punto
				if((cantPuntos>0) && (cantPuntos<2)){
					var posPunto = nombreMail.indexOf(".");
					var nMailPrimera = nombreMail.substring(0,posPunto);
					var nMailSegunda = nombreMail.substring(posPunto,nombreMail.length-1);
					
					if(isNaN(nMailPrimera) && isNaN(nMailSegunda)) {
						valido+=1;
					} else {
						noValido+=1;
					}
				//si no hay ningun punto
				} else if(cantPuntos==0) {
					if(isNaN(nombreMail)) {
						valido+=1;
					} else {
						noValido+=1;
					}
				} else {
					noValido+=1;
				}
			//si no hay ninguna arroba
			} else {
				noValido+=1;
			}
		//parte posterior a la arroba	
			var dominio = mail.substring(posArroba+1,mail.length-1);
			var domPuntos = 0;
			for(a=0;a<=dominio.length-1;a++){
				if(dominio.charCodeAt(a)==46) {
					domPuntos+=1;
				}
			}
			if(domPuntos==2){
				var posDomPunto = dominio.indexOf(".");
				var lastPosDomPunto = dominio.lastIndexOf(".");
				var nDomPrimera = dominio.substring(0,posDomPunto);
				var nDomSegunda = dominio.substring(posDomPunto,lastPosDomPunto);
				var nDomTercera = dominio.substring(lastPosDomPunto,dominio.length-1);
				if(isNaN(nDomPrimera) && isNaN(nDomSegunda)) {
					if(isNaN(nDomTercera)){
						valido+=1;
					} else {
						noValido+=1;
					}
				} else {
					noValido+=1;
				}
			//si no hay ningun punto
			} else if(domPuntos==1){
				var posDomPunto = dominio.indexOf(".");
				var nDomPrimera = dominio.substring(0,posDomPunto);
				var nDomSegunda = dominio.substring(posDomPunto,dominio.length-1);
				if(isNaN(nDomPrimera) && isNaN(nDomSegunda)) {
					valido+=1;
				} else {
					noValido+=1;
				}
			} else if(domPuntos==0) {
				noValido+=1;
			} else {
				noValido+=1;
			}
			
			if(cadena!=''){
				valido+=1;
			} else {
				noValido+=1;
			}
		
		if(valido<3){return false;} else {return true;}
	}


}
