var UserPicker = Class.create();
UserPicker.prototype = {

    initialize: function(fieldAutocomplete, fieldAutocompleteChoices, fieldValues, fieldContainer, fieldRowIDPrefix) {
        this.fieldAutocomplete = fieldAutocomplete ? fieldAutocomplete : 'autocomplete';
        this.fieldAutocompleteChoices = fieldAutocompleteChoices ? fieldAutocompleteChoices : 'user_choices';
        this.fieldValues = fieldValues ? fieldValues : 'username';
        this.fieldContainer = fieldContainer ? fieldContainer : 'blog-authors';
        this.fieldRowIDPrefix = fieldRowIDPrefix ? fieldRowIDPrefix : 'jive-user-';
        this.startAutoCompleter(this);
    },

    startAutoCompleter: function(instance) {
        var ac = new Ajax.Autocompleter(this.fieldAutocomplete, this.fieldAutocompleteChoices, "view-people-autocomplete.jspa?resultTypes=COMMUNITY&sort=relevance&start=0&view=search&usernameEnabled=true&nameEnabled=true&emailEnabled=true", {tokens: [',', ' '], updateElement: function(
                selected)
        {
            instance.addUser(Element.collectTextNodesIgnoreClass(selected, 'informal'), instance);
        }, paramName: "query", minChars: 1});
        ac.getToken = function() {
            var bounds = this.getTokenBounds();
            return this.element.value.substring(bounds[0], bounds[1]).strip().toLowerCase();    //compare usernames using lower case
        }
    },

    loadWin: function(elem, multiple) {
        this.win = window.open("user-picker!input.jspa?selectedUsers=" + encodeURIComponent(elem.value) + "&multiple="
                + multiple + "&element=" + elem.getAttributeNode('name').value + "&form="
                + elem.form.getAttributeNode('name').value, "", "menubar=yes,location=no,personalbar=no,scrollbars=yes,width=600,height=800,resizable");
    },

    removeUser: function(user) {
        if (typeof user != 'string') {
            user = Event.element(user).id.gsub('jive-remove-user-link-', '');
        }

        if (user && user.length > 0) {
            Element.remove(this.fieldRowIDPrefix + user);
            var vals = $(this.fieldValues).value.split(",");
            vals[vals.indexOf(user)] = null;    //remove user from array
            vals = vals.compact();  //get rid of any nulls
            $(this.fieldValues).value = vals.join(",");
        }
    },

    addUser: function(user, instance) {
        if (!instance) {
            instance = this;
        }

        if (!user) {
            user = $F(instance.fieldAutocomplete);
        }
        else
        {
            user = user.strip();
        }

        if (user.length > 0) {
            if (user.indexOf(',') > -1) {
                var users = new Array();
                users = user.split(',');
                for (var i = 0; i < users.length; i++) {
                    instance.addUser(users[i]);
                }
            }
            else
            {
                if (!$(instance.fieldRowIDPrefix + user)) {
                    var removeLink = this._addUserElement(user);

                    $(instance.fieldValues).value += "," + user;
                    if (removeLink) {
                        removeLink.observe('click', this.removeUser.bindAsEventListener(this), false);
                    }
                }
                var acAr = $F(instance.fieldAutocomplete).split(",");
                if (acAr.length > 0) acAr.pop();     //last value is the selected value, so drop it
                $(instance.fieldAutocomplete).value = acAr.join(",");
                Field.focus(instance.fieldAutocomplete);
                new Effect.Highlight(instance.fieldRowIDPrefix + user);
            }
        }
    },
    _addUserElement: function(user) {
        var removeLink = new Element('a', {href: 'javascript:;', id: 'jive-remove-user-link-' + user}).update('[x]');
        $(this.fieldContainer).insert(new Element('tr', {id: this.fieldRowIDPrefix + user})
                .insert(new Element('td').insert(new Element('img', {src: '../people/' + encodeURI(user) + '/avatar/16.png'})))
                .insert(new Element('td', {width: 200}).update(user))
                .insert(new Element('td').insert(removeLink)));

        return removeLink;
    }

}