function setupAll() { 
  setupSearch();
  setupSearchResults();
  setupCartItems();
  setupTooltips();
}

function setupTooltips() {
  $$(".tooltipped").each(function(n){
    // has a not empty title attribute
    if (n.title.match(/.+/)) {
      new Tooltip(n, n.title);
      n.removeAttribute("title");
    } else {
      if (n.match("#results a.tooltipped")) {
        new Tooltip(n, $(n.id+"_tooltip"));
      } else if (n.match("#cart a.tooltipped")) {
        new Tooltip(n, $("cart_"+n.id+"_tooltip"));
      }
      // kill the link click
      n.onclick = function() {return false;}
    }
  });
}

function setupSearch() {
  var search = $("search");

  if (search) {
    search.select("select").each(function(item) {
      item.observe('change', doSearch)
    });
    $("search-submit").hide();
  }
}

function doSearch(event) {
  var parameters = {}
  var action = "books";
  switch(this.id) {
    case 'term':
      parameters.term = this.value;
      break;
    case 'department':
      parameters.term = $('term').value;
      if (this.value) {
        parameters.department = this.value;
      }
      break;
    case 'course':
      parameters.term = $('term').value;
      parameters.department = $('department').value;
      if (this.value) {
        parameters.course = this.value;
      }
      break;
    case 'section':
      parameters.term = $('term').value;
      parameters.department = $('department').value;
      parameters.course = $('course').value;
      if (this.value) {
        parameters.section = this.value;
      }
      break;
    case 'category':
      action = 'gear'
      parameters.category = this.value;
      break;
  }
  new Ajax.Request('/'+action,{method:'get',parameters:parameters});
}

function setupSearchResults() {
  var results = $('results');
  
  if (results) {
    results.select('form').each(function(item) {
      item.observe('submit', addCartItem)
    });
  }  
}

function setupCartItems() {
  var cartItems = $('cart-items');
  
  if (cartItems) {
    cartItems.select('form').each(function(item) {
      item.observe('submit', removeCartItem)
    });
  }  
}

function addCartItem(event) {
  new Ajax.Request('/cart', {method:'put',parameters:Form.serialize(this)}); 
  event.stop();
}

function removeCartItem(event) {
  var item_row = this.ancestors()[1];
  new Ajax.Request('/cart', {
    method:'delete',
    parameters:Form.serialize(this),
    onComplete: function(response) {
      if (200 == response.status) {
        item_row.remove();
      }
    }
  }); 
  event.stop();
}

document.observe('dom:loaded', setupAll);