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 );
