function addLoadListener(fn) {
  if(typeof window.addEventListener != 'undefined') {
    window.addEventListener('load', fn, false);
  } else if(typeof document.addEventListener != 'undefined') {
    document.addEventListener('load', fn, false);
  } else if(typeof window.attachEvent != 'undefined') {
    window.attachEvent('onload', fn);
  } else {
    var oldfn = window.onload;
    if(typeof window.onload != 'function') {
      window.onload = fn;
    } else {
      window.onload = function() {
        oldfn();
        fn();
      };
    }
  }
}

function ajax(url,target) {
  try {
    req = new XMLHttpRequest();
  } catch(error) {
    try {
      req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(error) {
      req = null;
    }
  }
  req.onreadystatechange = function() {ajaxDone(target);};
  req.open("GET", url, true);
  req.send(null);
}

function ajaxDone(target) {
  if (req.readyState < 4 ) {
      document.getElementById(target).innerHTML = '<img src="/images/ajax-loader.gif" alt="Loading..." />';
  } else if (req.readyState == 4) {
    if (req.status == 200 || req.status == 304) {
      results = req.responseText;
      document.getElementById(target).innerHTML = results;
    } else {
      document.getElementById(target).innerHTML="ajax error:\n" +
      req.statusText;
    }
  }
}

function getElementsByClassName(node, classname)
{
  var a = [];
  var re = new RegExp('\\b' + classname + '\\b');
  var els = node.getElementsByTagName("*");
  for(var i=0,j=els.length; i<j; i++)
      if(re.test(els[i].className))a.push(els[i]);
  return a;
}

function setTabs() {
  var tabs = getElementsByClassName(document.getElementById('tabs'), 'tab');
  for(var i = 0; i < tabs.length; i++) {
    tabs[i].onclick = onTab(tabs[i]);
  }
  return true;
}

function onTab(tab) {
  return function() {
    switchTab(tab);
    return false;
  }
}

function switchTab(tab) {
  var tabs = getElementsByClassName(document.getElementById('tabs'), 'tab');
  for(var i = 0; i < tabs.length; i++) {
    tabs[i].className = 'tab';
    if(tabs[i].href == tab)
      tabs[i].className += ' active';
  }
  
  var tabAreas = getElementsByClassName(document.getElementById('tabbedContent'), 'tabSection');
  for(var i = 0; i < tabAreas.length; i++) {
    tabAreas[i].style.display = 'none';
  }
  var tabArea = tab.href.toString().substring(0, tab.href.length);
  tabArea = tabArea.split('#');
  tabArea = tabArea[1];
  tabArea = document.getElementById(tabArea);
  tabArea.style.display = 'block';
  return false;
}