/*
* El funcionamiento es el siguiente:
* Hay tres columnas: col1, col2 y col3. Cada columna tiene una serie de widgets.
* Toda la información se va almacenando en colDB, que se trata de una estructura de datos en JSON que actúa como pivote entre el DOM y la cookie que almacena los datos.
* Los widgets tienen una atributo llamado "param" que almacena la configuración del mismo: el nodo que está representando (el nodo se corresponde con el ID), el tipo de widget y el tamaño.
* Los widgets se puden añadir o eliminar desde una lista (en la cabecera).
*
* Leandro
*/

var colDB;

//===================================================//
//==== Show Hide ====================================//
//===================================================//

//muestra u oculta la barra de opciones del widget
function ShowHideOptions(widgetId) {
    if ($("#" + widgetId + " .options").is(':visible')) {
        $("#" + widgetId + " .options").slideUp();
    }
    else {
        $("#" + widgetId + " .options").slideDown();
    }
}


//muestra u oculta la barra de opciones del widget
function CollapseWidget(widgetId) {
    if ($("#" + widgetId + " .caja-bl").is(':visible')) {
        $("#" + widgetId + " .caja-bl").slideUp();
    }
    else {
        $("#" + widgetId + " .caja-bl").slideDown();
    }
}


//muestra u oculta la barra principal de opciones del widget
function ShowHideWidgetBar() {
    if ($("#widgetsBar").is(':visible')) {
        $("#widgetsBar").slideUp();
        $("#back").animate({ height: "320px" });
    }
    else {
        $("#widgetsBar").slideDown();
        $("#back").animate({ height: "465px" });
    }
}


//===================================================//
//==== Resets =======================================//
//===================================================//        

//Vacía completamente ColDB dejando únicamente declaradas las columnas y las colecciones (vacías) de widgets
function EmptyColDB() {
    colDB = "";
    colDB = {
        "columna": [
		{ "id": "col1", "widget": [] },
                { "id": "col2", "widget": [] },
                { "id": "col3", "widget": [] }
              ]
    }
}

//Vacía las columnas eliminando todos los widgets
function EmptyCols() {
    $("#col1").empty();
    $("#col2").empty();
    $("#col3").empty();
}

//Deja ColDB con los widgets predefinidos
function ResetColDB() {


    //no se trata de la manera más elegante de gestión multiidioma. Este sistema se tiene que optimizar para poder permitir añadir widgets de manera dinámica
    if (gl_current_lang == 'ca') {
        colDB = {
            "columna": [
                    {
                        "id": "col1",
                        "widget": [
                       { "params": "type=pageprev&nod=1114&size=s" },
                       { "params": "type=pageprev&nod=1115&size=s" }
                      ]
                    },
                    {
                        "id": "col2",
                        "widget": [
                       { "params": "type=pageprev&nod=1116&size=b" }

                      ]
                    },
                    {
                        "id": "col3",
                        "widget": [
                        { "params": "type=pageprev&nod=1117&size=s" },
                        { "params": "type=pageprev&nod=1118&size=s" }
                      ]
                    }
                  ]
        }
    }
    else {
        colDB = {
            "columna": [
                    {
                        "id": "col1",
                        "widget": [
                       { "params": "type=pageprev&nod=1622&size=s" },
                       { "params": "type=pageprev&nod=1623&size=s" }
                      ]
                    },
                    {
                        "id": "col2",
                        "widget": [
                       { "params": "type=pageprev&nod=1624&size=b" }

                      ]
                    },
                    {
                        "id": "col3",
                        "widget": [
                        { "params": "type=pageprev&nod=1629&size=s" },
                        { "params": "type=pageprev&nod=1630&size=s" }
                      ]
                    }
                  ]
        }
    }


}

//elimina un widget de las columnas, actualiza colDB y la cookie
function RemoveWidget(idWidget) {
    $("#" + idWidget).remove();
    UpdateWidgets();
    ColDB2Cookie();
}

function ResetWidgets() {
    ResetColDB();
    ColDB2Cookie();
    EmptyCols();
    ColDB2DOM();
}

//===================================================//
//==== Migrate ======================================//
//===================================================//        

//escribe colDB en base a los widgets
function DOM2ColDB() {

    $("#col1 .widget").each(function (index) {
        widget = { "params": $(this).attr("params") }
        colDB.columna[0].widget[index] = widget;
    });

    $("#col2 .widget").each(function (index) {
        widget = { "params": $(this).attr("params") }
        colDB.columna[1].widget[index] = widget;
    });

    $("#col3 .widget").each(function (index) {
        widget = { "params": $(this).attr("params") }
        colDB.columna[2].widget[index] = widget;
    });
}


//escribe los widgets en la web	
function ColDB2DOM() {
    for (var cl in colDB.columna) {
        for (var wd in colDB.columna[cl].widget) {
            WriteWidget(colDB.columna[cl].id, colDB.columna[cl].widget[wd].params);
        }
    }
}

//serializa e introduce en una cookie los datos de colDB
function ColDB2Cookie() {
    $.cookie('deltaWidgets-' + gl_current_lang, JSON.stringify(colDB), { expires: 0 });
}

//Pasa la selección de coll selection a ColDB
function WidgCollection2ColDB() {

    $("#widgetsBar input").each(function (index) {
        //el elemento no está checkeado pero sí esta en ColDB => eliminarlo
        if (!this.checked && WidgInColDB(this.id.substr(2))) {
            RemoveWidget(this.id.substr(2));
        }

        //el elemento está checkeado pero no esta en ColDB => añadirlo
        if (this.checked && !WidgInColDB(this.id.substr(2))) {
            WriteWidget("col1", this.value);
        }
    });

    DOM2ColDB();
    ColDB2Cookie();
    ShowHideWidgetBar();
}


//devuelve true si el id widget está en coldb
function WidgInColDB(widgId) {
    var ret = false
    for (var cl in colDB.columna) {
        for (var wd in colDB.columna[cl].widget) {
            if (colDB.columna[cl].widget[wd].params.indexOf('nod=' + widgId) != -1) { ret = true }
        }
    }
    return ret
}


//actualiza la estructura de colDB en base as decisiones del usuario
function UpdateWidgets() {
    EmptyColDB();
    DOM2ColDB();
    ColDB2Cookie();
}

//Escribe un widget en el DOM. Recibe como parametros el id (que corresponde con el nodo que representa)
//y los parametros que componen el widget.
//Ojo. La información la carga por Ajax.
function WriteWidget(idCol, params) {
    $.ajax({
        url: "getwidgets.aspx",
        data: params,
        success: function (ret) {
            $("#" + idCol).append(ret);
            DOM2ColDB();
        }
    });

}


//asiga un nuevo valor al widgets
function ChangeParam(id, oldParam, newParam) {
    $("#" + id).attr("params", $("#" + id).attr("params").replace(oldParam, newParam));

    DOM2ColDB();
    EmptyCols();
    ColDB2DOM();
    ColDB2Cookie();
}


function SetWidgets() {

    if ($.cookie('deltaWidgets-' + gl_current_lang) == null) {
        ResetColDB();
    }

    else {
        //se recuperan los datos de la cookie y se introduce en un array
        colDB = JSON.parse($.cookie('deltaWidgets-' + gl_current_lang));
    }

    ColDB2DOM();
}
