/**
 * jQuery.timers - Timer abstractions for jQuery
 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
 * Date: 2009/02/08
 *
 * @author Blair Mitchelmore
 * @version 1.1.2
 *
 **/

jQuery.fn.extend({
  everyTime: function(interval, label, fn, times, belay) {
    return this.each(function() {
      jQuery.timer.add(this, interval, label, fn, times, belay);
    });
  },
  oneTime: function(interval, label, fn) {
    return this.each(function() {
      jQuery.timer.add(this, interval, label, fn, 1);
    });
  },
  stopTime: function(label, fn) {
    return this.each(function() {
      jQuery.timer.remove(this, label, fn);
    });
  }
});

jQuery.event.special

jQuery.extend({
  timer: {
    global: [],
    guid: 1,
    dataKey: "jQuery.timer",
    regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
    powers: {
      // Yeah this is major overkill...
      'ms': 1,
      'cs': 10,
      'ds': 100,
      's': 1000,
      'das': 10000,
      'hs': 100000,
      'ks': 1000000
    },
    timeParse: function(value) {
      if (value == undefined || value == null)
        return null;
      var result = this.regex.exec(jQuery.trim(value.toString()));
      if (result[2]) {
        var num = parseFloat(result[1]);
        var mult = this.powers[result[2]] || 1;
        return num * mult;
      } else {
        return value;
      }
    },
    add: function(element, interval, label, fn, times, belay) {
      var counter = 0;

      if (jQuery.isFunction(label)) {
        if (!times)
          times = fn;
        fn = label;
        label = interval;
      }

      interval = jQuery.timer.timeParse(interval);

      if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
        return;

      if (times && times.constructor != Number) {
        belay = !!times;
        times = 0;
      }

      times = times || 0;
      belay = belay || false;

      var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});

      if (!timers[label])
        timers[label] = {};

      fn.timerID = fn.timerID || this.guid++;

      var handler = function() {
        if (belay && this.inProgress)
          return;
        this.inProgress = true;
        if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
          jQuery.timer.remove(element, label, fn);
        this.inProgress = false;
      };

      handler.timerID = fn.timerID;

      if (!timers[label][fn.timerID])
        timers[label][fn.timerID] = window.setInterval(handler,interval);

      this.global.push( element );

    },
    remove: function(element, label, fn) {
      var timers = jQuery.data(element, this.dataKey), ret;

      if ( timers ) {

        if (!label) {
          for ( label in timers )
            this.remove(element, label, fn);
        } else if ( timers[label] ) {
          if ( fn ) {
            if ( fn.timerID ) {
              window.clearInterval(timers[label][fn.timerID]);
              delete timers[label][fn.timerID];
            }
          } else {
            for ( var fn in timers[label] ) {
              window.clearInterval(timers[label][fn]);
              delete timers[label][fn];
            }
          }

          for ( ret in timers[label] ) break;
          if ( !ret ) {
            ret = null;
            delete timers[label];
          }
        }

        for ( ret in timers ) break;
        if ( !ret )
          jQuery.removeData(element, this.dataKey);
      }
    }
  }
});

jQuery(window).bind("unload", function() {
  jQuery.each(jQuery.timer.global, function(index, item) {
    jQuery.timer.remove(item);
  });
});

(function($) {
$.fn.Horinaja = function(settings) {
      options =  {
    capture: '',
        delai:  300,
        duree: 4000,
        pagination: true
      };
    var options = $.extend(options, settings);
    return this.each(function(){
    var capture = options.capture;
    var px = $('#'+capture+' > ul > li').width();
        var delai = (options.delai)*1000;
        var duree    = (options.duree)*1000;
        var pagination = options.pagination;
    var nCell = $('#'+capture+' > ul > li').length;
    var po = 0;
    var id = 0;
    function fadeP(it,opac){if(pagination){$('#'+capture+' > ol.horinaja_pagination > li:eq('+it+')').fadeTo("fast", opac);}}
    function moveP(){
      if(po!=-((px*nCell)-px)){
        $('#'+capture+' > ul').animate({
        left: (po-px)+"px"
        }, delai);
        po = po-px;
        fadeP(id,0.4);
        id=id+1;
        fadeP(id,0.8);
      }else{
        $('#'+capture+' > ul').animate({
        left: "0px"
        }, delai);
        po = 0;
        fadeP(id,0.4);
        id=0;
        fadeP(id,0.7);
      }
    }

    $(this).everyTime(duree,capture,function(){moveP();});
    $('#'+capture).css({'overflow':'hidden','position':'relative'});
    $('#'+capture+' > ul').css({'width' : px*nCell+'px'});
    $('#'+capture+' > ul > li').css({'width':px,'float':'left'});
  if(pagination){
    $('#'+capture+' > ul').after('<ol class="horinaja_pagination"></ol>');
    $('#'+capture+' > ol.horinaja_pagination').css({'width':px+'px'});
    var wb = Math.floor(px/nCell);
    for(i=1;i!=(nCell+1);i++){
      var label = aButtons[i].Label;
      var link = aButtons[i].URL;
      var Img = new Image();
      Img.src = aButtons[i].src;
      var height = i * 32;
      var href = '';
      if (link.lenght != 0) {
        href = ' onclick="window.location.href=\''+link+'\'" ';
      }
      $(Img).css('margin-top',height+'px');
//       $('#'+capture+' > ol.horinaja_pagination').append('<li '+href+' style="background-image: url('+Img.src+');"><a style="width:'+wb+'px;"></a></li>');
      $('#'+capture+' > ol.horinaja_pagination').append('<li '+href+' style="margin: 0px; padding: 0px;"><img src="'+Img.src+'" alt="'+label+'" margin: 0px; padding: 0px;" /></li>');
    }
    $('#'+capture+' > ol.horinaja_pagination > li').fadeTo("fast", 0.4);
    $('#'+capture+' > ol.horinaja_pagination > li:first').fadeTo("fast", 0.7);
  }
    $(this)
        .bind('mousewheel', function(event, delta) {
            var dir = delta > 0 ? 'Up' : 'Down',
                vel = Math.abs(delta);
        if(dir=='Up'){
          if(po !=0){
            $('#'+capture+' > ul').animate({
            left: (po+px)+"px"
            }, delai);
            po = po+px;
            fadeP(id,0.4);
            id=id-1;
            fadeP(id,0.7);
            return false;
          }
        }else{
          if(po!=-((px*nCell)-px)){
            $('#'+capture+' > ul').animate({
            left: (po-px)+"px"
            }, delai,'easein',function(){$(this).stop()});
            po = po-px;
            fadeP(id,0.4);
            id=id+1;
            fadeP(id,0.7);
          }
        }
            return false;
        });
  $(this)
  .bind('mouseenter',function(){$(this).stopTime(capture);});
  $(this)
  .bind('mouseleave',function(){$(this).everyTime(duree,capture,function(){moveP();});});
  if(pagination){
    $('#'+capture+' > ol.horinaja_pagination > li').each(function(i) {
      $(this).bind('mouseover', {index:i}, function(e){
       var occ = parseInt(e.data.index);
       fadeP(occ,0.7);
       fadeP(id,0.4);
      if(id>occ){
        var diff= id-occ;
        po=po+(px*diff);
        id = occ;
        $('#'+capture+' > ul').animate({ left: (po)+"px"}, 'normal');
        return false;
      } else if(id<occ){
        diff= occ-id;
        po=po-(px*diff);
        id=occ;

        $('#'+capture+' > ul').animate({ left: (po)+"px"
        }, 'normal');
        return false;
      }
      });
    });
  }
  });
};
})(jQuery);

