/**
 * Since carousel.addItem uses an HTML string to create the interface
 * for each carousel item, this method formats the HTML for an LI.
 **/
var lastRan = -1;
var fmtItem = function(imgUrl, url, sText) {

  	var innerHTML = '<a href="' + url + '"><img src="' + imgUrl + '" width="' + 143 + '" height="' + 176 + '" title="' + sText + '" /><br /><div>' + sText + '<\/div><\/a>';
	return innerHTML;

};

/**
 * Custom inital load handler. Called when the carousel loads the initial
 * set of data items. Specified to the carousel as the configuration
 * parameter: loadInitHandler
 **/
var loadInitialItems = function(type, args) {
	var start = args[0];
	var last = args[1];
	var alreadyCached = args[2];
	load(this, start, last);
	brightenOrDim(this);
};

/**
 * Custom load next handler. Called when the carousel loads the next
 * set of data items. Specified to the carousel as the configuration
 * parameter: loadNextHandler
 **/
var loadNextItems = function(type, args) {
	var start = args[0];
	var last = args[1];
	var alreadyCached = args[2];
	if(!alreadyCached) {
		load(this, start, last);
	}
	brightenOrDim(this);
};

/**
 * Custom load previous handler. Called when the carousel loads the previous
 * set of data items. Specified to the carousel as the configuration
 * parameter: loadPrevHandler
 **/
var loadPrevItems = function(type, args) {
	var start = args[0];
	var last = args[1];
	var alreadyCached = args[2];
	if(!alreadyCached) {
		load(this, start, last);
	}
	brightenOrDim(this);
};

var brightenOrDim = function(carousel) {
	var firstItemRevealed=carousel.getFirstItemRevealed();
	var lastItemRevealed=carousel.getLastItemRevealed();
	var firstVisible = carousel.getProperty("firstVisible");
	var lastVisible = carousel.getLastVisible();
	var first = (firstItemRevealed == -1) ? firstVisible : firstItemRevealed;
	var last = (lastItemRevealed == -1) ? lastVisible : lastItemRevealed;
	for(var i=first; i<=last; i++) {
		var li = carousel.getItem(i);
		if(li) {
			if(i == firstItemRevealed || i==lastItemRevealed) {
				YAHOO.util.Dom.replaceClass(li, "bright", "dim");
			} else {
				YAHOO.util.Dom.replaceClass(li, "dim", "bright");
			}
		}
	}
};

var load = function(carousel, start, last) {
	for(var i=start;i<=last;i++) {
		carousel.addItem(i, fmtItem(imageList[i], urlList[i], textList[i]), "bright");
	}
};

/**
 * Custom button state handler for enabling/disabling button state.
 * Called when the carousel has determined that the previous button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: prevButtonStateHandler
 **/
var handlePrevButtonState = function(type, args) {
	var enabling = args[0];
	var leftImage = args[1];
	if(enabling) {
		leftImage.src = "images/carousel-left-enabled.gif";
	} else {
		leftImage.src = "images/carousel-left-disabled.gif";
	}
};

/**
 * Custom button state handler for enabling/disabling button state.
 * Called when the carousel has determined that the next button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: nextButtonStateHandler
 **/
var handleNextButtonState = function(type, args) {
	var enabling = args[0];
	var rightImage = args[1];
	if(enabling) {
		rightImage.src = "images/carousel-right-enabled.gif";
	} else {
		rightImage.src = "images/carousel-right-disabled.gif";
	}
};

/**
 * You must create the carousel after the page is loaded since it is
 * dependent on an HTML element (in this case 'dhtml-carousel'.) See the
 * HTML code below.
 **/
// 
// var carousel; // for ease of debugging; globals generally not a good idea
// var pageLoad = function()
// {
// 	carousel = new YAHOO.extension.Carousel("dhtml-carousel",
// 		{
// 			numVisible:        1,
// 			animationSpeed:    0.15,
// 			scrollInc:         1,
// 			navMargin:         35,
// 			revealAmount:      20,
// 			size:              4,
// 			wrap:              false,
// 			prevElement:       "prev-arrow",
// 			nextElement:       "next-arrow",
// 			loadInitHandler:   loadInitialItems,
// 			loadNextHandler:   loadNextItems,
// 			loadPrevHandler:   loadPrevItems,
// 			prevButtonStateHandler:   handlePrevButtonState,
// 			nextButtonStateHandler:   handleNextButtonState
// 		}
// 	);
// };
// 
// YAHOO.util.Event.addListener(window, 'load', pageLoad);
