﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("DotSlash.Extenders");

DotSlash.Extenders.DropDownBehavior = function(element) {
    DotSlash.Extenders.DropDownBehavior.initializeBase(this, [element]);
    this._panelID = null;
    this._hiddenID = null;
    this._selectedItems = null;
    this._limit = 0;
    this._count = 0;
}

DotSlash.Extenders.DropDownBehavior.prototype = {
    initialize: function() 
    {
        DotSlash.Extenders.DropDownBehavior.callBaseMethod(this, 'initialize');
       
        var e = this.get_element();
        $get(this._panelID).innerHTML = this._description;
       
        if (e) 
        {
            var a = document.createElement("a");
            a.id = 'Add_' + e.id;
            a.innerHTML = '<span style=cursor:pointer;cursor:hand;padding-left:5px;>Add</span>';
            e.parentNode.insertBefore(a, e.nextSibling);
        }
        
        $addHandler(a, 'click', Function.createDelegate(this, this._onClick));
        
        for(var index in this._selectedItems)
        {  
            var i = this._selectedItems[index];
            this.add(i.Value,i.Text);
        }
    },
    
    dispose: function() 
    {        
        var e = this.get_element();
        $clearHandlers($get('Add_' + e.id));
        
        DotSlash.Extenders.DropDownBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_PanelID: function() 
    {
        return this._panelID;
    },
    
    set_PanelID: function(value) 
    {
        this._panelID = value;
    },
    
    get_HiddenID: function() 
    {
        return this._hiddenID;
    },
    
    set_HiddenID: function(value) 
    {
        this._hiddenID = value;
    },
    
    get_Data: function() 
    {
        return $get(this._hiddenID).value;
    },
    
    set_Data: function(value) 
    {
        $get(this._hiddenID).value = value;
    },
    
    get_SelectedItems: function() 
    {
        return this._selectedItems;
    },
    
    set_SelectedItems: function(value) 
    {
        this._selectedItems = value;
    },
    
    get_Limit: function() 
    {
        return this._limit;
    },
    
    set_Limit: function(value) 
    {
        this._limit = value;
    },
    
    get_Description: function() 
    {
        return this._description;
    },
    
    set_Description: function(value) 
    {
        this._description = value;
    },
    
    _onClick : function() 
    {
        var e = this.get_element();
       
        if (e) 
        {
            this.add(e.value, e.options[e.selectedIndex].text); 
        } 
    },
    
    add : function(value,text)
    {
        var pnl = $get(this._panelID);
        if ((pnl.innerHTML == this._description) && (this._description.length > 0))
            pnl.innerHTML = "";
        
        var id = this._panelID + "_" + value;
        var data = this.get_Data();
                    
        if (this.findData(value,text) > -1)
            return;
        
        if (this._count >= this._limit)
        {
            if (this._limit != 0)
                return; 
        }
            
        this.set_Data(data + value + ";" + text + ",");
        this._count++;
        
        var a = document.createElement("a");
        a.id = 'del' + id;
        a.innerHTML = ' ';
               
        var li = document.createElement("li");
        li.id = id;
        li.innerHTML = text;
        li.appendChild(a);

        pnl.appendChild(li);
     
        $addHandler($get('del' + id), 'click', Function.createDelegate(this, this.remove));
    },
    
    remove : function(e)
    {
        var panel = $get(this._panelID);
        var anchor = $get(e.target.id);
        var child = $get(e.target.id.replace('del',''));
        
        var val = child.id.replace(this._panelID + '_','');
        var text = child.firstChild.data;
                
        $clearHandlers(anchor);
        panel.removeChild(child);
       
        var pos = this.findData(val,text);
        var data = this.get_Data();
        
        if (pos == -1)
            return; //Err
        else if (pos == 0)
            this.set_Data( data.substring(val.length + text.length + 2) );
        else
            this.set_Data( data.replace(',' + val + ';' + text + ',',',') );
            
        this._count--;
    },
    
    findData : function(val,text)
    {
        var data = this.get_Data();
        var pos = data.indexOf(',' + val + ';' + text + ',');
        
        //The value already exists return
        if (pos > -1)
            return pos;
            
        if (data.length > 0)
        {
            if (data.substring(0,data.indexOf(',')) == (val + ';' + text))
                return 0;
        }
        
        return -1;
    }
}
DotSlash.Extenders.DropDownBehavior.registerClass('DotSlash.Extenders.DropDownBehavior', Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
Type.registerNamespace('DotSlash.Extenders');DotSlash.Extenders.Resource={};
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();