/**
 * Element de fil d'Ariane
 */
function elementFilAriane (url, label, onClick, visible)
{
	this.url = url;
	this.label = label;
	this.onClick = onClick;
	this.visible = visible;
}

var regExpBeginning = /^\s+/;
var regExpEnd       = /\s+$/;

// Supprime les espaces inutiles en début et fin de la chaîne passée en paramètre.
function trim(aString) {
    return aString.replace(regExpBeginning, "").replace(regExpEnd, "");
}

// Supprime les espaces inutiles en début de la chaîne passée en paramètre.
function ltrim(aString) {
    return aString.replace(regExpBeginning, "");
}

// Supprime les espaces inutiles en fin de la chaîne passée en paramètre.
function rtrim(aString) {
    return aString.replace(regExpEnd, "");
} 

/**
 * Fil d'Ariane
 */
function filAriane (alias)
{
	this.ref = alias;
	this.separator = '&raquo; ';
	this.elements = new Array();
	this.defaultElements = new Array();

	/*  Methodes de gestion du fil dans un cookie */
	this.urlVarName = "filAriane_" + this.ref + "_urls=";
	this.labelVarName = "filAriane_" + this.ref + "_labels=";
	this.onClickVarName = "filAriane_" + this.ref + "_onClicks=";
	this.visibleVarName = "filAriane_" + this.ref + "_visible=";

	this.storeInCookie = function () { //alert('.storeInCookie()');
	
		var urlString = "";
		var labelString = "";
		var onClickString = "";
		var visibleString = "";
		if (this.elements.length > 0) {
			urlString += this.elements[0].url;
			labelString += this.elements[0].label;
			onClickString += this.elements[0].onClick;
			for (i = 1; i < this.elements.length; i++) {
				urlString += '|' + escape(this.elements[i].url);
				labelString += '|' + escape(this.elements[i].label);
				onClickString += '|' + escape(this.elements[i].onClick);
				visibleString += '|' + escape(this.elements[i].visible);
			}
		}
		
		//astuce permetant de contourner un bug si labels contiennent des accents 
		if(labelString.charAt(0)=="\""){
			labelString=labelString.substring(1,labelString.length);
		}
		
		
		labelString=labelString.replace(" ","%20").replace(";","%3B");
		document.cookie = this.urlVarName + urlString + "; path=/";
		document.cookie = this.labelVarName + labelString + "; path=/";
		document.cookie = this.onClickVarName + onClickString + "; path=/";
		document.cookie = this.visibleVarName + visibleString + "; path=/";
		
	};
	
	this.getFromCookie = function () { //alert(this.ref + '.getFromCookie()');
		this.elements.length = 0;

		var urlString = "";
		var labelString = "";
		var onClickString = "";
		var visibleString = "";

		if (document.cookie.length > 0) {
			var offsetUrls = document.cookie.indexOf(this.urlVarName);
			var offsetLibelles = document.cookie.indexOf(this.labelVarName);
			var offsetOnClicks = document.cookie.indexOf(this.onClickVarName);
			var offsetVisible = document.cookie.indexOf(this.visibleVarName);
			if (offsetUrls != -1 && offsetLibelles != -1 && offsetOnClicks != -1) {
				offsetUrls += this.urlVarName.length;
				offsetLibelles += this.labelVarName.length;
				offsetOnClicks += this.onClickVarName.length;
				offsetVisible += this.visibleVarName.length;
				
				endUrls = document.cookie.indexOf(";", offsetUrls);
				if (endUrls == -1)
					endUrls = document.cookie.length;
				
				endLibelles = document.cookie.indexOf(";", offsetLibelles);
				if (endLibelles == -1) 
					endLibelles = document.cookie.length;
				
				endOnClicks = document.cookie.indexOf(";", offsetOnClicks);
				if (endOnClicks == -1) 
					endOnClicks = document.cookie.length;
					
				endVisible = document.cookie.indexOf(";", offsetVisible);
				if (endVisible == -1) 
					endVisible = document.cookie.length;

				urlString = trim(document.cookie.substring(offsetUrls, endUrls));
				labelString = trim(document.cookie.substring(offsetLibelles, endLibelles));
				onClickString = trim(document.cookie.substring(offsetOnClicks, endOnClicks));
				visibleString = trim(document.cookie.substring(offsetVisible, endVisible));
				
				if (urlString.indexOf("\"") ==0){
					urlString = urlString.substring(1,urlString.length);
				}
				if (urlString.indexOf("\"") ==urlString.length-1){
					urlString = urlString.substring(0,urlString.length-1);
				}
				if (labelString.indexOf("\"") ==0){
					labelString = labelString.substring(1,labelString.length);
				}
				if (labelString.indexOf("\"") ==labelString.length-1){
					labelString = labelString.substring(0,labelString.length-1);
				}
				if (onClickString.indexOf("\"") ==0){
					onClickString = onClickString.substring(1,onClickString.length);
				}
				if (onClickString.indexOf("\"") ==onClickString.length-1){
					onClickString = onClickString.substring(0,onClickString.length-1);
				}
				if (visibleString.indexOf("\"") ==0){
					visibleString = visibleString.substring(1,visibleString.length);
				}
				if (visibleString.indexOf("\"") ==onClickString.length-1){
					visibleString = visibleString.substring(0,visibleString.length-1);
				}

				var cookieValueSeparator = new RegExp("\\|", "g");
				var urlsTmp = urlString.split(cookieValueSeparator);
				var labelsTmp = labelString.split(cookieValueSeparator);
				var onClicksTmp = onClickString.split(cookieValueSeparator);
				var visibleTmp = visibleString.split(cookieValueSeparator);
				/*alert(labelsTmp);*/
				for (i = 0; i < labelsTmp.length; i++) {
					this.elements[i] = new elementFilAriane(unescape(urlsTmp[i]), unescape(labelsTmp[i]),unescape(onClicksTmp[i]), unescape(visibleTmp[i]));
				}
			}
		}
	};
	
	/* Affiche le fil */
	this.show = function () {// alert(this.ref + '.show()');
	
		
		
		this.getFromCookie();
		if (this.elements.length < 2) {
			this.elements = this.defaultElements;
		}
		
		var visibleElements = new Array();
		// Recuperation des noeuds visibles uniquement
		for (i = 0, j = 0; i < this.elements.length ; i++) {
			if(this.elements[i].visible == 'true'){
				visibleElements[j] = this.elements[i];
				j++;
			}
		}

		var content = "";
		if (visibleElements.length > 0) {
			content += "<ul>";
			
			contentdiv = document.getElementById('contentajaxdiv'+'blocFiltres');
			if(visibleElements[0].onClick=='null' || contentdiv == null){
				content += "<li><a href=\"" + visibleElements[0].url.replace('&ajax=true', '&reset=false') + "\" onclick=\"updateFilAriane(0);\">" + visibleElements[0].label + "</a></li>";
			}else{
				content += "<li><a href=\"#\" onclick=\"updateFilAriane(0);makeRequest('"+visibleElements[0].url +"', 'resultatsRechercheAjax', 'alertContents');\" >"+ visibleElements[0].label +"</a></li>";
			}
			for (i = 1; i < visibleElements.length - 1; i++) {
				if(this.elements[i].onClick=='null' || contentdiv == null){
				
					index=i;
					if(this.elements[i].url.match('&ajax=true')){
						index=i+1;
					}
					content += "<li>" + this.separator + "<a href=\"" + visibleElements[i].url.replace('&ajax=true', '&reset=false') + "\"  onclick=\"updateFilAriane("+index+");\">" + visibleElements[i].label + "</a></li>";
				}else{
					var fadeIdx=getFadeIdxByChild('listeResultatsAjax');

					content += "<li>" + this.separator + "<a href=\"#\" onclick=\"updateFilAriane("+i+");makeRequest('"+visibleElements[i].url +"', '"+fadeIdx+"', 'alertContents("+fadeIdx+"');\" >"+ visibleElements[i].label +"</a></li>";
			
				}

			}

			content += "<li class=\"current\">" + this.separator + visibleElements[visibleElements.length - 1].label + "</li>";

			content += "</ul>";
		}
		document.getElementById('cheminDeFer' + this.ref).innerHTML = content;
	};

	/* Ajoute un element */
		this.addElement = function (url, label, onClick, visible) {// alert(this.ref + '.addElement(' + url + ', ' + label + ')');
		this.elements[this.elements.length] = new elementFilAriane(url, label, onClick, visible);

		this.storeInCookie ();

		this.show();
	};

	/* Modifie le dernier element du fil d'Ariane */
	this.setLastElement = function (url, label, onClick, visible) {// alert(this.ref + '.setLastElement(' + url + ', ' + label + ')');
		if (this.elements.length > 2) {
			this.elements[this.elements.length - 1] = new elementFilAriane(url, label, onClick, visible);

			this.storeInCookie ();

			this.show();
		}
	};

	/* Ote les derniers elements du fil d'Ariane a partir du rang n */
	this.removeElementsFrom = function (n) {// alert(this.ref + '.removeElementsFrom(' + n + ')');
		if (n > 1 && n < this.elements.length) {
		    this.elements.length = n;

			this.storeInCookie ();

		    this.show();
		}
	};

	/* Ote le dernier element du fil d'Ariane */
	this.removeLastElement = function () { this.removeElementsFrom(this.elements.length - 1); };

	/* Reinitialise le fil d'Ariane */
	this.reset = function () { this.removeElementsFrom(2); };
}

/**
 * Mappe des fils d'Ariane utilises
 */
function filArianeMap ()
{
	this.keys = new Array();
	
	this.get = function (key) {// alert('filArianeMap.get(' + key + ')');
		for (i = 0; i < this.keys.length; i++) {
			if (this.keys[i] == key) {
				return eval('this.' + key);
			}
		}
		return null;
	};

	this.put = function (key, aFilAriane) {// alert('filArianeMap.put(' + key + ', ' + aFilAriane.ref + ')');
		pos = -1;
		for (i = 0; i < this.keys.length; i++) {
			if (this.keys[i] == key) {
				pos = i;
				break;
			}
		}
		if (pos == -1) {
			this.keys[this.keys.length] = key;
		}
		eval('this.' + key + ' = aFilAriane;');
	};
}

/**
 * Initialisation de la mappe
 */
theFilArianeMap = new filArianeMap();

/**
* fonction permetant de mettre a jour les fils d arianes
* (utilisee lorsque que l on selectionne un element precedent)
*/
function updateFilAriane(niveau){
	var j;
	for (j = 0; j < theFilArianeMap.keys.length; j++) {
		var key = theFilArianeMap.keys[j];
		var lefil = theFilArianeMap.get(key);
		lefil.removeElementsFrom(niveau);
		lefil.show();
	}
}