﻿
DummyControllerObject = function() {
    this._observers = new Array();
    this._notified = false;
}
DummyControllerObject.prototype = {
    AddObserver: function( observer )
    {
        Array.add( this._observers, observer );
    }
    ,NotifyObservers: function()
    {
        this._notified = true;
    }
    ,NotifyObserver: function( observer )
    {
        this._notified = true;
    }
}

var GastgeberController = {
    _names: Array()
    ,_objects: Array()
    ,Get: function( id )
    {
        var i = Array.indexOf( GastgeberController._names, id );
        if( i != -1 )
            return GastgeberController._objects[i];
        return null;
    }
    ,Add: function( id, object )
    {
        Array.add( GastgeberController._names, id );
        Array.add( GastgeberController._objects, object );
        return object;
    }
    ,Change: function( id, object )
    {
        var i = Array.indexOf( GastgeberController._names, id );
        GastgeberController._objects[i] = object;
        return object;
    }
    ,Init: function( id, newObject )
    {
        var obj = this.Get( id );
        if( obj != null )
        {
            var observers = Array.clone(obj._observers);
            var wasNotified = obj._notified;
            obj = this.Change( id, newObject );
            obj._observers = observers;
            if( wasNotified )
                obj.NotifyObservers();
        }     
        else
        {
            this.Add( id, newObject );
        }       
    }
    ,AddObserver: function( id, observerId )
    {
        var obj = this.Get( id );
        if( obj == null )
            obj = this.Add( id, new DummyControllerObject );
        var observer = this.Get(observerId);       
        obj.AddObserver(observer);
        obj.NotifyObserver(observer);  
    }
    ,NotifyObservers: function( id )
    {
        var obj = this.Get( id );
        if( obj != null )
            obj.NotifyObservers();
    }
    ,NotifyObserver: function( id, observerId )
    {
        var obj = this.Get( id );
        var observerObj = this.Get( observerId );
        if( obj != null && observerObj != null )
            obj.NotifyObserver( observerObj );
    }
    ,Reset: function()
    {
        Array.clear( GastgeberController._names );
        Array.clear( GastgeberController._objects );
    }       
}

CheckBoxList = function( element, ignoreArray ) {
    this._element = element;
    this._values = new Array();
    this._texts = new Array();
    this._ignoreArray = ignoreArray;
    
    this.UpdateTexts();
}

CheckBoxList.prototype = {
    AddValue: function( value )
    {
        if( this._ignoreArray && Array.contains(this._ignoreArray, value) )
            return;
        this._values[this._values.length] = value;
    }
    ,SetText: function( index, text )
    {
        this._texts[index] = text;
    }
    ,GetValue: function( index )
    {
        return this._values[index];
    }
    ,GetText: function( index )
    {
        return this._texts[index];
    }
    ,GetInputs: function()
    {
        if( this._element != null )
            return this._element.getElementsByTagName('input');
        return [];
    }
    ,UpdateTexts: function()
    {
        var inputs = this.GetInputs();
        for (var i=0; i < inputs.length; i++)
            this.SetText(i, inputs[i].nextSibling.innerHTML);
    }
    ,IsChecked: function()
    {
        var inputs = this.GetInputs();
        for (var i=0; i < inputs.length; i++)
        {
            if( inputs[i].checked ) 
            return true;
        }
        return false;
    }      
}


ElementEnabler = function(element) { 
    this._element = element;
}

ElementEnabler.prototype = {
    SetEnabled: function(enabled)
    {
        if( enabled )
            this._element.style.display = "block"
        else
            this._element.style.display = "none";
    }
}

ElementEnabler.registerClass('ElementEnabler', null, Sys.IDisposable);

Observable = function()
{
    this._observers = new Array();
}

Observable.prototype = {
    AddObserver: function(func)
    {
        Array.add(this._observers, func);
    }
    ,RemoveObserver: function(func)
    {
        Array.remove(this._observers, func);
    }
    ,NotifyObservers: function()
    {
        for( var i = 0; i < this._observers.length; i++ )
            this.NotifyObserver( this._observers[i] );
    }
    ,NotifyObserver: function( observer )
    {
        // Implementieren
    }    
}

Observable.registerClass('Observable', null, Sys.IDisposable);


Type.registerNamespace("Gastgeber");

// TABS
Gastgeber.Tab = function(index) {
    this._elements = new Array();
    this._index = index;
}

Gastgeber.Tab.prototype = {
    AddElement: function(element)
    {
        Array.add(this._elements, element);
    }
    ,SetEnabled: function(enabled)
    {
        var enabledText;
        if( enabled )
            enabledText = "block"
        else
            enabledText = "none";
        for( var i = 0; i < this._elements.length; i++ )
            this._elements[i].style.display = enabledText;
    }
    ,Activate: function()
    {
        this.SetEnabled( true );
        var ullist = $get('maintab').getElementsByTagName("li");
        for (var i = 0; i < ullist.length; i++)
            ullist[i].className = "";
        ullist[this._index].className = "selected";
    }
    ,GetIndex: function()
    {
        return this._index;
    }
}


