/* 
 * ProductCarousel
 *
 * @author Micha Horn <horn@burdadirect.de><info@michahorn.de>
 * @version 1.1
 *
 */

; 
var productCarouselObject = {
		
	movingContainerWidth:220,
	
	movingSteps:[],
		
	movingContainerSteps:[],
	movingContainerQuantity:[],
	movingContainerIds:[],
	movingContainerPositions:[],
	
	statusPointsQuantity:[],
	statusPointsPosition:[],
	statusPointsImageUrl:null,
	
	interval:[],

	setMovingSteps: function(totalItems,id) {
		this.movingSteps[id] = totalItems
	},

	setMovingContainerQuantity: function(quantity,id) {
		
		this.movingContainerQuantity[id] = quantity;
		this.setMovingContainerSteps(id);
	},
	
	getMovingContainerSize: function(id) {
		movingContainerSize = this.movingContainerWidth * this.movingContainerSteps[id];
		return movingContainerSize;
	},
	
	setMovingContainerSteps: function(id) {
		if(!this.movingContainerSteps[id]) this.movingContainerSteps[id] = this.movingSteps[id];
		
		/*  minimize motion steps by minimal quantity */
		
		if(this.movingContainerQuantity[id] < this.movingContainerSteps[id]*2 ) this.movingContainerSteps[id] = this.movingContainerQuantity[id]-this.movingContainerSteps[id];
		if(this.movingContainerSteps[id] < 0) this.movingContainerSteps[id] = 0;
	},
		
	generateMovingContainerPositions: function(id) {				
		this.movingContainerIds[id] = [];
		this.movingContainerPositions[id] = [];
		
		for(i=0; i < this.movingContainerQuantity[id]; i++) {
			if(i < this.movingContainerSteps[id]) {
				this.movingContainerIds[id][i] = id+'_'+(this.movingContainerQuantity[id]-(this.movingContainerSteps[id]-1)+i)
			} else {
				this.movingContainerIds[id][i] = id+'_'+((i+1)-this.movingContainerSteps[id]);
			}
			this.movingContainerPositions[id][i] = (i*this.movingContainerWidth)-(this.movingContainerWidth*this.movingContainerSteps[id])	
		}
		this.setMovingContainerPositions(id);
		this.setButtonDeactivation(id);						
	},
	
	setButtonDeactivation: function(id) {	
		if(this.movingContainerSteps[id] == 0) {
			var element = document.getElementById(id+'_buttonLeft');
			element.style.visibility = 'hidden';
			element = document.getElementById(id+'_buttonRight');
			element.style.visibility = 'hidden';				
		}
	},
	
	setStatusPoints: function(id,imageUrl) {
		if(!this.statusPointsPosition[id]) this.statusPointsPosition[id] = 0;
		if(!this.statusPointsImageUrl) this.statusPointsImageUrl = imageUrl
		if(this.movingContainerSteps[id] == 0) { 
			this.statusPointsQuantity[id] = 1; 
		} else {
		  x = this.movingContainerQuantity[id] / this.movingSteps[id];	
		  this.statusPointsQuantity[id] = Math.ceil(x);	  
		}
		for(i=0; i < this.statusPointsQuantity[id]; i++ ) {
			if (i == this.statusPointsPosition[id]) {
				document.write("<img src='"+this.statusPointsImageUrl+"bdi_product_carousel_point_active.gif' width='9' height='9' id='"+id+"_sp_"+i+"' />");
			} else {
				document.write("<img src='"+this.statusPointsImageUrl+"bdi_product_carousel_point_inactive.gif' width='9' height='9' id='"+id+"_sp_"+i+"' />");
			}
		}	
	},
	
	changeStatusPointsActivity: function(id) {
		for(i=0; i < this.statusPointsQuantity[id]; i++) {
			if (i == this.statusPointsPosition[id]) {
				document.images[id+'_sp_'+i].src = this.statusPointsImageUrl+'bdi_product_carousel_point_active.gif';
			} else {
				document.images[id+'_sp_'+i].src = this.statusPointsImageUrl+'bdi_product_carousel_point_inactive.gif';
			}
		}
	},
	
	setMovingContainerPositions: function(id) {
		for(var i=0; i < this.movingContainerQuantity[id]; i++) {
			var element = document.getElementById(this.movingContainerIds[id][i]);
			element.style.left = this.movingContainerPositions[id][i]+'px';
		}
	},
	
	startMovingContainerMotion: function(id,action) {

		/* action = 1:Moving forward | action = 0:Moving backward */
				
		var velocity = 0;
		var rate = 1.12;
		var x = productCarouselObject.getMovingContainerSize(id);

		var startForwardInterval = function() {
			if(velocity < (productCarouselObject.getMovingContainerSize(id)-1)) {
				for(var i=0; i < productCarouselObject.movingContainerQuantity[id]; i++) {
					var element = document.getElementById(productCarouselObject.movingContainerIds[id][i]);
					element.style.left = (productCarouselObject.movingContainerPositions[id][i]+velocity)+'px';
				}
				velocity = productCarouselObject.getMovingContainerSize(id) - (x /= rate);				
			} else {
				clearInterval(productCarouselObject.interval[id]);
				productCarouselObject.interval[id] = null;
				productCarouselObject.changeForwardPositions(id);
				productCarouselObject.setMovingContainerPositions(id);
				motionValue = productCarouselObject.getMovingContainerSize(id);
			}
		}
		
		var startBackwardInterval = function() {
			if(velocity < productCarouselObject.getMovingContainerSize(id)-1) {
				for(var i=0; i < productCarouselObject.movingContainerQuantity[id]; i++) {
					var element = document.getElementById(productCarouselObject.movingContainerIds[id][i]);
					element.style.left = ((productCarouselObject.movingContainerPositions[id][i]+productCarouselObject.getMovingContainerSize(id))-velocity)+'px';
				}
				velocity = productCarouselObject.getMovingContainerSize(id) - (x /= rate);				
			} else {
				clearInterval(productCarouselObject.interval[id]);
				productCarouselObject.interval[id] = null;
				productCarouselObject.setMovingContainerPositions(id);
				motionValue = productCarouselObject.getMovingContainerSize(id);
			}		
		}		
		
		if(!productCarouselObject.interval[id] && action==1) {
			productCarouselObject.interval[id] = setInterval(startForwardInterval,1);
			
			/* change status points */
			
			(productCarouselObject.statusPointsPosition[id] < (productCarouselObject.statusPointsQuantity[id]-1)) ? productCarouselObject.statusPointsPosition[id]++ : productCarouselObject.statusPointsPosition[id] = 0;
			productCarouselObject.changeStatusPointsActivity(id);
		}
		if(!productCarouselObject.interval[id] && action==0) {
			productCarouselObject.changeBackwardPositions(id);
			productCarouselObject.interval[id] = setInterval(startBackwardInterval,1);
				
			/* change status points */
			
			(productCarouselObject.statusPointsPosition[id] >= 1) ? productCarouselObject.statusPointsPosition[id]-- : productCarouselObject.statusPointsPosition[id] = productCarouselObject.statusPointsQuantity[id]-1;
			productCarouselObject.changeStatusPointsActivity(id);
		}
	},
	
	changeForwardPositions: function(id) {
		if(this.movingContainerSteps[id ] < this.movingContainerQuantity[id]) {
			var tmp = this.movingContainerIds[id].slice((this.movingContainerQuantity[id]-this.movingContainerSteps[id]),this.movingContainerQuantity[id]);
			tmp.reverse();
			for(i=0; i < this.movingContainerSteps[id ]; i++) {
				this.movingContainerIds[id].unshift(tmp[i]); 
				this.movingContainerIds[id].pop();
			}
		}
	},

	changeBackwardPositions: function(id) {
		if(this.movingContainerSteps[id ] < this.movingContainerQuantity[id]) {
			var tmp = this.movingContainerIds[id].slice(0,this.movingContainerSteps[id]);
			for(i=0; i < this.movingContainerSteps[id]; i++) {
				this.movingContainerIds[id].push(tmp[i]); 
				this.movingContainerIds[id].shift();
			}
		}
	},
	
	forwardMotion: function(id) {
		this.startMovingContainerMotion(id,1);		
	},
	
	backwardMotion: function(id) {
		this.startMovingContainerMotion(id,0);		
	}

}

