/**
 * Plugin vtpcarousel
 * @description	VTP Carousel presenting offers of the day
 * @author		Jan Konzack
 * @version		1.1
 * @copyright:	NEUE DIGITALE GmbH, Berlin
 */

(function($) {  	
	
	$.VTPCarousel = function(el) {
		var vtpC = this;
		vtpC.el = el;
		vtpC.$el = $(el);
		
		vtpC.elements = vtpC.$el.children("li");
		vtpC.elementcount = vtpC.elements.size();
		vtpC.active = 0;
		vtpC.animate = true;
		
		vtpC.initButtons = function() {
			if (vtpC.elementcount > 2) {
				$('<a class="vtp-Button leftButton">&nbsp;</a>').appendTo(vtpC.$el.parent()).bind('click', { obj: vtpC }, vtpC.prevOffer);
				$('<a class="vtp-Button rightButton">&nbsp;</a>').appendTo(vtpC.$el.parent()).bind('click', { obj: vtpC }, vtpC.nextOffer);
			}
		};
		
		vtpC.updateActive = function(event) {
			event.data.obj.active = event.data.newIndex;
			event.data.obj.setActive();
		};
		
		vtpC.setActive = function() {
			$(vtpC.elements).attr("class", "");
			$(vtpC.elements[vtpC.active]).addClass("active");
			vtpC.setElements();
		};
		
		vtpC.prevOffer = function(event) {
			event.data.obj.active -=1;
			if (event.data.obj.active < 0)
				event.data.obj.active = event.data.obj.elementcount - 1;
			
			event.data.obj.setActive();
			return false;
		};
		
		vtpC.nextOffer = function(event) {
			event.data.obj.active += 1;
			if (event.data.obj.active > event.data.obj.elementcount - 1)
				event.data.obj.active = 0;
			
			event.data.obj.setActive();
			return false;
		};
		
		vtpC.setElements = function() {
			if (vtpC.elementcount > 0) {
				var numSideElements = (vtpC.elementcount >= 3) ? (vtpC.elementcount >= 5) ? 2 : 1 : 0;
				var leftSite = vtpC.active - numSideElements, rightSite = vtpC.active + numSideElements, step = 0;
				
				if (vtpC.animate) vtpC.$el.hide();
				
				var lFree = vtpC.active - numSideElements;
				var rFree = vtpC.active - vtpC.elementcount;
				
				for (var i=0; i<vtpC.elementcount; i++) {
					if (i != vtpC.active) {
						if (i >= leftSite && i <= rightSite) {
							step = i - vtpC.active;
							$(vtpC.elements[i]).addClass("vtpItem" + step);
						}
					}
				}
				
				var elSL = new Array();
				// left
				if (lFree < 0) {
					lFree = vtpC.elementcount + lFree;
					for (var a=(vtpC.elementcount-1); a>=lFree; a--) {
						elSL.push(a);
					}
					
					if (elSL.length == 1) {
						$(vtpC.elements[elSL[0]]).addClass("vtpItem-" + numSideElements);
					} else {
						for (var a=0; a<elSL.length; a++) {
							$(vtpC.elements[elSL[a]]).addClass("vtpItem-" + (a + 1));
						}
					}
				}
				
				var elSR = new Array();
				// right
				if (rFree >= (-1 * numSideElements)) {
					rFree = numSideElements + vtpC.active - vtpC.elementcount;
					for (var a=0; a<=rFree; a++) {
						elSR.push(a);
					}
					
					if (elSR.length == 1) {
						$(vtpC.elements[elSR[0]]).addClass("vtpItem" + numSideElements);
					} else {
						for (var a=0; a<elSR.length; a++) {
							$(vtpC.elements[elSR[a]]).addClass("vtpItem" + (a + 1));
						}
					}
				}
		
				if (vtpC.animate) vtpC.$el.fadeIn().delay(500);
			}
		};
		
		vtpC.prepareOfferLinks = function() {
			if (vtpC.elementcount > 0) {
				for (var i=0; i<vtpC.elementcount; i++) {
					$("img:eq(0)", $(vtpC.elements[i])).bind("click", { obj: vtpC, newIndex: i }, vtpC.updateActive);
				}
			}
		};
		
		// Initialization
		if (vtpC.$el.children("li.active").size() == 0) {
			if (vtpC.elementcount > 0) {
				vtpC.active = Math.ceil(vtpC.elementcount/2);
				$(vtpC.elements[vtpC.active]).addClass("active");
			}
		} else
		if (vtpC.$el.children("li.active").size() == 1) {
			vtpC.active = vtpC.elements.index(vtpC.$el.children("li.active"));
		} else
		if (vtpC.$el.children("li.active").size() > 1) {
			vtpC.$el.children("li").removeClass("active");
			vtpC.$el.children("li eq(0)").addClass("active");
		}
		
		vtpC.initButtons();
		vtpC.setElements();
		vtpC.prepareOfferLinks();
		
	};
	
	
	$.fn.vtpcarousel = function(el) {
		return this.each(function(){
            (new $.VTPCarousel(this));
        });
	};
	
})(jQuery);

jQuery(document).ready(function() {
	$("#vtp_carousel_list").vtpcarousel();
});
