//Funciones utiles
function inspect(elm){
  var str = "<pre>";
  for (var i in elm){
    str += i + ": " + elm.getAttribute(i) + "\n";
  }
  document.write((str));
}

function detener(e){
	if(window.event)
     {
     window.event.cancelBubble=true;
     window.event.returnValue=false;
     }
  else if(e && e.preventDefault && e.stopPropagation)
     {
     e.preventDefault();
     e.stopPropagation();
     }	
}

function addClass(element, value) {
	if (!element.className) {
		element.className = value;
	} else {
		var newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}

function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

function trimString (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

//Fin Funciones utiles
var validarCampos=Array(), camposFusionados=Array(), envioGlobal=0;

function fusionarCampos(campos){
	var encontrado;
	for(NArray=0; NArray<campos.length; NArray++){
		for(NCampo=0; NCampo<campos[NArray].length; NCampo++){
			encontrado=false;
			for (NFusion=0; NFusion<camposFusionados.length; NFusion++){
				if (campos[NArray][NCampo]==camposFusionados[NFusion]){
					encontrado=true;
				}
			}
			if (!encontrado){
				camposFusionados.push(campos[NArray][NCampo])	
			}
		}
	}
	return camposFusionados;
}

function getValidaciones(tid){
	var resp = Array();
	for (c=0; c<validarCampos.length; c++){
		for (t=0; t<validarCampos[c].length; t++){
			if(tid==validarCampos[c][t]){
				resp.push(c);
			}
		}
	}
	return resp;
}

function borrarError(targ){
	NId=targ.id;
	if(haySpan=document.getElementById("spanError" + NId)){
		targ.parentNode.removeChild(haySpan);
	}
}

function validarNull(targ){
	value = targ.value;
	value = trimString(value);
	if(value=="") {
		return "Please fill this required field.";
	}else{
		return "No-error";
	}
}

function validarMail(targ){
	value = targ.value;
	value = trimString(value);
	var filter=/^[A-Za-z][A-Za-z0-9_.]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
	if (!filter.test(value)) {
		 return "The e-mail address is not valid.";
	}else{
		return "No-error";
	}
}

function tengoKeComparar(j,validadores){
	var tengo=false;
	for(y=0; y<validadores.length; y++){
		if(validadores[y]==j){tengo=true;}
	}
	return tengo;
}

function getError(targ,validadores){
	var salioError = "";
		if(tengoKeComparar(0,validadores))salioError = validarNull(targ);
		if(tengoKeComparar(1,validadores) && salioError == "No-error")salioError = validarMail(targ);
		return salioError;
}

function msgErrorWrite(targ,txt){
		var span = document.createElement("span");
		var texto = document.createTextNode(txt);
		span.setAttribute("id", "spanError" + NId)
		span.appendChild(texto);
		targ.parentNode.appendChild(span);
		addClass(document.getElementById("spanError" + NId),"spanError")
}

function msgError(targ,txt){
	NId=targ.id;
	if(haySpan=document.getElementById("spanError" + NId)){
		borrarError(targ);
		msgErrorWrite(targ,txt)
	}else{
		msgErrorWrite(targ,txt);
	}
}

function msgErrorGeneral(txt){
	if(haydiv=document.getElementById("divErrorGeneral")){}else{
	var elDiv = document.createElement("div");
	var texto = document.createTextNode(txt);
	elDiv.setAttribute("id", "divErrorGeneral")
	elDiv.appendChild(texto);
	laForma=document.getElementsByTagName("Form")[0];
	laForma.parentNode.insertBefore(elDiv, laForma);
	}

}

function validarCampo(e){
	errorGlobal = false;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	else targ=e;
	if (targ.nodeType == 3){targ = targ.parentNode}
	elError = getError(targ,getValidaciones(targ.id));
	if(elError=="No-error"){
		borrarError(targ);
		return false
	}else{
		msgError(targ,elError);
		return true;
	}
}

function validarTodo(){
	var validarTodoError = false;
	for(l=0; l<camposFusionados.length; l++){
		obj = document.getElementById(camposFusionados[l]);
		if(validarCampo(obj)){validarTodoError=true;}
	}
	return validarTodoError;
}

function checarSubmit(e){
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	else targ=e;
	if (targ.nodeType == 3){targ = targ.parentNode}
	targe=targ;
	if (envioGlobal==0){
		if(!validarTodo()){
			if(haydiv=document.getElementById("divErrorGeneral")){
				haydiv.parentNode.removeChild(haydiv);
			}
			envioGlobal=1;
			checarSubmit(e);
		}else{
			detener(e);
			msgErrorGeneral("Please verify your information.");
		}
	}else if(envioGlobal==1){
		envioGlobal = 2;
		targ.submit();
	}
}

function ponerValidador(losCampos){
	var campo;
	for (c=0; c<losCampos.length; c++){
		if (campo = document.getElementById(losCampos[c])){
			addEvent(campo, "blur", validarCampo, false);
		}
	}
	enviar=document.getElementsByTagName("Form")[0];
	addEvent(enviar, "submit", checarSubmit, false);
}

function initValidar() {
	if(!document.getElementById) return;
	if(!document.getElementsByTagName) return;
	validarCampos[0] = document.getElementById('validarNulo').value.split(" ");
	validarCampos[1] = document.getElementById('validarMail').value.split(" ");
	fusionarCampos(validarCampos);
	if (camposFusionados.length>0){
		ponerValidador(camposFusionados);
	}
}