/**
 * 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]; 
	
	// fetch twice the number for caching. images are create once.

	
	makeRequest(this, 'horlogerie/galerieHorlogerie', 
		start, (last-start+1) * 2);	

	// Illustrates setting the size during the load. Set silent parameter to true
//	this.setProperty("size", 40, true);

};

/**
 * 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) 
	{
		makeRequest(this, 'horlogerie/galerieHorlogerie', 
			start, (last-start+1) * 2);
	}

};

/**
 * 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) 
	{
		makeRequest(this, 'horlogerie/galerieHorlogerie', 
			start, (last-start+1) * 2);
	}
};

/**
 * 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/left-enabled.gif";	
	} else {
		leftImage.src = "/images/left-disabled.gif";	
	}
};

var handleNextButtonState = function(type, args) 
{
	var enabling = args[0];
	var rightImage = args[1];
	
	if(enabling) {
		rightImage.src = "/images/right-enabled.gif";
	} else {
		rightImage.src = "/images/right-disabled.gif";
	}
	
};

var showButtons = function(type, args) {
	YAHOO.util.Dom.setStyle("next-arrow", "visibility", "visible");
	YAHOO.util.Dom.setStyle("prev-arrow", "visibility", "visible");
};


/**
 * 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() 
{	
	var nb = parseInt(document.getElementById('nb_marques').value);

	carousel = new YAHOO.extension.Carousel("dhtml-carousel", 
		{
			numVisible:        4,
			animationSpeed:    0.8,
			scrollInc:         4,
			size:              nb,
			loadInitHandler:   loadInitialItems,
			prevElement:       "prev-arrow",
			nextElement:       "next-arrow",
			loadNextHandler:   loadNextItems,
			loadPrevHandler:   loadPrevItems,
			prevButtonStateHandler:   handlePrevButtonState,
			nextButtonStateHandler:   handleNextButtonState
		}
	);

};

YAHOO.util.Event.addListener(window, 'load', pageLoad);

/**
 * Called via the YUI Connection manager (see makeRequest).
 */
var handleSuccess = function(callbackResponse)
{

 // alert( callbackResponse.responseText );

		var start = callbackResponse.argument[0];
		var numResults = callbackResponse.argument[1];
		var carousel = callbackResponse.argument[2];
	
  	if ( callbackResponse.responseText !== undefined ) {
				var theTrip = eval( '(' + callbackResponse.responseText + ')' );
				for( var i=0; i< theTrip.ResultSet.totalResultsReturned; i++ ) {
						var result = theTrip.ResultSet.Result[i];
						carousel.addItem( start+i, fmtTripInnerHTML(result) );
				}
				showButtons();
    }
    // fonction definie dans sifr-config.js    
	collectionHorlogerie();
    
};

/**
 * Since carousel.addItem uses an HTML string to create the interface
 * for each carousel item, this method takes an individual trip plan
 * result and cobbles together HTML for the innerHTML argument.
 */
var fmtTripInnerHTML = function(result) {
  	var tripInnerHTML = '<a href="' + result.Image.Lien + '"><img src="' + result.Image.Url + '" width="' + result.Image.Width + '" height="' + result.Image.Height + '"class="' + result.Image.Class + '"/></a><a href="' + result.Collection.Url + '"><h4 class="collection-marque">' + result.Collection.Marque + '</h4></a>';
  
		return tripInnerHTML;
	
};

var handleFailure = function(o)
{
     var result = o.status + " " + o.statusText;
     alert("Transaction failed.  The error is: " + result);
};
  
/**
 * A utility function for invoking the YUI connection manager (Ajax)
 * with a URL that matches the Yahoo! developer network Trip Planner
 * APIs (see: http://developer.yahoo.com/travel/tripservice/V1/tripSearch.html)
 *
 * The callback object is the configuration object for the YUI Connection
 * manager. If this is successful, the 'handleSuccess' function is called.
 */
var makeRequest = function(carousel, url, start, numResults)
{

	var params = '?start=' + start + 
				'&results=' + numResults;
	
//	alert( params );
	
	var callback =
	{
  		success: handleSuccess,
  		failure: handleFailure,
  		argument: [start, numResults, carousel]
	};
	
	var sUrl = url + params; 
	YAHOO.util.Connect.asyncRequest("GET", sUrl, callback, null);
	
};
