var conferences = [];
var conference_sessions_handler = new ConferenceSessionsHandler ();

function ConferenceSessionsHandler () {
  this.process = function (top_node) {
    var id = top_node.getAttribute ('id');
    
    var session;
    var sessions = [];
    
    for (var i = 0; i < top_node.childNodes.length; i++) {
      session = top_node.childNodes.item (i);
      sessions[session.getAttribute ('id')] = session.getAttribute ('name');
    }
    
    conferences[id] = sessions;
    
    update_session_list (id);
  }
}

/**
* Fetch the list of sessions for the conference if necessary, otherwise display them straight away
**/
function event_sessions () {
  var id;
  
  var conf_field = document.getElementById ('event');
  if (conf_field && conf_field.value > 0) {
    id = conf_field.value;
  } else {
    id = -1;
  }
  
  if (conferences[id] || id <= 0 || conf_field.options[conf_field.selectedIndex].className != '_conf') {
    update_session_list (id);
  } else {
    queue.request ('GET', 'ajax/sessions.php?id=' + id, conference_sessions_handler);
  }
}

function update_session_list (conference_id) {
  // update display
  var select_node = document.getElementById ('session');
  // remove all existing sessions
  var sessions = select_node.options;
  while (sessions.length > 1) {
    select_node.removeChild (sessions[sessions.length - 1]);
  }
  
  // add sessions of conference
  var option;
  if (conferences[conference_id]) {
    for (var id in conferences[conference_id]) {
      option = create_el ('option', {'value': id});
      option.appendChild (document.createTextNode (conferences[conference_id][id]));
      select_node.appendChild (option);
    }
  }
}
