/**********************************************************
	Cette bibliothêque regroupe des utilitaires pour 
	consulter des bugs.
	Prototype est ici largement utilisé.
**********************************************************/

/********************************************************
	Fonctions externes :
		cookieUtils
			GetCookie
			
		prototype.js 
			$ 	:  http://www.prototypejs.org/api/utility
			$A	: http://www.prototypejs.org/api/utility#method-$a
			Ajax	: http://www.prototypejs.org/api/ajax
			each	: http://www.prototypejs.org/api/enumerable/each
********************************************************/


/**********************************************************
	getBugs
		Retourne la liste des bugs contenues dans le 
		fichier xml situé dans xml/bug.xml ainsi que la 
		liste des bugs ajoutés contenues dans le cookie
		nommée "pbm".
		
		Cette liste est retourné sous la forme d'un 
		tableau HTML.
**********************************************************/
function getBugs()
{
	var list = new Array();
	
	// On récupère les données du fichier XML
	// Les noeuds TR sont stockés dans un tableau HTML
	new Ajax.Request('../xml/bug.xml', 
	{
		onSuccess: function(transport)
		{
			var data = transport.responseXML.firstChild;
			data=$A(data.childNodes);
			data.each(function(child)
			{
				//IE cause un problême... IL n'est pas possible d'insérer directement dans la page des object provenant du dom d'une autre page
				// On transforme donc nos objects du fichier XML vers des objects natifs de notre document
				var tr = document.createElement("tr");
				var i = 0;
				for(i=0;i<child.childNodes.length;i++)
				{
					var td=document.createElement("td");
					td.appendChild(document.createTextNode(child.childNodes[i].firstChild.nodeValue));
					tr.appendChild(td);
				}
				list.push(tr);						
			});
		},
		onFailure: function(transport) //En cas d'erreur on affiche la page retournée
		{
			alert(transport.responseText);
		},
		method:'GET',
		asynchronous:false //On évite l'asynchrone afin d'avoir nos données directement à l'issue du script
	});
		
	// On récupère les données stockées dans le cookie.
	// On les transforme en tableau afin de les ajouter à  la variable list
	var cookieValue = GetCookie("pbm");
	cookieValue = cookieValue.split("[pbm]");
	cookieValue=$A(cookieValue);
	
	cookieValue.each(function(value)
	{
		if(value!="")
		{
			var data = value.split(";");
			data=$A(data);
			var tr =document.createElement("tr");
			data.each(function(subValue)
			{
				var td = document.createElement("td");
				var textNode = document.createTextNode(subValue);
				td.appendChild(textNode);
				tr.appendChild(td);
			});
			list.push(tr);
		}
		
	});
	
	// Finalement on inverse le tout pour avoir un classement du plus récent au plus ancien
	// et on retourne notre tableau de noeuds
	list.reverse();
	return list;
}

/**********************************************************
	getList
		Paramêtres:
			string aType
			
			Retourne une tableau de contenant une liste 
			d'UN élément d'un bug en fonction de aType.
			
			La fonction appel getBugs définit plus haut et
			parse le tableau ainsi retourné pour ne garder
			que la colonne demandé.
			
			Elle renvoie un tableau Javascript.
**********************************************************/
function getList(aType)
{
	var list = new Array();
	var field = null;
	switch(aType)
	{
		case "Id":
			field=0;
		break;
		case "Name":
			field=1;
		break;
		case "Owner":
			field=2;
		break;
		case "Status":
			field=3;
		break;
		case "Creation Date":
			field=4;
		break;
	}
	
	var data=getBugs();
	data.reverse(); // On retourne le tableau
	
	var children=$A(data);			
	children.each(function(child)
	{
		var value = child.childNodes[field].firstChild.nodeValue;
		if(list.indexOf(value + " ")==-1)
			list.push(value + " ");
	});
	
	return list;
}
