$.widget("ui.pafselectable", $.extend({}, $.ui.selectable.prototype, {
	_original_init: $.ui.selectable.prototype._create,
	_original_mouse_start: $.ui.selectable.prototype._mouse_start,
	_original_mouseDrag: $.ui.selectable.prototype._mouseDrag,
	_original_mouseStop: $.ui.selectable.prototype._mouseStop,

 	_create: function(){
    	var self = this, options = $.extend({mode: 'standard'}, this.options);
    	// fire original method

		self._original_init();
	},
	
	selectAll: function(){
		var selectees = $(this.options.filter, this.element[0]);
		selectees.addClass('ui-selected');
		
		var event = jQuery.Event("added");
		event.type="added";
		this._trigger("stop", event, $([]));
	},
	
	raiseStop: function(){
		var event = jQuery.Event("added");
		event.type="added";
		this._trigger("stop", event, $([]));
	},
	
	_mouseDrag: function(event) {
		var self = this;
		
		if (this.options.mode == 'excel'){
			this.dragged = true;
			return this._excelSelector(event);
		} else if (this.options.mode == 'detail'){
			this.dragged = false;
			return false;
		} else {
			return self._original_mouseDrag(event);
		}
	},
	
	_mouseStop: function(event) {
		var self = this;
		/*var selectees = $(this.options.filter, this.element[0]);
		selectees.unbind('mouseenter');*/
		
		this._original_mouseStop(event);
	},
	
	_excelSelector: function(event) {
		var self = this;
		var selectees = $(this.options.filter, this.element[0]);
		selectees.mouseenter(function(event){
			if (self.dragged){
				$(this).addClass('ui-selecting');
			}
		});
		return true;
	}
}));

