function files_carousel_itemLoadCallback(carousel, state) {

    // Check if the requested items already exist
    if (carousel.has(carousel.first, carousel.last)) {
        return;
    }

	$.getJSON("files/files.ajax.php", {
		first: carousel.first,
		last: carousel.last,
		num_per_call: 3
	}, 
	function(jsonData) {
		files_carousel_itemAddCallback(carousel, carousel.first, carousel.last, jsonData);
	});
};

function files_carousel_itemAddCallback(carousel, first, last, jsonData) {

    // Set the size of the carousel
    carousel.size(parseInt(jsonData.TotalItems));

	jQuery.each(jsonData.Files, function(i, val) {
        carousel.add(first + i, files_carousel_getItemHTML(val));
    });
};

/**
 * Item html creation helper.
 */
function files_carousel_getItemHTML(objFile) {

	itemHTML = '<div class="fileItem">';
		itemHTML += '<div class="fileIcon"><img src="' + objFile.Icon + '" width="32" height="32" alt="" /></div>';
		itemHTML += '<div class="fileName">' + objFile.Name + '</div>';
		itemHTML += '<div class="fileDescription">' + objFile.Description + '</div>';
		itemHTML += '<div class="fileLink"><a href="' + objFile.Link + '">Download</a></div>';
	itemHTML += '</div>';

    return itemHTML;
};

jQuery(document).ready(function() {
    jQuery('#files_carousel').jcarousel({
        // Uncomment the following option if you want items
        // which are outside the visible range to be removed
        // from the DOM.
        // Useful for carousels with MANY items.

        // itemVisibleOutCallback: {onAfterAnimation: function(carousel, item, i, state, evt) { carousel.remove(i); }},
        itemLoadCallback: files_carousel_itemLoadCallback
    });
});
