/*
 * 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 $a = $(this).parents('a').length

      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() {
        if ($$.find('img.slider-active').parents('a').length > 0)
          var $image = $$.find('img.slider-active').parents('a').nextAll('a:has(img):first').find('img');
        else
          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')+")"});
        $divOff.find('a').remove();
        var $a = $image.parents('a');
        if ($a.length > 0) {
          $divOff.wrapInner(
            $a.clone(true).find('*').remove().end().css({
              display: 'block',
              width: $$.width(),
              height: $$.height()
            })
          );
        }

        
        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);
