/**
 * 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, 'getNews.php', "", start, (last-start+1) * 2);
	// Illustrates setting the size during the load. Set silent parameter to true
	this.setProperty("size", total, true);
    this.setProperty("autoPlay", 5000);
    /*this.setProperty("wrap", 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, 'getNews.php', "", start, (last-start+1) * 2);
	}
    fmtFullInnerHTML(start-1,last);

};

/**
 * 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, 'getNews.php', "", start, (last-start+1) * 2);
	}
    fmtFullInnerHTML(start-1,last);
};

/**
 * 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 variable = Array();

var pageLoad = function()
{
	carousel = new YAHOO.extension.Carousel("dhtml-carousel",
		{
			numVisible:        3,
			animationSpeed:    0.4,
			scrollInc:         3,
			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)
{
	var start = callbackResponse.argument[0];
	var numResults = callbackResponse.argument[1];
	var carousel = callbackResponse.argument[2];

  	if(callbackResponse.responseText !== undefined) {
        callbackResponse.responseText = TrimAll(callbackResponse.responseText);
		var theTrip = eval( '(' + callbackResponse.responseText + ')' );
        var totalTrip = theTrip.ResultSet.totalResultsReturned;
		for(var i=0; i< totalTrip; i++) {
			var result = theTrip.ResultSet.Result[i];
            variable[i] = theTrip.ResultSet.Result[i];
			carousel.addItem(start+i, fmtTripInnerHTML(result,i,totalTrip));
		}
		showButtons();
        fmtFullInnerHTML(0,totalTrip);
        close_loader("carousel_load");
     }
};

var TrimAll = function(text) {
    var temp = text;
    while (temp.indexOf("\r\n") != -1) {
        temp = temp.replace("\r\n", "");
    }
    while (temp.indexOf("\n") != -1) {
        temp = temp.replace("\n", "");
    }
    while (temp.indexOf("\r") != -1) {
        temp = temp.replace("\r", "");
    }
    while (temp.indexOf(escape(String.fromCharCode(10))) != -1) {
        temp = temp.replace(escape(String.fromCharCode(10)), "");
    }
    while (temp.indexOf(escape(String.fromCharCode(13))) != -1) {
        temp = temp.replace(escape(String.fromCharCode(13)), "");
    }
  return temp;
};

/**
 * 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,i,j) {

  	var tripInnerHTML =
  		'<a onmouseover=" fmtFullInnerHTML(' + i + ',' + j +
        ');" href="' +
  		result.Url +
  		'"><img src="' +
  		result.Image.Url +
		'" width="' +
		75 +
		'" height="' +
		75+
		'"/>' +
  		trunc(result.Title, 40, 20) +
  		'<\/a>' +
  		//trunc(result.Summary, 20, 20);
        '';
    var importante = "";
    if(result.Type == "New")
    importante = '<div class="New"><img src="images/new.gif" width="43" height="17" /></div>';

	return importante+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, query, start, numResults)
{
	var params = '?query=' + query +
	                        '&start=' + start +
	                        '&results=' + numResults;

	var callback =
	{
  		success: handleSuccess,
  		failure: handleFailure,
  		argument: [start, numResults, carousel]
	};

	var sUrl = url + params;
	YAHOO.util.Connect.asyncRequest("GET", sUrl, callback, null);
};

/**
 * Just a utility function for cleaning up the returned HTML response
 * and truncating it.
 */
var trunc = function(str, maxLen, maxWordLen)
{
	// Strip markup
    str = str.replace("<b>", "");
    str = str.replace("<\/b>", "");
    str = str.replace("<B>", "");
    str = str.replace("<\/B>", "");

    // Simple truncation
	if(str.length > maxLen) {
		str = str.substring(0,maxLen) + "...";
	}

	// Truncate for long words
	var start = 0;
	var loopCnt = 0;
	var strSlice = str;

	do  {
		var spaceBreak = strSlice.indexOf(' ');
		var lenOfWord = spaceBreak;
		if(lenOfWord == -1)
		{
			lenOfWord = strSlice.length;
		}

		if (lenOfWord > maxWordLen) {
			//debugMsg("Long word found in: " + strSlice);
			str = str.substring(0, maxWordLen);  // TRUNCATE
		}
		start = spaceBreak+1;
		strSlice = strSlice.substring(start);
		spaceBreak = strSlice.indexOf(' ');
	} while(spaceBreak != -1)


	return str;
};

var trunc_suite = function(str, maxLen, maxWordLen, Url)
{
	// Strip markup
    str = str.replace("<b>", "");
    str = str.replace("<\/b>", "");
    str = str.replace("<B>", "");
    str = str.replace("<\/B>", "");

    // Simple truncation
	if(str.length > maxLen) {
		str = str.substring(0,maxLen) + '... <div class="right"><a href="' +
  		Url + '">Lire la suite</a></div>';
	}

	return str;
};

var fmtFullInnerHTML = function(i,j) {

    var result = variable[i];   //alert(variable[i]);
    var carosel_full = 'dhtml-carousel-full';
  	var tripInnerHTML =
  		'<div class="zone_carousel"><a href="' +
  		result.Url +
  		'"><img src="' +
  		result.Image.Url_l +
		'" width="' +
		175 +
		'" height="' +
		175+
		'" hspace="10"/><div class="titre">' +
  		trunc(result.Title, 100, 20) +
  		'</div><\/a><div class="description">' +
  		trunc_suite(result.Summary, 200, 20, result.Url) +
        '</div></div><div class="nfloat nmarging npadding h0">&nbsp;</div>';

    if(document.getElementById(carosel_full))
    document.getElementById(carosel_full).innerHTML = tripInnerHTML;
    ActiveElement(i,j);
	//return tripInnerHTML;
};

var ActiveElement = function(i,j) {

    for(k=0;k<j;k++)
    {
      if(k == i)
      document.getElementById('dhtml-carousel-item-'+(k+1)).className = 'activate';
      else
      document.getElementById('dhtml-carousel-item-'+(k+1)).className = '';
    }
};

var close_loader = function(i) {
  if(document.getElementById(i))
  {
    var j = document.getElementById(i);
    var k = document.getElementById("carousel_zone");
    j.innerHTML = '';
    j.className = 'hidden h0';
    //k.className = '';
    k.style.visibility = 'visible';
  }
};

var creat_loader = function(i) {
  if(document.getElementById(i))
  {
    var j = document.getElementById(i);
    var k = document.getElementById("carousel_zone");
    j.innerHTML = '<h1>Chargement ...</h1>';
    j.className = '';
    k.style.visibility = 'hidden';
    //k.className = 'hidden';
  }
};
