function initialCallback(carousel){
	// Pause autoscrolling if the user moves with the cursor over the clip.
	carousel.clip.hover(function() {
	    carousel.stopAuto();
	}, function() {
	    carousel.startAuto();
	});
}
		
		function loadItemHandler(carousel, start, last, available) {
    		if (available) {
        	// Trigger loaded
        	carousel.loaded();
        	return;
    		}

    		var cr = carousel;
				loadItemHandler.cr = carousel;
				
				if(!loadItemHandler.lastItemReached){
					loadNextCarouselItems(start);
				}else{
					carousel.loaded();
				}
		};
		loadItemHandler.cr = null;
		loadItemHandler.lastItemReached = false;
		
		function appendCarouselItemsCallBack(list){
			for(i=0;i<list.length;i++){
				var wishItem = list[i];
				var index = wishItem.index;
				
				loadItemHandler.cr.add(index, wishItem.carouselItemHtml);
	
				if(wishItem.last){
//					loadItemHandler.lastItemReached = true;
//					loadItemHandler.cr.add(index+1, "");
				}
			}
			// Trigger loaded
    	loadItemHandler.cr.loaded();
		}

	function nextButtonStateHandler(carousel, button, enabling){
		if(enabling) {
	    JQ(button).addClass("latestWishesCarouselNavEnabled")
				.removeClass("latestWishesCarouselNavDisabled")
				.attr("src", baseUri + "/img/layout/carouselButtonRight.png")
				.bind("mouseover", nextOver)
        .bind("mouseout", nextOut);
	   } else {
      JQ(button).addClass("latestWishesCarouselNavDisabled")
				.removeClass("latestWishesCarouselNavEnabled")
				.attr("src", baseUri + "/img/layout/carouselButtonRightDisabled.png")
				.unbind("mouseover")
        .unbind("mouseout");
		}
	}

	function prevButtonStateHandler(carousel, button, enabling){
		if(enabling) {
	    JQ(button).addClass("latestWishesCarouselNavEnabled")
	    	.removeClass("latestWishesCarouselNavDisabled")
	    	.attr("src", baseUri + "/img/layout/carouselButtonLeft.png")
	    	.bind("mouseover", prevOver)
        .bind("mouseout", prevOut);
		} else {
      JQ(button).addClass("latestWishesCarouselNavDisabled")
      	.removeClass("latestWishesCarouselNavEnabled")
	    	.attr("src", baseUri + "/img/layout/carouselButtonLeftDisabled.png")
	    	.unbind("mouseover")
        .unbind("mouseout");
    }
	}
	
	// Next-Button handling...
	var nextOver = function() {
		// hide Tooltip if tooltip is viewed
		hidePopupTooltip();
	    JQ(this).attr("src", baseUri + "/img/layout/carouselButtonRightHover.png");
	};
	
	var nextOut = function() {
	    jQuery(this).attr("src", baseUri + "/img/layout/carouselButtonRight.png");
	};
	
	// Prev-Button handling...
	var prevOver = function() {
		// hide Tooltip if tooltip is viewed
		hidePopupTooltip();
	    JQ(this).attr("src", baseUri + "/img/layout/carouselButtonLeftHover.png");
	};
	
	var prevOut = function() {
	    JQ(this).attr("src", baseUri + "/img/layout/carouselButtonLeft.png");
	};
	
	

function showTooltipPopup(){
	if(! containClass(this, "tooltipPopupWrapper")){
		return false;
	}
	
	// Check whether current element is sub tooltipPopup element
	if(this != showTooltipPopup.latestTooltipPopup){
		jQuery(".tooltipPopup", showTooltipPopup.latestTooltipPopup).css("display", "none");
	}
	showTooltipPopup.latestTooltipPopup = this;
	jQuery(this).addClass("activeTooltipPopupWrapper");
	
	// Get id
	var id = jQuery(this).attr("id");
	if(id.indexOf("tooltipPopupWrapperId") >= 0){
		var index = id.substr(21, id.length - 21);
		showTooltipPopup.latestTooltipPopupWrapperId = index;
	}

	// get embedded tooltipPopup and set it visible
	var pos = getPosition(this);
	
	var posX = pos.x + 20;
	var posY = pos.y - 120;
	
	var tooltipPopupElem = jQuery('#tooltipPopupId' + showTooltipPopup.latestTooltipPopupWrapperId);

  jQuery("#tmpTooltipPopupDiv")
  	.html(tooltipPopupElem.html())
  	.css({
			"display": "block",
			"position": "absolute",
	   	"zIndex": "200",
	    "left": posX + "px",
	    "top": posY + "px"
  	})
  	
  // copy classes of current selected popupDiv to viewed temporary popup div
  var tooltipPopupClasses = jQuery('#tooltipPopupId' + showTooltipPopup.latestTooltipPopupWrapperId).attr("className");
	jQuery("#tmpTooltipPopupDiv").attr("className", tooltipPopupClasses);
	
	// do same with id to identify current viewed popup
	jQuery("#tmpTooltipPopupDiv").attr("selTooltipPopupId", showTooltipPopup.latestTooltipPopupWrapperId);
}
showTooltipPopup.latestTooltipPopup = null;
showTooltipPopup.latestTooltipPopupWrapperId = null;
showTooltipPopup.currentTooltipPopupId = -1;

function hideTooltipPopup(){
	jQuery(this).removeClass("activeTooltipPopupWrapper");
	if(showTooltipPopup.latestTooltipPopup){
		activeHidePopupTimer();
	}
}

function activeHidePopupTimer(){
	setTimeout(function(){
		if(!containClass(showTooltipPopup.latestTooltipPopup, "activeTooltipPopupWrapper") &&
			showTooltipPopup.latestTooltipPopupWrapperId != showTooltipPopup.currentTooltipPopupId){
			hidePopupTooltip();
		}
	}, 1000);
}

function hidePopupTooltip(){
	jQuery("#tmpTooltipPopupDiv").css("display", "none");
	jQuery("#tmpTooltipPopupDiv").text("");
	showTooltipPopup.latestTooltipPopup = null;
}

function mouseOverTooltipPopup(){
	// Get id and remember it
	
	var id = jQuery(this).attr("selTooltipPopupId");
	showTooltipPopup.currentTooltipPopupId = id;
}

function mouseOutTooltipPopup(){
	showTooltipPopup.currentTooltipPopupId = -1;
	activeHidePopupTimer();
}

jQuery.fn.carouselTooltipPopup = function() {
	// create popup html container
	if(jQuery("#tmpTooltipPopupDiv").size() == 0){
		jQuery("body").append("<div id='tmpTooltipPopupDivWrapper'><div id='tmpTooltipPopupDiv'></div></div>");
		jQuery("#tmpTooltipPopupDiv");
	}
	
	jQuery("#tmpTooltipPopupDiv")
		.bind("mouseover", mouseOverTooltipPopup)
		.bind("mouseout", mouseOutTooltipPopup);
	
	return this.each(function (){
		jQuery(this).bind("mouseover", showTooltipPopup)
			.bind("mouseout", hideTooltipPopup);
	});
}