var width = 200; //error message width

//=====================================================================================================
//ERROR MESSAGES:

var vMSG_Required = "Este dato es requerido."
var vMSG_MinLength2 = "Este dato debe consistir de dos o m&aacute;s letras.";
var vMSG_EmailFormat = "Formato inv&aacute;lido de correo electr&oacute;nico. Favor de verificarlo.";
var vMSG_PhoneNum = "Un n&uacute;mero telef&oacute;nico debe consistir m&iacute;nimo de 10 d&iacute;gitos."
var vMSG_RequiredIF = "Este dato es requirido por ser dependiente de: <i>%s</i>.";
var vMSG_RequiredCBox = "Al menos uno de los campos de este grupo debe estar seleccionado."

//=====================================================================================================
//FORM VALIDATION

function validateForm(form){
	var exit = true;
	var fields = new Array();
	var elements = form.getElementsByTagName("*");
	for(var i=0; i<elements.length; i++){
		if(elements[i].tagName.toLowerCase() == "input" || 
			elements[i].tagName.toLowerCase() == "select" ||
			elements[i].tagName.toLowerCase() == "textarea"){
			fields.push(elements[i]);
		}
	}
	for(var i=0; i<fields.length; i++){
		if(fields[i].getAttribute("validate") && !fields[i].disabled){
			exit = validateField(fields[i]);
		}
		if(!exit){break;}
	}
	return exit;
}

function validateField(obj){
	var exit = true;
	var filters = obj.getAttribute("validate").split(",");
	for(var i=0; i<filters.length; i++){
		exit = applyFilter(obj,filters[i]);
		if(!exit){
			obj.setAttribute("onblur","destroyTTMessage(document.forms[0]."+obj.name+");");
			obj.onblur = function(){destroyTTMessage(obj);};
			break;
		}
	}
	return exit;
}

function applyFilter(obj,filter){
	switch(filter){
	case "required":
		return vRequired(obj);
	case "size2":
		return vMinLength2(obj);
	case "tel":
		return vPhoneNum(obj);
	case "email":
		return vEmailFormat(obj);
	case "requiredIF":
		return vRequiredIF(obj);
	case "requiredCBox":
		return vRequiredCBox(obj);
	default:
		return true;
	}
}


//=====================================================================================================
//FITLERS

function vRequired(obj){
	var exit = false;
		if((obj.tagName.toLowerCase() == "select") ? obj.selectedIndex < 1 : obj.value.length < 1){
			showTTMessage(obj,width,vMSG_Required);
			obj.focus();
		}else{
			exit = true;
		}
	return exit;
}

function vMinLength2(obj){
	var exit = false;
	if(obj.value.length < 2){
		showTTMessage(obj,width,vMSG_MinLength2);
		obj.focus();
	}else{
		exit = true;
	}
	return exit;
}

function vPhoneNum(obj){
	var exit = false;
	if(obj.value.length < 7 && obj.value.length > 0){
		showTTMessage(obj,width,vMSG_PhoneNum);
		obj.focus();
	}else{
		exit = true;
	}
	return exit;
}

function vEmailFormat(obj){
	var exit = false;
	if(!validateEmail(obj.value) && obj.value.length>0){
		showTTMessage(obj,width,vMSG_EmailFormat);
		obj.focus();
	}else{
		exit = true;
	}
	return exit;
}

function vRequiredIF(obj){
	var exit = false;
	var ifType = obj.getAttribute("if");
	var ifValues = new Array();
	var ifel = null;
	if(ifType.indexOf("{")!=-1){
		ifel = ifType.substring(0,ifType.indexOf("{"));
		var ifValuesString = ifType.substring(ifType.indexOf("{")+1,ifType.indexOf("}"));
		if(ifValuesString.indexOf(",")!=-1){
			ifValues = ifValuesString.split(",");
		}else{
			ifValues[0] = ifValuesString;
		}
	}else{
		ifel = ifType;
	}
	var depEl = document.getElementsByName(ifel); //master element
	if(depEl[0].tagName.toLowerCase() == "select"){
		if(isIn(depEl[0].selectedIndex,ifValues) && ((obj.tagName.toLowerCase() == "select") ? obj.selectedIndex < 1 : obj.value.length < 1)){
			showTTMessage(obj,width,vMSG_RequiredIF,obj.getAttribute("ifname"));
			obj.focus();
		}else{
			exit = true;
		}
	}else{
		if(isIn(depEl[0].selectedIndex,ifValues) && ((obj.tagName.toLowerCase() == "select") ? obj.selectedIndex < 1 : obj.value.length < 1)){
			showTTMessage(obj,width,vMSG_RequiredIF,obj.getAttribute("ifname"));
			obj.focus();
		}else{
			exit = true;
		}
	}
	return exit;
}

function vRequiredCBox(obj){
	var exit = false;
	var chboxes = document.getElementsByName(obj.name);
	for(var i=0; i<chboxes.length; i++){
		if(chboxes[i].checked){exit = true;}
	}
	if(!exit){showTTMessage(obj,width,vMSG_RequiredCBox);}
	return exit;
}


//=====================================================================================================
//TOOLTIP

function showTTMessage(obj,width,msg,extraTxt){
	document.getElementById("tooltip").innerHTML = ""+
		"<div class=\"ul\"><div></div></div>"+
		"<div class=\"u\" style=\"width:"+(width-22)+"px;\"></div>"+
		"<div class=\"ur\">"+
			"<div class=\"close\" onclick=\"destroyTTMessage(document.forms[0]."+obj.name+");\"></div>"+
		"</div>"+
		"<table cellpadding=\"0\" cellspacing=\"0\" style=\"width:"+width+"px;\">"+
			"<tr>"+
				"<td class=\"l\"></td>"+
				"<td class=\"msg\" style=\"width:"+(width-22)+"px;\">"+msg.replace("%s",extraTxt)+"</td>"+
				"<td class=\"r\"></td>"+
			"</tr>"+
		"</table>"+
		"<div class=\"bl\"></div>"+
		"<div class=\"b\" style=\"width:"+(width-22)+"px;\"></div>"+
		"<div class=\"br\"></div>";
	var pos = findPos(obj);
	document.getElementById("tooltip").style.top = (pos[1])+"px";
	document.getElementById("tooltip").style.left = (pos[0]+obj.offsetWidth)+"px";
	document.getElementById("tooltip").style.display = "block";
}

function destroyTTMessage(obj){
	document.getElementById("tooltip").style.display = "none";
	document.getElementById("tooltip").innerHTML = "";
	try{
		obj.removeAttribute("onblur");	
	}catch(e){}
}

function findPos(obj){
	var curleft = 0;
	var curtop = 0;
	if(obj.offsetParent){
		while(1){
			curtop += obj.offsetTop;
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	}else if(obj.x){
		curleft += obj.x;
      curtop += obj.y;
	}
	return [curleft,curtop];
}


//=====================================================================================================
//ADDITIONAL TOOLS

function validateEmail(email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(email);
}

function trim(str) {
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}


function toUpCase(el){
	el.value = el.value.toUpperCase();
}

function toLoCase(el){
	el.value = el.value.toLowerCase();
}


//funcs for collection merge
function obValsl(ob){
	var r=[], mx=ob.length;
	for(var z=0; z<mx; z++){
		r[z]=ob[z];
	}
	return r;
}

function tags(tagName){
	return obValsl(document.getElementsByTagName(tagName));
}

function isIn(value,list){
	var exit = false;
	for(var i=0; i<list.length; i++){
		if(value == list[i]){exit = true;}
	}
	return exit;
}
