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) {
		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 (i=0; i<users.length; i++) {
	                instance.addUser(users[i]);
	            }
	        } else {
	            if (!$(instance.fieldRowIDPrefix + user)) {
                    $(instance.fieldContainer).insert(new Element('li', {id: instance.fieldRowIDPrefix + user}).insert(new Element('span').update(user)).insert(
                            new Element('span').insert(new Element('a', {href: '#', id: 'jive-remove-user-link-' + user}).update('[x]'))));
	                $(instance.fieldValues).value += "," + user;
                    Event.observe($('jive-remove-user-link-' + user), '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);
            }
	    }
	}
}


