

$.fn.extend({ ikgrijpinCarrousel : function(pIndex, dId) {
	
	return this.each(function(){	
		var $ikgrijpin = $(this);
		
		var timeoutID;
		var autoDelay = 6000;
		var animationDuration = 750;
		
		var id = dId || $ikgrijpin.attr("id");
		
		var imageData = profileImageData[id];
		
		var offset = $($(".row", $ikgrijpin).get(0)).width() - 11;
		var $rowClone = $(".row:first li", $ikgrijpin).clone();
		var rowCount =  $rowClone.length;
		var setCount = rowCount * 2;

		var pageIndex = pIndex || 0;
		var lastPageIndex = Math.floor(imageData.images.length / setCount) -1;
		lastPageIndex += imageData.images.length % setCount ? 1 : 0;
		var loadIndex = (pageIndex+1) * setCount;

		var imageIndex = 0;

		var isAnimating = false;
		
		updateNavigation();
		preload();
		
		if(lastPageIndex > 0) timeoutID = setTimeout(autoNext, autoDelay);
		
		$(".next a", $ikgrijpin).click(function(){
			if(isAnimating) return false;
			isAnimating = true;
			clearTimeout(timeoutID);
			imageIndex = ++pageIndex * setCount;
			$(".row ul", $ikgrijpin).each(function(nodeIndex){
				$(this).append($($rowClone.clone()).each(updateImages));
				$(this).delay(100*nodeIndex).animate({left: -offset+"px"}, {easing:"easeInOutQuad", duration: animationDuration, complete: function(){ 
					var i = rowCount;
					while(i-- > 0) {
						$( $("li", this).get(0)).remove();
					}
					$(this).css({left:0});
					if(nodeIndex == 1) animateReady();					
				 } } );
			});
			updateNavigation();
			preload();
			return false;
		});	

		$(".previous a", $ikgrijpin).click(function(){
			if(isAnimating) return false;
			isAnimating = true;
			clearTimeout(timeoutID);
			imageIndex = --pageIndex * setCount;
			$(".row ul", $ikgrijpin).each(function(nodeIndex){
				$(this).prepend($($rowClone.clone()).each(updateImages));
				$(this).css({ left:-offset+"px" }).delay(100*nodeIndex).animate({left: 0}, {easing:"easeInOutQuad", duration: animationDuration, complete: function(){ 
					var i = rowCount;
					while(i < $("li", this).length) {
						$( $("li", this).get(-1)).remove();
					}
					if(nodeIndex == 1) animateReady();
				} } );
			});
			updateNavigation();
			return false;
		});			
		
		function autoNext() {
			if(pageIndex >= lastPageIndex ) pageIndex = -1;
			$(".next a", $ikgrijpin).click();
		}
		
		function animateReady() {
			isAnimating = false;
			if(lastPageIndex > 0) timeoutID = setTimeout(autoNext, autoDelay);
		}

		function updateImages(nodeIndex, element) {
			if(imageData.images[imageIndex] == undefined) {
				$(element).css({visibility:"hidden"});
				return; 
			}
			$("img", element).attr({src:imageData.path + imageData.images[imageIndex].image})
			imageIndex++;
		}

		function updateNavigation(nodeIndex, element) {
			
			if(pageIndex == 0)	$(".previous", $ikgrijpin).css({visibility:"hidden"});
			else $(".previous", $ikgrijpin).css({visibility:"visible", display:"block"});
			if(pageIndex >= lastPageIndex ) $(".next", $ikgrijpin).css({visibility:"hidden"});
			else $(".next", $ikgrijpin).css({visibility:"visible", display:"block"});
		}

		function preload() {
				
			var imageArray = [];
			var i = 0;
			var loadCount = loadIndex + setCount;
			while(loadIndex < loadCount && loadIndex< imageData.images.length) {
				var image = new Image();
				image.src = imageData.path + imageData.images[loadIndex++].image;	
				imageArray.push(image);
			}
		}
	});
}});

$.extend( jQuery.easing, {
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) {
			return c/2*t*t + b;
		}
		return -c/2 * ((--t)*(t-2) - 1) + b;
	}
});