var toggle = 0;
var toggle_n = 0;
var interval_id;

var toggle_obj = 0;
var toggle_obj_bg;
var toggle_obj_bg_blk = '#FFEAEE';

var msg_fill_field = 'Debe ingresar : ';
var msg_sele_field = 'Debe seleccionar una opción en: ';
var msg_fill_valid = 'Debe ingresar un valor válido en: ';

function validateFields(frm){

	if (frm.elements.length) 
		for (var i = 0; i < frm.elements.length; i++){

			var obj = frm.elements[i];
			//alert(obj.type);
			switch (obj.type){

				case 'text':
					/*if (!validateText(obj)) return false;
					break;*/				
				case 'file':
					/*if (!validateText(obj)) return false;
					break;*/					
				case 'password':
					/*if (!validateText(obj)) return false;
					break;*/				
				case 'textarea':
					
					if (!validateText(obj)) return false;
					break;
					
				case 'radio':
					if (!validateRadio(obj)) return false;
					break;

				case 'select-one':
					if (!validateSelect(obj)) return false;
					break;
				case 'checkbox':
					if (!validateCheckbox(obj)) return false;
					break;
				default:
					break;
			}
		}

	return true;
}

function validateField(str, type, params){

	switch (type){

		case 'A':
			return chkAlphabetic(str);
			break;

		case 'AN':
			return chkAlphaNumeric(str);
			break;

		case 'I':
			return chkInt(str);
			break;

		case 'UI':
			return chkUnsignedInt(str);
			break;

		case 'F':
			return chkFloat(str);
			break;

		case 'UF':
			return chkUnsignedFloat(str);
			break;

		case 'FR':
			return chkFloatRange(str, params);
			break;

		case 'DATE':
			return chkDate(str);
			break;

		case 'ANY':
			return chkAny(str);
			break;
			
		case 'EMAIL':
			return checkEmail(str);
			break;
			
		case 'ZIP':
			return chkZip(str);
			break;

		default:
			alert('Tipo desconocido. Considere hacer una donación para tomarlo en cuenta.');
			return false;
	}
}

function chkAny(str){

	var exp = /^.+$/;

	if (str.search(exp) == -1) return false;
	return true;
}


function chkZip(str){
    CPValido=true
    //si no tiene 5 caracteres no es válido
   if (str.length != 5)
         CPValido=false
      else{
         for (i=0;i<5;i++){
            CActual = str.charAt(i)
            if (!chkInt(CActual)){
               CPValido=false
               break;
            }
         }
      }
   return CPValido
}


function checkEmail(inEmail)
{
 var er_email1 = /^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/ ;//primer filtro
 var er_email2 = /^([0-9]|[a-z]|[A-Z]|\.|\@|\_|-)+$/ ;//segundo filtro
 var myTest1 =! er_email1.test(inEmail); 
 var myTest2 =! er_email2.test(inEmail);

	if (inEmail.indexOf('@') == -1)
	{
		return false 
	}
	
	if (myTest1 || myTest2) 
	{
		return false;
	}
	return true
}

function chkAlphabetic(str){

	var exp = /[0-9\_\+\-\*\/\!\?\"\$\%\&\(\)\=\?\?\'\|\@\#\[\]\{\}\,\;\:\<\>\\\t]/;

	if (str.search(exp) != -1) return false;
	return true;
}

function chkAlphaNumeric(str){

	var exp = /[\_\+\-\*\!\?\"\&\(\)\=\?\?\'\|\@\[\]\{\}\;\:\<\>\\\t]/;

	if (str.search(exp) != -1) return false;
	return true;
}

function chkInt(str){

	var exp = /^[\+\-]{0,1}[0-9]+$/;

	if (str.search(exp) == -1) return false;
	return true;
}

function chkUnsignedInt(str){

	var exp = /^[0-9]+$/;

	if (str.search(exp) == -1) return false;
	return true;
}

function chkFloat(str){

	var exp = /^[\+\-]{0,1}[0-9]+[\.]{0,1}[0-9]*$/;

	if (str.search(exp) == -1) return false;
	return true;
}

function chkUnsignedFloat(str){

	var exp = /^[0-9]+[\.]{0,1}[0-9]*$/;

	if (str.search(exp) == -1) return false;
	return true;
}

function chkFloatRange(str, params){

	var cond = get_params(params);
	if (!cond[3]) return false;
	if (!cond[4]) return false;

	if (chkFloat(str) && (str*1 >= cond[3]*1) && (str*1 <= cond[4]*1)) return true;
	return false;
}

function chkDate(str){

	var exp1 = /^[0-9]{4}[-\/][0-9]{1,2}[-\/][0-9]{1,2}$/;
	var exp2 = /^[0-9]{1,2}[-\/][0-9]{1,2}[-\/][0-9]{4}$/;

	if (str.search(exp1) != -1 || str.search(exp2) != -1) return true;
	return false;
}

function get_params(str){

	var arr;

	if (str.indexOf('|') != -1){

		arr = str.split('|');
		if (!arr.length)
			return false;

		return arr;
	}

	return false;
}

function validateText(obj){

	var field_name;
	var field_type;
	var cond = get_params(obj.lang);
	if (!cond) return true;

	if (cond[0] == '0' && obj.value == '') return true;
	field_name = cond[1];
	field_type = cond[2];

	if (cond[0] == '1' && obj.value == ''){
		alert(msg_fill_field+'"'+field_name+'".');
		obj_blink(obj);
		obj.focus();
		return false;
	}

	if (!validateField(obj.value, field_type, obj.lang)){
		alert(msg_fill_valid+'"'+field_name+'".');
		obj_blink(obj);
		obj.focus();
		return false;
	}

	return true;
}

function validateRadio(obj){

	var field_name;
	var cond = get_params(obj.lang);
	if (!cond) return true;

	if (cond[0] == '0') return true;
	field_name = cond[1];

	var some_checked = false;
	for (var i = 0; i < obj.form.elements.length; i++){
		var rd = obj.form.elements[i];
		if (rd.type == 'radio' && rd.name == obj.name)
			if (rd.checked){
				some_checked = true;
				break;
			}
	}

	if (!some_checked){
		alert(msg_sele_field+'"'+field_name+'".');
		obj.focus();
		return false;
	}

	return true;
}

function validateSelect(obj){

	var field_name;
	var cond = get_params(obj.lang);
	if (!cond) return true;

	if (cond[0] == '0') return true;
	field_name = cond[1];

	sel = obj.selectedIndex;
	//if (obj.options[sel].value == 0 || obj.options[sel].value == ''){
	if (obj.options[sel].value == ''){
		alert(msg_sele_field+'"'+field_name+'".');
		obj_blink(obj);
		obj.focus();
		return false;
	}

	return true;
}

function obj_blink(obj){

	toggle_obj = obj;
	toggle_obj_bg = obj.style.backgroundColor;
	interval_id = window.setInterval("change_obj_bg_color()", 100);
}

function change_obj_bg_color(){

	if (toggle_n >= 10 || !toggle_obj){
		toggle = 0;
		toggle_n = 0;
		toggle_obj = 0;

		clearInterval(interval_id);
		interval_id = 0;
		return;
	}

	if (toggle){
		toggle = 0;
		toggle_obj.style.backgroundColor = toggle_obj_bg;
	} else {
		toggle = 1;
		toggle_obj.style.backgroundColor = toggle_obj_bg_blk;
	}

	toggle_n++;
}

function max_length(obj, max, e){

	if (obj.value.length >= max){
		if (document.all) window.event.returnValue = false;
		else e.preventDefault();
	} else return true;
}

function check_checkboxes(frm, exp, val){

	for (var i = 0; i < frm.elements.length; i++){
		var obj = frm.elements[i];
		if (obj.type == 'checkbox' && obj.name.search(exp) != -1)
			obj.checked = val;
	}
}

function validateCheckbox(obj){

	var field_name;
	var cond = get_params(obj.lang);
	if (!cond) return true;

	if (cond[0] == '0') return true;
	field_name = cond[1];

	var some_checked = false;
	for (var i = 0; i < obj.form.elements.length; i++){
		var rd = obj.form.elements[i];
		if (rd.type == 'checkbox' && rd.name == obj.name)
			//alert(rd.name);
			if (rd.checked){
				some_checked = true;
				break;
			}
	}

	if (!some_checked){
		alert(msg_sele_field+'"'+field_name+'".');
		obj.focus();
		return false;
	}

	return true;
}

function confirm_action(msg, url){

	if (confirm(msg))
		window.location = url;
}
