﻿
// ManagedSelect is an UI control derived from ManagedLabeledControl, generating HTML like this:
// 
// <div class="element">
//     <div class="label">Label</div>
//     <div class="field"><select>...</select></div>
// </div>

function ManagedSelect(parent, label, options) {
    this.parent = parent;    
    this.Label = label;
    this.Options = options;
    this.loadPresentation();
}

function ManagedSelect_Prototype() {
    
    this.loadPresentation = function () {
        this.base_loadPresentation();
        
        this.select = document.createElement('select');
        this.select.className = 'managedSelect';
        
        var _this = this;
        Array.forEach(this.Options, function (option) {
            var optionElement = document.createElement('option');
            optionElement.innerHTML = option.Label;
            optionElement.value = option.Value;
            optionElement.selected = option.IsSelected;
            optionElement.className = option.CssClass;
            _this.select.appendChild(optionElement);
        });        
        
        this.SetField(this.select);
        
        this.SelectedValueChanged = new Event();
        this.addSelectedIndexChangedEventHandler();
    }
    
    this.addSelectedIndexChangedEventHandler = function () {
        var _this = this;
        this.select.onchange = function () {
            var selectedOption = _this.GetSelectedOption();
            selectedOption.Selected.invokeHandlers(new OptionSelectedEventArgs(selectedOption));
        }
    }
    
    this.GetSelectedOption = function () {
        return this.Options[this.select.selectedIndex];
    }
}

ManagedSelect_Prototype.prototype = createPrototypeWithOverridableFunctions(ManagedLabeledControl);

ManagedSelect.prototype = new ManagedSelect_Prototype();

function ManagedSelectOption(label, value, cssClass) {
    this.Label = label;
    this.Value = value;
    this.CssClass = cssClass;
    this.IsSelected = false;
    this.Selected = new Event();
    this.Selected.addHandler(function () {
        this.IsSelected = !this.IsSelected;
    });
}

function OptionSelectedEventArgs(option) {
    this.Option = option;
}