// Acciones para canastas
// Agrega una canasta
var url_base = "http://www.fiscalia.com";
var script = "/modules.php?name=Downloads";
var path_images = $('path_images').title;
function open_estadisticas_overall(){
// Element.show('div_popup_estadisticas');
var opciones = "left=100,top=100,width=220,height=250,scrollbars=1";
var estadisticas = window.open("modules.php?name=Downloads&op=estadisticas_overall","",opciones);
}
/*******************************************************************************************************************************/
/* Funciones de Busqueda */
/*******************************************************************************************************************************/
// Var global de la ventana de busqueda
var buscar;
//funcion que es llamada para mostrar el popup de busqueda
function show_popup_busqueda(id){
if($('logged').innerHTML != "") {
//$('error_busqueda').innerHTML = '';
//$('div_buscar').style.left = (screen.width - 300) / 2;
//$('div_buscar').style.top = ((screen.height) / 2) + document.body.scrollTop - 200;
//new Draggable('div_buscar',{revert:false});
//Element.show('div_buscar');
//$('tf_palabra').focus();
//$('div_buscar').title = "Busqueda";
/*var opciones = "left=100,top=100,width=320,height=200";
var contenido = $("div_buscar").innerHTML;
buscar = window.open("modules.php?name=Downloads&op=printSearchWindow&id="+id,"",opciones);*/
/*buscar.document.write("
Fiscalia: Legislación - Estadísticas"+contenido+"");
buscar.document.close();*/
Effect.toggle('busqueda','slide');
document.getElementById("tf_palabra").value = "";
} else {
alert("Para poder utilizar esta herramienta, necesitas estar suscrito a Fiscalia.");
}
}
//funcion que es llamada cuando da click en boton de buscar valida el campo y manda a busqueda
function busqueda(id){
var input = document.getElementById('tf_palabra').value;
// Limpiamos params
input = input.replace(/"/g, '');
input = input.replace(/'/g, '');
input = escape(input);
var documento = "";
input += "&documento="+documento;
var radio1 = false;
var radio2 = document.formaBusqueda.radio_bt[0].checked;
var radio3 = document.formaBusqueda.radio_bt[1].checked;
if (input == ''){
alert("El campo de B\xFAsqueda no puede estar vac\xEDo");
}else{
if(radio1) {
show_loading_2();
location.href = "modules.php?name=Downloads&op=search&palabra="+input+"&id="+id+"&radio_bt2="+document.formaBusqueda.radio_bt2[0].checked;
}else if (radio2){
location.href = "modules.php?name=Downloads&op=search&palabra="+input+"&id=0"+"&radio_bt2="+document.formaBusqueda.radio_bt2[0].checked;
}else if (radio3){
//show_loading_2();
//location.href = 'modules.php?name=Downloads&op=search&palabra='+ input+''+"&radio_bt2="+document.formaBusqueda.radio_bt2[0].checked;
// Hacemos llamada de ajax para desplegar el arbol
var url = url_base + script;
var pars = 'op=searchAvzAjax&palabra='+ input +'&ajaxed&documento='+ documento +"&radio_bt2="+document.formaBusqueda.radio_bt2[0].checked;
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: showSearchTree
});
}
}
}
// Funcion que busca dentro de un doc
function searchHere(id) {
location.href = "modules.php?name=Legislacion&op=search_legislacion&palabra="+escape($("hsearch_palabra").value)+"&id="+id+"&like=1&radio_bt2="+$("similarbt").checked;
}
// Muestra respuesta de desplegar nodo de busqueda filtrada
function showSearchTree(request) {
var response = request.responseText.split("|BRK|");
$("search_tree").innerHTML = response[0];
// Armamos arbol
var filas = response[1];
var filas_arr = filas.split("|TR|");
var i = 0;
d = new dTree('d');
while(i < filas_arr.length) {
var nodos = filas_arr[i];
var nodos_arr = nodos.split("|TD|");
var id = nodos_arr[0];
var father = nodos_arr[1];
var title = nodos_arr[2];
var link = nodos_arr[3];
var palabra = escape(nodos_arr[4]);
var documento = escape(nodos_arr[5]);
if(id != "undefined" && father != "undefined" && title != "undefined" && link != "undefined") {
d.add(id,father,title,link+"&palabra="+palabra+"&documento="+documento);
}
i++;
}
$("search_tree").innerHTML += d;
$("search_tree").innerHTML += response[2];
$("search_tree_cont").style.display = "block";
goTo("search_tree_cont");
}
//funcion que es llamada cuando se le da click a cancelar en la busqueda
function hide_popup_busqueda(){
$('div_buscar').title = "oculto";
Element.hide('div_buscar');
}
/*******************************************************************************************************************************/
/*
// Hacemos llamada de ajax para desplegar el arbol
var url = url_base + script;
var pars = 'op=searchAvzAjax&palabra='+ input +'&ajaxed&documento='+ documento +extra+"&radio_bt2="+document.formaBusqueda.radio_bt2[0].checked;
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: showSearchTree
}); Funciones de ABC de Canastas */
/*******************************************************************************************************************************/
//Funcion de menu principal de canastas
function main_canastas_menu(){
if($('logged').innerHTML != "") {
if($('button_canastas').title == "Mostrar compendios"){
Effect.toggle('option_canastas','appear');
$('button_canastas').title = "Ocultar compendios";
if($('indicador_canasta_contenido').title == '0' && $('canasta_contenido').title != '-1'){
Effect.toggle('canasta_contenido','appear');
$('indicador_canasta_contenido').title = '1';
}
}else {
if($('indicador_canasta_contenido').title == '1'){
Effect.toggle('canasta_contenido','appear');
$('indicador_canasta_contenido').title = '0';
}
Effect.toggle('option_canastas','appear');
$('button_canastas').title = "Mostrar compendios";
}
} else {
alert("Para poder utilizar esta herramienta, necesitas estar suscrito a Fiscalia.");
}
}
//funcion que abre la forma para agregar una canasta
function agrega_canasta(div) {
if($(div).innerHTML == "") {
$(div).innerHTML = " Nombre del compendio: " +
" "+
"";
document.getElementById('canasta_nuevo').focus();
} else {
$(div).innerHTML = "";
}
}
//funcion que agrega la canasta a la base de datos
function agrega_canasta_db(){
var input = $('canasta_nuevo').value;
var url = url_base + script;
var pars = 'op=agrega_canasta&nombre=' + escape(input);
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_ABC_canasta
});
}
//funcion que muestra la forma de edicion de una canasta
function editar_canasta(id, nombre) {
if ($("canasta_id"+id ).title == "Mostrar compendio") {
$("canasta_id"+id ).innerHTML = " " +
"";
$("canasta_id"+id ).title = "Editar compendio";
} else {
$("canasta_id"+id ).innerHTML = ""+nombre+"";
$("canasta_id"+id ).title = "Mostrar compendio";
}
}
//funcion que edita la canasta en la base de datos
function edita_canasta_db(id){
var input = $('canasta_editar').value;
input = escape(input);
var url = url_base + script;
var pars = 'op=editar_canasta&nombre=' + input + "&id="+ id;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_ABC_canasta
});
}
//funcion que elimina una canasta de la base de datos
function elimina_canasta(id){
var url = url_base + script;
var pars = "op=elimina_canasta&id="+ id;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_ABC_canasta
});
}
//funcion que muestra el ABC de las canastas del usuario, funcion de respuesta de agregar, modificar o eliminar canastas
function show_ABC_canasta(request){
$('content_canastas').innerHTML = "";
$('option_canastas').innerHTML = request.responseText;
Element.hide('loading');
if($('div_texto').style.display != 'none'){
var id_nodo = $('id_texto').title;
get_canastas_user_empty(id_nodo);
}
}
var cid = 0;
// Hace llamada AJAX para ver contenido de un nodo
function show_nodo(id) {
cid = id;
var url= url_base + script;
var pars = "op=show_nodo_ajax&id="+id;
var nodoAjax = new Ajax.Request(
url, {
method: 'get',
parameters: pars,
onComplete: show_nodo_post
}
);
}
// Muestra el nodo
function show_nodo_post(request) {
try {
$("div_texto").style.display = "block";
$('content_nodo').innerHTML = request.responseText;
$("content_nodo").style.display = "block";
contenido_nodo_org = $('contenido_nodo').innerHTML;
goTo('content_nodo');
showComments(cid);
$("loading").style.display = "none";
} catch (e) {
}
}
if( document.captureEvents && Event.KEYUP ) {
document.captureEvents( Event.KEYUP );
}
document.onkeyup = alertkey;
var calc_openend = false;
function alertkey(e) {
if( !e ) {
if( window.event ) {
//Internet Explorer
e = window.event;
} else {
//total failure, we have no way of referencing the event
return;
}
}
if( typeof( e.keyCode ) == 'number' ) {
//DOM
e = e.keyCode;
} else if( typeof( e.which ) == 'number' ) {
//NS 4 compatible
e = e.which;
} else if( typeof( e.charCode ) == 'number' ) {
//also NS 6+, Mozilla 0.9+
e = e.charCode;
} else {
//total failure, we have no way of obtaining the key code
return;
}
if(e == 13) {
if ($(Input).value != '' && !isNaN(parseInt($(Input).value))) $(Input).value = addCommas(eval(removeCommas($(Input).value)).toFixed(2));
}
}
// agrega comas a un numero
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
// Quita commas de un numero
function removeCommas(aNum) {
//remove any commas
aNum=aNum.replace(/,/g,"");
//remove any spaces
aNum=aNum.replace(/\s/g,"");
return aNum;
}
/*******************************************************************************************************************************/
/* Funciones de despliegue del contenido de una canastas */
/*******************************************************************************************************************************/
//funcion que pide al php el contenido de una canasta para ir a determinado articulo, mostrar el contenido completo o eliminar articulos de la canasta
function get_canasta_contenido(id){
$('canasta_contenido').title = id;
var url = url_base + script;
var pars = "op=contenido_canasta&id=" + id;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_canastas_contenido
});
}
//funcion de respuesta de get_canasta_contenido
function show_canastas_contenido(request) {
$('canasta_contenido').innerHTML = request.responseText;
if ($('indicador_canasta_contenido').title == '0') {
Effect.toggle('canasta_contenido','appear');
$('indicador_canasta_contenido').title = '1';
}
}
//Funcion que cierra el contenido de una canasta
function clear_canasta_contenido(){
Effect.toggle('canasta_contenido','appear');
$('indicador_canasta_contenido').title = '0';
}
/*******************************************************************************************************************************/
/* Funciones para manejo de popups */
/*******************************************************************************************************************************/
//funcion que despliega un popup de confirmaci�n para eliminar una canasta
function show_popup_canastas(titulo, mensaje, id){
$('div_popup_titulo').innerHTML = titulo;
$('div_popup_mensaje').innerHTML = mensaje;
$('div_popup_action').innerHTML = "";
show_popup('div_popup');
}
//funcion que despliega un popup de confirmaci�n para eliminar un art�culo de una canasta
function show_popup_articulo(titulo, mensaje, idCanasta, idArticulo){
$('div_popup_titulo').innerHTML = titulo;
$('div_popup_mensaje').innerHTML = mensaje;
$('div_popup_action').innerHTML = "";
show_popup('div_popup');
}
//funcion que muestra un popup arrastrable
function show_popup(id){
var xy = getScrollXY();
$(id).style.top = xy[1];
new Draggable(id,{revert:false});
Effect.toggle(id,'appear');
}
/*******************************************************************************************************************************/
/* Funciones para agregar un articulo a una canastas */
/*******************************************************************************************************************************/
//funcion que muestra o oculta las canastas para agregar
function show_hide_canasta_add(id){
if($('boton_show_canastas_add').title == 'Agregar este texto a un compendio'){
$('boton_show_canastas_add').src = path_images+"/briefcase_back_32.gif";
get_canastas_user(id);
}else{
$('boton_show_canastas_add').src = path_images+"/briefcase_up_32.gif";
Effect.toggle('option_mis_canastas_add','appear');
$('boton_show_canastas_add').title = 'Agregar este texto a un compendio';
}
}
//funcion que despliega las canastas del usuario en formato para agregar elementos
function get_canastas_user(id){
var url = url_base + script;
var pars = "op=get_canastas_user&id=" + id;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: set_canastas_user
});
}
//funcion que despliega las canastas del usuario en formato para agregar elementos
function get_canastas_user_empty(id){
var url = url_base + script;
var pars = "op=get_canastas_user&id=" + id;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: set_canastas_user_empty
});
}
//funcion de repuesta de get_canastas_user, depliega las canastas para agregar elementos
function set_canastas_user(request){
$('option_mis_canastas_add').innerHTML = request.responseText;
if($('boton_show_canastas_add').title = 'Agregar este texto a un compendio'){
Effect.toggle('option_mis_canastas_add','appear');
$('boton_show_canastas_add').title = 'Ocultar compendios';
}
}
//funcion de repuesta de get_canastas_user, depliega las canastas para agregar elementos
function set_canastas_user_empty(request){
$('option_mis_canastas_add').innerHTML = request.responseText;
}
//funcion que agrega un determinado elemento a una canasta
function add_a_canasta(idCanastaAdd, idArticuloAdd){
var url = url_base + script;
var pars = "op=add_item_canasta&idCanasta="+ idCanastaAdd +"&idArticulo="+ idArticuloAdd;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: alert_agrega_canasta
});
}
//funcion de respuesta de add_a_canasta, depliega un mensaje tanto de si fue o no agregado el elemento a la canasta
function alert_agrega_canasta(request) {
if (request.responseText.substring(0,2) == 'no'){
//show_popup('elemento_no_agregado');
alert("El elemento ya existe en el compendio.\n\nPara consultarlo, abre tu compendio desde la barra de herramientas.");
}else{
var id = request.responseText.substring(2, 2 + $('canasta_contenido').title.length);
//show_popup('elemento_agregado');
alert("El elemento se ha agregado exitosamente.");
Effect.toggle('option_mis_canastas_add','appear');
if (id == $('canasta_contenido').title)
get_canasta_contenido(id);
}
}
/*******************************************************************************************************************************/
/* Funciones para eliminar un articulo de una canastas */
/*******************************************************************************************************************************/
//Funcion que elimina un articulo de una canasta
function elimina_articulo_canasta(idCanasta, idArticulo){
var url = url_base + script;
var pars = "op=elimina_articulo_canasta&idCanasta=" + idCanasta + "&idArticulo=" + idArticulo;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_canastas_contenido_edit
});
}
//Funcion de respuesta de eliminar un articulo de una canasta muestra el contenido de la canasta editada
function show_canastas_contenido_edit(request){
$('canasta_contenido').innerHTML = request.responseText;
}
/*******************************************************************************************************************************/
/* Funciones Generales */
/*******************************************************************************************************************************/
//funcion para mostrar u ocultar un div
function hide_popup(id){
Effect.toggle(id,'appear');
}
//funcion para mostrar u ocultar un div
function show_hide_div(id){
Effect.toggle(id,'appear');
}
//crea un scroll hacia el id de determinado div.
function goTo(id){
new Effect.ScrollTo(id, {offset: 0});
}
//Funcion que abre y cierra las agrupaciones de resultados
function open_close_results(id){
if ($('span_resultados_'+id).title == "Mostar Resultados"){
$('span_resultados_'+id).innerHTML = "";
$('span_resultados_'+id).title = "Ocultar Resultados";
Element.show('div_resultados_'+id);
}else{
$('span_resultados_'+id).innerHTML = "";
$('span_resultados_'+id).title = "Mostar Resultados";
Element.hide('div_resultados_'+id);
}
}
function cambia_barra_herramientas(){
if($('logged').innerHTML != "") {
var url = url_base + script;
var pars = "op=cambia_barra";
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: cambia_barra_complete
});
} else {
alert("Para poder utilizar esta herramienta, necesitas estar suscrito a Fiscalia.");
}
}
function cambia_barra_complete(request){
$('barra_herramientas').innerHTML = request.responseText;
}
/*******************************************************************************************************************************/
/* Funciones de Navegacion */
/*******************************************************************************************************************************/
function history_back(){
var url = url_base + script;
var pars = "op=back";
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_history_back
});
}
function show_history_back(request){
history.back();
}
function history_forward(){
var url = url_base + script;
var pars = "op=forward";
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: show_history_forward
});
}
function show_history_forward(request){
history.forward();
}
var contenido_nodo_org = "";
// Guarda en una variable global el contenido original del nodo
function llenaContenidoNodoOrg() {
contenido_nodo_org = $('contenido_nodo').innerHTML;
}
// Restora el contenido de resaltados
function restoreContent() {
$('contenido_nodo').innerHTML = contenido_nodo_org;
}
// Busca palabras en el contenido de un documento
function searchContent(value) {
if(value.length > 0) {
// Checamos si vienen varias palabras en el value
var values = value.split(" ");
var palabras = $('contenido_nodo').innerHTML.split(" ");
var contenido = "";
// Recorremos el arreglo de palabras
var i = 0;
while(i < palabras.length) {
var j = 0;
while(j < values.length) {
if(palabras[i].toUpperCase().match(values[j].toUpperCase()) && !values[j].match("(\ )+") && values[j] != "" && !palabras[i].match("<") && !palabras[i].match(">") && !palabras[i].match("\"") && values[j].toUpperCase() != "DE" && values[j].toUpperCase() != "A" && values[j].toUpperCase() != "ANTE" && values[j].toUpperCase() != "AQUELLOS" && values[j].toUpperCase() != "AQUELLAS" && values[j].toUpperCase() != "COMO" && values[j].toUpperCase() != "CON" && values[j].toUpperCase() != "CUANDO" && values[j].toUpperCase() != "DEL" && values[j].toUpperCase() != "DESDE" && values[j].toUpperCase() != "DONDE" && values[j].toUpperCase() != "EL" && values[j].toUpperCase() != "ELLAS" && values[j].toUpperCase() != "ELLOS" && values[j].toUpperCase() != "EN" && values[j].toUpperCase() != "ESTA" && values[j].toUpperCase() != "ESTAS" && values[j].toUpperCase() != "ESTO" && values[j].toUpperCase() != "ESTOS" && values[j].toUpperCase() != "ESTE" && values[j].toUpperCase() != "HACIA" && values[j].toUpperCase() != "HASTA" && values[j].toUpperCase() != "LA" && values[j].toUpperCase() != "LAS" && values[j].toUpperCase() != "LO" && values[j].toUpperCase() != "LOS" && values[j].toUpperCase() != "MISMO" && values[j].toUpperCase() != "MISMOS" && values[j].toUpperCase() != "O" && values[j].toUpperCase() != "PARA" && values[j].toUpperCase() != "POR" && values[j].toUpperCase() != "PORQUE" && values[j].toUpperCase() != "QUE" && values[j].toUpperCase() != "QUIEN" && values[j].toUpperCase() != "QUIENES" && values[j].toUpperCase() != "SIN" && values[j].toUpperCase() != "Y") {
var color = $('curr_color').innerHTML;
palabras[i] = " "+palabras[i]+" ";
}
j++;
}
contenido += " "+palabras[i]+" ";
i++;
}
while(i < palabras.length) {
contenido += " "+palabras[i]+" ";
i++;
}
$('contenido_nodo').innerHTML = contenido;
}
}
// Vota por un download
function vote(lid, voto) {
// Agarramos comentario
var comentario = prompt("Comentario sobre la descarga:", "");
var al_autor = confirm("Deseas enviar este comentario al autor?");
comentario = escape(comentario);
var send = 0;
if(al_autor)
send = 1;
var url = url_base + script;
var pars = "op=vote&lid="+lid+"&voto="+voto+"&comentario="+comentario+"&send="+send;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: showVote
});
}
// Muestra comentarios de una descarga
function showComments(lid) {
if($("comentarios").style.display == "none") {
var url = url_base + script;
var pars = "op=showComments&lid="+lid;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: doShowComments
});
} else {
$("comentarios").style.display = "none";
$("link_comments").innerHTML = "Leer";
}
}
// Muestra comentarios como respuesta Ajax
function doShowComments(request) {
$("comentarios").innerHTML = "
Comentarios
";
$("comentarios").innerHTML += request.responseText;
$("comentarios").style.display = "block";
$("link_comments").innerHTML = "Cerrar";
$("loading").style.display = "none";
}
function showVote(request) {
if(request.responseText == "already") {
alert("Ya has valorado este recurso.");
} else
show_nodo(request.responseText);
}
// Muestra downloads de un autor
function showDownloadsAutor(email) {
if($("downloads_"+email).style.display == "none") {
var url = url_base + script;
var pars = "op=showDownloadsAutor&email="+email;
var myAjax = new Ajax.Request(
url,
{
method: 'post',
parameters: pars,
onComplete: doShowDownloadsAutor
});
} else {
$("downloads_"+email).style.display = "none";
$("link_show_"+email).innerHTML = "Mostrar";
}
}
// Muestra ajax downloads de autor
function doShowDownloadsAutor(request) {
var response = request.responseText.split("|BRK|");
var email = response[0];
$("link_show_"+email).innerHTML = "Cerrar";
$("downloads_"+email).innerHTML = response[1];
$("downloads_"+email).style.display = "block";
}
// Retorna el valor de scroll del cliente
function getScrollXY() {
var scrOfX = 0, scrOfY = 0;
if( typeof( window.pageYOffset ) == 'number' ) {
//Netscape compliant
scrOfY = window.pageYOffset;
scrOfX = window.pageXOffset;
} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
//DOM compliant
scrOfY = document.body.scrollTop;
scrOfX = document.body.scrollLeft;
} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
//IE6 standards compliant mode
scrOfY = document.documentElement.scrollTop;
scrOfX = document.documentElement.scrollLeft;
}
return [ scrOfX, scrOfY ];
}
/*******************************************************************************************************************************/
/* Funciones para manejo de loading */
/*******************************************************************************************************************************/
// Regresa el tamano de la ventana del usuario
function getUserWindow() {
if (parseInt(navigator.appVersion)>3) {
if (navigator.appName=="Netscape") {
winW = window.innerWidth;
winH = window.innerHeight;
}
if (navigator.appName.indexOf("Microsoft")!=-1) {
winW = document.body.offsetWidth;
winH = document.body.offsetHeight;
}
}
return [winW,winH];
}
function show_loading_2(){
var xy = getScrollXY();
var wh = getUserWindow();
var y = (xy[1] + (wh[1] / 2)) - 50;
var x = (xy[0] + (wh[0] / 2)) - 50;
$('loading2').style.top = y;
$('loading2').style.left = x;
Element.show('loading2');
}
//Controla el popup de cargando
var loading = {
onCreate: function(){
var xy = getScrollXY();
var wh = getUserWindow();
var y = (xy[1] + (wh[1] / 2)) - 50;
var x = (xy[0] + (wh[0] / 2)) - 50;
$('loading').style.top = y;
$('loading').style.left = x;
Element.show('loading');
},
onComplete: function() {
if(Ajax.activeRequestCount == 0){
Element.hide('loading');
}
}
};
Ajax.Responders.register(loading);