if(jQuery) (function($){
	
$.extend($.fn, {
	CleverSuggest: function(bind, o, callback) {
		
		var el = $(this);
		
		if (!o) var o = {};
		
		if( o.items === undefined ) o.items = [];
		if( o.maxItems === undefined ) o.maxItems = 0;
		if( o.allowMultiSelect === undefined ) o.allowMultiSelect = (o.maxItems != 1);
		if( o.allowSearch === undefined) o.allowSearch = true;
		if( o.showNavigation === undefined) o.showNavigation = o.allowSearch;
		if( o.width === undefined ) o.width = 500;
		if( o.selectable === undefined ) o.selectable = false;
		if( o.appTitle  === undefined ) o.appTitle = "Select items";
		if( o.hideItems  === undefined ) o.hideItems = [];
		if( o.width === undefined ) o.width = 620;
		if( o.height === undefined ) o.height = 400;
		if (o.hideSelected === undefined ) o.hideSelected = true;
		
		var container, input;
		
		var selected = [];
		var tempHideItems = [];
		
		
		$(this).each( function() {
			function init()
			{
			
				var id = el.attr("id");
				
				tempHideItems = o.hideItems;
				
				var replacement = $('<div id="'+id+'_wrapper"><div class="cleversuggest_items"></div></div>');
				
				replacement.insertAfter(el);
				
				container = replacement.find(".cleversuggest_items");		
				
				if (o.maxItems == 1)
					container.addClass("single");
								
				el.hide();
				
				$(bind).bind("click", function(){
					
					if (o.maxItems > 0 && o.items.length >= o.maxItems && o.maxItems != 1)
						return;

					var text = $("<div />");
					
					$(text).append('<div id="panelbrowser">Loading CleverFiles...</div>');
					
					$(text).append('<div id="modal-buttons"><a href="javascript:void(0);" id="modal-cancel" class="modal-button modal-close">Cancel</a><a href="javascript:void(0)" id="modal-select" class="modal-button">Select</a></div>');
					
					o.hideItems = new Array();
					o.hideItems = tempHideItems.slice(); //array copy
					
					
					for (i = 0; i < o.items.length; i++)
						o.hideItems.push(o.items[i].id);
					
					o.bindbutton = $(text).find("#modal-select");
					    
					var panel = $('<div id="modalpanel"></div>'); 
					
					$(panel).html(text);
					
					$(panel).modal({ containerId: "clever-modal", 
								closeClass: "modal-close", 
								containerCss: {width: (o.width+40)+'px', height: o.height+'px'},
								overlayId: "clever-overlay",
								onClose: function (dialog) {
									  dialog.data.fadeOut('fast', function () {
									    dialog.container.fadeOut('fast', function () {
									      dialog.overlay.fadeOut('fast', function () {
									        $.modal.close(); // must call this!
									      });
									    });
									  });
								}, onOpen: function (dialog) {
								  dialog.overlay.fadeIn('fast', function () {
								    dialog.container.fadeIn('fast', function () {
								      dialog.data.fadeIn('fast', function(){
								      	$(text).find("#panelbrowser").cleverFiles(o , function(items) { 
					    	
									    	var added = false
									    						    	
									    	for (i = 0; i < items.length; i++)
									    		if(add(items[i]))
									    			added = true;
									    	
									    	if (added)
									    	{
										    	rebuildList();
										    	$.modal.close(); // Must do this!
									    	}
									    	
									    
									    });
								      });
								    });
								  });
								}				
					});
				
				});		
				
				rebuildList();
			
			}
			
			function add(item)
			{
				
				var valid = false;
				if (o.selectable){
					for (i = 0; i < o.selectable.length; i++)
							if (o.selectable[i] == item.type)
								valid = true;
				} else valid = true;
					
					
				if (!valid)
					return false;
				
				if (o.maxItems > 0 && o.maxItems != 1 && o.maxItems <= o.items.length)
					return false;
					
				if (o.maxItems == 1 && o.items.length == 1)
				{
					o.items = [item];
					return true;
				}
				
				var id = item.id;
			
				for (var i = 0; i < o.items.length; i++)
					if (o.items[i].id == id)
						return false;
						
				o.items.push(item);
				
				return true;
			}
			
			function removeItem(id)
			{
				for (var i = 0; i < o.items.length; i++)
					if (o.items[i].id == id)
						o.items.splice(i, 1);
			}
			
			function rebuildList()
			{	
				$(el).val("");
			
				$(container).html("<ul />");
				
				var ids = "";
				
				var ul = $(container).find("UL");
				
				for (var i = 0; i < o.items.length; i++)
				{
					var item = o.items[i];
					ul.append($("<li />").html(createPlaceholder(item)));
					ids += ((ids.length > 0) ? "," : "") + item.id;
					
				}
				
				$(el).val(ids);
					
			}
			
			function createPlaceholder(item)
			{
			
				var div = $("<div />");

				div.css("background-image", "url("+site_url('stuff/grab/'+item.id+"/thumb)"));
					
				div.append(item.name);
				
				var remove = $('<div class="remove"><span>Remove</span></div>');
				
				$(remove).bind("click", function(){ removeItem(item.id); rebuildList(); });
				
				div.prepend(remove);
				
				return div;
			
			}
			
			init(); // GO!
		});
	}
});

})(jQuery);
