
if (typeof Effect == 'undefined')
	throw("accordion.js requires including script.aculo.us' effects.js library!");



var protoMenu = Class.create();
protoMenu.prototype = {
	//
	//  Setup the Variables
	//
	listElement		: [],
	container		: false,
	duration		: 0.10,
	open			: false,
	subOpen			: false,
	noClose			: false,
	openSubMenu		: false,
	noCloseSubMenu	: false,
	nameMenu		: '',
	childMenu		: null,
	oldClass		: '',
	currentMenu		: null,
	cssBefore		: '',
	count			: 0,
	nbItem			: 0,

	//
	//  Initialize
	//
	initialize: function(container, options) {
		
		this.nameMenu	= container;
		this.container	= $(container);

		if (!this.container) {
			throw(container+" doesn't exist!");
			return false;
		}

		this.options = Object.extend({
			data			: [],
			duration		: 0.20,
			onEvent			: 'mouseover',
			onEventClose	: 'mouseout',
			classContent	: false,
			offsetY			: 0,
			classNames 		: {
				open	:	'open',
				close	:	'close',
				over	:	'over'
			}
		}, options || {});
		//TEST ENCOCHE
		if(this.options.classContent != false) {
			this.childMenu	= this.container.getElementsByClassName(this.options.classContent)[0];
			/*if(this.childMenu.previous().previous().hasClassName('onglet_on')) {
				this.cssBefore	= 'onglet_on';
			} else {
				this.cssBefore	= 'onglet_off';
			}*/

		}
		//TEST MENU VERT
		/*if(container == 'testMenu') {
			this.container.setStyle(
				{
					zIndex: 300
				}

			);
		} else {
			this.container.setStyle({zIndex:200});
		}*/

		this.duration = this.options.duration;
		this._createMenuFor(this.options.data, this.container);
		Event.observe(this.container, 'mouseover', this.show.bind(this, this.container), true);
		Event.observe(this.container, 'mouseout', this.hide.bind(this, this.container), true);


	},

	show:	function(menu) {
		var queue = Effect.Queues.get(this.nameMenu + 'close');
		queue.each(function(e) { e.cancel() });
		new	Effect.Opacity(this.childMenu,
			{
				duration: 0.3,
				to: 1.0,
				beforeStart: function() {
					this.childMenu.setStyle({
						height: 'auto',
						display: 'block'
					});
				}.bind(this),
		      	queue: {
		      		position: 'end',
					scope: this.nameMenu + 'open'
		      		}
			}
		);
		//this.childMenu.previous().previous().removeClassName(this.cssBefore);
		//this.childMenu.previous().previous().addClassName('onglet_on');

	},

	hide:	function(menu) {

		if(this.subOpen == false) {
			var queue = Effect.Queues.get(this.nameMenu + 'open');
			queue.each(function(e) { e.cancel() });
			new	Effect.Opacity(this.childMenu,
				{
					duration: 0.5,
					to: 0.0,
			      	queue: {
			      		position: 'end',
						scope: this.nameMenu + 'close'
			      		},
					afterFinish: function() {
						this.childMenu.setStyle({
							height: '0px',
							display: 'none'
						});
				}.bind(this)
				}
			);
		}

		this.open	= false;
		//this.childMenu.previous().previous().removeClassName('onglet_on');
		//this.childMenu.previous().previous().addClassName(this.cssBefore);

	},

	showSubMenu:	function(menu) {

		if(this.subOpen != false) {

		}
/*
		if(Prototype.Browser.IE) {
//			alert('ok');
			var bugIE	= menu;

			while(bugIE) {
//				alert('ok');
				bugIE.setStyle(
					{
						bottom: '4px'
					}
				);

				bugIE	= bugIE.next();
				Element.extend(bugIE);

			}

		}
*/

		new	Effect.Opacity(menu.firstDescendant().next(),
			{
				duration: 0.2,
				to: 1.0,
				beforeStart: function() {
					menu.firstDescendant().next().setStyle({
						height: 'auto',
						display: 'block'
					});
				}.bind(this)
			}
		);

		this.subOpen	= menu;

	},

	showSubMenu2:	function(menu) {
		var queue = Effect.Queues.get('subclose');
		queue.each(function(e) { e.cancel() });

		if(this.subOpen != false) {

		}

		new	Effect.Opacity(menu.firstDescendant().next(),
			{
				duration: 0.2,
				to: 1.0,
				beforeStart: function() {
					menu.firstDescendant().next().setStyle({
						height: 'auto',
						display: 'block'
					});
				}.bind(this)
			}
		);

		this.subOpen	= menu;

	},

	hideSubMenu:	function(menu) {
		if(this.subOpen != false) {
		new	Effect.Opacity(menu.firstDescendant().next(),
			{
				duration: 0.3,
				to: 0.0,
		      	queue: {
		      		position: 'end',
					scope: 'subclose'
		      		},
				afterFinish: function() {
					menu.firstDescendant().next().setStyle({
						height: '0px',
						display: 'none'
					});

			}.bind(this)
			}
		);
		}

		this.subOpen	= false;

	},

	_createMenuFor: function(element, container) {
		if(Object.isString(element)) {
			
			divMenu	= $(element);
			divMenu.setStyle(
				{
					position:			'absolute',
					backgroundColor:	'FEFEFE',
					zIndex: 200,
					top:		        (this.options.offsetY)+ 'px'/*,
					right:              '0px' 'none'container.getHeight() + */
				}

			);

			divMenu.setOpacity(0);

			divMenu.setStyle({
				display: 'none'
			});

		} /*else {
			var	divMenu	= document.createElement('div');
			var	divItem	= document.createElement('div');
			var	ulItem	= document.createElement('ul');
			Element.extend(divMenu);
			Element.extend(divItem);
			Element.extend(ulItem);

			var	divImg	= document.createElement('div');
			var	imgItem	= document.createElement('img');
			Element.extend(divImg);
			Element.extend(imgItem);

			imgItem.src	= 'images/decodumur/common/sousmenu_haut.gif';
			imgItem.addClassName('top');

			if(container != this.container) {
				divImg.appendChild(imgItem);
				divItem.appendChild(divImg);
			}

			imgItem.setStyle({zIndex:400});
			divImg.setStyle({zIndex:400});

			element.each(
				function(ele) {
					Element.extend(divItem);
					Element.extend(ulItem);

					if(ele==element.last()) {
						this._addItemTo(ele, ulItem, 'last');
					} else {
						this._addItemTo(ele, ulItem, '');
					}
				}.bind(this)
			);

			divItem.appendChild(ulItem);

			divItem.setStyle({zIndex:300});
			ulItem.setStyle({zIndex:300});

			divMenu.appendChild(divItem);

			if(container == this.container) {
				divMenu.addClassName('sousmenu');
				divMenu.id	= 'nav_vert';
				this.childMenu	= divMenu;

			} else {
				divMenu.addClassName('sousnav');
			}

			if(container == this.container) {
				divMenu.setStyle(
					{
						position:	'absolute',
						zIndex:		200,
						top:		(container.getHeight() + this.options.offsetY) + 'px'
					}

				);
			} else {
				divMenu.setStyle(
					{
						position:	'absolute',
						zIndex:		200,
						top:		(container.getHeight()) + 'px'
					}
				);
			}

			divMenu.setStyle({
				height: '0px',
				display: 'none'
			});

			divImg	= document.createElement('div');
			imgItem	= document.createElement('img');
			Element.extend(divImg);
			Element.extend(imgItem);

			imgItem.src	= 'images/decodumur/common/sousmenu_bas.gif';
			imgItem.addClassName('bottom');

			divImg.appendChild(imgItem);
			divMenu.appendChild(divImg);

			divMenu.setOpacity(0);

			if(container != this.container) {
				Event.observe(divMenu, 'mouseover', this.showSubMenu2.bind(this, divMenu), true);
			}

			container.appendChild(divMenu);
		}*/
	},


	_addItemTo:	function(element, container, cssClass) {

		var	liItem	= document.createElement('li');
		var	item	= document.createElement('a');
		Element.extend(liItem);
		Element.extend(item);

		liItem.setStyle({zIndex:300});
		item.setStyle({zIndex:300});

		item.update(element.name);
		item.href	= element.link;

		liItem.appendChild(item);

		if(cssClass != '') {
			liItem.addClassName('last');
		}

		if(element.family != false) {
			this._createMenuFor(element.family, liItem);
			Event.observe(liItem, 'mouseover', this.showSubMenu.bind(this, liItem), false);
			Event.observe(liItem, 'mouseout', this.hideSubMenu.bind(this, liItem), false);
		}

		container.appendChild(liItem);

	}





}
