RapidAccess = new Class({
	Implements : Options,
	//options : 
	options : {
		root : 'rapidAccess' //HTMLElement: element parent conteneur de tout (peut être un id), cette variable n'est pas accédée par la suite, tout par par RapidAccess.container
	},
	
	root : null, //element parent qui contient le bouton et le la nav cachée
	button : null, //bouton sur lequel on clique pour avoir l'acces rapide au village
	nav : null, //<ul> qui est le conteneur principal de la navigation des villages
	currentSubNav : null,
	
	//privates vars : On ne peut pas les déclarer en private, mais on fait comme si elles sont privates (_ devant)
	
	
	//constructor
	initialize : function(options) {
		this.setOptions(options);
		
		this.root = $(this.options.root);
		
		//on part si on n'a pas d'objet existant, cela permettra la pérénité de l'application, si on tombe sur une page sans le composant en question
		if (!this.root) return; 
		NavLoader.register(this.xmlLoadedHandler.bind(this));
		
		//the end of intialisation is made in the _xmlOnSuccessHandler function
	},
	
	xmlLoadedHandler : function(datas) {
		this.datas = datas;
		this.button = this.root.getElement('a.rapidAccessBtn');
		this._createNavigationMenu();
		this._initListeners();
	},
	
	// listeners/handlers
	_initListeners : function() {
		this.button.addEvent('click', this._buttonClickHandler.bind(this));
	},

	_buttonClickHandler : function(e) {
		new Event(e).stop();
		this.toggleNav();
		document.addEvent('click', this._documentClickHandler.bindWithEvent(this));
	},
	
	_documentClickHandler : function(e) {
		new Event(e).stopPropagation();
		document.removeEvent('click', this._documentClickHandler);
		this.hideNav();
	},

	_navClickHandler : function(e) {
		var target = e.target;
		if ($(target).hasClass('destination')) {
			new Event(e).stop();
			this.showSubNav(target);
		}
	},
	
	_subNavClickHandler : function(e) {
		new Event(e).stopPropagation();
	},

	//privates methods
	_createNavigationMenu : function() { // genere les destinations/villages, tout est généré en string, et un seul eventListener sera collé sur le conteneur principal
		this.nav = new Element('ul', {
			'id' : 'rapidAccessMenu',
			events : {
				'click' : this._navClickHandler.bindWithEvent(this)
			}
		});
		var navHTML = [];
			
		//var destinations = this.villages.data.destination;
		for (var i = 0; i< this.datas.zones.length; i++) {
			var dest = this.datas.zones[i];
			navHTML.push('<li><a href="#" class="destination">'+ dest.name + '</a>');
			navHTML.push('<ul class="villages">');
			dest.villages.each(function(village){
				navHTML.push('<li class="village"><a href="'+village.action+'">'+village.name+'</a></li>')
			});
			navHTML.push('</ul></li>');
		}
		this.nav.innerHTML = navHTML.join('');
		this.scrollContainer = new Element('div', {
			'id' : 'rapidAccessMenuScrollContainer',
			styles : {
				'visibility' : 'hidden'
			}
		});
	
		this.scrollContainer.adopt(this.nav);
		this.scrollContainer.addEvent('click', this._subNavClickHandler.bindWithEvent(this));
		this.root.appendChild(this.scrollContainer);
		
		
		
	},

	
	showSubNav : function(linkAssociated) {
		this.hideCurrentSubNav();
		var li = linkAssociated.getParent();
		li.addClass('selected');
		this.currentContainerSubNav = new Element('div', {'id': 'rapidAccessMenuSubScrollContainer'});
		this.currentSubNav = li.getElement('ul').clone().addClass('currentSubNav u_bgColor');
		this.currentContainerSubNav.addEvent('click', this._subNavClickHandler.bindWithEvent(this));
		this.root.adopt(this.currentContainerSubNav.adopt(this.currentSubNav));
		
		this.currentSubNavScroller = new ScrollControl2( this.currentSubNav, {'htmlElementPrefix': 'scrollcontroll2_', 'createControls': true});
	},
	
	
	hideCurrentSubNav : function() {
		this.nav.getElements('li.selected').removeClass('selected');
		if (this.currentContainerSubNav){
			$(this.currentContainerSubNav).dispose();
			
		}
	},
	
	toggleNav : function() {
		this[(this.scrollContainer.style.visibility == 'hidden' ? 'show' : 'hide') + 'Nav']();
	},
	hideNav : function() {

		this.hideCurrentSubNav();
		this.scrollContainer.style.visibility = 'hidden';
	},
	showNav : function() {
		this.scrollContainer.style.visibility = 'visible';
		if (!this.scroll)
			this.scroll = new ScrollControl2($('rapidAccessMenu'), {'createControls': true});
	}

});



