﻿

WidgetControl = function(containerId, expanderId) {
    this.getContainerId = function() { return containerId; }
    this.expanderLinkContainer = $get(expanderId);
    this.expanderLink = this.expanderLinkContainer.childNodes[0];
    this.expanderImage = this.findExpanderImage();
    this.isFirstLevel = true;

    var widget = this.expanderLink.parentNode;
    while (widget.className != "widget") {
        widget = widget.parentNode;
        if (widget == null)
            break;
    }
    this.getWidget = function() { return widget; }

    var header = this.getWidget().getElementsByTagName("h6");
    if (header.length > 0)
        header = header[0];
    this.getHeader = function() { return header; }

    this.showExpander();
    this.addCssRule('.' + containerId, "display:none;");
}

WidgetControl.prototype.findExpanderImage = function() {
    var images = this.expanderLink.getElementsByTagName('img');

    if (images.length > 0)
        return images[0];

    return null;
}

WidgetControl.prototype.findExpanderText = function() {
    for (var nodeIndex = 0; nodeIndex < this.expanderLink.childNodes.length; nodeIndex++) {
        var currentNode = this.expanderLink.childNodes[nodeIndex];
        
        if (currentNode.nodeType == 3)
            return currentNode;
    }
    return null;
}

WidgetControl.prototype.showExpander = function() {
    this.expanderLinkContainer.style.display = '';
}

WidgetControl.prototype.showContainer = function(expandedClass, expandedText) {
    var collapseClass = this.expanderLink.className;
    var expanderTextNode = this.findExpanderText();
    var collapseText = expanderTextNode.nodeValue;

    if (this.expanderImage != null) {
        this.expanderImage.attributes['alt'].value = 'minus - Reduzieren'
        this.expanderImage.src = 'bilder/verweispfeile/minus.gif'
    }

    this.expanderLink.className = expandedClass;
    expanderTextNode.nodeValue = expandedText;

    var onclick = this.getContainerId() + '.hideContainer("' + collapseClass + '", "' + collapseText + '");';
    this.expanderLink.onclick = function() { eval(onclick) };

    if (this.expanderImage != null)
        this.createHeaderLink();

    this.removeCssRule();

    return false;
}

WidgetControl.prototype.createHeaderLink = function() {
    var header = this.getHeader();
    var resetLink;

    if (header.childNodes[0].tagName == 'A') {
        this.isFirstLevel = false;
        resetLink = header.children[0];
        $addHandler(resetLink, "click", this.expanderLink.onclick);
    }
    else {
        header.className = "header-auswahl";

        resetLink = document.createElement("a");
        $addHandler(resetLink, "click", this.expanderLink.onclick);
        resetLink.href = "javascript: DoReturn();";

        var collapseImage = document.createElement("img");
        collapseImage.setAttribute("alt", 'minus - Reduzieren');
        collapseImage.src = 'bilder/verweispfeile/minus.gif'
        resetLink.appendChild(collapseImage);

        var linkText = document.createTextNode(header.innerHTML);
        resetLink.appendChild(linkText);

        header.innerHTML = "";
        header.appendChild(resetLink);
    }
}

WidgetControl.prototype.hideContainer = function(collapseClass, collapseText) {
    if (this.expanderImage != null)
        this.removeHeaderLink();

    var expandedClass = this.expanderLink.className;
    var expanderTextNode = this.findExpanderText();
    var expandedText = expanderTextNode.nodeValue;

    if (this.expanderImage != null) {
        this.expanderImage.attributes['alt'].value = 'plus - Erweitern'
        this.expanderImage.src = 'bilder/verweispfeile/plus.gif'
    }

    this.expanderLink.className = collapseClass;
    expanderTextNode.nodeValue = collapseText;

    var onclick = this.getContainerId() + ".showContainer('" + expandedClass + "', '" + expandedText + "');";
    this.expanderLink.onclick = function() { eval(onclick); }

    this.addCssRule('.' + this.getContainerId(), 'display:none;');
}

WidgetControl.prototype.removeHeaderLink = function() {
    var header = this.getHeader();

    if (header.childNodes[0].tagName != "A")
        return;

    var resetLink = header.childNodes[0];
    $removeHandler(resetLink, "click", this.expanderLink.onclick);

    if (this.isFirstLevel) {
        header.className = "";
        header.appendChild(header.childNodes[0].childNodes[1]);
        header.removeChild(header.childNodes[0]);
    }

    return false;
}

WidgetControl.prototype.addCssRule = function(tag, rule) {
    var sheet = this.findSheet("common.css");

    if (sheet.insertRule)
        sheet.insertRule(tag + '{' + rule + '}', sheet.length);
    else
        sheet.addRule(tag, rule);
}

WidgetControl.prototype.removeCssRule = function() {
    var sheet = this.findSheet("common.css");
    var cssRules = sheet.cssRules || sheet.rules;

    var tag = "." + this.getContainerId();

    for (var i = 0; i < cssRules.length; i++) {
        var rule = cssRules[i];
        if (rule.selectorText == tag) {
            if (sheet.removeRule)
                sheet.removeRule(i);
            else
                sheet.deleteRule(i);
            break;
        }
    }
}

WidgetControl.prototype.findSheet = function(sheetName) {
    for (var sheetIndex = 0; sheetIndex < document.styleSheets.length; sheetIndex++) {
        var sheet = document.styleSheets[sheetIndex];
        if (sheet.href != null) {
            var currentSheetName = sheet.href.substring(sheet.href.length - sheetName.length);
            if (currentSheetName == sheetName)
                return sheet;
        }
    }
    return null;
}
