/***************************************
  Columns
   @author Karl Swedberg
   @version 0.2 (08/19/2008)
   @requires jQuery v1.2.6+
  
***************************************/


(function($) {
$.fn.columns = function(options) {
  var opts = $.extend(true, {}, $.fn.columns.defaults, options);


  return this.each(function(event) {
    var $container = $(this),
        nname = this.nodeName,
        $kids = $container.children(),
        col = 1,
        item = 1,
        items = [],
        cClass = opts.columnClass;
    
    if (opts.columnWrapper) {
      var cw = this.className ? this.className + ' ' + opts.columnWrapperClass : opts.columnWrapperClass;
      var $wrap = $(opts.columnWrapper)
        .addClass(cw + ' ' + cw + '-' + opts.columns)
        .attr('id', this.id)
        .insertBefore($container);
    }
    for (var i=0, kidslength = $kids.length; i < kidslength; i++) {
      items.push($kids[i]);
      var itemStart = (kidslength/opts.columns)*col;

      if (i === kidslength-1 || 
        (i+1 >= itemStart && ( !/(DD|DT)/.test($kids[i].nodeName) || $kids.eq(i).next().is('dt')) )
      ) {
        item = Math.ceil(itemStart);
        var $parent = $('<' + nname + ' class="' + cClass + ' ' + cClass + '-' + col + '"></' + nname + '>')
          .append($(items));
        if (i === kidslength-1) {
          $parent.addClass(cClass + '-last');
        }
        if (opts.columnWrapper) {
          $parent.appendTo($wrap);
        } else {
          $parent.insertBefore($container);
        }
        if ($parent[0].nodeName == 'OL' && col > 1) {
          $parent.attr('start', start);
        }
        col++;
        items = [];
      }
      
      var start = item+1;
    }
    
    $container.remove();


  });
};

})(jQuery);


$.fn.columns.defaults = {
  columns: 3,
  columnClass: 'floatcols',
  columnWrapper: '<div></div>', // set to null if you don't want a wrapper around all columns
  columnWrapperClass: 'column-wrapper'
};