/** 
 * 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.0
 *
 * Requires: jQuery 1.3.2+ 	// http://www.jquery.com
 *	 		jQuery Mouse Wheel Plugin v3.0.2 // Copyright (c) 2009 [Brandon Aaron] (http://brandonaaron.net)
 *			jSwipe v0.1 // http://plugins.jquery.com/project/swipe
 *
 * 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 (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;
                }
            });
        }
    });
    
    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';
            }
        }
    }
});
