var SortableLists = {
	
	addSortable: function(sortable_list, params) {
		if ( sortable_list.length > 0 ) {
			sortable_list.each(function(sortable, x) {
				SortableLists.addSortableEffects(sortable, params);
			});
		}
	},
				
				
	addSortableEffects: function(elem, params) {
		new Sortables(elem, {
			'clone': true,
			'opacity': (params && params.opacity) ? params.opacity : 0.5,
			'revert': (params && params.revert) ? params.revert : true,
			'snap': (params && params.snap) ? params.snap : 5,
			'handle': (params && params.handle) ? params.handle : null,
			'onStart': (params && params.onStart) ? params.onStart : function(element, ghost) {
				ghost.setStyle('zIndex', 200);
			}
		});
		
		// Now add some mouseover effects
		var sortable_items = elem.getChildren('li');
		
		sortable_items.each(function(item, i){
			var fx = new Fx.Morph(item, {duration: 6000, wait: false, transition: Fx.Transitions.Elastic.easeOut});
			
			if ( params && params.childEffectsActive ) {
				item.addEvent('mouseenter', function(e){
					fx.start(params.childEffectsActive);
				});
			}
				
			if ( params && params.childEffectsInactive ) {
				item.addEvent('mouseleave', function(e){
					fx.start(params.childEffectsInactive);
				});
			}
		});
	}
	
};







var CrossSortableLists = {
	
	addSortable: function(sortable_list, params) {
		if ( sortable_list.length > 0 ) {
			new Sortables(sortable_list, {
				'clone': true,
				'opacity': (params && params.opacity) ? params.opacity : 0.5,
				'revert': (params && params.revert) ? params.revert : true,
				'snap': (params && params.snap) ? params.snap : 5,
				'handle': (params && params.handle) ? params.handle : null,
				'onComplete': (params && params.onComplete) ? params.onComplete : function() { },
				'onStart': (params && params.onStart) ? params.onStart : function(element, ghost) {
					ghost.setStyle('zIndex', 200);
				}
			});
			
			
			var sortFX = Array();
			
			
			sortable_list.each(function(sortable, x) {
				CrossSortableLists.addSortableEffects(sortable, params);
			
				sortFX[x] = new Fx.Morph(sortable, {'duration': ((params && params.listEffectsTime) ? params.listEffectsTime : 1000), 'wait': false, 'transition': Fx.Transitions.Quad.easeOut, 'link': 'chain'});
				
				if ( params && params.listEffectsActive ) {
					sortable.addEvent('mouseenter', function(e){
						for ( var y = 0; y < sortable_list.length; y++ ) {
							sortFX[y].start(params.listEffectsActive);
						}
					});
				}
				
				if ( params && params.listEffectsInactive ) {
					sortable.addEvent('mouseleave', function(e){
						for ( var y = 0; y < sortable_list.length; y++ ) {
							sortFX[y].start(params.listEffectsInactive);
						}
					});
				}
			});
		}
	},
	
	
	addSortableEffects: function(elem, params) {
		
		// Now add some mouseover effects
		var sortable_items = elem.getChildren('li');
		
		sortable_items.each(function(item, i){
		var fx = new Fx.Morph(item, {duration: ((params && params.childEffectsTime) ? params.childEffectsTime : 1000), wait: false, transition: Fx.Transitions.Quad.easeOut});
			
			if ( params && params.childEffectsActive ) {
				item.addEvent('mouseenter', function(e){
					fx.start(params.childEffectsActive);
				});
			}
				
			if ( params && params.childEffectsInactive ) {
				item.addEvent('mouseleave', function(e){
					fx.start(params.childEffectsInactive);
				});
			}
		});
	}
	
};
