var logos = [
	{id: "altaprofits",  href: "partenaire/altaprofits.jsp"},
	{id: "bailactea",    href: "partenaire/bailactea.jsp"},
	{id: "bkcp",         href: "partenaire/bkcp.jsp"},
	//{id: "choixFun",     href: "partenaire/choixFun.jsp"},
	{id: "cmne",         href: "partenaire/cmne.jsp"},
	//{id: "cmmabn",     href: "partenaire/cmmabn.jsp"},
	{id: "empruntis",    href: "partenaire/empruntis.jsp"},
	{id: "epargnissimo", href: "partenaire/epargnissimo.jsp"},
	{id: "carrousel",    href: "partenaire/carrousel.jsp"},
	{id: "hedios",       href: "partenaire/hedios.jsp"},
	{id: "infinitis",    href: "partenaire/infinitis.jsp"},
	{id: "linxea",       href: "partenaire/linxea.jsp"},
	{id: "monfinancier", href: "partenaire/monfinancier.jsp"},
	//{id: "novalis", 	 href: "partenaire/novalis.jsp"},
	{id: "ps", 			 href: "partenaire/ps.jsp"},
	{id: "patrimmofi",   href: "partenaire/patrimmofi.jsp"},
	{id: "quilvest",     href: "partenaire/quilvest.jsp"},
	{id: "sep",          href: "partenaire/sep.jsp"},
	{id: "ufg5",         href: "partenaire/ufg5.jsp"},
	{id: "ufg",          href: "partenaire/ufg.jsp"}
];
var scrollConstants = {
	// Décalage en pixels en fonctionnement normal
	shiftNormal: 1,
	
	// Décalage en pixels si utilisation des boutons
	shiftButton: 2,
	
	// Délai en millisecondes entre chaque décalage en fonctionnement normal
	timeToWaitNormal: 20,
	
	// Délai en millisecondes entre chaque décalage si utilisation des boutons
	timeToWaitButton: 0
}
var directionConstants = {
	top: -1,
	bottom: 1
};
var idMenu = "menuDefilant";
var timerMenu;
var shift;
var timeToWaitMenu;

/**
 * Initialisation du menu défilant
 */
function initMenu() {
	var menu = document.getElementById(idMenu);
	
	// Ajout des logos dans le menu
	for(var i = 0; i < logos.length; i++) {
		var logo = logos[i];
		var divLogo = document.createElement("div");
		var divLogoId = document.createAttribute("id");
		var divLogoClass = document.createAttribute("class");
		var linkLogo = document.createElement("a");
		var linkLogoHref = document.createAttribute("href");
		var imgLogo = document.createElement("img");
		var imgLogoId = document.createAttribute("id");
		var imgLogoSrc = document.createAttribute("src");
		
		imgLogoId.nodeValue = "logo_" + logo.id;
		imgLogoSrc.nodeValue = "/css/picts/logo/" + logo.id + "_defil.gif";
		
		imgLogo.setAttributeNode(imgLogoId);
		imgLogo.setAttributeNode(imgLogoSrc);
		
		linkLogoHref.nodeValue = logo.href;
		
		linkLogo.setAttributeNode(linkLogoHref);
		linkLogo.appendChild(imgLogo);
		
		divLogoId.nodeValue = logo.id;
		divLogoClass.nodeValue = "menuItem";
		
		divLogo.style.position = "absolute";
		divLogo.style.top = (71 * i) + "px";
		
		divLogo.setAttributeNode(divLogoId);
		divLogo.setAttributeNode(divLogoClass);
		divLogo.appendChild(linkLogo);
		
		menu.appendChild(divLogo);
		
	}
	
	// Lancement du menu défilant
	shift = scrollConstants.shiftNormal;
	timeToWaitMenu = scrollConstants.timeToWaitNormal;
	timerMenu = setTimeout(function() { scrollMenu(directionConstants.bottom) },
		100);
}

/**
 * @param item élément du menu
 * @return la position haute de l'élément item
 */
function getTop(item) {
	var top = item.style.top;
	
	if((top == null) || ("" == top) || (top.indexOf("auto") != -1)) {
		top = 0;
	} else if(top.indexOf("px") != -1) {
		top = top.substring(0, top.indexOf("px"));
	}
	
	return top;
}

/**
 * @param item élément du menu
 * @param direction sens de défilement du menu
 * @return true si l'élément est encore visible dans le menu, false sinon
 */
function isVisible(item, direction) {
	var visible = true;
	
	if(direction == directionConstants.bottom) {
		visible = (item.offsetTop > -71);
	} else if(direction == directionConstants.top) {
		var menuHeight = document.getElementById(idMenu).clientHeight;
		
		visible = (item.offsetTop < menuHeight);
	}
	
	return visible;
}

/**
 * Défilement du menu
 * @param direction sens de défilement du menu
 */
function scrollMenu(direction) {
	var menu = document.getElementById(idMenu);
	var item = (direction == directionConstants.bottom)
		? menu.firstChild : menu.lastChild;
	
	clearTimeout(timerMenu);
	
	while(item != null) {
		if(!isVisible(item, direction)) {
			var clone = item.cloneNode(true);
			
			if(direction == directionConstants.bottom) {
				var last = menu.getElementsByTagName("div")[
                    menu.getElementsByTagName("div").length - 1];
				
				clone.style.top = (last.offsetTop + 71) + "px";
				
				menu.appendChild(clone);
				menu.removeChild(item);
			} else if(direction == directionConstants.top) {
				var first = menu.getElementsByTagName("div")[0];
				
				clone.style.top = (first.offsetTop - 71) + "px";
				
				menu.insertBefore(clone, first);
				menu.removeChild(item);
			}
		} else {
			item.style.top = getTop(item) - parseInt(shift * direction)
				+ "px";
		}
		
		item = (direction == directionConstants.bottom)
			? item.nextSibling : item.previousSibling;
	}
	
	timerMenu = setTimeout(function() { scrollMenu(direction) }, timeToWaitMenu);
}

/**
 * Fonction appelée en cas d'utilisation des boutons haut et bas.
 * Positionne les variables globales timeToWaitMenu et shift à de nouvelles
 * valeurs pour accélérer le défilement puis lance le défilement accéléré
 * @param direction sens de défilement du menu
 */
function newParamsAndScroll(direction) {
	timeToWaitMenu = scrollConstants.timeToWaitButton;
	shift = scrollConstants.shiftButton;
	
	scrollMenu(direction);
}

/**
 * Fonction appelée quand les boutons haut et bas ne sont plus utilisés.
 * Positionne les variables globales timeToWaitMenu et shift à leur valeur
 * initiale puis lance le défilement normal
 * @param direction sens de défilement du menu
 */
function restoreParamsAndScroll() {
	timeToWaitMenu = scrollConstants.timeToWaitNormal;
	shift = scrollConstants.shiftNormal;
	
	scrollMenu(directionConstants.bottom);
}