﻿/**
* Konstruktor
*/
var ModuleControl = new function() {
    this.timerId = null;
}

/** Das JSON-Objekt */
ModuleControl.json = null;

/******************************************************************************
***                              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');
}

/**
* Der Reset Button
*/
ModuleControl.reset = function() {
    $get('txtmodule').value = "Module";

    this.resetJson();
    this.refresh(undefined);
}

/**
* Der Schließen Button
*/
ModuleControl.close = function() {
    RemoveAllChilds('ModuleControl');
    this.resetJson();
}

/**
* Der Übernehmen Button
*/
ModuleControl.uebernehmen = function() {
    $get('txtmodule').value = SerializeArray(this.json.Values);

    RemoveAllChilds('ModuleControl');

    this.resetJson();
}

/******************************************************************************
***                              Hilfsmethoden                              ***
******************************************************************************/

/**
* Zeigt das Control erstmalig an
*/
ModuleControl.init = function() {
    this.refresh(undefined);
}

/**
* Aktualisiert die Liste
* @param integer time Wird eine Zeitspanne angegeben, so wird das Laden der Liste verzögert
*/
ModuleControl.refresh = function(time) {
    if (this.timerId != null) {
        clearTimeout(this.timerId);
        this.timerId = null;
    }

    if (typeof time != "undefined") {
        this.timerId = LoadXmlWithTimer('31', null, null, null, this.json, false, ModuleControl.onLoadedXml, time);
    } else {
         LoadXml('31', null, null, null, this.json, true, ModuleControl.onLoadedXml);
    }
}

/**
* 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;
    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');
}