/*
        Totem Ticker Plugin
        Copyright (c) 2011 Zach Dunn / www.20script.ir
        Released under MIT License
        --------------------------
        Structure based on Doug Neiner's jQuery plugin blueprint: http://starter.pixelgraphics.us/
*/
(function( $ ){
        
        if(!$.omr){
                $.omr = new Object();
        };

        $.omr.totemticker = function(el, options ) {
                 
                 var base = this;
                 
                //Define the DOM elements
                 base.el = el;
                 base.$el = $(el);
                 
                 // Add a reverse reference to the DOM object
        base.$el.data("omr.totemticker", base);
                 
                 base.init = function(){
            base.options = $.extend({},$.omr.totemticker.defaultOptions, options);
            
            //Define the ticker object
                   base.ticker;
                        
                        //Adjust the height of ticker if specified
                        base.format_ticker();
                        
                        //Setup navigation links (if specified)
                        base.setup_nav();
                        
                        //Start the ticker
                        base.start_interval();
                        
                        //Debugging info in console
                        //base.debug_info();
        };
                
                base.start_interval = function(){
                        
                        //Clear out any existing interval
                        clearInterval(base.ticker);
                        
                        if (base.options.direction == 'up') {
                                //If the direction has been set to up
                                base.ticker = setInterval(function() {
                                        base.$el.find('li:last').detach().prependTo(base.$el).css('marginTop', '-' + base.options.row_height);
                                        base.$el.find('li:first').animate({
                                 marginTop: '0px'
                                 }, base.options.speed, function () {
                                 //Callback functions go here
                                 });
                                }, base.options.interval);
                        }else{
                                //Otherwise, run the default of down
                         base.ticker = setInterval(function() {
                         
                                 base.$el.find('li:first').animate({
                         marginTop: '-' + base.options.row_height
                 }, base.options.speed, function() {
                 $(this).detach().css('marginTop', '0').appendTo(base.$el);
                 });
                
                         }, base.options.interval);
                 }
         }
        
         base.reset_interval = function(){
                 clearInterval(base.ticker);
                 base.start_interval();
         }
        
         base.stop_interval = function(){
                 clearInterval(base.ticker);
         }
        
                base.format_ticker = function(){
                
                        if(typeof(base.options.max_items) != "undefined" && base.options.max_items != null) {
                                
                                //Remove units of measurement (Should expand to cover EM and % later)
                                var stripped_height = base.options.row_height.replace(/px/i, '');
                                var ticker_height = stripped_height * base.options.max_items;
                        
                                base.$el.css({
                                        height                : ticker_height + 'px',
                                        overflow        : 'hidden'
                                });
                                
                        }else{
                                //No heights were specified, so just doublecheck overflow = hidden
                                base.$el.css({
                                        overflow        : 'hidden'
                                })
                        }
                        
                }
        
                base.setup_nav = function(){
                        
                        //Stop Button
                        if (typeof(base.options.stop) != "undefined" && base.options.stop != null){
                                $(base.options.stop).click(function(){
                                        base.stop_interval();
                                        return false;
                                });
                        }
                        
                        //Start Button
                        if (typeof(base.options.start) != "undefined" && base.options.start != null){
                                $(base.options.start).click(function(){
                                        base.start_interval();
                                        return false;
                                });
                        }
                        
                        //Previous Button
                        if (typeof(base.options.previous) != "undefined" && base.options.previous != null){
                                $(base.options.previous).click(function(){
                                        base.$el.find('li:last').detach().prependTo(base.$el).css('marginTop', '-' + base.options.row_height);
                                        base.$el.find('li:first').animate({
                                 marginTop: '0px'
                                 }, base.options.speed, function () {
                                 base.reset_interval();
                                 });
                                 return false;
                                });
                        }
                        
                        //Next Button
                        if (typeof(base.options.next) != "undefined" && base.options.next != null){
                                $(base.options.next).click(function(){
                                        base.$el.find('li:first').animate({
                                                marginTop: '-' + base.options.row_height
                         }, base.options.speed, function() {
                         $(this).detach().css('marginTop', '0px').appendTo(base.$el);
                         base.reset_interval();
                         });
                         return false;
                                });
                        }
                        
                        //Stop on mouse hover
                        if (typeof(base.options.mousestop) != "undefined" && base.options.mousestop === true) {
                                base.$el.mouseenter(function(){
                                        base.stop_interval();
                                }).mouseleave(function(){
                                        base.start_interval();
                                });
                        }
                        
                        /*
                                TO DO List
                                ----------------
                                Add a continuous scrolling mode
                        */
                        
                }
                
                base.debug_info = function()
                {
                        //Dump options into console
                        console.log(base.options);
                }
                
                //Make it go!
                base.init();
  };
  
  $.omr.totemticker.defaultOptions = {
                  message                :        'Ticker Loaded',        /* Disregard */
                  next                :        null,                /* ID of next button or link */
                  previous        :        null,                /* ID of previous button or link */
                  stop                :        null,                /* ID of stop button or link */
                  start                :        null,                /* ID of start button or link */
                  row_height        :        '100px',        /* Height of each ticker row in PX. Should be uniform. */
                  speed                :        800,                /* Speed of transition animation in milliseconds */
                  interval        :        4000,                /* Time between change in milliseconds */
                max_items        :         null,                 /* Integer for how many items to display at once. Resizes height accordingly (OPTIONAL) */
                mousestop        :        false,                /* If set to true, the ticker will stop on mouseover */
                direction        :        'down'                /* Direction that list will scroll */                
  };
  
  $.fn.totemticker = function( options ){
    return this.each(function(){
            (new $.omr.totemticker(this, options));
          });
  };
  
})( jQuery );

jQuery(document).ready(function($) {
// NEWS SCROLLER
    $('#vertical-ticker').totemticker({
        row_height  :   '30px',
        next        :   '.scroller.up',
        previous    :   '.scroller.down',
    interval  : 5000
    });
                        
});