﻿//
// Array and String extensions...
//
if (!Array.prototype.contains) {
    Array.prototype.contains = function(item) {
        var len = this.length;
        for (var i = 0; i < len; i++) {
            if (this[i] === item) { return true; }
        }
        return false;
    };
}

if (!Array.prototype.remove) {
    Array.prototype.remove = function(item) {
        var j = 0;
        while (j < this.length) {
            if (this[j] == item) {
                this.splice(j, 1);
            } else {
                j++;
            }
        }
    };
}

if (!String.prototype.goodSplit) {
    String.prototype.goodSplit = function(delimiter) {
        if (this == null || this == '') return new Array();
        else return this.split(delimiter);
    };
}

//
// TagPicker class
//
// CONSTRUCTOR
function TagPicker(controlID) {
    var idx = '' + (TagPicker.uniqueIndex++);
    this.idx = idx;
    this.tblSelectedTags = $("tbody[id$='" + controlID + "_tblSelectedTags']");
    this.rcbTags = $("div[id$='" + controlID + "_rcbTags']");
    this.hdnTagIDs = $("input[id$='" + controlID + "_hdnTagIDs']");
    this.divNoTags = $("div[id$='" + controlID + "_divNoTags']");
    this.rcbTags.attr('idx', this.idx);
    TagPicker.objects[idx] = this;
}
// PROPERTIES
TagPicker.objects = [];
TagPicker.uniqueIndex = 1;
// INSTANCE METHODS
TagPicker.prototype.addItem = function(id, text) {
    this.tblSelectedTags.append('<tr id=tr' + (this.idx) + '_' + id + '><td>' + text + '</td><td>&nbsp;<a href="javascript:void(0);" onclick="TagPicker.removeTag(' + this.idx + ',' + id + ');"><img src=/images/icons/delete.png border=0 alt="Remove" /></a></td></tr>');
}
TagPicker.prototype.loadTags = function() {
    var ddl = $find(this.rcbTags.attr('id'));
    var tags = this.hdnTagIDs.val().goodSplit(',');
    for (var i = 0; i < tags.length; i++) {
        var id = tags[i];
        var item = ddl.findItemByValue(id);
        if (item != null) {
            var text = item.get_text();
            this.addItem(id, text);
            this.divNoTags.hide();
        }
    }
}
TagPicker.prototype.addTag = function() {
    var ddl = $find(this.rcbTags.attr('id')); // Get Rad object.
    var hdn = this.hdnTagIDs;
    var tags = hdn.val().goodSplit(',');
    if (!tags.contains(ddl.get_value())) {
        this.addItem(ddl.get_value(), ddl.get_text());
        tags[tags.length] = ddl.get_value();
        hdn.val(tags.join(','));
        this.divNoTags.hide();
    }
}
TagPicker.prototype.removeTag = function(id) {
    $('#tr' + this.idx + '_' + id).remove();
    var hdn = this.hdnTagIDs;
    var tags = hdn.val().goodSplit(',');
    tags.remove(id);
    hdn.val(tags.join(','));
    if (tags.length == 0)
        this.divNoTags.show();
}
// CLASS METHODS
TagPicker.removeTag = function(idx, tagID) {
    var obj = TagPicker.objects[idx];
    obj.removeTag(tagID);
}
TagPicker.addTag = function(el) {
    var tr = jQuery(el.parentNode.parentNode);
    var idx = tr.find("div[id$='rcbTags']").attr('idx');
    var obj = TagPicker.objects[idx];
    obj.addTag();
}

