text: /*
  * Based on Simon Willison's blockquotes.js
  *   http://simon.incutio.com/archive/2002/12/20/#blockquoteCitations
  */
  function extractBlockquoteCitations() {
    var quotes = document.getElementsByTagName('blockquote');
    for (i = 0; i < quotes.length; i++) {
      var cite = quotes[i].getAttribute('cite');
      if (cite && cite != '') {
        var newlink = document.createElement('a');
        newlink.setAttribute('href', cite);
        newlink.setAttribute('title', cite);
        newlink.appendChild(document.createTextNode('#'));
        var newspan = document.createElement('span');
        newspan.setAttribute('class','blockquotesource');
        newspan.appendChild(newlink);
        quotes[i].lastChild.previousSibling.appendChild(newspan);
      }
    }
  }
  
  function fixRunIn() {
  // work around lack of gecko support for display:run-in
    var re = /^num_|\s+num_|^un_|\s+un_|proof/;
    $$('div > h6').each(function(element) {
       if(re.test($(element.parentNode).className)) {
        var new_span = new Element('span').update(element.textContent);
        new_span.addClassName('theorem_label');
        var next_el = element.next().firstChild;
        next_el.parentNode.insertBefore(new_span, next_el);
        var period = new Element('span').update('. ');
        next_el.parentNode.insertBefore(period, next_el);
        element.remove();
       }
    });
  // add tombstone to proof, since gecko doesn't support :last-child properly
   $$('div.proof').each(function(element) {
       var l = element.childElements().length -1;
       var span = new Element('span').update('\u00a0\u00a0\u25ae');
       element.childElements()[l].insert(span);
      });
  }
  
  function mactionWorkarounds() {
    $$('maction[actiontype="tooltip"]').each( function(mtool){
       Element.writeAttribute(mtool, 'title',
         Element.firstDescendant(mtool).nextSibling.firstChild.data);
       });
    $$('maction[actiontype="statusline"]').each( function(mstatus){
       var v = Element.firstDescendant(mstatus).nextSibling.firstChild.data;
       Event.observe(mstatus, 'mouseover', function(){window.status =  v;});
       Event.observe(mstatus, 'mouseout',  function(){window.status = '';});
       });
  }
  
  function updateSize(elt, w, h) {
     // adjust to the size of the user's browser area.
     // w and h are the original, unadjusted, width and height per row/column
      var parentheight = document.viewport.getHeight() - $('pageName').getHeight() 
                    - $('editFormButtons').getHeight() - $('hidebutton').getHeight();
      var parentwidth = $('Content').getWidth();
      var f = $('MarkupHelp');
      if (f.visible()) { parentwidth = parentwidth - f.getWidth() - 20 }
      var changename = $('alter_title');
      if (changename) {
        parentheight = parentheight - changename.parentNode.getHeight()-2*h;
      }
      elt.writeAttribute({'cols': Math.floor(parentwidth/w)  - 1,
                          'rows': Math.floor(parentheight/h) - 4 });
      elt.setStyle({Width: parentwidth, Height: parentheight});
  }
  
  function resizeableTextarea() {
  //make the textarea resize to fit available space
    var f = $('MarkupHelp');
    if (f) {
      var hidebutton = new Element('input', {id:'hidebutton', type:'button', value: 'Hide markup help'});
      f.insert({before: hidebutton});
    }
    $$('textarea#content').each( function(textarea)  {
      var w = textarea.getWidth()/textarea.getAttribute('cols');
      var h = textarea.getStyle('lineHeight').replace(/(\d*)px/, "$1");
      var changename = $('alter_title');
      if (changename) {
        Event.observe(changename.parentNode, 'change', function() {
          updateSize(textarea, w, h);
        });
      }
      Event.observe(hidebutton, 'click', function(){
        if (f.visible()) {
          f.hide();
          hidebutton.writeAttribute({value: 'Show markup help'});
          updateSize(textarea, w, h)
        } else {
          f.show();
          hidebutton.writeAttribute({value: 'Hide markup help'});  
          updateSize(textarea, w, h)    
        }
      });
      Event.observe(window, 'resize', function(){ updateSize(textarea, w, h) });
      updateSize(textarea, w, h);
     });
  }
  
  window.onload = function (){
          extractBlockquoteCitations();
          fixRunIn();
          mactionWorkarounds();
          resizeableTextarea();
  };
  