var newsList;
var titresList;
var urgentsList;
var urgentsUrl = '/actufr/include/001/defilant_1.xml';
var titresUrl = '/actufr/include/001/defilant_2.xml';
var defilantSize = 0;
// offset to simulate loop
var offset = 0;
var nbItemsForOneSerie = 0;

// Node cleaner
function go(c){
	if(!c.data.replace(/\s/g,''))
		c.parentNode.removeChild(c);
	}

function clean(d){
	var bal=d.getElementsByTagName('*');

	for(i=0;i<bal.length;i++){
		a=bal[i].previousSibling;
		if(a && a.nodeType==3)
			go(a);
			b=bal[i].nextSibling;
			if(b && b.nodeType==3)
				go(b);
	}
	return d;
} 

function cleanEmptyTag (itemsList) {	
	var initItemsList = itemsList;
	try {
			for (i=0;i<itemsList.length;i++) {
				var itemsListAttributes = itemsList[i].attributes;		
				if (itemsListAttributes.length == 0){
					var old = itemsList[i];
					itemsList[i].parentNode.removeChild(old);
				}						
			}		
		return 	itemsList;
		}
	catch (e) {
		return initItemsList;
	}
}


function Remplace(expr,a,b) {
      var i=0
      while (i!=-1) {
         i=expr.indexOf(a,i);
         if (i>=0) {
            expr=expr.substring(0,i)+b+expr.substring(i+a.length);
            i+=b.length;
         }
      }
      return expr
   }

function getDateParam () {	
	var d = new Date();
	var sParam = "?date=" + d.getFullYear() + d.getMonth() + d.getDay() + d.getHours() + d.getMinutes() + d.getSeconds();
	return sParam;
}


function getnewsListString(titresItems, urgentItems, nbLines) {
	try {		
		// Ouverture de la liste au format JSON
		var sNewsList = '[';						
		var titresIndexMax = titresItems.length - 1;
		var urgentIndexMax = urgentItems.length - 1;	
		var generalIndexMax = 0;
		
		// Itérations sur le plus grand des deux tableaux
		if (titresIndexMax > urgentIndexMax) {		
			generalIndexMax = titresIndexMax;
			nbItemsForOneSerie = titresItems.length * 2;
		}
		else {
			generalIndexMax = urgentIndexMax;
			nbItemsForOneSerie = urgentItems.length * 2;
		}		
		// Adjustement pour le loop
		offset = nbItemsForOneSerie * 6;
		generalIndexMax += offset;
		var generalIndex = 0
		var titresIndex = 0;
		var urgentIndex = 0;
		var nbItems = 0;			
		while (generalIndex <= generalIndexMax) {	
			if (urgentItems.length >0) {						
				var urgentAttributes = urgentItems[urgentIndex].attributes;
				var backupIndex = urgentIndex;
				if (urgentIndex < urgentIndexMax) {
					urgentIndex += 1
				}
				else {
					urgentIndex = 0;
				}
				
				if (urgentAttributes != null && urgentAttributes.length != 0){
					// Add Urgent item
					if (nbItems > 0 ) {
						sNewsList += ', '
					}
					
					sNewsList += '{';					
					for (var j=0 ; j < urgentAttributes.length ; j++) {	
						// TODO : Hack sur les " voir pour corriger le problème des caractères dans la construction JSON
						var value = urgentAttributes[j].nodeValue;	
						//value = value.replace(/"([^"]*)"/g,"''$1''");	
						value = Remplace(value, "'", "\\'");
						var bUrlSon = (urgentItems[backupIndex].nodeName == 'ELEMENT_DEFILANT_SON' && urgentAttributes[j].nodeName=='url');							
						if (bUrlSon){	
							value = Remplace(value, "'", '"');							
						}						
						sNewsList += urgentAttributes[j].nodeName + ": '" + value + "'";
						
						if (j < urgentAttributes.length-1) {
							sNewsList += ', ';
						}					
					}
					sNewsList += ", displayType : 'urgent'}";
					nbItems += 1;
				}	 else {
					// Ligne vide
					sNewsList += ", {libelle:'', surtitre:'', displayType: 'urgent'}";	
				}				
			}
		
			if (titresItems.length >0) {
				var titresAttributes = titresItems[titresIndex].attributes;					
				var backupIndex = titresIndex;
				if (titresIndex < titresIndexMax) {
					titresIndex += 1
				}
				else {
					titresIndex = 0;
				}
				
				if (titresAttributes != null && titresAttributes.length != 0) {
					// Add title item
					if (nbItems > 0 ) {
						sNewsList += ', '
					}
					sNewsList += '{';
					for (var j=0 ; j < titresAttributes.length ; j++) {						
						// TODO : Hack sur les " voir pour corriger le problème des caractères dans la construction JSON
						var value = titresAttributes[j].nodeValue;							
						value = Remplace(value, "'", "\\'");	
						var bUrlSon = (titresItems[backupIndex].nodeName == 'ELEMENT_DEFILANT_SON' && titresAttributes[j].nodeName=='url');							
						if (bUrlSon){	
							value = Remplace(value, "'", '"');							
						}
						sNewsList += titresAttributes[j].nodeName + ": '" + value + "'";
						if (j < titresAttributes.length-1) {
							sNewsList += ', ';
						}					
					}
					sNewsList += ", displayType: 'titre'}";
					nbItems += 1;
				} else {
					// Ligne vide
					sNewsList += ", {libelle:'', surtitre:'', displayType: 'titre'}";
				}				
			}				
		generalIndex += 1;	
		}	
		
		// Cas d'un seul titre dans la liste
		if (titresIndexMax == 0) {
			// Add titre vide						
			sNewsList += ", {libelle:'', surtitre:'', displayType: 'titre'}";		
			nbItems += 1;			
		}
		
		// Cloture de la liste au format JSON
		sNewsList += '];';			
		defilantSize = nbItems;									
		return sNewsList;
	}
	catch (e) {
		// Levée de l'erreur sur chargement
		//throw(e);
		return '';
	}
}

function setTitlesList() {		
	var handleSuccess = function(o, args){
			// Get the titles xml
			var root = clean(o.responseXML.documentElement);								
			titresList = cleanEmptyTag(root.getElementsByTagName('ELEMENTS_DEFILANT')[0].childNodes);
			setUrgentList();
	}

	var handleFailure = function(o){
			// Erreur sur récupération des paramètres contextuels player
			
		}

	var callback =
		{
			success:handleSuccess,
			failure:handleFailure			
		};		

	function makeRequest(){				
			var request = YAHOO.util.Connect.asyncRequest('GET', titresUrl + getDateParam(), callback);
		}
	
	// Lancement de la requête
	makeRequest();	
}

function setUrgentList() {		
	var handleSuccess = function(o, args){
			// Get the titles xml
			var root = clean(o.responseXML.documentElement);					
			urgentsList = cleanEmptyTag(root.getElementsByTagName('ELEMENTS_DEFILANT')[0].childNodes);
			computeList();	
			
	}

	var handleFailure = function(o){
			// Erreur sur récupération des paramètres contextuels player
			
		}

	var callback =
		{
			success:handleSuccess,
			failure:handleFailure			
		};		

	function makeRequest(){			
			var request = YAHOO.util.Connect.asyncRequest('GET', urgentsUrl + getDateParam(), callback);
		}
	
	// Lancement de la requête
	makeRequest();	
}

function computeList () {
	var sNewsList = getnewsListString(titresList, urgentsList);
	//newsList = sNewsList.parseJSON();
	//newsList = JSON.parse(sNewsList);
	newsList = eval(sNewsList);
	
	// Call Carousel Loading
	carouselLoad();
}

function setNewsList () {	
	try {
		var defilant = document.getElementById('dhtml-carousel');	
		if (defilant != null && defilant != undefined) {	
			setTitlesList();			
		}
	}
	catch (e) {
		// Levée de l'erreur sur chargement
		//throw(e);
	}
}

//YAHOO.util.Event.addListener(window, 'load', setNewsList);
//Event.onDOMReady(setNewsList);
Event.onAvailable('dhtml-carousel', setNewsList);
