var myXHR;

function setupTopicTree(){
   var tree = document.getElementById('topic_tree');
   var links = $(tree).getElementsByClassName("expand_tree");

   for(var i = 0; i<links.length; i++){
      var topic = links[i].id;
      if(topic != '')
         links[i].onclick = function(e){getTopic(this.id); return false;};
   }
}

function getTopic(topic, force){
   if(force == null){
      force = false;
   }
   if($(topic+'_list')){
         if(force == 'open'){
            $(topic+'_list').removeClass('closed');
            $(topic).addClass('open');
         }else if(force == 'closed'){
            $(topic+'_list').addClass('closed');
            $(topic).removeClass('open');
         }else{
            $(topic+'_list').toggleClass('closed');
            $(topic).toggleClass('open');
         }
   }else{
      $(topic).addClass('ajax-loader');
         myXHR = new XHR({method: 'get', 
                        onSuccess:function(response){insertTopic(topic, response)},
                        onFailure:function(){failedTopic(topic)}   
                      }).send('/ajax_widgets/topic_tree_level', 'topics='+topic);

 }
}

function insertTopic(topicID, topicText){
   //Don't add it if it already exists.   
   if($(topicID+'_list')){ 
      return;
   }
   var li = $(topicID).getParent();
   li.innerHTML += topicText;
   $(topicID).removeClass('ajax-loader');
   $(topicID).toggleClass('open');
   $(topicID).onclick = function(e){getTopic(this.id); return false;};
   setupTopicTree();
}

function failedTopic(topic){
   $(topic).removeClass('ajax-loader');
   $(topic).toggleClass('open');
   var err = new Element('p');
   err.id = topic+'_list';
   err.innerHTML='There was a problem retrieving the topics';
   err.injectAfter($(topic));
}


function forceMatched(match, force){
   var cats = $$('#topic_tree ul li a.topic');
   cats.each(function(cat){
      if(cat.id.test(match)){
      getTopic(cat.id, force);
      }
   });
}

function expandAllCategories(){
   forceMatched('^cat_', 'open');
}

function expandAllCollections(){
   expandAllCategories();
   var time = myXHR.running?1000:0;
   setTimeout(function(){forceMatched("^set_", 'open')}, time);
}

function collapseAllCategories(){
   forceMatched('^cat_', 'closed');
}
function collapseAllCollections(){
   forceMatched('^set_', 'closed');
}

window.onload = setupTopicTree;
