/**
 * General function
 */

function AddEventsOnCarouselItems(carousel, dataSource, state, urlType, syncCarousel, jCarouselItems, jDestImage)
{
	for (var i = carousel.first; i <= carousel.last; i++) {
		var currentItem = jCarouselItems.eq(i - 1);

		currentItem.unbind();

		currentItem.click(function() {
		    var itemId = jQuery(jQuery(this).parent("li")).attr("jcarouselindex");
		    var image = GetImageUrl(itemId, urlType, dataSource);
		
		    AddImage(image, jDestImage);
		    if (syncCarousel != null) {
		        AddImage(GetImageUrl(itemId, syncCarousel[1], dataSource), syncCarousel[0]);
		    }
		});
    }
}

function CreateCarouselItems(carousel, dataSource, state, urlType){
	for (var i = carousel.first; i <= carousel.last; i++) {
        // Create an object from 
        var item = jQuery(GetItemHTML(i, urlType, dataSource)).get(0);
        carousel.add(i, item);
    }
}

function AddImage(imageUrl, jDest)
{
	var rand = Math.floor( Math.random() * 100001);
	if (imageUrl == undefined) imageUrl = "";
	imageUrl = (imageUrl.indexOf("?") == -1) ? imageUrl + "?cache=" + rand : imageUrl + "&cache=" + rand;
	
	var img = new Image();
  	jQuery(img).load(function () {
		jDest.empty();
		jDest.append('<img src="' + imageUrl + '" />');
	}).attr('src', imageUrl)
}

function GetItemHTML(itemId, urlType, dataSource)
{
	var image = GetImageUrl(itemId , urlType, dataSource);
    return '<a href="javascript:void(0)"><img src=" ' + image + ' " border="0" alt="" /></a>';
};

 
function GetImageUrl(itemId, urlType, dataSource){
	switch (urlType){
		case 1: // Image Overlay
			return jQuery(dataSource.eq(itemId - 1)).attr("rel").split("|")[1];
		case 2: // Thumbnail Overlay
			return jQuery(dataSource.eq(itemId - 1)).attr("rel").split("|")[0];
		case 3:
			return jQuery(dataSource.eq(itemId - 1)).attr("href");
		case 4: 
			return jQuery(jQuery(jQuery(dataSource.eq(itemId - 1))).find("img")).attr("src");
	}
}




/**
 * Behaviors
 */
 
//Overlay Events 
function Overlay_itemLoadCallback_onBeforeAnimation(carousel, state)
{


    CreateCarouselItems(carousel
						, jQuery("#data li a")
						, state
						, 1);
};

function Overlay_itemLoadCallback_onAfterAnimation(carousel, state)
{
    var syncItems = new Array(jQuery("#thumbnailImg td"), 4);
	AddEventsOnCarouselItems(carousel
							 , jQuery("#data li a")
							 , state
							 , 2
							 , syncItems
							 , jQuery("#zoomInOverlayer a")
							 , jQuery("#hightDefImg td"));
}

function Overlay_initCallback(carousel) 
{
    if (jQuery('#zoomInOverlayer img').length == 0) {
        var firstImageUrl = GetImageUrl(1, 2, jQuery("#data li a"));
        AddImage(firstImageUrl, jQuery("#hightDefImg td"));
    }
}


//Carousel Events
function Carousel_itemLoadCallback_onBeforeAnimation(carousel, state)
{

	CreateCarouselItems(carousel
						, jQuery("#data li a")
						, state
						, 3);
}

function Carousel_itemLoadCallback_onAfterAnimation(carousel, state)
{
    var syncItems = new Array(jQuery("#hightDefImg td"), 2);
    
 	AddEventsOnCarouselItems(carousel
							 , jQuery("#data li a")
							 , state
							 , 4
							 , syncItems
							 , jQuery("#zoomIn a")
 							 , jQuery("#thumbnailImg td"));
}

function Carousel_initCallback(carousel)
{
	var firstImageUrl = GetImageUrl(1, 4, jQuery("#data li a"));
	AddImage(firstImageUrl, jQuery("#thumbnailImg td"));
}


//Carousel Technical Schema
function TechnicalSchema_itemLoadCallback_onBeforeAnimation(carousel, state)
{
	
	CreateCarouselItems(carousel
						, jQuery("#technicalSchemaData li a")
						, state
						, 3);
}

function TechnicalSchema_itemLoadCallback_onAfterAnimation(carousel, state)
{
    var firstImageUrl = GetImageUrl(1, 2, jQuery("#technicalSchemaData li a"));
    AddImage(firstImageUrl, jQuery("#schemaHightDef td"));
    
 	AddEventsOnCarouselItems(carousel
							 , jQuery("#technicalSchemaData li a")
							 , state
							 , 4
							 , null
							 , jQuery("#technicalSchema .jcarousel-skin-zoomInOverlayer a")
 							 , jQuery("#schemaHightDef td"));
}