/**
 * Creates a slideshow across an array of HTML strings 
 * with a fading transition.  
 * 
 * This is a work in progress.
 */
(function($) {

  $.fn.across = function(items, options) {
    
    //load the settings
    var settings = $.extend({
      "uid" : (new Date()).getTime(),
      "interval": 6000,
      "fadeSpeed": 1000,
      "width": null,
      "height": null,
      "position": "relative",
      "index": 1,
      "itemPrefix": "",
      "itemSuffix": ""
    }, options);
    
    $.fn.across.instances[settings.uid] = settings;

    //adjust some css properties on the element
    var $$ = $(this);
    if (settings.position) $$.css("position", settings.position);
    if (settings.width)    $$.width(settings.width);
    if (settings.height)   $$.height(settings.height);

    if (items.length == 1) { 
      //load the first item, no slideshow
      $$.html("<div style='position:absolute;top:0px;left:0px;'>" + 
          settings.itemPrefix + items[0] + settings.itemSuffix + "</div>");
    } else if (items.length > 0) { 
      //load the first two items 
      $$.html("<div style='position:absolute;top:0px;left:0px;'>" + 
          settings.itemPrefix + items[0] + settings.itemSuffix + 
          "</div><div style='position:absolute;top:0px;left:0px;display:none;'>" + 
          settings.itemPrefix + items[1] + settings.itemSuffix + "</div>");
      
      settings.children = $$.children();
      
      var fn = function() {
        if ($$.is(":visible")) {
          settings.children.each(function(i, n) {
            var o = $(n);
            if (o.is(":visible")) {
              o.fadeOut(settings.fadeSpeed, function() {
                settings.index++;
                if (settings.index >= items.length) settings.index = 0;
                o.html(settings.itemPrefix + items[settings.index] + settings.itemSuffix);
              });
            } else {
              o.fadeIn(settings.fadeSpeed);
            }
          });
        }
      };
      
      settings.fn = fn;

      //begin the slideshow
      settings.intervalObject = setInterval(fn, settings.interval);
    }
    
    return $$;
  };
  
  $.extend($.fn.across, {
    instances: {}
  });

})(jQuery);