(function($) {
	
	$.fn.pager = function(options) {
		
		var defaultOptions = {
			activeClass: 'current',
			click: function($t, index) {},
			delay: 0,
			next: {},
			nextCallback: function($t, index) {},
			prev: {},
			prevCallback: function($t, index) {},
			photo: {},
			init: function($t, $items) {
				return true;
			},
			startTransition: function($t, index) {},
			stopTransition: function($t, index) {},
			start: 0,
			timeout: 0
		}
		
		if(typeof options != "object")
			options = {};
		
		options = $.extend(true, defaultOptions, options);
		
		return this.each(function() {
			
			var $t = $(this);
			var $list = $t.children('ul');
			
			var $next = $(options.next);
			var $prev = $(options.prev);
			var $items = options.items ? $(options.items) : $list.find('li');
			
			//var total = $items.length;
			//var count = 0;
			//var photos = [];
			
			var Pager = {
				count: 0,
				currentPhoto: false,
				index: 0,
				nextPhoto: {},
				photos: [],
				prevPhoto: {},
				state: {
					initializing: false,
					transitioning: false,
					loading: false
				}
			}
					
			function getMaxHeight() {
				var height = 0;
				
				$items.each(function(i, item) {
					var item = $(item).height();
					
					height += item;				
				});
				
				return height;
			}
			
			function transition(index) {
				
				options.startTransition($t, index);
				
				Pager.currentPhoto 	= Pager.photos[Pager.index];
											
				if(Pager.photos[Pager.index - 1])
					Pager.prevPhoto		= Pager.photos[Pager.index - 1];
				else
					Pager.prevPhoto		= Pager.photos[Pager.photos.length - 1];
					
				if(Pager.photos[Pager.index + 1])
					Pager.nextPhoto		= Pager.photos[Pager.index + 1];
				else
					Pager.nextPhoto		= Pager.photos[0];
			
				
				if(Pager.photos[index] != undefined) {
					Pager.state.transitioning = true;
					
					$items.removeClass(options.activeClass);
					
					var $item 	= $items.eq(index);
					var top 	= parseInt($list.css('top').replace('px', ''));
					
					var title 	= $item.data('title');
					
					$item.addClass(options.activeClass);
					
					if(index > Pager.index) {
						var diff = index - Pager.index;
						top =  top - ($item.height() * diff);
					} else {
						top = top + $item.height();
					}
					
					if(index == $items.length - 1) {
						top = -getMaxHeight() + 100;
					}
					else if(index == 0) {
						top = 50;
					}
					
					$list.css({top: top});
					
					if(options.photo) {
						$(options.photo).find('.description').remove();
						
						if(title && title != null) {
							$(options.photo).append('<p class="description" style="display:none">'+title+'</p>');
							$(options.photo).find('.description').fadeIn();
						}
							
					}
					
					$(Pager.photos[Pager.index]).fadeOut();
					
					$(Pager.photos[index]).fadeIn(function() {
						Pager.state.transitioning = false;
						options.stopTransition($t, index);
					});
					
					Pager.index = index;
				}
			}
		
			
			function next() {
				var index = Pager.index + 1;
				
				if(index >= Pager.photos.length)
					index = 0;
					
				transition(index);
			}
			
			function prev() {
				var index = Pager.index - 1;
				
				if(index < 0)
					index = Pager.photos.length - 1;
								
				transition(index);
			}
			
			$next.click(function() {
				return false;
			});
			
			$prev.click(function() {
				return false;
			});			
			
			$items.click(function() {
				return false;
			});
		
			function init(delay) {
				delay = delay ? delay : 0;
		
				if(typeof options.init == "function")
					var init = options.init();
				
				setTimeout(function() {
					if(options.photo)
						$(options.photo).find('img').remove();
					
					$items.each(function(i) {
						var $item 		= $(this);
						
						$item.data('index', i);
						photoUrl = $item.data('photo');
						
						if(photoUrl) {
							
							var photo	= new Image();
							var url 	= $item.find('a').attr('href');
							var title 	= $item.find('a').attr('title');
							
							title 		= title == undefined ? '' : title;
							
							$(photo).attr('src', photoUrl);
							$(photo).attr('style', 'display:none');
							
							Pager.photos[i] = photo;
							
							if(options.photo) {
								$(options.photo).append(Pager.photos[i]);			
								$(options.photo).children('img').wrap('<a href="'+url+'" title="'+title+'">');
								
							}
						}
					});
									
					$(window).load(function() {
						if(init === true) {
							transition(options.start);
							
							$next.click(function() {
								
								next();
								
								return false;
							});
							
							$prev.click(function() {
								
								prev();
								
								return false;
							});
														
							$items.unbind('click');
							
							$items.click(function() {
								var $item	= $(this);
								
								if($item.hasClass(options.activeClass)) {
									return true;
								}
								
								var index 	= $item.data('index');
																
								transition(index);
											
								return false;
							});
						}
					});
					
					
				}, delay);
			}
			
			init(0);
		});
				
	}
	
	/*
	 * NETEYE Activity Indicator jQuery Plugin
	 *
	 * Copyright (c) 2010 NETEYE GmbH
	 * Licensed under the MIT license
	 *
	 * Author: Felix Gnass [fgnass at neteye dot de]
	 * Version: 1.0.0
	 */
	 
	$.fn.activity=function(opts){this.each(function(){var $this=$(this);var el=$this.data("activity");if(el){clearInterval(el.data("interval"));el.remove();$this.removeData("activity");}if(opts!==false){opts=$.extend({color:$this.css("color")},$.fn.activity.defaults,opts);el=render($this,opts).css("position","absolute").prependTo(opts.outside?"body":$this);var h=$this.outerHeight()-el.height();var w=$this.outerWidth()-el.width();var margin={top:opts.valign=="top"?opts.padding:opts.valign=="bottom"?h-opts.padding:Math.floor(h/2),left:opts.align=="left"?opts.padding:opts.align=="right"?w-opts.padding:Math.floor(w/2)};var offset=$this.offset();if(opts.outside){el.css({top:offset.top+"px",left:offset.left+"px"});}else{margin.top-=el.offset().top-offset.top;margin.left-=el.offset().left-offset.left;}el.css({marginTop:margin.top+"px",marginLeft:margin.left+"px"});animate(el,opts.segments,Math.round(10/opts.speed)/10);$this.data("activity",el);}});return this;};$.fn.activity.defaults={segments:12,space:3,length:7,width:4,speed:1.2,align:"center",valign:"center",padding:4};$.fn.activity.getOpacity=function(opts,i){var steps=opts.steps||opts.segments-1;var end=opts.opacity!==undefined?opts.opacity:1/steps;return 1-Math.min(i,steps)*(1-end)/steps;};var render=function(){return $("<div>").addClass("busy");};var animate=function(){};function svg(tag,attr){var el=document.createElementNS("http://www.w3.org/2000/svg",tag||"svg");if(attr){$.each(attr,function(k,v){el.setAttributeNS(null,k,v);});}return $(el);}if(document.createElementNS&&document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect){render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var el=svg().width(r*2).height(r*2);var g=svg("g",{"stroke-width":d.width,"stroke-linecap":"round",stroke:d.color}).appendTo(svg("g",{transform:"translate("+r+","+r+")"}).appendTo(el));for(var i=0;i<d.segments;i++){g.append(svg("line",{x1:0,y1:innerRadius,x2:0,y2:innerRadius+d.length,transform:"rotate("+(360/d.segments*i)+", 0, 0)",opacity:$.fn.activity.getOpacity(d,i)}));}return $("<div>").append(el).width(2*r).height(2*r);};if(document.createElement("div").style.WebkitAnimationName!==undefined){var animations={};animate=function(el,steps,duration){if(!animations[steps]){var name="spin"+steps;var rule="@-webkit-keyframes "+name+" {";for(var i=0;i<steps;i++){var p1=Math.round(100000/steps*i)/1000;var p2=Math.round(100000/steps*(i+1)-1)/1000;var value="% { -webkit-transform:rotate("+Math.round(360/steps*i)+"deg); }\n";rule+=p1+value+p2+value;}rule+="100% { -webkit-transform:rotate(100deg); }\n}";document.styleSheets[0].insertRule(rule);animations[steps]=name;}el.css("-webkit-animation",animations[steps]+" "+duration+"s linear infinite");};}else{animate=function(el,steps,duration){var rotation=0;var g=el.find("g g").get(0);el.data("interval",setInterval(function(){g.setAttributeNS(null,"transform","rotate("+(++rotation%steps*(360/steps))+")");},duration*1000/steps));};}}else{var s=$("<shape>").css("behavior","url(#default#VML)").appendTo("body");if(s.get(0).adj){var sheet=document.createStyleSheet();$.each(["group","shape","stroke"],function(){sheet.addRule(this,"behavior:url(#default#VML);");});render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var s=r*2;var o=-Math.ceil(s/2);var el=$("<group>",{coordsize:s+" "+s,coordorigin:o+" "+o}).css({top:o,left:o,width:s,height:s});for(var i=0;i<d.segments;i++){el.append($("<shape>",{path:"m "+innerRadius+",0  l "+(innerRadius+d.length)+",0"}).css({width:s,height:s,rotation:(360/d.segments*i)+"deg"}).append($("<stroke>",{color:d.color,weight:d.width+"px",endcap:"round",opacity:$.fn.activity.getOpacity(d,i)})));}return $("<group>",{coordsize:s+" "+s}).css({width:s,height:s,overflow:"hidden"}).append(el);};animate=function(el,steps,duration){var rotation=0;var g=el.get(0);el.data("interval",setInterval(function(){g.style.rotation=++rotation%steps*(360/steps);},duration*1000/steps));};}$(s).remove();}
	
})(jQuery);

