jQuery.fn.sortableList = function( options )
{
	var defaults =
	{

	};

	var start;

	function start_index(e, ui)
	{
		start = get_index(ui);
    }

	function stop_index(e, ui )
	{
		var stop = get_index(ui);
		var number = stop - start;
		update_tree(ui.item, number);
	}

    function update_tree( $list_item, number)
	{
      var $form = jQuery( 'form:first', $list_item );
	  //Asumimos 3 inputs: el primero con _method, segundo con el ID, y el tercero con el orden.
	  var $input_id = jQuery( "input[type='hidden']:eq(1)", $form );
	  var $input_orden = jQuery( "input[type='hidden']:eq(2)", $form );
	  var data = {};
	  data[$input_id.attr('name')] = $input_id.val();
	  data[$input_orden.attr('name')] = number;
      jQuery.post( $form.attr('action'), data );
    }

	function get_index(ui)
	{
		var list_item = ui.item;
		var index = list_item.parent().children().index(list_item);
		return index;
	}

	jQuery.extend( defaults, options );

	return this.each( function()
	{
		jQuery(this).sortable(
		{
			start: start_index,
			stop: stop_index
		});

		jQuery( 'form', jQuery(this)).live( 'submit', function()
		{
			jQuery(this).ajaxSubmit();
			var $item = jQuery(this).parents('li:first');
			var orden = jQuery( "input[type='hidden']:eq(2)", jQuery(this)).val();

			if( orden > 0 )
			{
				$item.fadeOut('slow', function() {
					jQuery( this ).insertAfter( jQuery( this ).next()).fadeIn( 'slow' );
				});
			}
			else
			{
				$item.fadeOut('slow', function()
				{
					jQuery( this ).insertBefore( jQuery( this ).prev()).fadeIn( 'slow' );
				});
			}

			return false;
		});

	});
}
