var Menu = new Class({
	/* ELEMENTS */
	cont_elt:null,
	move_elt : null,
	level1_elt : null,
	submenu_elts : null,
	submenu: null,
	page_submenu:null,
	
	/* EFFETS */
	menu_in_fx : null,
	menu_out_fx : null,
	back_fx : null,
	fleche_fx : null,
	
	/* CONSTANTES */
	menu_fx_src : null,
	menu_fx_dest : null,
	current : null,
	sub_prefixe : null,
	timer:null,
	
	is_menu_open:null,
	
	bound_level2_a_click_evt:null,
	bound_same_cat_click_evt:null,
	bound_back_click_evt:null,
	bound_back_over_evt:null,
	bound_back_out_evt:null,
	bound_menu_in_fx:null,
	
	/* INITIALISATION */
	initialize : function() {
		conslog('Initialize Menu Class');		
		
		this.init_elt();
		this.init_fx();
		this.init_constants();
		this.init();
	},
	
	init_elt:function() {
		this.move_elt = $('menu_move');
		this.level1_elt = $('level1');
		this.submenu_elts = $$('.submenu');
		this.cont_elt = $('menu');
	},
	
	init_constants:function() {
		this.menu_fx_dest = -this.level1_elt.getSize().x;
		this.menu_fx_src = 0;
		this.sub_prefixe = 'submenu_';
		
		this.bound_same_cat_click_evt = this.same_cat_click_evt.bind(this);
	},
	
	init_fx:function() {
		this.menu_in_fx = new Fx.Tween(this.move_elt, {
			transition:Fx.Transitions.Quad.easeOut,
			duration:500
		});
		
		this.menu_out_fx = new Fx.Tween(this.move_elt, {
			 transition:Fx.Transitions.Quad.easeInOut,
			 duration:400
		});
		
		this.back_fx = new Fx.Tween(null, {
			transition:Fx.Transitions.Quad.easeOut,
			duration:200,
			link:'cancel'
		});
		
		this.fleche_fx = new Fx.Tween(null, {
			transition:Fx.Transitions.Quad.easeOut,
			duration:200,
			link:'cancel'
		});
	},
	
	init:function() {
		
		this.level1_elt.getElements('a').each(function(el) {
			if(el.hasClass('movable')) {
				el.addEvent('click', this.level1_a_click_evt.bind(this));
			}
		},this);
		
		this.cont_elt.addEvents({
			'mouseenter' : this.cont_enter_evt.bind(this),
			'mouseleave' : this.cont_leave_evt.bind(this)
		});
		
		this.is_menu_open = is_type ? true : false;
		this.submenu_elts.each(function(el) {
			if(el.getStyle('display') == 'block') {

				this.page_submenu = el;
				this.init_submenu(el);
			}
		}, this);
		
	},
	
	/* METHODES */
	
	init_submenu:function(element) {
		
		element.getFirst('.back').removeEvents({
			'click': this.bound_back_click_evt,
			'mouseenter': this.bound_back_over_evt,
			'mouseleave': this.bound_back_out_evt
		});
		element.getElements('.level2 a').each(function(el) {
			el.removeEvent('click', this.bound_same_cat_click_evt);
		}, this);
		
		// Réassignement du menu
		this.submenu = element;
		this.submenu.setStyle('display', 'block');
		this.back_fx.element = this.submenu.getFirst('.titre_mask').getFirst('.titre_cont');
		this.fleche_fx.element = this.submenu.getFirst('.back').getFirst('img');
		//this.submenu.getFirst('.back').getFirst('img').setStyle('left', this.submenu.getFirst('.back img').getSize().x);
		if(!this.is_menu_open) {
			this.submenu.getFirst('.back').getFirst('img').setStyle('left', this.submenu.getFirst('.back img').getSize().x);
		}
		// Evénements sur le retour
		this.bound_back_click_evt = this.back_click_evt.bind(this);
		this.bound_back_over_evt = this.back_over_evt.bindWithEvent(this, this.submenu);
		this.bound_back_out_evt = this.back_out_evt.bindWithEvent(this, this.submenu);
		element.getFirst('.back').addEvents({
			'click': this.bound_back_click_evt,
			'mouseenter': this.bound_back_over_evt,
			'mouseleave': this.bound_back_out_evt
		});
		// Evénements sur le click des sous_menu
		this.bound_level2_a_click_evt = this.level2_a_click_evt.bind(this);
		if(this.submenu == this.page_submenu)  {
			element.getElements('.level2 a').each(function(el) {
				el.addEvent('click', this.bound_level2_a_click_evt);
			}, this);
		}
	},
	
	
	/* EVENTS */
	
	level1_a_click_evt:function(e){
		e=new Event(e);
		e.stop();
		
		this.current = e.target.id;
		this.submenu_elts.each(function(el) {
			el.setStyle('display', 'none');
		});
		
		this.init_submenu($(this.sub_prefixe+this.current));
		this.bound_menu_in_fx = this.menu_in_complete.bind(this);
		this.menu_in_fx.addEvent('complete', this.bound_menu_in_fx);
		this.menu_in_fx.start('left', this.menu_fx_dest);
		this.is_menu_open = true;
	},
	
	level2_a_click_evt:function(e) {
		e.stop();
		this.same_cat_click_evt(e);
	},
	
	back_click_evt:function(e) {
		e.stop();
		this.menu_out_fx.start('left', this.menu_fx_src);
		this.is_menu_open = false;
	},
	
	back_over_evt:function(e, elt) {
		this.back_fx.start('left',-30, 0);
		this.fleche_fx.start('left', 0);
	},
	
	back_out_evt:function(e, elt) {
		this.back_fx.start('left',-189, -209);
		this.fleche_fx.start('left', 3);
		elt.removeEvent('click', this.back_click_evt.bind(this));
		elt.removeEvent('mouseenter', this.back_over_evt.bindWithEvent(this, this.submenu));
		elt.removeEvent('mouseleave', this.back_out_evt.bindWithEvent(this, this.submenu));
	},
	
	cont_enter_evt:function() {
		if(this.timer != null) $clear(this.timer);
	},
	
	cont_leave_evt:function() {
		if(this.timer != null) $clear(this.timer);
		this.timer = this.launch_timer.periodical(3000, this);
	},
	
	launch_timer:function() {
		//if((is_home || is_infos) && this.move_elt.getPosition().x != 0) this.menu_out_fx.start('left', this.menu_fx_src);
		if(is_type && this.move_elt.getPosition().x > 0) this.menu_in_fx.start('left', this.menu_fx_dest);
	},
	
	same_cat_click_evt:function(e) {
		e.stop();
		if(my_curtain != null) {
			my_curtain.new_content(e.target.id, e.target, e.target.href);
		}
		var adr = e.target.href;
		var reg=new RegExp("[0-9]{2,4}");
		if(adr.search(reg) != -1) window.location.hash = adr.match(reg);
	},
	
	menu_in_complete:function() {
		this.menu_in_fx.removeEvent('complete', this.bound_menu_in_fx);
		this.fleche_fx.start('left', 3);
	}
	
});

