/**
 * Ticker usado no cardapio e na pg inicial
 * 
 * @author Rodrigo Capilé $Author: rodrigo $
 * @version $Rev: 245 $ $Date: 2011-12-09 13:37:23 -0200 (Sex, 09 Dez 2011) $
 */
(function($){
	var methods = {
        init : function( options ) {

			// Set the default values, use comma to separate the settings, example:
            var defaults = {
                urlbase    : 'http://bobs.com.br/ticker/sanduiches',
                autoscroll : false,
                selected   : 0,
                limite     : 5,
                pos        : 0,
                width      : 155,
                left       : 64,
                slide      : 'nav', // item ou nav
                titlebase  : "Bob's - " 
            };

            var options =  $.extend(defaults, options);

            return this.each(function() {
                var self  = $(this);

				// configura as opções
				$.each(options, function(c,v) {
					self.data(c,v);
				});

				// configura os slides, marcando o selecionado
				var slides  = $(".slide", self);
				self.data('max',$(".slide", self).length-1);
				var w = $(slides[0]).width();
				// verifica se há um padrão
				if ( location.hash ) {
					slides.each(function(i, div) {
						if ('#'+div.id == location.hash) {
							self.data('selected', i);
							w = $(div).width();
							return false;
						}
					});
				}
				self.data('slides', slides);
				
				// configura a mascara
				if ($("#slideshow>div").width() < (slides.length * w))
					$("#slideshow>div").width(slides.length * w);
				
				// seleciona o selecionado
				self.ticker('select', self.data('selected'));

            	// scroll
                $("#nav .antes.nav", self).click(function(e){
                	e.preventDefault();
                	$(this).parent().parent().ticker('prev');
            	});
                $("#nav .depois.nav", self).click(function(e){
                	e.preventDefault();
                	$(this).parent().parent().ticker('next');
            	});

            	// Configura a navegação
				self.find("#nav ul li a").click(function(e){
					e.preventDefault();
					//self.ticker('select',this.hash);
					var a = $(this);
					a.data('owner').ticker('select', this.hash);
					// coloca a classe
					a.addClass('active').parent().siblings().find('a').removeClass('active');
				}).data('owner',self);
				self.find("#nav ul li a:first").addClass('active');
				
				
				// acerta o tamanho do ul
				if ($("#nav ul", self).width()< (self.data('width')*slides.length)) 
					$("#nav ul", self).width(self.data('width')*slides.length);
				
				// calcula as pos possíveis
				self.data('posmax',self.data('max')-self.data('limite'));

				// mostra o prev e next
				if (slides.length > self.data('limite') && self.data('slide') !== false) {
    				$("#nav div", self).css({
    					'left'   : self.data('left')
    				});
    				$("#nav span.nav", self).show();
				} else {
    				$("#nav div", self).css({
    					'left'   : self.data('left')
    				});
    				$("#nav span.placer", self).show();
				}
				
				// configura o autoscroll
				self.data('autoscrollId',0);
            });
        },
        select: function( id ) {
        	var self  = $(this);
			var slides  = self.data('slides');

			var s = self.data('selected');
        	slides.each(function(i, div) {
    			if ('#'+div.id == id || id == i) {
    				s = i;
    				id = '#'+div.id;
    				return false;
    			}
    		});
    		self.data('selected', s);
    		
    		// posiciono o atual
    		var x = s*$(slides[0]).width();
    		//console.log("vou para " + x);
    		self.find("#slideshow>div").animate({left:-x});

			// Coloca a classe dos marcados
    		var atual;
			$("#nav ul li a", self).each(function (i, a){
				a = $(a);
				if (i == s ) {
					a.addClass('active');
					atual = a;
				} else {
					a.removeClass('active');
				}
			});

			// Reposiciono o ul
			if (self.data('slide') == 'item') {
				var pos    = self.data('pos');
				var limite = self.data('limite');
				//console.log('s=>'+s+"\npos=>"+pos+"\nlimite=>"+limite)
				if ( s <= pos ) {
					pos = s;
					var x = -pos*self.data('width');
					//console.log('pos=>'+pos+"\nx=>"+x)
					$("#nav ul", self).animate({left:x});
				} else if (s >= pos+limite) {
					pos = s-limite+1;
					var x = - pos*self.data('width');
					//console.log('pos=>'+pos+"\nx=>"+x)
					$("#nav ul", self).animate({left:x});
				}
				// gravo o pos
				self.data('pos', pos);
	        }

			// Acerta a URL dos botões de share
			if (atual.data('url')) {
				self.data('social', atual.data('url'));
			} else {
				id = (typeof id == 'string') ? id.replace('#','/') : '' ;
				self.data('social', self.data('urlbase') + id);
			}
			$(".addthis", self).attr("addthis:url",self.data('social'));

			// Grava o título
			var title = atual.attr('title');
			if ( title != '' ) {title = self.data('titlebase') + title;}
			$(".addthis", self).attr("addthis:title", title);

			// Grava a descricao
			$(".addthis", self).attr('addthis:description', atual.attr('addthis:description'));
			
			// Atualiza direto pela API do AddThis se ele já estiver carregado
	        if (window.addthis) {
	        	window.addthis.update('share', 'url', self.data('social'));
	        	window.addthis.update('share', 'title', title);
	        	window.addthis.ost = 0;
	        	window.addthis.ready();
	        }
	        
			// acerto as cores dos botões e nav
			if (atual.data('cor-fundo') !== '' || atual.data('cor-fundo') !== undefined) {
				$(".conteudo .destacao #nav li").css('background',atual.data('cor-fundo'));
			}
			if (atual.data('cor-botao') !== '' || atual.data('cor-botao') !== undefined) {
				$(".conteudo .destacao #nav .antes,.conteudo .destacao #nav .depois").css('background-color',atual.data('cor-botao'));
			}
			
			// Verifica se deve programar o próximo
			if (self.data('autoscroll')) {
				// define o proximo
				s++;
				if (s > self.data('limite')) s = 0;
				
				// cancela o que estiver la
				window.clearTimeout(self.data('autoscrollId'));
				
				// configura o proximo
				self.data('autoscrollId',
					  window.setTimeout(function(){
						  	self.ticker('select',s);
					  },self.data('autoscroll'))
				    );
			}
        },
        next : function () {
    		var self   = $(this);
        	if (self.data('slide') == 'nav') {
        		var pos    = self.data('pos')+self.data('limite');
				var limite = self.data('posmax');
				
				// Verifica se estorou
				if (pos > limite) pos = limite+1;
				
				// grava a posição
				self.data('pos', pos);
				
				// calcula a posição
				var x = -pos*self.data('width');
				//console.log('pos=>'+pos+"\nx=>"+x)
				$("#nav ul", self).animate({left:x});
        	} else {
	        	var s = self.data('selected') + 1;
				if ( s > self.data('max') ) s = self.data('max');
				self.data('selected', s);
				self.ticker('select',s);
        	}
        },
        prev: function () {
        	var self  = $(this);
        	
        	if (self.data('slide') == 'nav') {
        		var pos    = self.data('pos')-self.data('limite');
				var limite = self.data('posmax');
				
				// Verifica se estorou
				if (pos < 0) pos = 0;
				
				// grava a posição
				self.data('pos', pos);
				
				// calcula a posição
				var x = -pos*self.data('width');
				//console.log('pos=>'+pos+"\nx=>"+x)
				$("#nav ul", self).animate({left:x});
        	} else {
        		var s = self.data('selected') - 1;
				if ( s < 0 ) s = 0;
				self.data('selected', s);
				self.ticker('select',s);
        	}
		}
	};

    $.fn.ticker = function( method ) {
    	if ( methods[method] ) {
    		return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    	} else if ( typeof method === 'object' || ! method ) {
    		return methods.init.apply( this, arguments );
    	} else {
    	    $.error( 'Method ' +  method + ' does not exist on jQuery.ticker' );
        }
	};
})(jQuery);

