/*
 * simplyScroll 1.0.4 - a scroll-tastic jQuery plugin
 *
 * http://logicbox.net/jquery/simplyscroll
 * http://logicbox.net/blog/simplyscroll-jquery-plugin
 * http://plugins.jquery.com/project/simplyScroll
 *
 * Copyright (c) 2009 Will Kelly - http://logicbox.net
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Last revised: 03/07/2009 21:13
 *
 *                  CUSTOM FOR L'EQUIPE 24 IN 2011
 *
 */

(function($){
    $.fn.simplyScroll=function(o){
        return this.each(function(){
            new $.simplyScroll(this,o);
        });
    };

    var defaults={
        className:'simply-scroll',
        frameRate:24,
        speed:1,
        horizontal:true,
        autoMode:'off',
        pauseOnHover:true,
        startOnLoad:false,
        localJsonSource:'',
        flickrFeed:'',
        jsonImgWidth:240,
        jsonImgHeight:180
    };

    $.simplyScroll=function(el,o){
        var self=this;
        this.o=$.extend({},defaults,o||{});
        this.auto=this.o.autoMode!=="off"?true:false;
        this.$list=$(el);
        this.$list.addClass('simply-scroll-list').wrap('<div class="simply-scroll-clip"></div>').parent().wrap('<div class="'+this.o.className+' simply-scroll-container"></div>');
        if(!this.o.auto){
            this.$list.parent().parent().prepend('<div class="simply-scroll-forward"></div>').prepend('<div class="simply-scroll-back"></div>');
        }
        if(this.o.flickrFeed){
            $.getJSON(this.o.flickrFeed+"&format=json&jsoncallback=?",function(data){
                json=[];
                $.each(data.items,function(i,item){
                    json.push({
                        "src":item.media.m,
                        "title":item.title,
                        "link":item.link
                        });
                });
                self.renderData(json);
            });
        }else if(this.o.localJsonSource){
            $.getJSON(this.o.localJsonSource,function(json){
                self.renderData(json);
            });
        }else{
            if(!this.o.startOnLoad){
                this.init();
            }else{
                $(window).load(function(){
                    self.init();
                });
            }
        }
    };

$.simplyScroll.fn=$.simplyScroll.prototype={};

$.simplyScroll.fn.extend=$.simplyScroll.extend=$.extend;
$.simplyScroll.fn.extend({
    init:function(){
        this.$items=this.$list.children();
        this.$clip=this.$list.parent();
        this.$container=this.$clip.parent();
       
        if(!this.o.horizontal){
            this.itemMax=this.$items.eq(0).outerHeight(true);
            this.clipMax=this.$clip.height();
            this.dimension='height';
            this.moveBackClass='simply-scroll-btn-up';
            this.moveForwardClass='simply-scroll-btn-down';
        }else{
            this.itemMax=this.$items.eq(0).outerWidth(true);
            this.clipMax=this.$clip.width();
            this.dimension='width';
            this.moveBackClass='simply-scroll-btn-left';
            this.moveForwardClass='simply-scroll-btn-right';
        }

         
        this.posMin=0;
        this.posMax=this.$items.length*this.itemMax;
        this.$list.css(this.dimension,this.posMax+'px');
        if(this.o.autoMode=='loop'){
            var addItems=Math.ceil(this.clipMax/this.itemMax);
            this.$items.slice(0,addItems).clone(true).appendTo(this.$list);
            this.posMax+=(this.clipMax-this.o.speed);
            this.$list.css(this.dimension,this.posMax+(this.itemMax*addItems)+'px');
        }
        this.interval=null;
        this.intervalDelay=Math.floor(1000/this.o.frameRate);
       /*while(this.itemMax%this.o.speed!==0){
            console.log(this.o.speed);
            this.o.speed--;
            if(this.o.speed===0){
                this.o.speed=1;
                break;
            }
        }*/
    var self=this;
    this.trigger=null;
    this.funcMoveBack=function(){
        self.trigger=this;
        self.moveBack();
    };

    this.funcMoveForward=function(){
        self.trigger=this;
        self.moveForward();
    };

    this.funcMoveStop=function(){
        self.moveStop();
    };

    this.funcMoveResume=function(){
        self.moveResume();
    };

    if(this.auto){
        if(this.o.pauseOnHover){
            this.$clip.hover(this.funcMoveStop,this.funcMoveResume);
        }
        this.moveForward();
    }else{
        this.$btnBack=$('.simply-scroll-back',this.$container).addClass('simply-scroll-btn'+' '+this.moveBackClass).hover(this.funcMoveBack,this.funcMoveStop);
        this.$btnForward=$('.simply-scroll-forward',this.$container).addClass('simply-scroll-btn'+' '+this.moveForwardClass).hover(this.funcMoveForward,this.funcMoveStop);
    }
},
moveForward:function(){
    var self=this;
    this.movement='forward';
    if(this.trigger!==null){
       // this.$btnBack.removeClass('disabled');
    }
    self.interval=setInterval(function(){
        if(!self.o.horizontal&&self.$clip[0].scrollTop<(self.posMax-self.clipMax)){
            self.$clip[0].scrollTop+=self.o.speed;
        }else if(self.o.horizontal&&self.$clip[0].scrollLeft<(self.posMax-self.clipMax)){
            self.$clip[0].scrollLeft+=self.o.speed;
            
        }else if(self.o.autoMode=='loop'){
            self.resetPos();
        }else{
            self.moveStop(self.movement);           
        }
    },self.intervalDelay);
},
moveBack:function(){
    var self=this;
    this.movement='back';
    if(this.trigger!==null){
        //this.$btnForward.removeClass('disabled');
    }
    self.interval=setInterval(function(){
        if(!self.o.horizontal&&self.$clip[0].scrollTop>0){
            self.$clip[0].scrollTop-=self.o.speed;
        }else if(self.o.horizontal&&self.$clip[0].scrollLeft>0){
            self.$clip[0].scrollLeft-=self.o.speed;
        }else if(self.o.autoMode=='loop'){
            self.resetPos();
        }else{
            self.moveStop(self.movement);
        }
    },self.intervalDelay);
},
moveStop:function(moveDir){
    clearInterval(this.interval);
    if(this.trigger!==null){
        if(typeof moveDir!="undefined"){
          //  $(this.trigger).addClass('disabled');
        }
        this.trigger=null;
    }
    if(this.auto){
        if(this.o.autoMode=='bounce'){
            moveDir=='forward'?this.moveBack():this.moveForward();
        }
    }
},
moveResume:function(){
    this.movement=='forward'?this.moveForward():this.moveBack();
},
resetPos:function(){
    if(!this.o.horizontal){
        this.$clip[0].scrollTop=0;
    }else{
        this.$clip[0].scrollLeft=0;
    }
},
renderData:function(json){
    if(json.length>0){
        var self=this;
        $.each(json,function(i,item){
            $("<img/>").attr({
                src:item.src,
                title:item.title,
                alt:item.title,
                width:self.o.jsonImgWidth,
                height:self.o.jsonImgHeight
                }).appendTo(self.$list);
        });
        this.init();
    }
}
});

})(jQuery);
