function toggleToc(tocLink) {
    if (Element.hasClassName(tocLink,"open")) { //is open
        Element.removeClassName(tocLink,"open");
        Element.addClassName(tocLink,"closed");
        Effect.Fade('toc', { duration:1, queue: 'parallel', limit:1, from: 0.9, to: 0.0 }); 
        Effect.BlindUp('toc', { duration:1, queue: 'parallel', limit:1 });
    }
    else if (Element.hasClassName(tocLink,"closed")) { //is closed, but has been loaded
        Element.removeClassName(tocLink,"closed");
        Element.addClassName(tocLink,"open");
        Effect.Appear('toc', { duration:1, queue: 'parallel', limit:1, from: 0.0, to: 0.9 }); 
        Effect.BlindDown('toc', { duration:1, queue: 'parallel', limit:1 });
    }
    else { //touching for first time
        Element.addClassName(tocLink,"open");
        new Ajax.Updater("toc", "/table-of-contents.php", { asynchronous: true, method: 'get', evalScripts: true, onComplete: function(){ Effect.Appear('toc', { duration:1, queue: 'parallel', limit:1, from: 0.0, to: 0.9 }); Effect.BlindDown('toc', { duration:1, queue: 'parallel', limit:1 }); } });
    }
}