var cms =
{
    'widgets' :
    {
    },
    'modules' :
    {
    },
    'backend' : 
    {
    }
}

cms.widgets.category =
{
    selectValues : {},

    subSelectValues : {},

    setSubSelectValues : function(name, values)
    {
        this.subSelectValues[name] = values;
    },

    setSelectValues : function(name, values)
    {
        this.selectValues[name] = values;
    },

    _setSelectValue : function(id, value)
    {
        var obj = document.getElementById(id);

        for (var iOption = 0; iOption < obj.options.length; iOption++)
        {
            if (obj.options[iOption].value == value)
            {
                obj.options[iOption].selected = true;
            }
        }
    },

    setSelectValue : function(id, value)
    {
        this._setSelectValue(id, value);

        var obj = document.getElementById(id);
        this.initSubSelect(obj);
    },

    setSubSelectValue : function(id, value)
    {
        this._setSelectValue(id, value);
    },

    initSubSelect : function(obj)
    {
        var values = this.subSelectValues[obj.name];
        var slaveName = obj.name.replace(/master/, 'slave');
        var slave = obj.form.elements[slaveName];

        if (!slave)
        {
            return false;
        }

        var value = obj.value;

        // Verwijder bestaande opties
        slave.options.length = 0;

        slave.options[0] = new Option('Geen subcategorie', 0);

        if (value != 0 && value != 'null')
        {
            for (k in values)
            {
                if (values[k].referenceID == value)
                {
                    var option = new Option(values[k].title, k);
                    slave.options[slave.options.length] = option;
                }
            }
        }

        if (value != 0)
        {
            this.removeSelectionFromOtherFields(obj, value);
        }

        slave.disabled = slave.options.length == 0 || value == 'null';
    },

    removeSelectionFromOtherFields : function(obj, value)
    {
        var index = 0;
        var form = obj.form;
        var fieldName = obj.name.replace(/\[[0-9]{1,}\]\[master\]/, '[' + index + '][master]');
        var values = {};
        var valuesByIndex = {};

        // Haal alle waardes op uit de bestaande selectielijsten
        do
        {
            values[form.elements[fieldName].value] = 1;
            valuesByIndex[index] = form.elements[fieldName].value;

            fieldName = obj.name.replace(/\[[0-9]{1,}\]\[master\]/, '[' + (++index) + '][master]');

        } while (form.elements[fieldName]);

        index = 0;
        fieldName = obj.name.replace(/\[[0-9]{1,}\]\[master\]/, '[' + index + '][master]');

        // Zorg dat de bestaande keuzes niet terugkomen in de overige lijsten
        do
        {
            if (fieldName != obj.name)
            {
                // Sla de huidige waarde van de andere selectbox op
                var otherValue = form.elements[fieldName].options[form.elements[fieldName].selectedIndex].value;

                // Maak de andere lijst leeg
                form.elements[fieldName].options.length = 0;

                // Herinitialiseer de lijst, maar dan zonder het huidige item
                for (k in this.selectValues[fieldName])
                {
                    if (values[k] == undefined || k == 'null' || valuesByIndex[index] == k)
                    {
                        var newOption = new Option(this.selectValues[fieldName][k].title, k);
                        form.elements[fieldName].options[form.elements[fieldName].options.length] = newOption;

                        // Zorg dat de slave dezelfde optie geselecteerd houdt
                        if (k == otherValue)
                        {
                            newOption.selected = true;
                        }
                    }
                }
            }

            fieldName = obj.name.replace(/\[[0-9]{1,}\]\[master\]/, '[' + (++index) + '][master]');

        } while (form.elements[fieldName]);
    }
}