function Coverflow() {
	
	var self = this ;
	this.stage = $('#animation_stage') ;
	this.images = new Array() ;
	this.duration = 500 ;
	this.pointer = 0 ;
	this.left = false ;
	this.canGoLeft = false ;
	this.canGoRight = true ;
	this.animating = false ;
	
	this.bigStyle = {
		height:390,
		top: 0,
		left: 0,
		marginLeft: 0,
		marginTop:0
	} ;
	
	this.leftStyle = {
		left:117,
		height:74,
		top:240,
		marginLeft:-80,
		marginTop:-45
	} ;
	
	this.rightStyle = {
		left:848,
		height:74,
		top:240,
		marginLeft:-80,
		marginTop:-45
	} ;
	
	this.styleStatic = {
		position: 'absolute',
		display: 'block'
	} ;
	
	
	this.borderStyle = {
		//border: '5px solid #ffc500'
	} ;
	
	this.setup = function() {
		
		$('#slider .slider_step:first').children('div').css({color: '#1b1b1b', 'font-weight': 'bold'}) ;
		
		$('#multi_content div.multi').css({display: 'none', opacity: 0}) ;
		$('#multi_content div.multi:first').css({display: 'block', opacity: 1}) ;
		
		self.stage.children('img').each(function() {
			
			self.images.push($(this)) ;
			
			$(this).css(self.borderStyle) ;
			
		}) ;
		
		self.images[0].css(self.bigStyle).css(self.styleStatic).css({border: 0}) ;
		self.images[1].css(self.rightStyle).css(self.styleStatic) ;
		
		//self.images[1].css(self.borderStyle) ;
		
		self.big = self.images[0] ;
		self.right = self.images[1].css({cursor: 'pointer'}) ;
		
		
		self.right.click(function() {
			self.next() ;
		}) ;
		
		self.rectifyCss() ;
		
		
	} ;
	
	
	this.goto = function(target, recursion) {
		
		var delta = target-self.pointer ;
		
		if(delta == 0) // same
		{
			self.duration = 500 ;
			//self.showArrows() ;
			self.showContent() ;
			$('#animation_stage img').css({visibility: 'visible'}) ;
			
			$('.obfuscator').animate({opacity: 0}).queue(function() {
				$(this).css({display: 'none'})
			}) ;
			
			return true ;
		}
		
		
		if(recursion !== true)
		{
			
			
			
			if(delta !== 1 && delta !== -1)
			{
				self.hideArrows() ;
				self.hideContent() ;
				
				self.duration = 0 ;
				//self.updateSlider(target, ((Math.sqrt(Math.pow(delta, 2))+1)*self.duration)) ;
				
				self.updateSlider(target, 300) ;
				
				self.obfuscateJump(target, delta).queue(function() {
					
					$('#animation_stage img').css({visibility: 'hidden'}) ;
					
					setTimeout(function() {
						self.goto(target, true) ;
					}, 0) ;
					
					$(this).dequeue() ;
					
				}) ;
				
				return true ;
				
			}
			else
			{
				if(delta < 0) // left
				{
					self.prev() ;
				}

				if(delta > 0) // right
				{
					self.next() ;
				}
				
				return true ;
				//self.updateSlider(target) ;
			}
		
		}

		
		if(delta < 0) // left
		{
			self.prev(false) ;
		}

		if(delta > 0) // right
		{
			self.next(false) ;
		}

		setTimeout(function() {
			self.goto(target, true) ;
		}, 0) ;
		
	} ;
	
	this.obfuscateJump = function(target, delta) {
		var obfuscator = $('.obfuscator') ;
		
		if(delta < 0) // left
		{
			obfuscator.css({
				left: 0,
				right: 'auto',
				backgroundPosition: 'right'
			}) ;
		}
		
		if(delta > 0) // right
		{
			obfuscator.css({
				left: 'auto',
				right: 0,
				backgroundPosition: 'left'
				}) ;
		}
		
		var target_img = self.images[target].attr('src') ;
		
		obfuscator.css({display: 'block', width: 0, opacity: 1, backgroundImage: 'url('+target_img+')'}) ;
		
		obfuscator.stop(true).animate({width: '100%'}, 600, 'easeOutExpo') ;
		
		return obfuscator ;
	}
	
	this.updateSlider = function(target, duration) {
		
		var slider_steps = $('#slider .slider_step') ;
	
		
		if(target === undefined)
		{
			target = self.pointer ;
			var current_step = $(slider_steps[self.pointer]) ;
		}
		else
		{
			var current_step = $(slider_steps[target]) ;
		}
		
		if(duration === undefined)
		{
			duration = self.duration ;
		}
		
		var dot_pos = 70 + (target * 135) ;
		
		if(target > 1)
		{
			dot_pos = dot_pos - 1 ;
		}
		
		if(target > 4)
		{
			dot_pos = dot_pos - 1 ;
		}
		
		$('#slider_dot').stop(true).animate({left: dot_pos}, duration).queue(function() {
			
			slider_steps.children('div.title').css({color: '#939393', 'font-weight': 'normal'}) ;
			current_step.children('div').css({color: '#1b1b1b', 'font-weight': 'bold'}) ;
			
		}) ;
		
	}
	
	this.prev = function(slider) {
		
		if(self.canGoLeft === false )
		{
			return true ;
		}
		
		if(self.animating === true )
		{
			return true ;
		}
		self.animating = true ;
		
		if(slider !== false)
		{
			this.hideArrows() ;
			this.hideContent() ;
		}
		
		self.canGoRight = true ;
		
		self.pointer = self.pointer - 1 ;
		//console.log(self.left+self.big+self.right+self.pointer) ;
		
		self.left.unbind('click') ;
		
		var new_right = self.big ;
		var new_big = self.left ;
		
		
		
		if(self.pointer > 0)
		{
			var new_left = self.images[self.pointer-1] ;
		}
		else
		{
			var new_left = false ;
		}
		
		new_right.stop(true).animate(self.rightStyle, self.duration).queue(function() {
	
			$('#right_arrow').css({display: 'block'}) ;
			$('#right_shadow').css({display: 'block'}) ;
			
			self.showArrows() ;
			
			if(slider !== false)
			{
				
				self.showContent() ;
			}
			
			$(this).dequeue() ;
			
		}) ;
		
		new_right.click(function() {
			self.next() ;
		}) ;
		
		new_big.stop(true).animate(self.bigStyle, self.duration) ;
		
		if(typeof new_left === 'object')
		{
			
			self.dragInFromLeft(new_left) ;
			new_left.click(function() {
				self.prev() ;
			}) ;
		}
		else
		{
			self.canGoLeft = false ;
			$('#left_arrow').css({display: 'none'}) ;
			$('#left_shadow').css({display: 'none'}) ;
		}
		
		if(self.right !== false)
		{
			self.dragOffRight(self.right) ;
			
			if(typeof self.right === 'object')
			{
				self.right.unbind('click') ;
			}
			
		}
		
		
		self.left = new_left ;
		self.big = new_big ;
		self.right = new_right ;
		
		self.rectifyCss(slider) ;
		
		setTimeout(function() {
			self.animating = false ;
		}, self.duration) ;
 		

		if(slider !== false)
		{
			self.updateSlider() ;
		}	
	}
	
	this.next = function(slider) {
		
		if(self.canGoRight === false)
		{
			
			return true ;
		}
		
		if(self.animating === true )
		{
			return true ;
		}
		self.animating = true ;
		
		if(slider !== false)
		{
			this.hideArrows() ;
			this.hideContent() ;
		}
		
		self.canGoLeft = true ;
		
		self.pointer = self.pointer + 1 ;
		//console.log(self.left+self.big+self.right+self.pointer) ;
		
		self.right.unbind('click') ;
		
		var new_left = self.big ;
		var new_big = self.right ;
		
		
		
		if(self.pointer <= self.images.length)
		{
			var new_right = self.images[self.pointer+1] ;
		}
		else
		{
			var new_right = false ;
		}
		
		new_left.stop(true).animate(self.leftStyle, self.duration).queue(function() {
			
			$('#left_arrow').css({display: 'block'}) ;
			$('#left_shadow').css({display: 'block'}) ;
			
			self.showArrows() ;
			
			if(slider !== false)
			{
				self.showContent() ;
			}
			
			$(this).dequeue() ;
			
		}) ;
		
		
		new_left.click(function() {
			self.prev() ;
		}) ;
		
		
		new_big.stop(true).animate(self.bigStyle, self.duration) ;
		
		if(typeof new_right === 'object')
		{
			self.dragInFromRight(new_right) ;
			new_right.click(function() {
				self.next() ;
			}) ;
		}
		else
		{
			self.canGoRight = false ;
			$('#right_arrow').css({display: 'none'}) ;
			$('#right_shadow').css({display: 'none'}) ;
		}
		
		if(self.left !== false)
		{
			self.dragOffLeft(self.left) ;
			self.left.unbind('click') ;
		}
		
		
		self.left = new_left ;
		self.big = new_big ;
		self.right = new_right ;
		
		
		self.rectifyCss(slider) ;		
			
			
		setTimeout(function() {
			self.animating = false ;
		}, self.duration-(self.duration/4))
		
		
		if(slider !== false)
		{
			self.updateSlider() ;
		}
	
	}
	
	self.rectifyCss = function(slider) {
		setTimeout(function() {
			
			if(typeof self.left === 'object')
			{
				self.left.css({zIndex:3000, cursor: 'pointer'}) ;
			}
			if(typeof self.big === 'object')
			{
				self.big.css({zIndex:2000, cursor: 'default'}) ;
			}
			if(typeof self.right === 'object')
			{
				self.right.css({zIndex:3000, cursor: 'pointer'}) ;
			}
			
			if(typeof self.left === 'object')
			{
				self.left.css(self.borderStyle) ;
			}
			if(typeof self.big === 'object')
			{
				self.big.css({border: '0px solid #000'}) ;
			}
			if(typeof self.right === 'object')
			{
				self.right.css(self.borderStyle) ;
			}
		
		}, self.duration/1.5) ;
	}
	
	this.dragOffLeft = function(elem) {
		elem.stop(true).animate({marginLeft: -300, opacity: 0}, self.duration).queue(function() {
			$(this).css({display: 'none'}) ;
		}) ;
	}
	
	this.dragOffRight = function(elem) {
		if(typeof elem === 'object')
		{
			elem.stop(true).animate({marginLeft: 100, opacity: 0}, self.duration).queue(function() {
				$(this).css({display: 'none'}) ;
			}) ;
		}
	}
	
	this.dragInFromRight = function(elem) {
		elem.css(self.rightStyle).css(self.styleStatic) ;
		elem.css({marginLeft: 100, opacity: 0, zIndex: 3500}) ;
		elem.stop(true).animate({marginLeft: -80, opacity: 1}, self.duration) ;
	}
	
	this.dragInFromLeft = function(elem) {
		elem.css(self.leftStyle).css(self.styleStatic) ;
		elem.css({marginLeft: -300, opacity: 0, zIndex: 3500}) ;
		elem.stop(true).animate({marginLeft: -80, opacity: 1}, self.duration) ;		
	}
	
	this.hideArrows = function() {
		$('#left_arrow').stop(true).animate({opacity: 0}, 200) ;
		$('#left_shadow').stop(true).animate({opacity: 0}, 200) ;
		
		$('#right_arrow').stop(true).animate({opacity: 0}, 200) ;
		$('#right_shadow').stop(true).animate({opacity: 0}, 200) ;
		
		/*$('#left_arrow').css({opacity: 0}) ;
		$('#left_shadow').css({opacity: 0}) ;
		
		$('#right_arrow').css({opacity: 0}) ;
		$('#right_shadow').css({opacity: 0}) ;*/
	}
	
	this.showArrows = function() {
		
		$('#left_arrow').stop(true).animate({opacity: 1}) ;
		$('#left_shadow').stop(true).animate({opacity: 1}) ;
		
		$('#right_arrow').stop(true).animate({opacity: 1}) ;
		$('#right_shadow').stop(true).animate({opacity: 1}) ;
	}
	
	this.hideContent = function() {
		$('#multi_content div.multi').animate({opacity: 0}) ;
	}
	
	this.showContent = function() {
		
		$('#multi_content div.multi').css({display: 'none'}) ;

		if(self.pointer === 0 /*&& $.browser.msie && $.browser.version == 8*/)
		{
			$('#intro_tabs .tabs .trigger_tabs .trigger_tab:first').trigger('mouseenter') ;
		}

		$('#multi_content div.multi#content_'+self.pointer+'').css({display: 'block'}).animate({opacity: 1}).queue(function() {
			
			
			
			$(this).dequeue() ;
		}) ;
	}
	
}

