
var MiGadgeTo = {
	baseEstatico : window.baseEstaticoEspecifico,
	baseImpe : window.baseImpeEspecifico,
	baseRecursos : window.baseRecursosEspecifico,
	params : {
		"categoria" : "cat",
		"id" : "idGadget",
		"idPortada" : "idPortada",
		"idArticulo" : "idArticulo",
		"json" : "res",
		"nombrePref" : "pref",
		"operacion" : "op",
		"res" : "res",
		"timestamp" : "tsPortada",
		"online" : "online",
		"uuid" : "uuidGadget"
	},
	
	url_base : "/publico/impe/gadgets/gadget",
	operaciones : {
		"rss" : "obtieneRSS",
		"url" : "obtieneUrl",
		"noticia" : "obtieneArticulos",
		"galeria" : "obtieneGaleria",
		"multimedia" : "obtieneMultimedia",
		"listadoNoticias" : "obtieneArticulos",
		"secciones" : "obtieneSecciones"
	},
	
	/**
	 * Devuelve el valor del texto para un objeto JSON
	 * Por ejemplo:
	 * a = {"b" : "valor"} || a = {"b" : {"#text" : "valor"}} => getTextFromJSON(a.b) devuelve "valor"
	 * a = "4" || a = 4 => getTextFromJSON(a) devuelve "4"
	 * a = function() { bla bla bla } => getTextFromJSON(a) devuelve ""
	 * a = false => getTextFromJSON(a) devuelve "false"
	 */
	getTextFromJSON: function(obj) {
		var result = "";
		
		if (typeof obj == "undefined" || obj === null) { // Se trata de un objeto indefinido y/o nulo
			result = "";
		} else if (typeof obj == "object") {
			if (obj["#text"] != null) {
				result = obj["#text"];
			} else if (obj["#cdata"] != null) {
				result = obj["#cdata"];
			} else {
				result = "";
			}
		} else if (typeof obj == "function") { // Se trata de una función o método
			result = "";
		} else { // Se trata de una cadena, número o booleano, luego devolvemos el mismo objeto en forma de cadena
			result = "" + obj;
		}
		
		return result;
	},
	
	obtenerFuenteExterna: function(params) {
		if (!params) {
			params = {};
		}
		params[this.params["operacion"]] = this.operaciones["url"];
		params[this.params["timestamp"]] = window.timestampPortada;
		var result = "";
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: $H(params).toQueryString(),
					onSuccess: function(transport, json) {
						try {
							result = transport.responseText.evalJSON() || null;
							result = MiGadgeTo.getTextFromJSON(result.respuesta["sherpa.respuesta"]["sherpa.datos"]);
						} catch(e) { // evalJSON() eleva "SyntaxError"
							return ""; // Devolvemos la cadena vacia
						} // Evitamos que se eleve una excepción
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer la fuente externa");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer la fuente externa");
						} catch (e) {
						}
					}
				}
			);
		}
		
		return result; // Devolvemos una cadena
	},
	
	obtenerMultimedia: function(idArticulo, json) {
		var params = {};
		params[this.params["idArticulo"]] = idArticulo;
		params[this.params["res"]] = "json";
		params[this.params["online"]] = "true";
		params[this.params["operacion"]] = this.operaciones["multimedia"]; 
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						result = transport.responseText.evalJSON() || null;
						result = result.respuesta["sherpa.respuesta"]["sherpa.datos"]["articulo"];
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer el multimedia");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer el multimedia");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	},
	
	obtenerNoticia: function(idArticulo, json) {
		var params = {};
		params[this.params["idArticulo"]] = idArticulo;
		params[this.params["res"]] = "json";
		params[this.params["online"]] = "true";
		params[this.params["operacion"]] = this.operaciones["noticia"]; 
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						result = transport.responseText.evalJSON() || null;
						result = result.respuesta["sherpa.respuesta"]["sherpa.datos"]["articulo"];
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer la noticia");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer la noticia");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	},
	
	obtenerGaleria: function(idArticulo, json) {
		var params = {};
		params[this.params["idArticulo"]] = idArticulo;
		params[this.params["res"]] = "json";
		params[this.params["online"]] = "true";
		params[this.params["operacion"]] = this.operaciones["galeria"]; 
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						result = transport.responseText.evalJSON() || null;
						result = result.respuesta["sherpa.respuesta"]["sherpa.datos"]["articulo"];
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer la galeria");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer la galeria");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	},
	
	obtenerRSS: function(params) {
		if (!params) {
			params = {};
		}
		params[this.params["operacion"]] = this.operaciones["rss"];
		params[this.params["timestamp"]] = window.timestampPortada;
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						var respuesta = transport.responseText;
						if (respuesta) {
							result = respuesta.evalJSON();
							result = result.respuesta["sherpa.respuesta"]["sherpa.datos"];
						} 
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer el rss");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer el rss");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	},
	
	obtenerSecciones: function(cat) {
		var params = {};
		params[this.params["categoria"]] = cat;
		params[this.params["operacion"]] = this.operaciones["secciones"]; // Extendemos los parámetros
		params[this.params["timestamp"]] = window.timestampPortada;
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						var respuesta = transport.responseText;
						if (respuesta) {
							result = respuesta.evalJSON();
							result = result.respuesta["sherpa.respuesta"]["sherpa.datos"]["seccion"];
						} 
						
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al obtener las secciones");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al obtener las secciones");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	},
	
	listadoNoticias: function(params) {
		if (!params) {
			params = {};
		}
		params[this.params["online"]] = "true"
		params[this.params["operacion"]] = this.operaciones["listadoNoticias"]; // Extendemos los parámetros
		var result = null;
		var urlAjax = this.url_base;
		if (params) {
			new Ajax.Request(
				urlAjax,
				{
					asynchronous: false,
					parameters: params,
					onSuccess: function(transport, json) {
						var respuesta = transport.responseText;
						if (respuesta) {
							result = respuesta.evalJSON();
							result = result.respuesta["sherpa.respuesta"]["sherpa.datos"]["articulo"];
						}
					},
					onFailure: function(transport, json) {
						try {
							console.log("Ocurrió un fallo al leer el listado de noticias");
						} catch (e) {
						}
					},
					onException: function(request, excepcion) {
						try {
							console.log("Ocurrió una excepción al leer el listado de noticias");
						} catch (e) {
						}
					}
				}
			);
		}
		return result; // Devolvemos un objeto
	}
};
