var ResultsListView = Class.create({
  initialize: function(results_element, controller) {
    this.controller = controller;
    var element = $(results_element);
    this.solutions = $A(element.getElementsBySelector('li'));
    this.previouslySelectedTrip = $('trip_selector_1');
    
    var onMouseOverListener = this.onMouseOver.bindAsEventListener(this);
    var onMouseOutListener  = this.onMouseOut.bindAsEventListener(this);
    var onClickListener     = this.onClick.bindAsEventListener(this);

    this.solutions.each(function(el) { 
      el.observe("mouseover", onMouseOverListener);
      el.observe("mouseout", onMouseOutListener);
      el.observe("click", onClickListener);
    });
  },
  
  onMouseOver: function(event) {
    var element = Event.findElement(event, 'LI');
    if(!element.hasClassName('hovered') && !element.hasClassName('selected'))
      element.addClassName('hovered');
  },
  
  onMouseOut: function(event) {
    var element = Event.findElement(event, 'LI');
    if(element.hasClassName('hovered'))
      element.removeClassName('hovered');
  },
  
  onClick: function(event) {
    var element = Event.findElement(event, 'li');
    if(!element.hasClassName('selected')) {
      if (!!this.previouslySelectedTrip) {
        this.previouslySelectedTrip.removeClassName('selected');
        $('trip_'+parseInt(this.previouslySelectedTrip.id.split('_').last())).hide();
      }
      element.removeClassName('hovered');
      element.addClassName('selected');
      var tripIndex = parseInt(element.id.split('_').last());
      $('trip_'+tripIndex).show();
      if ( this.controller!=null) {
        this.controller.displayTrip(tripIndex - 1);
      }
      this.previouslySelectedTrip = element;
    }
  },
  
  release: function() {
    this.solutions.each(function(el) { 
      el.stopObserving('mouseover');
      el.stopObserving('mouseout');
      el.stopObserving('click');
    });
    this.solutions.clear();
  }
  
});

