/*
 * Slider v0.2 - jQuery widget
 * Copyright (c) 2011 Tamás Paksa
 */

(function($){

  $.fn.slider = function(options){
    var opts = $.extend({}, $.fn.slider.defaults, options);
    
    function log(msg){
      if (opts.debug)
        console.log(msg);
    }
    
    return $(this).each(function(){
      var $$ = $(this);
      opts.onInit($$);
      
      $$.find('img').css({display: 'none'});

      var $divOn = $('<div/>', {
        id: 'slider-box-on'
      }).css({
        position: 'absolute',
        width: $$.width(),
        height: $$.height(),
        zIndex: 11
      }).appendTo($$);
      var $divOff = $('<div/>', {
        id: 'slider-box-off'
      }).css({
        position: 'absolute',
        width: $$.width(),
        height: $$.height(),
        zIndex: 10
      }).appendTo($$);
      //$$.find('img:first').addClass('slider-active');
      
      (function doSlide() {
        var $image = $$.find('img.slider-active').nextAll('img:first');
        if ($image.length === 0)
          $image = $$.find('img:first')
        opts.onBeforeSlide($$);
        
        $$.find('img.slider-active').toggleClass('slider-active');
        $image.toggleClass('slider-active');
        $divOff.hide();
        $divOff.css({backgroundImage: "url("+$image.attr('src')+")"});
        var $zIndexCsere = $divOn.css('zIndex');
        $divOn.css({zIndex: $divOff.css('zIndex')});
        $divOff.css({zIndex: $zIndexCsere});
        var properties = {};
        properties[opts.showAnimation] = 'show';
        $divOff.animate(properties, opts.showSpeed, opts.easing, function(){
          var $divCsere = $divOn;
          $divOn = $divOff;
          $divOff = $divCsere;
          opts.onAfterSlide($$);
          setTimeout(function() {
              doSlide();
          }, opts.delay);
        });
        properties[opts.hideAnimation] = 'hide';
        $divOn.delay(opts.showSpeed - opts.hideSpeed).animate(properties, opts.hideSpeed, opts.easing);
      })();

    });
  }

  $.fn.slider.defaults = {
    delay: 3000,
    showSpeed: 1000,
    hideSpeed: 500,
    showAnimation: 'opacity',
    hideAnimation: 'opacity',
    easing: 'swing',
    debug: false,
    onInit        : function(){}, // callback functions
    onBeforeSlide : function(){}, // callback functions
    onAfterSlide  : function(){} // callback functions
  };

})(jQuery);
