var reRow = new RegExp(/^row_(.*)$/);
var reDel = new RegExp(/^del_(.*)$/);
var reMenu = new RegExp(/^mnu_(.*)$/);
var reToggle = new RegExp(/^toggle_(.*)$/);
var reStatus = new RegExp(/^status_(.*)$/);
var LOCAL_COUNTRY = 31;

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function () {
			oldonload();
			func();
		}
	}
}

/** Validacion del formulario **/

var listaCampos= new Array();
var listaEtiquetas = new Array();

var validateEvents = function () {
	listaEtiquetas = new Array();
	listaCampos = new Array();
	// etiquetas
	var labels = document.getElementsByTagName("label");
	for (i=0; i<labels.length; i++) {
		if (labels[i].className == 'required') {
			listaEtiquetas.push(labels[i].firstChild.data);
			// parchecito para IE (como siempre!)
			var targetname=labels[i].getAttribute('for')?labels[i].getAttribute('for'):labels[i].getAttribute('htmlFor');
			var targetfield = document.getElementById(targetname);
			if (targetfield != null) {
				listaCampos.push(targetfield.name);
			}
		}
	}
}

/** Extiende el objeto Array **/
Array.prototype.in_array = in_array;
function in_array (param) {
	for (var i=0; i<this.length; i++) {
		if (this[i] == param) return true;
	}
	return false;
}

Array.prototype.remove = remove;
function remove (param) {
	var temp = Array();
	for (var i=0; i<this.length; i++) {
		if (this[i] != param) {
			temp.push(this[i]);
		}
	}
	return temp;
}

/** Validacion de formulario **/

function validaForm (nomForm, campos, etiquetas, mensaje_init, delimitador) {
	var argumentos=validaForm.arguments;
	if (argumentos[0] == null) {
		var nomForm = 'forms[0]';
	} else {
		var nomForm = argumentos[0];
	}
	
	var campos = argumentos[1];
	var etiquetas = argumentos[2];
	if (argumentos[3] == '') {
		mensaje_init = 'Por favor, rellena\n';
	}
	
	if (argumentos[4] == null) {
		var delimitador = ', ';
	}
	
	/*for ( var i = 0; i < campos.length; i++){
		alert("Eti: " + etiquetas[i]);
		alert("campo: " + campos[i]);
	}*/
	
	var mensaje = mensaje_init;
		for ( var i = 0; i < campos.length; i++){
			switch (eval("document."+nomForm+"."+campos[i]).type.substring(0,1)){
				case "t" :	// texto o un textarea
					if (validaText(nomForm, campos[i]) == 0){
						if (mensaje == mensaje_init) {
							mensaje = mensaje+etiquetas[i];
						}else{
							mensaje = mensaje + delimitador+etiquetas[i];
						}
					}
					break;
				case "s" :	// select simple o múltiple
					if(validaSelect(nomForm, campos[i])==0){
						if (mensaje == mensaje_init) {
							mensaje = mensaje+etiquetas[i];
						}else{
							mensaje = mensaje + delimitador+etiquetas[i];
						}
					}
					break;
				case "p" :
					if (validaText(nomForm, campos[i]) == 0){
						if (mensaje == mensaje_init) {
							mensaje = mensaje+etiquetas[i];
						}else{
							mensaje = mensaje + delimitador+etiquetas[i];
						}
					}
					break;
				case "h" :
					if (validaText(nomForm, campos[i]) == 0){
						if (mensaje == mensaje_init) {
							mensaje = mensaje+etiquetas[i];
						}else{
							mensaje = mensaje + delimitador+etiquetas[i];
						}
					}
					break;
	
				default :
					break;
			}
		}
		if (mensaje != mensaje_init) {
			alert(mensaje);
		} else {
			return 1;
		}
}

/*	Esta función valida un campo texto o textarea. Devuelve 0 si el campo está vacío o es nulo.
Devuelve 1 en caso contrario
*/
function validaText(nomForm,nomTexto) {
	if (eval("document."+nomForm+"."+nomTexto+".value") == null || eval("document."+nomForm+"."+nomTexto+".value") == "") {
		return 0;
	}
	else {
		return 1;
	}
}

/* Esta funcion valida la selección en un tag select, que debe ser diferente de la primera opción (o sea, 0)
Si se ha seleccionado algo distinto de la primera opción, devuelve 1. Si no, devuelve 0.
*/

function validaSelect(nomForm,nomSelect) {
	var indice = eval("document."+nomForm+"."+nomSelect+".selectedIndex");
	if (indice == 0) {
		return 0;
	}
	else {
		return 1;
	}
}

/* esta función comprueba que una dirección email es correcta */
function validaEmail(nomForm, nomCampo, mensaje){
	valor = eval("document."+nomForm+"."+nomCampo+".value");
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // no válidos
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // válidos
	if (!reg1.test(valor) && reg2.test(valor)) { // si la sintaxis es correcta
		return 1;
	}
	alert(mensaje);
}

/* esta función comprueba que una lista de campos (array) son numéricos */
function validaNumericos(nomForm, listaCampos, listaEtiquetas, mensaje_init) {
	var argumentos=validaNumericos.arguments;
	var nomForm = argumentos[0];
	var campos = argumentos[1];
	var etiquetas = argumentos[2];
	if (argumentos.length == 4) {
		var mensaje_init = argumentos[3]
	} else {
		mensaje_init = 'Los siguiente campos deben ser numéricos:\n';
	}
	var mensaje = mensaje_init;
	// bucle para validar los campos
	for ( var i = 0; i < campos.length; i++){
		var valor_campo = eval("document."+nomForm+"."+campos[i]+".value");
		if (esNumerico (valor_campo) == 0) {
			if (mensaje == mensaje_init) {
				mensaje = mensaje+etiquetas[i];
			} else{
				mensaje = mensaje + ", "+etiquetas[i];
			}
		}
	}
	if (mensaje != mensaje_init) {
		alert(mensaje);
	} else {
		return 1;
	}

}

function esNumerico (valor) {
	var reg = /[^0123456789]/;
	if (reg.test(valor)) {
		// si hay algún caracter no numérico.
		return 0;
	} else {
		return 1;
	}
}

var homeSearch = function () {
	var form = document.fSearchHome;
	if (form != null) {
		form.onsubmit = doSearch;
	}
}

var doSearch = function () {
	var complete = false;
	var reSel = new RegExp(/^select/);
	var ambito = null;
	for (i=0; i<this.elements.length; i++) {
		if(reSel.test(this.elements[i].type) && this.elements[i].selectedIndex > 0) {
			complete = true;
		}
	}
	if (!complete){
		alert("Por favor, selecciona alguna opción de búsqueda.");
		return false;
	} else {
		// si es busqueda en todo el web, cambia la action
		var ambito = document.fSearchHome.ambito;
		if (ambito != null) {
			// mira si está checkeado el r_all
			var r_all = document.getElementById("r_all");
			if (r_all.checked) {
				this.id_sector.value = 0;
				this.action = "/ofertas/resultado_busqueda.php";
			}
		}
		this.submit();
	}
}

var menuEvents = function () {
	var mnus = document.getElementsByTagName("ul");

	for (i=0; i<mnus.length; i++) {
		if (reMenu.test(mnus[i].id)) {
			// lista de li
			var lis = mnus[i].getElementsByTagName("li");
			for (j=0; j<lis.length; j++) {
				lis[j].onmouseover = mnuOver;
				lis[j].onmouseout = mnuOut;
				lis[j].onclick = mnuClick;
			}
		}
	}
}

var updateEvents = function () {
	alert(Locale.show("Datos actualizados"));
}

var mnuClass = "";

var mnuOver = function () {
	if ((this.className != 'current') && (this.className != 'inactive')) {
		mnuClass = this.className;
		this.className = 'over';
	}
}

var mnuOut = function () {
	if ((this.className != 'current') && (this.className != 'inactive')) {
		this.className = mnuClass;
	}
}

var mnuClick = function () {
	// obtiene el href de su link
	var link = this.getElementsByTagName("a")[0];
	if (link != null) {
		document.location = link.href;
	}
}

/** Efectos de rollover sobre listas **/
var classname = '';

var rowEvents = function () {
	var trs = document.getElementsByTagName("tr");
	for (i=0; i<trs.length; i++) {
		if (reRow.test(trs[i].id)) {
			trs[i].onmouseover = function() {
				classname = this.className;
				this.className = 'over';
			}
			trs[i].onmouseout = function() {
				this.className = classname;
			}
		}
	}
}

/**
 * Actualiza el inner html de un elemento
 */
var updateH = function (item_name, nu_title) {
	var item = document.getElementById(item_name);
	if (item != null) {
		item.innerHTML = nu_title;
	}
}

var InputField={
	formatea:function(clase) {
		var fields = document.getElementsByTagName("INPUT");
		for (i=0; i<fields.length; i++) {
			if ((fields[i].type == "text") || (fields[i].type == "password")) {
				fields[i].className = clase;
			}
		}
		return false;
	}
}

/**
 * Convierte horas entre zonas horarias
 * 
 * @example
 * Calcula la hora en Mexico
 * var mydate = TimeZone.currentTimeInZone("-6");
 * 
 * @param float offset
 * @return Date
 */
TimeZone={
	currentTimeInZone:function(offset) {
		var d = new Date();
		var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
		nd = new Date(utc + (3600000*offset));
		return nd;
	}	
}

var Locale={
	show:function(msg, dict) {
		if (dict == null) {
			dict = i18n;
		}
		for (var i in dict) {
			if (i == msg) {
				msg = dict[i];
				break;
			}
		}
		return msg;
	}	
}
