﻿/**
* Konstruktor
*/
var OpusControl = new function() {
    this.timerId = null;
}

/** Das JSON-Objekt */
OpusControl.json = null;

/******************************************************************************
***                              Hauptfunktionen                            ***
******************************************************************************/

/**
* Fügt eine Norm der Auswahl hinzu bzw. entfernt es wieder daraus
* @param string value Die ausgewählte Nor,
* @param boolean checked Gibt an, ob die Norm selektiert oder deselektiert wurde
*/
OpusControl.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
*/
OpusControl.showHelp = function() {
    ShowHelp('opuscontrol');
}

/**
* Der Reset Button
*/
OpusControl.reset = function() {
    if (this.json.OnlyZeitschriften) {
        $get('txtFundst').value = "";
    } else if (this.json.OnlyLawCollections) {
        $get('publicationcontrolgesetzessammlung').value = "";
    } else {
        $get('txtopus').value = "Publikationen";
    }

    var zeitschriften = this.json.OnlyZeitschriften ? true : null;
    var gesetzessammlungen = this.json.OnlyLawCollections ? true : null;
    this.resetJson();
    this.refresh(undefined, zeitschriften, gesetzessammlungen);
}

/**
* Der Schließen Button
*/
OpusControl.close = function() {
    RemoveAllChilds('OpusControl');
    this.resetJson();
}

/**
* Der Übernehmen Button
*/
OpusControl.uebernehmen = function() {
    if (this.json.OnlyZeitschriften) {
        $get('txtFundst').value = SerializeArray(this.json.Values);
    } else if (this.json.OnlyLawCollections) {
        $get('publicationcontrolgesetzessammlung').value = SerializeArray(this.json.Values);
        NormSummaryControl.DoAjax();
    } else {
        $get('txtopus').value = SerializeArray(this.json.Values);
        $get('chkopus').checked = true;
        $get('chkdoktyp').checked = false;
        OptionenLayer.refresh();  //um die 3. Spalte ggf. anzupassen
    }
    RemoveAllChilds('OpusControl');

    this.resetJson();
}

/******************************************************************************
***                              Hilfsmethoden                              ***
******************************************************************************/

/**
* Zeigt das Control erstmalig an
* @param boolean zeitschriften Gibt an, ob nur Zeitschriften angezeigt werden sollen
* @param boolean gesetzessammlungen Gibt an, ob nur Gesetzessammlungen angzeigt werden sollen
*/
OpusControl.init = function(zeitschriften, gesetzessammlungen) {
    this.refresh(undefined, zeitschriften, gesetzessammlungen);
}

/**
* Aktualisiert die Liste
* @param integer time Wird eine Zeitspanne angegeben, so wird das Laden der Liste verzögert
* @param boolean zeitschriften Gibt an, ob nur Zeitschriften angezeigt werden sollen
* @param boolean gesetzessammlungen Gibt an, ob nur Gesetzessammlungen angzeigt werden sollen
*/
OpusControl.refresh = function(time, zeitschriften, gesetzessammlungen) {
    if (this.timerId != null) {
        clearTimeout(this.timerId);
        this.timerId = null;
    }

    if (typeof time != "undefined") {
        this.timerId = LoadXmlWithTimer('3', null, null, null, this.json, false, OpusControl.onLoadedXml, time);
    } else {
        var queryString = "";
        if (zeitschriften != null)
            queryString += '&zeitschriften=true';
        if (gesetzessammlungen != null) {
            queryString += '&gesetzessammlungen=true';

            // Den Eintrag aus der Textbox übernehmen
            var lawCollectionTextBox = $get('publicationcontrolgesetzessammlung');
            if (lawCollectionTextBox != null)
                queryString += '&publicationcontrolgesetzessammlung=' + lawCollectionTextBox.value;
        }

        if (queryString.length == 0)
            queryString = null;
        else
            queryString = queryString.substring(1);
        LoadXml('3', null, queryString, null, this.json, true, OpusControl.onLoadedXml);
    }
}

/**
* Setzt das JSON-Objekt zurück
*/
OpusControl.resetJson = function() {
    this.json = null;
}

/**
* Wird nach dem fertig ausgeführten Ajax-Request ausgeführt
*/
OpusControl.onLoadedXml = function(executor, eventArgs) {
    this.timerId = null;
    OnLoadedXml(executor, eventArgs);
    if ($get('json') != null) {
        try {
            var value = $get('json').value;
            value = unescape(value);
            OpusControl.json = Sys.Serialization.JavaScriptSerializer.deserialize(value);
        }
        catch (e) {
            alert(e.message);
        }
    }
    SetFocus('txtopussearch');
}