/* Nécessite le framework Prototype (version 1.5.1), lib_core.js, lib_dhtml_core.js et lib_dhtml_pr.js */

var Menu = {};

Menu.prototype = new ConfigurableObject();

Menu.currentEntry = null;
//Menu.videoCollection = null;

Menu.listPattern = /^(video-list-\d+-)(\d+)$/;
Menu.videoPattern = /^video-elem-(\d+)$/;
Menu.activePageNum = 0;

Menu.scroll = {};
Menu.scroll.element = null;
Menu.scroll.increment = 0;
Menu.scroll.viewWidth = 0;
Menu.scroll.currentX = 0;

Menu.scroll.viewNumber = 4;

Menu.scroll.execute = function()
{
	var cElem = Event.element(arguments[0]);
	
	if(Object.isInitialized(cElem))
	{
		/*var canScroll = false;
		var signCoeff = -1;
		
		if(cElem.hasClassName('prev'))
		{
			signCoeff = 1;
		}
		
		if((signCoeff < 0) && (Math.abs(Menu.scroll.currentX) <= Menu.scroll.viewWidth))
		{
			canScroll = true;
		}
		else if((signCoeff > 0) && (Menu.scroll.currentX >= 0))
		{
			canScroll = true;
		}
		//alert(Menu.scroll.currentX);
		canScroll = true;
		if(canScroll)
		{
			Menu.scroll.currentX = Menu.scroll.currentX + signCoeff * Menu.scroll.increment;
			if(Menu.scroll.currentX < 0)
			{
				Menu.scroll.currentX = 0;
			}
			else
			if(Math.abs(Menu.scroll.currentX) > Menu.scroll.viewWidth)
			{
				Menu.scroll.currentX = Menu.scroll.viewWidth*signCoeff;
			}
			Menu.scroll.element.style.left = Menu.scroll.currentX+CssConstant.PIXEL_UNIT;
		}*/
		
		var rmChild;
		
		//alert(Menu.scroll.element.lastChild.childNodes.item(0).nodeValue)
		
		if(cElem.hasClassName('prev'))
		{
			rmChild = Menu.scroll.element.lastChild;
			if(Object.isInitialized(rmChild))
			{
				while(rmChild.nodeType != 1)
				{
					rmChild = rmChild.previousSibling;
				}
			}
		}
		else
		{
			rmChild = Menu.scroll.element.firstChild;
			if(Object.isInitialized(rmChild))
			{
				while(rmChild.nodeType != 1)
				{
					rmChild = rmChild.nextSibling;
				}
			}
		}
		//alert(rmChild.tagName+'\n'+rmChild.nodeType+'\n'+rmChild.firstChild.nodeType)
		if(Object.isInitialized(rmChild))
		{
			var mvChild = Menu.scroll.element.removeChild(rmChild);
			
			if(cElem.hasClassName('prev'))
			{
				Menu.scroll.element.insertBefore(mvChild,Menu.scroll.element.firstChild);
			}
			else
			{
				Menu.scroll.element.appendChild(mvChild);
			}
		}
	}
}

Menu.util = {};
Menu.util.getPreviousElement = function(elem)
{
	var rtElem = elem;
	
	if(Object.isInitialized(rtElem))
	{
		while(rtElem.nodeType != 1)
		{
			rtElem = rtElem.previousSibling;
		}
	}
	
	return rtElem;
}
Menu.util.getNextElement = function(elem)
{
	var rtElem = elem;
	
	if(Object.isInitialized(rtElem))
	{
		while(rtElem.nodeType != 1)
		{
			rtElem = rtElem.nextSibling;
		}
	}
	
	return rtElem;
}

Menu.activate = function()
{
	var cElem = Event.element(arguments[0]);
	
	if(Object.isInitialized(cElem))
	{
		var child = Menu.prototype.getConfigProperty('descendentElement');
		
		var ent = Element.getAncestorElement(cElem,child['tagName'],child['className']);
		
		if(Object.isInitialized(ent))
		{
			Element.addClassName(ent,Menu.prototype.getConfigProperty('activeClass'));
			
			if((Menu.currentEntry != null) && (Menu.currentEntry != ent))
			{
				Element.removeClassName(Menu.currentEntry,Menu.prototype.getConfigProperty('activeClass'));
			}
			
			Menu.currentEntry = ent;
		}
		
		var actPage = Element.getElementsBySelector(Menu.currentEntry,'ul.active');
		
		if(actPage.length == 0)
		{
			var subPage = Element.getElementsBySelector(Menu.currentEntry,'ul');
			
			Element.addClassName(subPage[0],'active');
		}
	}
}

Menu.page = function()
{
	var cElem = Event.element(arguments[0]);
	
	if(Object.isInitialized(cElem))
	{
		if(Menu.currentEntry != null)
		{
			var activeList = Element.getElementsBySelector(Menu.currentEntry,'ul.active');
			
			var listColl = Element.getElementsBySelector(Menu.currentEntry,'ul');
			
			if(activeList.length >= 1)
			{
				var listId = activeList[0].id;

				var blocListId = listId.match(Menu.listPattern);
				
				if(Object.isInitialized(blocListId) || (blocListId.length == 2))
				{
					var blocStartId = blocListId[1];
					var activePageNum = blocListId[2];
					
					var pagePos = parseInt(activePageNum);
					if(cElem.className == 'prev')
					{
						pagePos--;
						
						if(pagePos <= 0)
						{
							cElem.remove();
						}
					
						var nextElem = Element.getElementsBySelector(Menu.currentEntry,'p.nav-action > span.next');
						
						if(nextElem.length == 0)
						{
							var nextObj = document.createElement('span');
							nextObj.className = 'next';
							nextObj.title = 'Suivant';
							if(!Prototype.Browser.IE)
							{
								Element.addEvent(nextObj,'click',Menu.page);
							}
							Element.getElementsBySelector(Menu.currentEntry,'p.nav-action')[0].appendChild(nextObj);
							
							if(Prototype.Browser.IE)
							{
								var newNextElem = Element.getElementsBySelector(Menu.currentEntry,'p.nav-action > span.next');
								Event.observe(newNextElem[0],'click',Menu.page);
							}
							
						}
					}
					else if(cElem.className == 'next')
					{
						pagePos++;
						
						if(pagePos == (listColl.length-1))
						{
							cElem.remove();
						}
						
						var prevElem = Element.getElementsBySelector(Menu.currentEntry,'p.nav-action > span.prev');
						
						if(prevElem.length == 0)
						{
							var prevObj = document.createElement('span');
							prevObj.className = 'prev';
							prevObj.title = 'Précédent';
							if(!Prototype.Browser.IE)
							{
								Element.addEvent(prevObj,'click',Menu.page);
							}
							Element.getElementsBySelector(Menu.currentEntry,'p.nav-action')[0].appendChild(prevObj);
							
							if(Prototype.Browser.IE)
							{
								var newPrevElem = Element.getElementsBySelector(Menu.currentEntry,'p.nav-action > span.prev');
								Event.observe(newPrevElem[0],'click',Menu.page);
							}
						}
					}
					
					var aClass = Menu.prototype.getConfigProperty('activeClass');
					
					$(activeList[0]).removeClassName(aClass);
					
					if((pagePos >= 0) && (pagePos <= (listColl.length-1)))
					{
						$(blocStartId+pagePos).addClassName(aClass);
					}
				}
			}
		}
	}
}

Menu.video = function()
{
	var cElem = Event.findElement(arguments[0],'li');//Event.element(arguments[0]);
	
	if(Object.isInitialized(cElem))
	{
		var rawVideoId = cElem.id;
		
		var videoId = rawVideoId.match(Menu.videoPattern);
		//alert(videoId[1])
		var plugIn = null;
		
		var selector = 'embed[name="flashvideo"]';
		
		if(window.ActiveXObject)
		{
			selector = 'object#flashvideo';
		}
		
		plugIn = Element.getElementsBySelector(document,selector);
		
		if(Object.isInitialized(plugIn[0]))
		{
			
				plugIn[0].getVideo(videoId[1]);
			
			/*
			
			code à rajouter dans le flash (disponible depuis le chargement)
			
			import flash.external.*;

			ExternalInterface.addCallback('getVideo',null,nom_method_actionscript);
			
			*/
		}
	}
}

Menu.init = function()
{
	Menu.prototype.initConfig({rootElement: {tagName: 'ul',className: 'menu'},descendentElement: {tagName: 'li',className: 'nav-entry'},activeClass: 'active'});
	
	if(window.menuConfig)
	{
		Menu.prototype.setConfig(menuConfig);
	}
	
	var root = Menu.prototype.getConfigProperty('rootElement');
	var child = Menu.prototype.getConfigProperty('descendentElement');
	
	var menuColl = Element.getElementsBySelector(document,root['tagName']+'.'+root['className']+' > '+child['tagName']);
	menuColl.each(function(elem)
	{
		Event.observe(elem,'click',Menu.activate);
	});
	
	var aClass = Menu.prototype.getConfigProperty('activeClass');
	
	var activeColl = Element.getElementsBySelector(document,root['tagName']+'.'+root['className']+' > '+child['tagName']+'.'+aClass);
	if(activeColl.length >= 1)
	{
		Menu.currentEntry = activeColl[0];
	}
	
	var actionColl = Element.getElementsBySelector(document,'p.nav-action > span');
	actionColl.each(function(elem)
	{
		Event.observe(elem,'click',Menu.page);
	});
	/*
	var videoColl = Element.getElementsBySelector(document,root['tagName']+'.'+root['className']+' > li > ul > li');
	videoColl.each(function(elem)
	{
		Event.observe(elem,'click',Menu.video);
	});
	*/
	
	Menu.scroll.viewWidth = $('video-view').getWidth();
	
	Menu.scroll.element = Element.getElementsBySelector('video-view','ul')[0];
	
	for(var i=0; i<Menu.scroll.element.childNodes.length; i++)
	{
		if(Menu.scroll.element.childNodes.item(i).nodeType != 1)
		{
			Menu.scroll.element.removeChild(Menu.scroll.element.childNodes.item(i));
		}
	}
	
	var ongletColl = Element.getElementsBySelector('video-view','li');
	var ongletNum = 0;
	ongletColl.each(function(elem)
	{
		if(ongletNum == Menu.scroll.viewNumber)
		{
			if(elem.hasClassName('active'))
			{
				var mvChild = Menu.scroll.element.removeChild(elem);
			
				Menu.scroll.element.insertBefore(mvChild,Menu.scroll.element.firstChild);
			}
		}
		
		ongletNum++;
	});
	
	Menu.scroll.increment = parseInt(Menu.scroll.viewWidth/ongletColl.length);
	
	var scrollColl = Element.getElementsBySelector('video-onglet','span');
	scrollColl.each(function(elem)
	{
		Event.observe(elem,'click',Menu.scroll.execute);
	});
	
	
	if(window.test)
	{
		test();
	}
	//alert(Menu.currentEntry)
	
	if(window.activeVideo)
	{
		var actPage = null;
		var elemColl = Element.getElementsBySelector(document,'ul.menu > li.active > ul > li.active');
		if(elemColl[0])
		{
			var cP = Element.getParentElement(elemColl[0]);
			if(cP)
			{
				actPage = cP;
			}
		}
		
		var actColl = Element.getElementsBySelector(document,'ul.menu > li.active');
		
		var aClass = Menu.prototype.getConfigProperty('activeClass');
		
		var pageColl = Element.getElementsBySelector(document,'ul.menu > li');
		
		pageColl.each(function(elem)
		{
			try
			{
				var subpageColl = Element.getElementsBySelector(elem,'ul');
				
				var pagePos;
				
				subpageColl.each(function(subelem)
				{
					if(subelem == actPage)
					{
						subelem.addClassName(aClass);
						
						var pageId = actPage.id.match(Menu.listPattern);
				
						pagePos = pageId[2];
					}
					else
					{
						subelem.removeClassName(aClass);
						//subpageColl[0].addClassName(aClass);
					}
				});
				
				if(!pagePos)
				{
					pagePos = 0;
				}
				
				if(pagePos > 0)
				{
					var prevElem = Element.getElementsBySelector(elem,'p.nav-action > span.prev');
						
					if(prevElem.length == 0)
					{
						var prevObj = document.createElement('span');
						prevObj.className = 'prev';
						prevObj.title = 'Précédent';
						if(!Prototype.Browser.IE)
						{
							Element.addEvent(prevObj,'click',Menu.page);
						}
						Element.getElementsBySelector(elem,'p.nav-action')[0].appendChild(prevObj);
						
						if(Prototype.Browser.IE)
						{
							var newPrevElem = Element.getElementsBySelector(elem,'p.nav-action > span.prev');
							Event.observe(newPrevElem[0],'click',Menu.page);
						}
					}
				}
				
				if(pagePos < subpageColl.length-1)
				{
					var nextElem = Element.getElementsBySelector(elem,'p.nav-action > span.next');
					
					if(nextElem.length == 0)
					{
						var nextObj = document.createElement('span');
						nextObj.className = 'next';
						nextObj.title = 'Suivant';
						if(!Prototype.Browser.IE)
						{
							Element.addEvent(nextObj,'click',Menu.page);
						}
						Element.getElementsBySelector(elem,'p.nav-action')[0].appendChild(nextObj);
						
						if(Prototype.Browser.IE)
						{
							var newNextElem = Element.getElementsBySelector(elem,'p.nav-action > span.next');
							Event.observe(newNextElem[0],'click',Menu.page);
						}
					}
				}
			}
			catch(e)
			{}
		});
	}
	else
	{
		var rubColl = Element.getElementsBySelector(document,'ul.menu > li');
		
		rubColl.each(function(elem)
		{
			var pageColl = Element.getElementsBySelector(elem,'ul');
			
			if(pageColl.length > 1)
			{
				var nextElem = Element.getElementsBySelector(elem,'p.nav-action > span.next');
		
				if(nextElem.length == 0)
				{
					var nextObj = document.createElement('span');
					nextObj.className = 'next';
					nextObj.title = 'Suivant';
					if(!Prototype.Browser.IE)
					{
						Element.addEvent(nextObj,'click',Menu.page);
					}
					Element.getElementsBySelector(elem,'p.nav-action')[0].appendChild(nextObj);
					
					if(Prototype.Browser.IE)
					{
						var newNextElem = Element.getElementsBySelector(elem,'p.nav-action > span.next');
						Event.observe(newNextElem[0],'click',Menu.page);
					}
				}
			}
		});
	}
}

if(window.Prototype)
{
	/*if(Prototype.Browser.IE)
	{*/
		Event.observe(window,'load',Menu.init);
	/*}
	else
	{
		Event.observe(window,'DOMReady',Menu.init);
	}*/
}