
var mySortables = new Class({
	
	Extends: Sortables,
	
	insert: function(dragging, element){
		var where = 'inside';
		if (this.lists.contains(element)){
			this.list = element;
			this.drag.droppables = this.getDroppables();
		} else {
			where = this.element.getAllPrevious().contains(element) ? 'before' : 'after';
		}
		this.element.inject(element, where);
		//
			var el = this.clone;
			var cont = this.element.getParent();
			var ccoo = cont.getCoordinates(el.offsetParent);
			var cps = {}, ems = {};
			
			['top', 'right', 'bottom', 'left'].each(function(pad){
				cps[pad] = cont.getStyle('padding-' + pad).toInt();
				ems[pad] = el.getStyle('margin-' + pad).toInt();
			}, this);
			
			var width = el.offsetWidth + ems.left + ems.right, height = el.offsetHeight + ems.top + ems.bottom;
			var x = [ccoo.left + cps.left, ccoo.left + cps.left];
			var y = [ccoo.top + cps.top, ccoo.bottom - cps.bottom - height];

			this.drag.limit = {x: x, y: y};
		//

		this.fireEvent('sort', [this.element, this.clone]);
	},
	
	addItems: function(){
		Array.flatten(arguments).each(function(element){
			if (element.getElement('.drag'))
			{
				this.elements.push(element);
				var start = element.retrieve('sortables:start', this.start.bindWithEvent(this, element));
				(this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start);
			}
		}, this);
		return this;
	},
	
	getDroppables: function(){
		var droppables = this.list.getChildren();
		droppables = this.lists.concat(droppables).erase(this.list);
		return droppables.erase(this.clone).erase(this.element);
	}
	
});



