﻿/**
* Konstruktor
*/
var ModuleControl = new function() {
    this.timerId = null;
}

/** Das JSON-Objekt */
ModuleControl.json = null;

ModuleControl.dorefresh = true;

/******************************************************************************
***                              Hauptfunktionen                            ***
******************************************************************************/

/**
* Fügt ein Modul der Auswahl hinzu bzw. entfernt es wieder daraus
* @param string value Das ausgewählte Modul,
* @param boolean checked Gibt an, ob das Modul selektiert oder deselektiert wurde
*/
ModuleControl.addItem = function(value, checked) {
    if (checked == true) {
        if (!Array.contains(this.json.Values, value)) {
            Array.enqueue(this.json.Values, value);
        }
    }
    else {
        if (Array.contains(this.json.Values, value)) {
            Array.remove(this.json.Values, value);
        }
    }
}

/******************************************************************************
***                          Funktionen der Buttons                         ***
******************************************************************************/

/**
* Der Hilfe Button
*/
ModuleControl.showHelp = function() {
    ShowHelp('modulecontrol', 'modulecontrolhelp');
}

/**
* Der Reset Button
*/
ModuleControl.reset = function() {
    $get('txtmodulesearch').value = "Module";

    this.resetJson();
    this.refresh(undefined);
}

/**
* Der Schließen Button
*/
ModuleControl.close = function() {
    RemoveElement('ModuleControl');
    this.resetJson();
}

/**
* Der Übernehmen Button
*/
ModuleControl.uebernehmen = function() {
    $get('txtmodule').value = SerializeArray(this.json.Values);

    RemoveElement('ModuleControl');

    this.resetJson();
}

/******************************************************************************
***                              Hilfsmethoden                              ***
******************************************************************************/

/**
* Zeigt das Control erstmalig an
* @param string refid Die JavaScript-Anweisung die mit dem drücken des "Übernehmen"-Buttons ausgeführt werden soll.
* @param FORM form Das Formular, aus dem evtl. bereits gesetzte Rechtsgebiete ausgelesen werden sollen.
*/
ModuleControl.init = function(refid, form, anchorId) {
    XmlLoader.loadXml('31', (refid != null ? refid : null), null, (form != null ? form : null), null, true, ModuleControl.onLoadedXml, anchorId);
}

/**
* Aktualisiert die Liste
* @param integer time Wird eine Zeitspanne angegeben, so wird das Laden der Liste verzögert
*/
ModuleControl.refresh = function(time, anchorId) {
    if (!this.dorefresh) {
        return;
    }
    
    if (this.timerId != null) {
        clearTimeout(this.timerId);
        this.timerId = null;
    }

    if (typeof time != "undefined") {
        this.timerId = XmlLoader.loadXmlWithTimer('31', null, null, null, this.json, false, ModuleControl.onLoadedXml, time);
    } else {
         XmlLoader.loadXml('31', null, null, null, this.json, true, ModuleControl.onLoadedXml, anchorId);
    }
}

/**
* Setzt das JSON-Objekt zurück
*/
ModuleControl.resetJson = function() {
    this.json = null;
}

/**
* Wird nach dem fertig ausgeführten Ajax-Request ausgeführt
*/
ModuleControl.onLoadedXml = function(executor, eventArgs) {
    this.timerId = null;
    XmlLoader.onLoadedXml(executor, eventArgs);
    if ($get('json') != null) {
        try {
            var value = $get('json').value;
            value = unescape(value);
            ModuleControl.json = Sys.Serialization.JavaScriptSerializer.deserialize(value);
        }
        catch (e) {
            alert(e.message);
        }
    }
    SetFocus('txtmodulesearch');
}

/**
* Gibt alle ausgewählten Rechtsgebiete zurück
* @return string Alle ausgewählten Rechtsgebiete mit Komma separiert.
*/
ModuleControl.getSelectedModules = function() {
    var modules = SerializeArray(this.json.Values);

    this.close();

    return modules;
}
