/*!
 * tools.scrollable @VERSION - Scroll your HTML with eye candy.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch  : March 2008
 * Date: @DATE
 * Revision: @REVISION 
 */
(function($) {

		
	// helper function
	function find(query, ctx) {
		return query.indexOf("#") != -1 ? $(query).eq(0) : ctx.siblings(query).eq(0);	
	}
		
	// jQuery plugin implementation
	$.fn.navigator = function(opts) {

		var conf = {
			navi: '.navi',
			naviItem: 'a',		
			activeClass: 'active'
		};
		
		$.extend(conf, opts);
		
		return this.each(function() {
				
			var api = $(this).scrollable(), 
				 root = api.getRoot(), 
				 navi = find(conf.navi, root),
				 buttons = api.getNaviButtons();

					
			api.getNaviButtons = function() {
				return buttons.add(navi);	
			};
				 
				
			// generate new entries
			function reload() {
				
				if (navi.is(":empty") || navi.data("navi") == this) {
					
					navi.empty();
					navi.data("navi", this);
					
					for (var i = 0; i < api.getPageAmount(); i++) {		
						
						var item = $("<" + conf.naviItem + "/>").attr("href", i).click(function(e) {							
							var el = $(this);
							el.parent().children().removeClass(conf.activeClass);
							el.addClass(conf.activeClass);
							api.setPage(el.attr("href"));
							return e.preventDefault();
						});
						
						// activate first entry
						if (i === 0) { 
							item.addClass(conf.activeClass); 
						}
						
						navi.append(item);					
					}
					
				// assign onClick events to existing entries
				} else {
					
					// find a entries first -> syntaxically correct
					var els = navi.children(); 
					
					els.each(function(i)  {
						var el = $(this);
						if (i === 0) { el.addClass(conf.activeClass); }
						
						el.click(function(evt) {
							navi.find("." + conf.activeClass).removeClass(conf.activeClass);
							el.addClass(conf.activeClass);
							api.setPage(i);
							return evt.preventDefault();						
						});
						
					});
				}
			}
			
			// activate correct entry
			api.onSeek(function(index) {
				var cls = conf.activeClass;
				navi.children().removeClass(cls).eq(api.getPageIndex()).addClass(cls);						
			});
			
			api.onReload(function() {
				reload();		
			});
			
			reload();
			
		});		
	};
	
})(jQuery);			

