function Animation() {};
	
Animation.prototype = {
	caseStudies: undefined,
	controls: undefined,
	nCaseStudies: 0,
	iCurrentCaseStudy: 0,
	delay: 1500,
	ratioIndexToPanel: 24/760,
	auto: true,
	autoTimer: undefined,
	autoDirection: -1,
	autoFirstTimer: 5000,
	
	autopilot: function() {
		var cls = this;
		
		try {
			clearTimeout(this.autoTimer);
		} catch(e) {}
		
		if(cls.auto == true) {
			if(this.iCurrentCaseStudy >= this.nCaseStudies-1 || this.iCurrentCaseStudy == 0) {
				this.autoDirection *= -1;
			}
		
			if(this.autoDirection > 0) {
				fun = function() {
					if(cls.auto) {
						cls.animateNext();
					}
				};
			} else {
				fun = function() {
					if(cls.auto) {
						cls.animatePrevious();
					}
				}
			}
			
			var time;
			
			if(this.autoFirstTimer > 0) {
				time = this.autoFirstTimer;
				this.autoFirstTimer = 0;
			} else {
				time = 5000;
			}
			this.autoTimer = setTimeout(fun, time);
		}
	},
	
	init: function() {
		var cls = this;
				
		this.caseStudies = $(".case-studies").children("li");
		this.nCaseStudies = this.caseStudies.length;
		
		// Index Controls
		var ol = document.createElement("ol");
		$(ol).addClass("controls");
		
		for(i = 0; i < this.nCaseStudies; i++) {
			var li = document.createElement("li");
			var a  = document.createElement("a");
			
			$(a).attr("href","javascript:void(0)");
			$(a).attr("data-case-study-index",i);
			$(a).bind("click", function() {
				cls.auto = false;
				cls.showCaseStudy($(this).attr("data-case-study-index"));
			});
			
			var j = i+1;
			
			$(a).addClass("case-" + j);
			if(j < 10) {
				$(a).text("0"+ j)
			} else {
				$(a).text(j);
			}
			$(li).append(a);
			$(ol).append(li);
		}
		
		$(this.caseStudies).parent().closest(".animation-wrapper").append(ol);
		this.controls = $(ol).children("li");
		
		$("#animation_previous").bind("click",function() {
			//cls.auto = false;
			cls.animatePrevious();
		});
		
		$("#animation_next").bind("click",function() {
			//cls.auto = false;
			cls.animateNext();
		});
		
		$(document).keyup(function(e){
		    if (e.keyCode == 37) {
				//cls.auto = false;
				cls.animatePrevious();
		       	return false;
		    } else if (e.keyCode == 39) {
		    	//cls.auto = false;
		    	cls.animateNext();
		    	return false;
		    }
		});		
		// Begin
		
		this.iCurrentCaseStudy = 0;
		$(".case-studies > li").eq(this.iCurrentCaseStudy).addClass("active");
		
		this.autopilot();
	},
	
	animatePrevious: function() {
		this.showCaseStudy(this.iCurrentCaseStudy-1);
		this.autoDirection = -1;
		this.autopilot();
	},
	
	animateNext: function() {
		this.showCaseStudy(this.iCurrentCaseStudy+1);
		this.autoDirection = 1;
		this.autopilot();
	},
	
	showCaseStudy: function(i) {
	
		if(i < 0 || i >= this.nCaseStudies || this.animating) {
			return;
		}
		
		var cls = this;
		
		$(this.caseStudies).removeClass("active");
		$(this.caseStudies[i]).addClass("active");
		
		var ic = this.iCurrentCaseStudy;
		$(document).clearQueue();
		
		if(i > this.iCurrentCaseStudy) {
			cls.animating = true;
			$(cls.controls[i]).addClass("active");
			
			// Move +1 Control left -24
			// Move ic width to -=24
			$(this.controls[i]).animate(
				{
					left: -24
				},{
					duration: cls.delay*cls.ratioIndexToPanel,
					easing: "linear",
					queue: true
				}
			);
			$(this.caseStudies[ic]).animate(
				{
					width: 736	
				},{
					duration: cls.delay*cls.ratioIndexToPanel,
					easing: "linear",
					queue: false,
					complete: function() {
						// Move 0 Control marginRight to 0
						// Move ic width to 24
						// Move +1 Control back to left 0
						$(cls.controls[ic]).animate(
							{
								marginRight: 0
							},{
								duration: cls.delay - (2*cls.delay*cls.ratioIndexToPanel),
								easing: "linear",
								queue: true
							}
						);
						$(cls.controls[i]).animate(
							{
								left: 0
							},{
								duration: cls.delay*cls.ratioIndexToPanel,
								easing: "linear",
								queue: false
							}
						);
						$(cls.caseStudies[ic]).animate(
							{
								width: 24
							},
							{
								duration: cls.delay - (2*cls.delay*cls.ratioIndexToPanel),
								easing: "linear",
								queue: false,
								complete: function() {
									// Move 0 Control marginLeft to -24
									// Move ic width to 0
									// Move ic index marginLeft to -24
									$(cls.controls[ic]).animate(
										{
											marginLeft: -24
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: true
										}
									);
									$(cls.caseStudies[ic]).animate(
										{
											width: 0	
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: false
										}
									);
									$(cls.caseStudies[ic]).children(".count").animate(
										{
											marginLeft: -24
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: false,
											complete: function() {
												cls.animating = false;
												$(cls.controls).removeClass("active");
												$(cls.controls[i]).addClass("active");
											}
										}
									);
								}
							}
						);
					}									
				}				
			);
		} else if(i < this.iCurrentCaseStudy) {
			cls.animating = true;
			
			// Move i width to 24
			if(parseInt(ic)+1 < this.nCaseStudies) {
				$(this.controls[parseInt(ic)+1]).css({position: "absolute", left: 760, zIndex: 10});
			}
			$(this.caseStudies[i]).animate(
				{
					width: 24
				},{
					duration: cls.delay*cls.ratioIndexToPanel,
					easing: "linear",
					queue: false,
					complete: function() {
						// Move -1 Control marginRight to 712
						// Move 0 Control marginRight to 24
						// Move i width to 736
						$(cls.controls[i]).animate(
							{
								marginRight: 736
							},{
								duration: cls.delay - (2*cls.delay*cls.ratioIndexToPanel),
								easing: "linear",
								queue: true
							}
						);
						$(cls.caseStudies[i]).animate(
							{
								width: 736
							},{
								duration: cls.delay - (2*cls.delay*cls.ratioIndexToPanel),
								easing: "linear",
								queue: false,
								complete: function() {
									// Move i index to marginLeft 0	
									// Move i width to 760
									// Move -1 Control marginRight to 736 and marginLeft to 0
									if(parseInt(ic)+1 < cls.nCaseStudies) {
										$(cls.controls[parseInt(ic)+1]).removeAttr("style");														}
									$(cls.caseStudies[i]).children(".count").animate(
										{
											marginLeft: 0
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: true
										}
									);
									
									$(cls.caseStudies[i]).animate(
										{
											width: 760
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: false
										}
									);
									$(cls.controls[i]).animate(
										{
											marginLeft: 0,
											marginRight: 736
										},{
											duration: cls.delay*cls.ratioIndexToPanel,
											easing: "linear",
											queue: true,
											complete: function() {
												cls.animating = false;
												$(cls.controls).removeClass("active");
												$(cls.controls[i]).addClass("active");
											}
										}
									);
								}
							}
						);
					}
				}
			);
		}
		this.iCurrentCaseStudy = i;
	}
};

var animation;
$(document).ready(function() {
	animation = new Animation();
	animation.init();
});

function d(s) {
	$("#debug").html($("#debug").html() + '<br/>' + s);
}
