/*
 * jQuery plugin: autoCompletefb(AutoComplete Facebook)
 * @requires jQuery v1.2.2 or later
 * using plugin:jquery.autocomplete.js
 *
 * Credits:
 * - Idea: Facebook
 * - Guillermo Rauch: Original MooTools script
 * - InteRiders <http://interiders.com/> 
 *
 * Copyright (c) 2008 Widi Harsojo <wharsojo@gmail.com>, http://wharsojo.wordpress.com/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
 
jQuery.fn.autoCompletefb = function(options) 
{
	var tmp = this;
	var settings = 
	{
		ul           : tmp,
		urlLookup    : [""],
		acOptions    : { minChars: 1,
                         selectFirst: false,
                         mustMatch: true
                        },
		foundClass   : ".acfb-data",
		inputClass   : ".acfb-input",
        urlDeleteImg : "delete.gif",
        hiddenId     : "FB",
        values       : [""]
	};
	if(options) jQuery.extend(settings, options);
	
	var acfb = 
	{
		params  : settings,
		getData : function()
		{	
			/*var result = '';
		    $(settings.foundClass,tmp).each(function(i)
			{
				if (i>0)result+=',';
			    result += $('span',this).html();
		    });
			return result;*/
            return $('input:hidden[name='+settings.hiddenId+']').val();
		},
		clearData : function()
		{	
		    $(settings.foundClass,tmp).remove();
			$(settings.inputClass,tmp).focus();
            $('input:hidden[name='+settings.hiddenId+']').val('');
			return tmp.acfb;
		},
		removeFind : function(o){
            var parentElement = $(o).unbind('click').parent();
            var id            = parentElement.children('div').text();
            
			parentElement.remove();
            var datas = this.getData().split(",");
            datas.splice(jQuery.inArray(id, datas),1);
            
            var hiddenInput = $('input:hidden[name='+settings.hiddenId+']');
            hiddenInput.val(datas.join(','));
            
			$(settings.inputClass,tmp).focus();
			return tmp.acfb;
		},
        putData : function() {
            this.clearData();
            jQuery.each(settings.values, function(index, data) {
                //We get the previous value
                var hiddenInput    = $('input:hidden[name='+settings.hiddenId+']');
                var previousVal    = hiddenInput.val();
                var previousValues = previousVal.split(",");

                //We get the id and the value to add
                var label     = data.name;
                var id        = data.id;
                
                //We check if value is NOT already added
                if (jQuery.inArray(id, previousValues)==-1) {
            
                    //We construct the element to add
                    var imgLink    = settings.urlDeleteImg;
                    var formatted  = settings.foundClass.replace(/\./,'');
                    var newElement = '<li class="'+formatted+'"><span>'+label+'</span><div style="visibility: hidden; height: 0; width:0; float: left;">'+id+'</div> <img class="p" src="'+imgLink+'" alt="X"/></li>';
                    
                    //We add the newElement
                    var x = $(settings.inputClass,tmp).before(newElement);
                    $('.p',x[0].previousSibling).click(function(){
                        acfb.removeFind(this);
                    });
                    $(settings.inputClass,tmp).val('').focus();
                    
                    
                    //We save it into the hidden input
                    if (previousVal=="") hiddenInput.val(id);
                    else hiddenInput.val(previousVal+','+id);
                }
            });
            
            
        }
	}
	
	$(settings.foundClass+" img.p").click(function(){
		acfb.removeFind(this);
	});
	$(settings.inputClass,tmp).flushCache();
	$(settings.inputClass,tmp).autocomplete(settings.urlLookup,settings.acOptions);
	$(settings.inputClass,tmp).result(function(event,data,formatted){
        if (data) {
            //We get the previous value
            var hiddenInput    = $('input:hidden[name='+settings.hiddenId+']');
            var previousVal    = hiddenInput.val();
            var previousValues = previousVal.split(",");

            //We get the id and the value to add
            var label     = data[0];
            var id        = data[1];

            //We check if value is NOT already added
            if (jQuery.inArray(id, previousValues)==-1) {
                //We construct the element to add
                var imgLink    = settings.urlDeleteImg;
                var formatted  = settings.foundClass.replace(/\./,'');
                var newElement = '<li class="'+formatted+'"><span>'+label+'</span><div style="visibility: hidden; height: 0; width:0; float: left;">'+id+'</div> <img class="p" src="'+imgLink+'" alt="X"/></li>';
                
                //We add the newElement
                var x = $(settings.inputClass,tmp).before(newElement);
                $('.p',x[0].previousSibling).click(function(){
                    acfb.removeFind(this);
                });
                $(settings.inputClass,tmp).val('').focus();
                
                
                //We save it into the hidden input
                if (previousVal=="") hiddenInput.val(id);
                else hiddenInput.val(previousVal+','+id);
            }       
        }
    
        
	});
	$(settings.inputClass,tmp).focus();
	return acfb;
}


