(function($) {

 /*
 Image Slideshow for Hamlet
 ===========================

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

 - jQuery 1.4x
 - jQuery Tools + 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").slider();


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

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

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


 Options:
 --------

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


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

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

 */

 $.fn.slider = function(options) {
 var opts = $.extend({}, $.fn.slider.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 slider

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

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

})(jQuery);
