/**
 * Utilidades de javascript para el cylog
 */
function execJS(node) {
	var bSaf = (navigator.userAgent.indexOf("Safari") != -1);
	var bOpera = (navigator.userAgent.indexOf("Opera") != -1);
	var bMoz = (navigator.appName == "Netscape");
	if (!node) {
		return;
	}
	/* IE wants it uppercase */
	var st = node.getElementsByTagName("script");
	var strExec;
	for (var i = 0; i < st.length; i++) {
		if (bSaf) {
			strExec = st[i].innerHTML;
			st[i].innerHTML = "";
		} else {
			if (bOpera) {
				strExec = st[i].text;
				st[i].text = "";
			} else {
				if (bMoz) {
					strExec = st[i].textContent;
					st[i].textContent = "";
				} else {
					strExec = st[i].text;
					st[i].text = "";
				}
			}
		}
		try {
			var x = document.createElement("script");
			x.type = "text/javascript";
			/* In IE we must use .text! */
			if ((bSaf) || (bOpera) || (bMoz)) {
				x.innerHTML = strExec;
			} else {
				x.text = strExec;
			}
			if (!existeDuplicado(strExec)) {
				document.getElementsByTagName("head")[0].appendChild(x);
			}
		}
		catch (e) {
			alert(e);
		}
	}
}

function existeDuplicado(strExec) {
	var heads = document.getElementsByTagName("head");
	var numeroHeads = heads.length;
	var iterHead = 0;
	var duplicado = false;
	while (!duplicado && (iterHead < numeroHeads)) {
		var head = heads[iterHead];
		var scripts = head.getElementsByTagName("script");
		var numeroScripts = scripts.length;
		var iterScript = 0;
		while (!duplicado && (iterScript < numeroScripts)) {
			var script = scripts[iterScript];
			if (script.text == strExec) {
				duplicado = true;
			}
			iterScript++;
		}
		iterHead++;
	}
	return duplicado;
}

function eliminarScriptsAnteriores() {
	var bSaf = (navigator.userAgent.indexOf("Safari") != -1);
	var bOpera = (navigator.userAgent.indexOf("Opera") != -1);
	var bMoz = (navigator.appName == "Netscape");
	/* IE wants it uppercase */
	var st = document.getElementsByTagName("head")[0].getElementsByTagName("script");
	var strExec;
	for (var i = 0; i < st.length; i++) {
		if (bSaf) {
			strExec = st[i].innerHTML;
			if (strExec != "") {
				st[i].innerHTML = "";
			}
		} else {
			if (bOpera) {
				strExec = st[i].text;
				if (strExec != "") {
					st[i].text = "";
				}
			} else {
				if (bMoz) {
					strExec = st[i].textContent;
					if (strExec != "") {
						st[i].textContent = "";
					}
				} else {
					strExec = st[i].text;
					if (strExec != "") {
						st[i].text = "";
					}
				}
			}
		}
	}
}



GALILEO.cylog.utils.Connect.asyncRequestEl = function(url, containerId, success) {
	var callback = {
		success: function(o) {
			var element = document.getElementById(containerId);
			element.innerHTML = o.responseText;
			if (success) {
				success();
			}
		},
		failure: GALILEO.util.Connect.handlerFailure,
		scope: this
	};
	
	var expresion = /(.*)\.do(x?)(.*)/;
	if (expresion.test(url)) {
		url = url.replace(expresion, "$1" + ".dox" + "$3");
	}
	return GALILEO.util.Connect.asyncRequest(url, callback);
};


/*
 * Metodo encargado de realizar un submit del formulario asíncronamente al servidor
 * y escribir el resultado en una capa
 * @param formEl Nombre o elemento que posee el formulario que deseamos enviar
 * @param accion Metodo que se debe ejecutar en el servidor
 * @param contaninerId Capa en la cual realizar la carga del resultado devuelto por
 *        el servidor
 * @param success Metodo a ejecutar si la peticion se realiza de forma correcta
 * @param failure Metodo a ejecutar si la peticion no se realiza de forma correcta
 * @return El objeto conexion
 */
GALILEO.cylog.utils.Connect.asyncSubmitFormEl = function (formEl, success, failure) {
	var form = formEl;
	if (typeof formEl == "string") { 
		form = document.forms[formEl];
	}

	// Obtenemos el action del formulario y cambiamos el .do por .dox
	var action = form.action;
	var expresion = /(.*)\.do.?/;
	if (expresion.test(action)) {
		form.action = action.replace(expresion, "$1" + ".dox");
	}

	var callback = {
		success: function(o) {
			if (success) {
				success();
			}
		},
		failure: function(o) {
			GALILEO.util.Connect.handlerFailure(o);
			if (failure) {
				failure();
			}
		},
		scope: this
	};
	
	YAHOO.util.Connect.setForm(form);
	return YAHOO.util.Connect.asyncRequest('POST', form.action, callback);
};

//Seis decimales
/*
 * Definicion de la clase encargada de realizar el formateo de un numero flotante o integer 
 * al estilo xxxxx,yy (2 digitos fraccionales)
 * Por defecto realiza el formateo de los numeros utilizando redondeo
 */
GALILEO.cylog.utils.Number.FormatNumber = function() {
	this.formatter = new NumberFormat();		
    this.formatter.setCommas(true);
	this.formatter.setNegativeFormat(this.LEFT_DASH);
    this.formatter.setNegativeRed(false);
    this.formatter.setCurrency(false);
    this.formatter.setCurrencyPrefix('');
    this.formatter.setPlaces(6, false);
    this.formatter.setSeparators(true, '', ',');
    this.defaultNumberFormat = "0,000000";
};

/*
 * Definicion del formateador encargado de formatear los numeros
 */
GALILEO.cylog.utils.Number.FormatNumber.formatter = null;
/*
 * Definicion del formato por defecto a devolver
 */
GALILEO.cylog.utils.Number.FormatNumber.defaultNumberFormat = null;

/*
 * Metodo encargado de realizar el formato de un numero a punto flotante
 * @param number Numero a formatear
 * @return El numero formateado o 0,00 en el caso de que sea incorrecto
 */
GALILEO.cylog.utils.Number.FormatNumber.prototype.format = function(number) {
	if (number) {
		// Parseamos el numero en el caso de que sea valido
		number = this.parse(number);
		// Comprobamos que es correcto
		if (((GALILEO.util.String.isFloat(number) == true) || (GALILEO.util.String.isInt(number) == true)) && (number > 0)) {
			this.formatter.setNumber(number);
			return this.formatter.toFormatted();
		}
	}
	
	return this.defaultNumberFormat;
};

/*
 * Metodo encargado de realizar el parseo de un numero
 * @number Numero a parsear
 * @return El numero parseado en punto flotante o 0.0 si no es un numero
 */
GALILEO.cylog.utils.Number.FormatNumber.prototype.parse = function(number) {
	var exp = /(\d+),(\d+)/;
	
	if (exp.test(number)) {
		number = number.replace(exp, "$1" + '.' + "$2");
	}
	var numberParse = parseFloat(number);
	
	if (isNaN(numberParse))
		return parseFloat('0.0');
	
	return numberParse;
};

/*
 * Metodo encargado de truncar un numero decimal al numero de digitos indicados
 * @param number Numero a truncar
 * @param digits Digitos a mostrar
 * @param msg Mensaje que se desea mostrar informando que no se permiten mas digitos
 * decimales
 * @return El numero truncado
 */
GALILEO.cylog.utils.Number.FormatNumber.prototype.truncate = function(number, msg) {
	if (number) {
		// Comprobamos la posicion de la coma que indica la parte decimal
		var parteEntera = number + "";
		var parteDecimal = "";
		var posComa = parteEntera.indexOf(',');
		if (posComa != -1) {
			parteDecimal = ',' + parteEntera.substring(posComa + 1, parteEntera.length);
			if ((parteDecimal.length > 3) && (msg)){
				var dlg = new GALILEO.widget.GSimpleDialog('__dlgFormatNumber', '25em', false, true);
			    dlg.setIcon(GALILEO.widget.SimpleDialog.config.WARN_ICON);
				dlg.setHeader("Warning");
				dlg.setBody(msg);
				dlg.show();
				parteDecimal = parteDecimal.substring(0, 3);
			}
			parteEntera = parteEntera.substring(0, posComa);
		}
		
		return parteEntera + parteDecimal;
	}
	
	return this.defaultNumberFormat;
};
GALILEO.cylog.utils.Number.formatNumber = new GALILEO.cylog.utils.Number.FormatNumber();

