var cms =
{
    widgets : {},
    modules : {},
    moduleInstances : {},
	custom : {},
    core : {}
}

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

    setSubSelectValues : function(name, values)
    {
        this.subSelectValues[name] = values;
    },
    
    setSelectValues : function(name, values)
    {
        this.selectValues[name] = values;
    },
    
    initSubSelect : function(obj)
    {
        var values = this.subSelectValues[obj.name];
        var slaveName = obj.name.replace(/master/, 'slave');
        var slave = obj.form.elements[slaveName];
        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]);
    }
}
