var RollOverMenu = Class.create();
RollOverMenu.prototype = {

  initialize: function(params) {
    this.List_will_be_closed = false;
    this.List_can_be_moved   = true;
    this.OpenerElement                        = params.OpenerElement;
    this.ListElement                         		 = new Element('ul').hide().addClassName('ListElement');
    $(document.body).insert({after: this.ListElement});
	
    
    if (params.ListElement) {
      this.ListElement = params.ListElement;
    }
    else {
      this.ListElement.insert(new Element('li').addClassName('add').insert('Ajouter'));
      this.ListElement.insert(new Element('li').addClassName('del').insert('Supprimer'));    
    }

    this.BindEvents();
  },
  
  BindEvents: function() {
    // Evenements sur l'élément ouvrant
    this.OpenerElement.observe('mouseover', function (e) {
		this.Show_List();
		this.OpenerElement.addClassName('over');
	}.bind(this));	
    this.OpenerElement.observe('mouseout', function (e) {
		this.OpenerElement.removeClassName('over');
      this.List_will_be_closed = true;
      setTimeout(function () { this.Hide_List(); }.bind(this),10);
    }.bind(this));
    // Evenements sur la liste
    this.ListElement.observe('mouseover', function (e) { this.List_will_be_closed = false; }.bind(this));
    this.ListElement.observe('mouseout', function (e) {
      this.List_will_be_closed = true;
      setTimeout(function () { this.Hide_List(); }.bind(this), 10);
    }.bind(this));
	$(this.ListElement.id+"-head").observe('mouseover', function (e) { this.List_will_be_closed = false; }.bind(this));
	$(this.ListElement.id+"-head").observe('mouseout', function (e) {
      this.List_will_be_closed = true;
      setTimeout(function () { this.Hide_List(); }.bind(this), 10);
    }.bind(this));
  },
  
  Show_List: function() {
    if (this.Move_enabled()) {
		this.ListElement.style.top = this.OpenerElement.cumulativeOffset().top + this.OpenerElement.offsetHeight -1 + 'px';		
      	this.ListElement.style.left = this.OpenerElement.cumulativeOffset().left + 'px';
		$(this.ListElement.id+"-head").style.top = this.OpenerElement.cumulativeOffset().top -10 + 'px';
		$(this.ListElement.id+"-head").style.left = this.OpenerElement.cumulativeOffset().left + 'px';
	  //
	  //this.ListElement.style.top = this.OpenerElement.cumulativeOffset().top -2 + 'px';
      //this.ListElement.style.width = this.OpenerElement.offsetWidth + 'px';
      this.Disable_move();
      new Effect.BlindDown(this.ListElement, {duration: 0, afterFinish: this.Enable_move.bind(this)});
	  $(this.ListElement.id+"-head").show();
    }
  },

  Hide_List: function() {
    if (!!this.List_will_be_closed && this.Move_enabled()) {
      this.Disable_move();
      Effect.BlindUp(this.ListElement, {duration: 0, afterFinish: this.Enable_move.bind(this)});
	  $(this.ListElement.id+"-head").hide();
    }
  },
  
  Enable_move: function() { this.List_can_be_moved = true; },
  Disable_move: function() { this.List_can_be_moved = false; },
  Move_enabled: function() { return this.List_can_be_moved; }
}
