

(function($) {

  /*
    Image Slideshow for sentres
    ===========================

    Requirements:
    -------------

    - jQuery 1.4 (1.3 may also work)
    - jQuery Tools 1.2.0 + components: scrollable, scrollable.autoscroll, scrollable.navigator


    Usage:
    ------

    <div id="slider">
      <img title="used as description..."/>
      <div />
      <img />
      <p class="descr">... or html-capable description for above img/slide</title>
      <img />
    </div>

    $("#slider").senSlide();


    Change slideshow dimensions:
    ----------------------------

    #slider1,
    #slider1 .swrap {
    	height:500px;
    }

    If you modify width, you will also have to change the overlay css.


    Options:
    --------

    $("#slider").senSlide({
      description: true, // default: true
      controls: true,    // default: true
      minimap: true,     // default: true
      autoscroll: 5000,  // default: false
      circular: true     // default: true
    });


    Override default options:
    -------------------------

    $.fn.senSlide.defaults.description = true;
    $.fn.senSlide.defaults.controls = false;
    ...

  */

  $.fn.senSlide = function(options) {
    var opts = $.extend({}, $.fn.senSlide.defaults, options);
    var titles = new Array;

    this.wrapInner('<div class="items" />').wrapInner('<div class="swrap" />');
    // insane.. but fast!
    this.append(
      '<div class="overlay">'
        + (opts.description === true ? '<p class="descr"><span /></p>' : '')
        + '<div class="controls">'
          + (opts.controls === true ? '<a class="prev" />' :'')
          + (opts.minimap === true ? '<div class="minimap" />' : '')
          + (opts.controls === true ? '<a class="next" />' :'')
        + '</div>'
      + '</div>'
    );

    this.scrollable({
      circular: opts.circular,
      speed: opts.speed
    });

    if (opts.autoscroll !== false) {
      this.autoscroll({ interval: opts.autoscroll });
    }

    var api = this.data("scrollable");

    // tools bug? wenn circular=true zaehlt der index (aufgrund des geklonten imgs) falsch
    // api.getIndex()
    // workaround/fix: der zweite parameter von onSeek ist der neue index
    api.onSeek(function(e, i) {
      if (i >= 0) {
        var t = titles[i];
        if (t) {
          this.setDescription(t);
        }
      }
    });

    api.onBeforeSeek(function() {
      this.hideDescription();
    });

    api.hideDescription = function() {
      api.setDescription(false);
    };

    api.setDescription = function(descr) {
      if (descr === false) {
        this.getRoot().find(".overlay .descr > span").fadeOut("fast");

        return true;
      }

      if (opts.description === false) {
        return false;
      }

      this.getRoot().find(".overlay .descr > span").fadeOut("fast", function() {
        $(this).html(descr).fadeIn("fast");

      });

    };

    // aus einem direkt auf den slide folgenden .descr den title des images machen
    $(this).find(".items > *:not(.cloned, .descr)").each(function(i) {
      var e = $(this);
      descr = e.next(".descr");

      if (descr.length > 0) {
        titles[i] = descr.html();
        descr.remove();

      } else {
        titles[i] = e.attr("title");

      }

    });

    // remove titles on hover to prevent popups
    this.find('.items > *').hover(function() {
      if (! this.real_title) {
        this.real_title = this.title;
      }

      this.title = '';

    }, function() {
      this.title = this.real_title;

    });

    var config_class = ''; // why? IE6

    if (opts.description === false) {
      config_class += '_nodescr'
      this.addClass("nodescr");

    }

    if (opts.controls === false) {
      config_class += '_nocontrols'
    }

    if (opts.minimap !== false) {
      this.navigator({ navi: ".minimap" });

    } else {
      config_class += '_nominimap'

    }

    config_class = config_class.replace(/^_+/, '').replace(/_+$/, ''); // trim:"_"
    this.addClass(config_class);

    if (opts.description === false) {
      api.hideDescription();

    } else {
      // set initial description
      this.find(".overlay .descr > span").html(titles[0]);

    }

  } // end senSlide

  $.fn.senSlide.defaults = {
    description: true,
    controls: true,
    minimap: true,
    autoscroll: false,
    circular: true,
    speed: 400 // funktioniert irgendwie nicht... mayb jquery tools bug
  };

  function logg(what) {
    try {
      console.log(what);
    } catch(e) {
      // alert(what);
    }
  }

})(jQuery);
