Type.registerNamespace('WindowsSite.Ajax.Controls');

WindowsSite.Ajax.Controls.CommandControlListBehavior = function(element)
{
    WindowsSite.Ajax.Controls.CommandControlListBehavior.initializeBase(this, [element]);
    this._selectedIndex = -1;
}

WindowsSite.Ajax.Controls.CommandControlListBehavior.prototype =
{
    initialize: function()
    {
        WindowsSite.Ajax.Controls.CommandControlListBehavior.callBaseMethod(this, 'initialize');
        this.set_Items();
    },

    dispose: function()
    {
        $clearHandlers(this.get_element());
        WindowsSite.Ajax.Controls.CommandControlListBehavior.callBaseMethod(this, 'dispose');
    },

    get_ItemIDs : function() {
        return this._itemIDs;
    },
    set_ItemIDs : function(value) {
        if (this._itemIDs != value) {
            this._itemIDs = value ? Array.parse(value) : [];
            this.raisePropertyChanged('ItemIDs');
        }
    },

    get_Items : function() {
        return this._items;
    },
    set_Items : function() {
        this._items = new Array();
        for (var i = 0; i < this.get_ItemIDs().length; i++)
        {
            this._items.push($find(this.get_ItemIDs()[i]));
        }
    },

    get_WebTrendsImpressionsCommandsList : function() {
        return this._webTrendsImpressionsCommandsList;
    },
    set_WebTrendsImpressionsCommandsList : function(value) {
        if (this._webTrendsImpressionsCommandsList != value)
        {
            this._webTrendsImpressionsCommandsList = value ? Array.parse(value) : [];
            this.raisePropertyChanged("WebTrendsImpressionsCommandsList");
        }
    },

    get_OmnitureImpressionsCommandsList : function() {
        return this._omnitureImpressionsCommandsList;
    },
    set_OmnitureImpressionsCommandsList : function(value) {
        if (this._omnitureImpressionsCommandsList != value)
        {
            this._omnitureImpressionsCommandsList = value ? Array.parse(value) : [];
            this.raisePropertyChanged("OmnitureImpressionsCommandsList");
        }
    },

    _onControlCommand: function(sender, args)
    {
        if (args != null)
        {
            this._commandName = args.get_CommandName();
            this._commandArgument = args.get_CommandArgument();
        }
        switch ( this._commandName ) {
            case "SelectSender":
                this._setSelected(sender.get_element().id);
                break;
            case "DeselectAll":
                this._deselectAll();
                break;
            case "CancelSiblingEvents":
                this._cancelSiblingEvents(sender.get_element().id);
                break;
            default:
                WindowsSite.Ajax.Controls.CommandControlListBehavior.callBaseMethod(this, '_onControlCommand');
                break;
        }
    },

    _setSelected : function ( itemID ) {
        for (var i = 0; i < this.get_ItemIDs().length; i++)
        {
            this.get_Items()[i].set_IsSelected(itemID == this.get_ItemIDs()[i]);
            if (itemID == this.get_ItemIDs()[i]) this._selectedIndex = i;
        }
        //send impression to web trends and omniture
        if (this.get_WebTrendsImpressionsCommandsList()) eval(this.get_WebTrendsImpressionsCommandsList()[this._selectedIndex]);
        if (this.get_OmnitureImpressionsCommandsList()) eval(this.get_OmnitureImpressionsCommandsList()[this._selectedIndex]);
    },

    _getSelectedItem: function()
    {
        return this.get_Items()[this._selectedIndex];
    },

    _deselectAll : function ( ) {
        for (var i = 0; i < this.get_ItemIDs().length; i++)
        {
            this.get_Items()[i].set_IsSelected(false);
        }
    },

    _cancelSiblingEvents : function ( itemID ) {
        for (var i = 0; i < this.get_ItemIDs().length; i++)
        {
            if (itemID != this.get_ItemIDs()[i]) this.get_Items()[i]._cancelEvents();
        }
    }
}

WindowsSite.Ajax.Controls.CommandControlListBehavior.registerClass('WindowsSite.Ajax.Controls.CommandControlListBehavior', WindowsSite.Ajax.Common.ControlBaseBehavior);
