var defaultErrorsMsg = Array();
var errorsMsg = Array();
var traduccion = false;

defaultErrorsMsg[1] = 'Completa todos los campos requeridos.';
defaultErrorsMsg[2] = 'Esto no es un entero v&aacute;lido.';
defaultErrorsMsg[3] = 'Esto no es una fecha v&aacute;lida. El formato debe ser (aaaa-mm-dd).';
defaultErrorsMsg[4] = 'Esto no es una fecha v&aacute;lida. El formato debe ser (dd/mm/aaaa).';
defaultErrorsMsg[5] = 'Esto no es una fecha y hora v&aacute;lida. El formato debe ser (aaaa-mm-dd 00:00:00).';
defaultErrorsMsg[6] = 'Esto no es un n&uacute;mero v&aacute;lido.';
defaultErrorsMsg[7] = 'No es un archivo de imagen valido';
defaultErrorsMsg[8] = 'Esto no es un color v&aacute;lido. El formato debe ser (#xxxxxx).';
defaultErrorsMsg[9] = 'La fecha %p no es anterior a la fecha %p.';
defaultErrorsMsg[10] = 'La fecha %p no es posterior a la fecha %p.';
defaultErrorsMsg[11] = 'La fecha debe ser posterior a la actual.';
defaultErrorsMsg[12] = 'La fecha debe ser anterior a la actual.';
defaultErrorsMsg[13] = 'Este no es una direccion v&aacute;lida.';
defaultErrorsMsg[14] = 'Este no es un nombre de usuario válido. No puede comenzar o terminar con ningún símbolo y debe ser de entre 7 y 23 caracteres.';
defaultErrorsMsg[15] = 'Esta no es una contraseńa válida. Debe ser de al menos 8 caracteres.';
defaultErrorsMsg[16] = 'No es un archivo mp3 válido';
defaultErrorsMsg[17] = 'No es un archivo flv válido';
defaultErrorsMsg[18] = 'No es un archivo zip válido';
defaultErrorsMsg[19] = 'No es un archivo swf válido';
defaultErrorsMsg[20] = 'No es un archivo válido para banner. Debe ser una imagen válida (.jpg, .png, .gif, etc.) o un flash válido (.swf).';
defaultErrorsMsg[21] = 'No es un archivo tpl válido';

/*** Validadores ***/ 


Validador = {
	noVacio : isNotEmpty,
	fileBoxNoVacio : isNotEmptyFileBox,
	imageBoxNoVacio : isNotEmptyImageBox,
	entero : isValidInt,
	sqlDate : isValidSqlDate,
	spanishDate : isValidSpanishDate,
	dateBefore : isValidDateBefore,
	dateAfter : isValidDateAfter,
	dateFuture : isValidFutureDate,
	datePast : isValidPastDate,
	sqlDatetime : isValidDateTime,
	color : isValidColor,
	double : isValidDouble,
	image : isValidImageExtension,
	mp3 : isValidMp3Extension,
	flv : isValidFlvExtension,
	swf : isValidSwfExtension,
	banner : isValidBanner,
	zip : isValidZipExtension,
	tpl : isValidTplExtension,
	email : isValidEmail,
	username: isValidUsername,
	password: isValidPassword
}

function validar(formulario, errorCallback) {
	var $formElements = $(formulario.elements);
	var retorno = true;
	$formElements.each(function(i, obj) { if (retorno) { retorno = retorno && validarElemento(i, obj, errorCallback); } });
	return retorno;
}
function validarElemento(i, obj, errorCallback) {
	var elemento = obj;
	var arrayClases = elemento.className.split(" ");
	var func;
	for (i = 0; i < arrayClases.length; i++) {
		if (arrayClases[i].substr(0,9) == "validate-") {
			func = arrayClases[i].substr(9);
			if (Validador[func] !== undefined) {
				if (!Validador[func](obj.id, $.isFunction(errorCallback))) {
					if (errorCallback !== undefined) {
						errorCallback(func, obj);
					}
					return false;	
				}
			}
		}
	}
	return true;
}

function getErrorMessage(idError, params) {
	var array;
	if (window.errorsMsg === undefined || window.errorsMsg.length == 0) {
		array = defaultErrorsMsg;
	}
	else {
		array = errorsMsg;
	}
	return mensaje(idError, params, array);
}
function enfocar(elem) {
	elem.focus();
	elem.select();
}
function alertaError(id, texto, tiempo) {
	if (tiempo == null) {
		tiempo = 2000;	
	}
	var verdiv = document.getElementById('veri_'+id);
	if (verdiv != null) {
		mostrarGlobo(verdiv, texto, tiempo);
	}
}
function isNotEmpty(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /.+/;
	if(!str.match(re)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(1));
		return false;
	} 
	return true;
}
function isNotEmptyFileBox(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	if(tieneUUID(elem)) {
		var partes = separarUUID(str);
		var idVal = partes[0]+'_value_'+partes[1];
	}
	else {
		var idVal = id+'_value';
	}
	var elemVal = document.getElementById(idVal);
	var strVal = elemVal.value;
	var re = /.+/;
	if(!str.match(re) && !strVal.match(re)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(1));
		return false;
	} 
	return true;
}
function isNotEmptyImageBox(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var idVal = 'value_'+id;
	var elemVal = document.getElementById(idVal);
	var strVal = elemVal.value;
	var re = /.+/;
	if(!str.match(re) && !strVal.match(re)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(1));
		return false;
	} 
	return true;
}
function isValidInt(id, sinEnfoque) {
	var elem = document.getElementById(id); 
	if (elem.value) {
		var valor = parseInt(elem.value);
		if (isNaN(valor)) { 
			if (!sinEnfoque) {
				enfocar(elem);
			}
			alertaError(id,getErrorMessage(2));
			return false;
		}
	}
	return true;	
}
function isValidSqlDate(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var dtStr = elem.value;
	dtStr = dtStr.toString();
	dtCh = "-";
	if (!elem.value) {
		return true;
	}
	if (!isDate(dtStr,'yyyy-M-d')) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(3));
		return false;
	}
    return true;
}
function isValidSpanishDate(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var dtStr = elem.value;
	dtStr = dtStr.toString();
	dtCh = "/"
	if (!isDate(dtStr,'d/M/yyyy')) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(4));
		return false;
	}
    return true;
}
function isValidDateBefore(id, date) {
	var elem = document.getElementById(id);
	var dtStr = elem.value;
	dtStr = dtStr.toString();
	var d = Date.parse(dtStr);
	var before = d.compareTo(date) > 0 ? true : false;
	if (before) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		idError = 9;
		if (date == Date.today()) {
			idError = 12;
		}
		alertaError(id,getErrorMessage(idError));
		return false;
	}
	return true;
}
function isValidDateAfter(id, date) {
	var elem = document.getElementById(id, sinEnfoque);
	var dtStr = elem.value;
	dtStr = dtStr.toString();
	var d = Date.parse(dtStr);
	var after = d.compareTo(date) < 0 ? true : false;
	if (after) {
		enfocar(elem);
		idError = 10;
		if (date == Date.today()) {
			idError = 11;
		}
		alertaError(id,getErrorMessage(idError, Array(dtStr, date.toString('yyyy-MM-dd'))));
		return false;
	}
	return true;
}
function isValidFutureDate(id, sinEnfoque) {
	return isValidDateAfter(id, Date.today());
}
function isValidPastDate(id, sinEnfoque) {
	return isValidDateBefore(id, Date.today());
}
function isValidDateTime(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /^\d{4}\-\d{1,2}\-\d{1,2}( \d{1,2})?(:\d{1,2})?(:\d{1,2})?$/;
	var str = str.toString();
	if (str) {
		if (!str.match(re)) {
			if (!sinEnfoque) {
				enfocar(elem);
			}
			alertaError(id,getErrorMessage(5));
			return false;
		}
	}
    return true;
}
function isValidColor(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /^\#[0-9a-fA-F]{6}$/;
	str = str.toString();
	if (str) {
		if (!str.match(re)) {
			if (!sinEnfoque) {
				enfocar(elem);
			}
			alertaError(id,getErrorMessage(8));
			return false;
		}
	}
    return true;
}
function isValidDouble(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /^[-]?\d*\.?\d*$/;
	str = str.toString();
	if (str) {
		if (!str.match(re)) {
			if (!sinEnfoque) {
				enfocar(elem);
			}
			alertaError(id,getErrorMessage(6));
			return false;
		}
	}
	return true;
}
function isValidImageExtension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['gif', 'jpg', 'jpeg', 'png', 'jpe', 'bmp', 'tif', 'ico'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(7),5000);
			return false;
		}
	}
    return true;
}
function isValidMp3Extension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['mp3'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(16),5000);
			return false;
		}
	}
    return true;
}
function isValidFlvExtension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['flv'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(17),5000);
			return false;
		}
	}
    return true;
}
function isValidSwfExtension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['swf'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(19),5000);
			return false;
		}
	}
    return true;
}
function isValidBanner(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['gif', 'jpg', 'jpeg', 'png', 'jpe', 'bmp', 'tif', 'ico', 'swf'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(20),5000);
			return false;
		}
	}
    return true;
}
function isValidZipExtension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['zip'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(18),5000);
			return false;
		}
	}
    return true;
}
function isValidTplExtension(id, sinEnfoque) {
	var elem = document.getElementById(id);
    var filename = elem.value;
	if (filename != "") {
		var extns = ['tpl'];
		if (!hasExtension(filename, extns)) {
			alertaError(id,getErrorMessage(21),5000);
			return false;
		}
	}
    return true;
}
function isValidEmail(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!str.match(emailRegEx)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(13));
		return false;
	}
	return true;
}
function isValidUsername(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /^[a-z][\da-z_]{1,22}[a-z\d]$/;
	if(!str.match(re)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(14));
		return false;
	}
	else {
		return true;
	}
}
function isValidPassword(id, sinEnfoque) {
	var elem = document.getElementById(id);
	var str = elem.value;
	var re = /^\w{8,}$/;
	if(!str.match(re)) {
		if (!sinEnfoque) {
			enfocar(elem);
		}
		alertaError(id,getErrorMessage(15));
		return false;
	}
	else {
		return true;
	}
}
/*******************************************************/