/** 
 * Copyright (c) 2009 Sylvain Gougouzian (sylvain@gougouzian.fr)
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 * GNU GPL (http://www.gnu.org/licenses/gpl.html) licensed.
 *
 * jQuery carrousel controls by Sylvain Gougouzian http://sylvain.gougouzian.fr
 *
 * Version: 1.1
 *
 * Requires: jQuery 1.3.2+ 	// http://www.jquery.com
 * 			jQuery carrousel plugin
 *	 		jQuery Mouse Wheel Plugin v3.0.2 // Copyright (c) 2009 [Brandon Aaron] (http://brandonaaron.net)
 *			jSwipe v0.1 // http://plugins.jquery.com/project/swipe
 *			jQuery UI 1.7.2
 *
 * Compatible : Internet Explorer 6+, Firefox 1.5+, Safari 3+, Opera 9+, Chrome 0.9+
 */
jQuery(function($){
 $.extend($.fn.carrousel.controls, {
  keys: function(carrousel){
   $(document).keydown(function(event){
    if ((event.keyCode == 39) || (event.keyCode == 40)) {
     carrousel._animate('next');
    }
    if ((event.keyCode == 37) || (event.keyCode == 38)) {
     carrousel._animate('prev');
    }
   });
   return false;
  },
  click: function(carrousel){
   for (var i = 0; i < carrousel.nbItems; i++) {
    $('> ' + carrousel.opts.mode, carrousel.aItems.eq(i)).css('cursor', 'pointer').attr('rel', carrousel._realpos(i)).click(function(){
     carrousel.locked = false;
     carrousel.moveTo($(this).attr('rel'));
     return false;
    });
   }
  },
  index: function(carrousel){
   carrousel.container.parent().append('<ul id="' + carrousel.id + '_itemList" class="carrousel_itemList"></ul>');
   var h = "";
   for (var i = 0; i < carrousel.nbItems; i++) {
    if (i < (carrousel.nbItems / 2)) {
     h += '<li id="' + carrousel.id + '_itemList_li" class="carrousel_itemList_li" rel="' + carrousel._realpos(i) + '">' + (i + 1) + '</li>';
    }
   }
   $('ul#' + carrousel.id + '_itemList').html(h);
   $('li.carrousel_itemList_li').css('cursor', 'pointer').click(function(){
    carrousel.locked = false;
    carrousel.moveTo($(this).attr('rel'));
    return false;
   });
  },
  wheel: function(carrousel){
   carrousel.container.bind("mousewheel", function(event, delta){
    var dir = delta > 0 ? 'Up' : 'Down';
    if (dir == 'Up') {
     carrousel._animate('next');
    }
    else {
     carrousel._animate('prev');
    }
    return false;
   });
  },
  mouseover: function(carrousel){
   carrousel.opts.callbacks[carrousel.opts.callbacks.length] = function(carrousel){
    if (carrousel.isMouseOver) {
     carrousel._animate(mouseDirection(carrousel));
    }
   };
   carrousel.container.bind("mousemove", function(evt){
    carrousel.mouseX = evt.pageX;
    carrousel.mouseY = evt.pageY;
   });
   carrousel.container.bind("mouseenter", function(evt){
    carrousel.isMouseOver = true;
    carrousel.mouseX = evt.pageX;
    carrousel.mouseY = evt.pageY;
    carrousel._animate(mouseDirection(carrousel));
    return false;
   });
   carrousel.container.bind("mouseleave", function(){
    carrousel.isMouseOver = false;
    return false;
   });
  },
  iPhone: function(carrousel){
   $('.carrousel_item', carrousel.container).swipe({
    swipeLeft: function(){
     carrousel._animate('next');
     return false;
    },
    swipeRight: function(){
     carrousel._animate('prev');
     return false;
    },
    swipeUp: function(){
     carrousel._animate('next');
     return false;
    },
    swipeDown: function(){
     carrousel._animate('prev');
     return false;
    }
   });
  },
  slider: function (carrousel) {
   carrousel.container.parent().append('<div id="' + carrousel.id + '_slider"></div>');
   $("#" + carrousel.id + "_slider", carrousel.container.parent()).slider({
    range: "max",
    min: 0,
    max: ((carrousel.nbItems) / 2) - 1,
    value: 0,
    stop: function(event, ui) {
     carrousel.moveTo(ui.value);
    }
   });
  }
 });
 
 $.extend($.fn.carrousel.controls.callback, {
  slider: function (carrousel) {
   $("#" + carrousel.id + "_slider", carrousel.container.parent()).slider('value', carrousel.current);
  }
 });
 
 function mouseDirection(carrousel){
  var offset = carrousel.container.offset();
  if (carrousel.vertical) {
   if ((carrousel.mouseY >= parseInt(offset.top)) && (carrousel.mouseY <= parseInt((parseInt(offset.top) + parseInt(carrousel.container.height())) / 2))) {
    return 'prev';
   }
   else {
    return 'next';
   }
  }
  else {
   if ((carrousel.mouseX >= parseInt(offset.left)) && (carrousel.mouseX <= parseInt((parseInt(offset.left) + parseInt(carrousel.container.width())) / 2))) {
    return 'prev';
   }
   else {
    return 'next';
   }
  }
 }
});


/*******

INIT :

			if (this.opts.stopOver) {
                this.container.bind("mouseenter", function(evt){
                    self.locked = true;
                });
                this.container.bind("mouseleave", function(evt){
                    self.locked = false;
                    if (self.opts.auto) {
                        this.timerMoving = setTimeout(function(){
                            self._animate('next');
                        }, self.opts.dispTimeout);
                    }
                });
            }
			
			
			
			
		button: function(carrousel){
        	carrousel.container.parent().append("<a href='#' id='" + carrousel.id + "_prev' class='carrousel_button carrousel_prev'>" + carrousel.opts.htmlPrevButton + "</a><a href='#' id='" + this.id + "_next' class='carrousel_button carrousel_next'>" + carrousel.opts.htmlNextButton + "</a>");
			$('a#' + this.id + '_prev').hide().click(function(){
				self._animate('prev');
				return false;
			});
			$('a#' + this.id + '_next').hide().click(function(){
				self._animate('next');
				return false;
			});
		    $("a#" + carrousel.id + '_prev').show();
            $("a#" + carrousel.id + "_next").show();
        },
        
			
			
			
*******/
