/**
 * addEvent written by Dean Edwards, 2005
 * with input from Tino Zijdel
 *
 * http://dean.edwards.name/weblog/2005/10/add-event/
 **/
function addEvent(element, type, handler) {
  // assign each event handler a unique ID
  if (!handler.$$guid) handler.$$guid = addEvent.guid++;
  // create a hash table of event types for the element
  if (!element.events) element.events = {};
  // create a hash table of event handlers for each element/event pair
  var handlers = element.events[type];
  if (!handlers) {
    handlers = element.events[type] = {};
    // store the existing event handler (if there is one)
    if (element["on" + type]) {
      handlers[0] = element["on" + type];
    }
  }
  // store the event handler in the hash table
  handlers[handler.$$guid] = handler;
  // assign a global event handler to do all the work
  element["on" + type] = handleEvent;
}

// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
  // delete the event handler from the hash table
  if (element.events && element.events[type]) {
    delete element.events[type][handler.$$guid];
  }
}

function handleEvent(event) {
  var returnValue = true;
  // grab the event object (IE uses a global event object)
  event = event || fixEvent(window.event);
  // get a reference to the hash table of event handlers
  var handlers = this.events[event.type];
  // execute each event handler
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    if (this.$$handleEvent(event) === false) {
      returnValue = false;
    }
  }
  return returnValue;
}

function fixEvent(event) {
  // add W3C standard event methods
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
}

fixEvent.preventDefault = function() {
  this.returnValue = false;
}

fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
}

// end from Dean Edwards

/**
 * Creates an Element for insertion into the DOM tree.
 * From http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
 *
 * @param element the element type to be created.
 *        e.g. ul (no angle brackets)
 **/
function createElement(element) {
  if (typeof document.createElementNS != 'undefined') {
    return document.createElementNS('http://www.w3.org/1999/xhtml', element);
  }
  if (typeof document.createElement != 'undefined') {
    return document.createElement(element);
  }
  return false;
}

/**
 * "targ" is the element which caused this function to be called
 * from http://www.quirksmode.org/js/events_properties.html
 **/
function getEventTarget(e) {
  var targ;
  if (!e) {
    e = window.event;
  }
  if (e.target) {
    targ = e.target;
  } else if (e.srcElement) {
    targ = e.srcElement;
  }
  if (targ.nodeType == 3) { // defeat Safari bug
    targ = targ.parentNode;
  }
  
  return targ;
}

// cookie control from quirksmode.org
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return "";
}

function getParam( name ) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function ge(e){return document.getElementById(e)}

function getElementsByClassName (searchClass,tag) {
  var classElements = new Array();
  if ( tag == null )
    tag = '*';
  var els = document.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

if (!document.getElementsByClassName) {
  document.getElementsByClassName = getElementsByClassName;
}

// Empties a select list
function ClearSelect (s) {
  for (var i = 0; i < s.options.length; i++) {
    s.options[i] = null;
  }
  if (s.options.length != 0) {
    ClearSelect (s);
  }
}

// Adds a value to a select list
function Append2Select(s, val,text) {
  s.options[s.options.length] = new Option (text, val);
}

// open external links (for forums really) in a new tab/window
function externalLinks() {
  if (!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for (var i=0; i<anchors.length; i++) {
    var anchor = anchors[i];
    if (anchor.getAttribute("rel") && anchor.getAttribute("rel").match("\\bexternal\\b")) {
      anchor.target = "_blank";
    }
  }
}

function togglevis (target) {
  if (!target.id) {
    target = document.getElementById(target);
  }
  if (!target.id)
    return;

  if (target.style.display == 'none' || target.style.display == '') {
    target.style.display = 'block';
  } else  {
    target.style.display = 'none';
  }
}

function clearTmp() {
  var obj = document.getElementById('tmpItemFrm');
  var trig = document.getElementById('temporaryIDforshowTmp');
  if (trig) trig.id = '';
  obj.style.display = 'none';
  obj.innerHTML = '';
}

function showTmp(e) {
  var maxX;
  var maxY;
  var obj = document.getElementById('tmpItemFrm');
  obj.style.position = "absolute";
  obj.style.display = "block";
  var evt = e || window.event;
  if (!evt) return;
  if (e) {
    e.target.title = '';
    e.target.id = 'temporaryIDforshowTmp';
  }
  
  if (document.all&&!window.opera) { 
    if (document.documentElement) {
      maxX = document.documentElement.clientWidth + document.documentElement.scrollLeft;
      maxY = document.documentElement.clientHeight + document.documentElement.scrollTop;
      y = evt.clientY + document.documentElement.scrollTop;
      x = evt.clientX + document.documentElement.scrollLeft ;
    } else {
      y = evt.clientY + document.body.scrollTop;
      x = evt.clientX + document.body.scrollLeft;
    }
  } else {
    if (document.body.scrollTop) {
      maxX = window.innerWidth + document.body.scrollLeft;
      maxY = window.innerHeight + document.body.scrollTop;
    } else {
      maxX = window.innerWidth + document.documentElement.scrollLeft;
      maxY = window.innerHeight + document.documentElement.scrollTop;
    }
    y = evt.pageY;
    x = evt.pageX;
  }

  var divW = parseInt(obj.offsetWidth);
  var divH = parseInt(obj.offsetHeight);
  divW = divW ? divW : 400;
  divH = divH ? divH : 100;
  if (maxX && maxY) {
    while (x + divW > (maxX - 10) && x > 0) {
      x = x - (divW + 10);
      obj.style.left = x + 5 +"px";
    }
    while (y + divH > (maxY - 10) && y > 0) {
      y = y - 1;
      obj.style.top = y +"px";
    }
  }
  obj.style.left = x + 16 +"px";
  obj.style.top = y + 16 + "px";
//    document.title = "X:" + x + " MaxX:" + maxX + " divX:" + divW + " y:" + y + " MaxY:" + maxY + " DivY:" + divH;
}

function reloadMsg (id,rs) {
  Ajakz.target = "msg" + id;
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.loadTargetHook = function () {document.getElementById(Ajakz.target).className = '';}
  Ajakz.Run('/fcluster/mrate3.pl?mid=' + id + ';style=' + rs);
  return false;
}

function rateMsg (id,w,rs) {
  Ajakz.target = "msg" + id;
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.loadTargetHook = function () {document.getElementById(Ajakz.target).className = '';}
  var editReason = '';
  if (w == 'l') {
    editReason = prompt('Reason for Lock?');
  }
  Ajakz.Run('/fcluster/mrate3.pl?mid=' + id + ';w=' + w + ';style=' + rs + ';edit_reason=' + editReason);
  return false;
}

function rateNews (id,w) {
  Ajakz.target = "news" + id;
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.loadTargetHook = function () {document.getElementById(Ajakz.target).className = '';}
  Ajakz.Run('/cgi-bin/news_rate.pl?story_id=' + id + ';w=' + w);
  return false;
}

function loadfile(target,file) {
  Ajakz.target = target;
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.Run(file);
}

function doPic(id,w,h) {
  Ajakz.target = 'ssMain';
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.w = w;
  Ajakz.h = h;
  Ajakz.loadTargetHook = function (t) {var ow = t.offsetWidth;var oh = t.offsetHeight;if (ow < Ajakz.w) { t.style.left = Ajakz.w - ow + 'px';ow = Ajakz.w;}if (oh < Ajakz.h) { oh = Ajakz.h + 24;} t.style.width = ow + 'px';}
  Ajakz.Run('/Im/imagelinks?id=' + id);
}

function showImg () {
  var akzid = this.getAttribute('akzid');
  if (akzid && !this.id.toString()) {
    this.id = akzid;
  }
  var id = this.id.toString();
  var iid = id.match(/(\d+)/);
  if (iid[1]) {
    clearTmp();
    Ajakz.target = 'tmpItemFrm';
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.Run('/Im/imageonly?id=' + iid[1]);
  }
}

Ajakz = {
 file: undefined,
 onload: undefined,
 Ajakz: undefined,
 target: undefined,
 targetElement: undefined,
 loadTargetHook: undefined,
 req: undefined,
 
 Run: function (url) { 
    url = url ? url : Ajakz.file;
    if (window.XMLHttpRequest) { // Non-IE browsers
      Ajakz.req = new XMLHttpRequest();
      Ajakz.req.onreadystatechange = Ajakz.onload;
      try {
        Ajakz.req.open("GET", url, true);
      } catch (e) {
        //      alert(e);
      }
      Ajakz.req.send(null);
    } else if (window.ActiveXObject) { // IE
      Ajakz.req = new ActiveXObject("Microsoft.XMLHTTP");
      if (Ajakz.req) {
        Ajakz.req.onreadystatechange = Ajakz.onload;
        Ajakz.req.open("GET", url, true);
        Ajakz.req.send();
      }
    }
  },
 loadTarget: function () {
    if (Ajakz.req.readyState == 4) {
      if (Ajakz.req.status == 200) {
        var target;
        if (typeof Ajakz.target == 'string') {
          target = document.getElementById(Ajakz.target);
        } else {
          target = Ajakz.target;
        }
        target.innerHTML = Ajakz.req.responseText;
        if (Ajakz.loadTargetHook) {
          Ajakz.loadTargetHook(target);
        }
      }
    }
  }
}

function fadeIn (id) {
  var o = document.getElementById(id);
  if (o.fadeIn) window.clearInterval(o.fadeIn);
  var step = 0;
  o.fadeIn = window.setInterval(
    function() {
      o.style.opacity = step * .05;
      step++;
      if (step >= 100) window.clearInterval(o.fadeIn);
    }, 3);
}

addEvent(window,'load',externalLinks);

function restoreads () {
  var b = ge('bannerMain');
  var t = ge('towerRt');
  var c = ge('ad300');
  var c2 = ge('cubeAd');
  if (b) b.style.visibility = 'visible';
  if (t) t.style.visibility = 'visible';
  if (c) c.style.visibility = 'visible';
  if (c2) c2.style.visibility = 'visible';
}

function hideads () {
  var b = ge('bannerMain');
  var t = ge('towerRt');
  var c = ge('ad300');
  var c2 = ge('cubeAd');
  if (b) b.style.visibility = 'hidden'; 
  if (t) t.style.visibility = 'hidden';
  if (c) c.style.visibility = 'hidden';
  if (c2) c2.style.visibility = 'hidden';
}

addEvent(window,'load',doNetMenu);

function doNetMenu () {
  if (ge('netm')) {
    addEvent(document.getElementById('netm'),'mouseout',restoreads);
    addEvent(document.getElementById('netm'),'mouseover',hideads);
  }
}

function storeSel (dest) {
  if (dest.createTextRange)
    dest.caretPos = document.selection.createRange().duplicate();
}

function doTag (dest, stag, etag, dtext) {
  if (document.selection) {

    var orig;
    if (window.opera) {
      orig = dest.value;
    } else {
      orig = dest.value.replace(/\r\n/g, "\n");
    }

    var r = document.selection.createRange();
    var t = r.text;

    if (t) {
      newval = stag + t + etag;
    } else {
      newval = stag + dtext + etag;
    }

    if (dest.createTextRange && dest.caretPos) {
      var caretPos = dest.caretPos;
      caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? newval + ' ' : newval;
    } else {
      dest.value = dest.value + newval;
    }

    if (r.parentElement() != dest) {
      dest.focus();
      return;
    }

    var changed;
    if (window.opera) {
      changed = dest.value;
    } else {
      changed = dest.value.replace(/\r\n/g, "\n");
    }
    for (var diff = 0; diff < orig.length; diff++) {
      if (orig.charAt(diff) != changed.charAt(diff)) break;
    }

    dest.focus();
    var r2 = dest.createTextRange();
    r2.moveStart('character', -dest.value.length);
    r2.moveEnd('character', -dest.value.length);
    r2.moveStart('character', diff + stag.length);
    r2.moveEnd('character', newval.length - stag.length - etag.length);
    r2.select();
  } else {
    var startpos = dest.selectionStart;
    var endpos = dest.selectionEnd;
    var scrollTop = dest.scrollTop;

    var t = (dest.value).substring(dest.selectionStart,dest.selectionEnd);
    var selnv = false;
    if (t) {
      if (t.charAt(t.length - 1) == ' ') {
        t = t.substring(0, t.length - 1);
        endpos--;
      }

      newval = stag + t + etag;
    } else {
      var sel = window.getSelection();
      if (!sel.isCollapsed) {
        var seltxt = sel.toString();
        newval = stag + seltxt + etag;
      } else {
        newval = stag + dtext + etag;
        selnv = true;
      }
    }

    dest.value = dest.value.substring(0,startpos) + newval + dest.value.substring(endpos, dest.value.length);
    dest.focus();
    if (selnv) {
      dest.selectionStart = startpos + stag.length;
      dest.selectionEnd = dest.selectionStart + dtext.length;
    } else {
      dest.selectionStart = startpos + newval.length;
      dest.selectionEnd = dest.selectionStart;
    }
    dest.scrollTop = scrollTop;
  }
}

function tablistview (l,nohash) {
  var cns = l.parentNode.parentNode.parentNode.childNodes;
  var t = l.id.replace(/_tab$/, "");
  if (!nohash) document.location.hash = t;
  for (var i = 0; i < cns.length; i++) {
    if (cns[i].tagName == "DIV" && cns[i].className != "clear") {
      cns[i].style.display = "none";
    }
  }

  var lis = l.parentNode.parentNode.childNodes;
  for (var x = 0; x < lis.length; x++) {
    if (lis[x].tagName == "LI") {
      lis[x].className = "";
    }
  }

  l.parentNode.className = "current";
  ge(t + "_t").style.display = "";
}

function tagchange(te, tag, change, cat, id, threshold, count, url, weight) {
  Ajakz.target = te;
  Ajakz.onload = Ajakz.loadTarget;
  tag = tag.replace('&','_AND_');
  var tagger = '/cgi-bin/tag.pl?tag=' + tag + '&change=' + change + '&cat=' + cat + '&id=' + id;
  tagger += '&threshold=' + threshold + '&count=' + count;
  if (url != '') {
    tagger += '&url=' + url;
  }
  if (weight != undefined) {
    tagger += '&weight=' + weight;
  }
  Ajakz.Run(tagger);

  return false;
}

var inputid = 0;
function tagaddclick(ae, cat, id, threshold, count, url, weight) {
  ae.innerHTML = '<form style="display: inline;" onSubmit="return tagchange(this.parentNode.parentNode,this.tag.value,\'add\',\'' + cat + '\',\'' +
    id + '\',' + threshold + ',' + count + ',\'' + url + '\',' + weight +
    ');"><input type="text" name="tag" size="14" maxlength="80" id="tmpInput' + inputid +'" style="padding:0;vertical-align:middle"/></form>';
  document.getElementById('tmpInput'+ inputid).focus();
  inputid++;
  return false;
}

function showalltags(te, cat, id, url) {
  Ajakz.target = te;
  Ajakz.onload = Ajakz.loadTarget;
  var tagger = '/cgi-bin/tag.pl?count=999&threshold=-10&cat=' + cat + '&id=' + id;
  if (url != '') {
    tagger += '&url=' + url;
  }
  Ajakz.Run(tagger);

  return false;
}

function copylink(t, text) {
  if (window.clipboardData) {
    window.clipboardData.setData('Text', text);
  } else {
    document.clipboard.saveEdit(text);
  }
  t.innerHTML = "Link Copied";
}

function togglecont() {
  var cont = document.getElementById("wikicont");
  cont.style.display = cont.style.display == "block" ? "none" : "block";
  var ct = document.getElementById("wikict");
  ct.innerHTML = ct.innerHTML == "hide" ? "show" : "hide";
}

function zamDialogue(c,t,f) {
  if (!ge('jsbox')) {
    var b = document.createElement('div');
    b.id = 'jsbox';
    document.body.insertBefore(b, document.body.childNodes[0]);
  }
  t = t ? '<h1>'+t+'</h1>' : '';
  f = f ? '<button onclick="if ('+f+' != false) zamDialogueClose();">OK</button> &nbsp; <button onclick="zamDialogueClose()">Cancel</button>' : '<button onclick="zamDialogueClose()">Close</button>';
  ge('jsbox').innerHTML = '<div id="dialogue-screen"></div><div id="dialogue"><div id="dialogue-cont"><div class="cont">'+t+c+'<div id="dialogue-bottom">'+f+'</div></div><div id="dialogue-shadow"></div></div></div>';
}

function zamDialogueClose() {
  var b = ge('jsbox');
  if (b) b.parentNode.removeChild(b);
}

function toggleCollapsible (t) {
  if (t.className == 'toggle-collapse') {
    $(t).parent().next().slideToggle('fast');
    t.className='toggle-expand';
  } else {
    $(t).parent().next().slideToggle('fast');
    t.className='toggle-collapse';
  }
}

function addToMenu(t,c) {
  t = t.search('<a') < 0 ? '<a class="no-href">'+t+'</a>' : t;
  var txt = '<li class="has-sub last-child" onmouseover="hideads()" onmouseout="restoreads()">'+t;
  if (c) {
    txt += '<div><em></em><var></var><strong></strong><ul>';
    for (var i=0; i < c.length; i++) {
      c[i] = c[i].search('<a') < 0 ? '<a class="no-href">'+c[i]+'</a>' : c[i];
      txt += '<li>'+c[i]+'</li>';
    }
    txt += '</ul></div>';
  }
  txt += '</li>';
  $('#menu_tabbed > .cur > div > ul > li:last-child').removeClass('last-child');
  $('#menu_tabbed > .cur > div > ul').append(txt);
  $('#menu_tabbed > .cur > div > ul > li:last-child li:first-child').addClass('first-child');
  $('#menu_tabbed > .cur > div > ul > li:last-child li:last-child').addClass('last-child');
}

function notifybodymargin() {
  document.getElementsByTagName("body")[0].style.marginTop = ge("notifications").offsetHeight + 'px';
}

function deletenote(el) {
  var e = el;
  while (e.parentNode.id != 'notifications') {
    e = e.parentNode;
  }
  e.parentNode.removeChild(e);
  notifybodymargin();
}

function toggleRecentVisitors(mrv) {
  if (mrv) {
    if (mrv.className.search('collapsed') > 0) {
      mrv.className = mrv.className.replace('collapsed','');
    } else {
      mrv.className += ' collapsed';
    }
  }
}

function menuCollapse(t) {
  var hide = 1;
  t = t.parentNode;
  if (t.className.search('collapse') > -1) {
    t.className = t.className.replace(/\b ?collapse\b/, '');
    hide = 0;
  } else {
    t.className += ' collapse';
  }
  var lis = ge('menu_vert').getElementsByTagName('li');
  for (var i=0; i<lis.length; i++) {
    if (t == lis[i]) {
      saveNewMenu(i,hide);
    }
  }
}

var hideMenu = 0;
function menuToggle(a) {
  if (ge('mctl').innerHTML != 'Show Menu' || a == "hide") {
    document.getElementsByTagName('body')[0].className += ' hideMenu';
    ge('mctl').innerHTML = 'Show Menu';
    hideMenu = 1;
  } else {
    var body = document.getElementsByTagName('body')[0];
    body.className = body.className.replace(/\b ?hideMenu\b/, '');
    ge('mctl').innerHTML = 'Hide Menu';
    hideMenu = 0;
  }
  saveNewMenu(-1,hideMenu);
}

function saveNewMenu (index,value) {
  var menu = readCookie("vertMenuState");
  var opts = menu.split(',');
  var kp = new Array;
  kp[0] = index +":" + value;
  for (var i=0;i < opts.length; i++) {
    var nv = opts[i].split(':');
    if (nv[0] && nv[0] != index) {
      kp.push(opts[i]);
    }
  }
  createCookie("vertMenuState",kp.join(','),300);
}

function doMenu () {
  var menu = readCookie("vertMenuState").split(',');
  var lis = ge('menu_vert').getElementsByTagName('li');
  for (var i=0;i < menu.length; i++) {
    var nv = menu[i].split(':');
    if (nv[0] == -1) {
      if (nv[1] == 1) {
        hideMenu = 1;
        menuToggle('hide');
      }
    } else if (nv[1] == 1) {
      lis[nv[0]].className += ' collapse';
    }
  } 
}

function standardNav() {
  $('#menu_tabbed > li.has-sub').hover(function () {standardNavHover(this)}, function () {standardNavReset()});
  $('#menu_tabbed > li.has-sub').removeClass('has-sub');
  if (isIE6) {
    $('#menu_tabbed > li > div > ul > li.has-sub').hover(function() {standardNavMouseover(this)}, function() {standardNavMouseout(this)});
    $('#menu_tabbed div div li.has-sub').hover(function() {standardNavMouseover(this,1)}, function() {standardNavMouseout(this,1)});
  } else {
    $('#menu_tabbed > li > div > ul > li.has-sub').hover(hideads, restoreads);
  }

  $('#menu_tabbed > li > div > em').remove();
  $('#menu_tabbed > li > div > var').remove();
  $('#menu_tabbed > li > div > strong').remove();

  if (ge('menu_horiz')) {
    attachMenuDrop();
  }

  if (isIE6) {
    $('#network').hover(function() {standardNavMouseover(this)}, function() {standardNavMouseout(this)});
  } else {
    $('#network').hover(hideads, restoreads);
  }
}

function standardNavMouseover(li,noads) {
  if (!noads) hideads();
  li.className += ' hov';
}

function standardNavMouseout(li,noads) {
  li.className = li.className.replace(/\b ?hov\b/, '');
  if (!noads) restoreads();
}

function standardNavHover(e) {
  mhlighttarget = e;
  if (typeof(mclosetimer) != 'undefined') clearTimeout(mclosetimer);
  if (typeof(mhlighttimer) != 'undefined') {
    clearTimeout(mhlighttimer);
    mhlighttimer = window.setTimeout('standardNavHighlight(mhlighttarget)', 200);
  } else {
    mhlighttimer = window.setTimeout('standardNavHighlight(mhlighttarget)', 200);
  }
}

function standardNavHighlight(e) {
  if (e.className.search('cur') < 0) {
    $('#menu_tabbed > li').removeClass('cur');
    e.className += ' cur';
  }
}

function standardNavReset() {
  if (!isIE6) {
    mclosetimer = window.setTimeout('standardNavHighlight(curArea)', 1500);
  }
}

function standardHeightCheck(goal,p) {
  var col = ge('col-right');
  if (col) {
    var main = ge('col-main');
    if (col.offsetHeight > main.offsetHeight) {
      main.style.minHeight = col.offsetHeight+'px';
    }
  }

  var b = ge('bg-wrapper');
  var m = b.style.marginTop.replace('px','');
  var h = 0;
  if (typeof(window.innerHeight) == 'number') { //Non-IE
    h = window.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) { //IE
    h = document.documentElement.clientHeight;
  }
  if (b.offsetHeight + p < goal && b.offsetHeight + p < h) {
    b.style.minHeight = (h > goal + p + m ? goal : h - p - m)+'px';
  } else if (b.offsetHeight + p > goal && b.offsetHeight + p < h) {
    b.style.minHeight = (goal - p) + 'px';
  } else {
    b.style.minHeight = 'auto';
  }
}

function heightCheck() {
  document.body.style.minHeight='';
  standardHeightCheck(0,0);
}

function warnIE() {
  document.write('<div id="warn-ie"><b>Warning:</b> We are dropping support for your browser (IE6). Please upgrade to a modern browser such as <a href="http://www.getfirefox.com/" target="_blank">Firefox</a> or <a href="http://www.google.com/chrome" target="_blank">Google Chrome</a>.</div>');
}

function setupFeedPreview () {
  var t = ge('featured_title');
  var d = ge('featured_desc');
  t.onkeydown = feedPreview;
  t.onkeyup = feedPreview;
  d.onkeydown = feedPreview;
  d.onkeyup = feedPreview;
  feedPreview();
}

function feedPreview() {
  var t = ge('featured_title').value;
  var d = ge('featured_desc').value;
  var p = ge('news-feed-recent');
  if (t && d) {
    p.className = '';
    p.innerHTML = '<ul><li><b><a href="javascript:;">'+t+'</a></b>'+d+'</li></ul>';
  } else {
    p.className = 'inactive';
    p.innerHTML = '';
  }
}

function getcomment() {
  var href = this.toString();
  var mid = href.match(/mid\=(\d+)/);
  if (mid[1]) {
    clearTmp;
    Ajakz.target = 'tmpItemFrm';
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.Run('/cgi-bin/msgmo.pl?mid=' + mid[1]);
  }
}

function enableForumMouseovers() {
  var inArray = document.getElementsByTagName('a');
  for(var i=0; i < inArray.length; i++){
    if (inArray[i].className.match(/msgLink/)) {
      var ia = inArray[i];
      ia.onmousemove = showTmp;
      ia.onmouseover = getcomment;
      ia.onmouseout = clearTmp;
    }
  }
}

function liveSearch(s,e) {
  if (s) {
    if (e) {
      var key = e.which || e.keyCode;
      if (key == 38) {
        liveSearchUp();
      } else if (key == 40) {
        liveSearchDown();
      }
    }
    if (livesearchval == document.search.q.value) return;
    Ajakz.target = 'livesearch';
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.Run('/cluster/autocomp.pl?q=' + s);
    livesearchval = document.search.q.value;
    document.body.onclick = function() {liveSearch()}
  } else {
    document.getElementById('livesearch').innerHTML = '';
    livesearchval = '';
    document.body.onclick = '';
  }
}

function enableLiveSearch() {
  document.search.q.setAttribute('autocomplete', 'off');
  document.search.q.onkeyup = function(e) {
    e = e || window.event;
    liveSearch(this.value,e);
  }
  document.search.onsubmit = function(e) {
    if (liveSearchSubmit()) {
      return true;
    } else {
      return false;
    }
  }
  livesearchval = document.search.q.value;
}

function liveSearchUp() {
  if ($('#livesearch ul > .hlight').length > 0) {
    var prev = $('#livesearch ul > .hlight');
    if ($('#livesearch ul > .hlight') == $('#livesearch ul > .hlight').first) {
      prev.removeClass('hlight');
      $('#livesearch ul > li:last-child').addClass('hlight');
    } else {
      prev.removeClass('hlight');
      prev.prev().addClass('hlight');
    }
  } else {
    $('#livesearch ul > li:last-child').addClass('hlight');
  }
}

function liveSearchDown() {
  if ($('#livesearch ul > .hlight').length > 0) {
    var prev = $('#livesearch ul > .hlight');
    if ($('#livesearch ul > .hlight') == $('#livesearch ul > .hlight').last) {
      prev.removeClass('hlight');
      $('#livesearch ul > li:first-child').addClass('hlight');
    } else {
      prev.removeClass('hlight');
      prev.next().addClass('hlight');
    }
  } else {
    $('#livesearch ul > li:first-child').addClass('hlight');
  }
}

function liveSearchSubmit() {
  if ($('#livesearch ul > .hlight').length > 0) {
    location.href = $('#livesearch ul > .hlight a').attr('href');
    return false;
  } else {
    return true;
  }
}

// thread follow async

function followToggle(a,m) {
  var en = 'FOLLOW_MID_' + m;
  var url = '/cgi-bin/follow.pl?noredir=1&action=' + a + '&mid=' + m;

  var c = '';
  var t = '';
  var h = '';

  if (a == 'unfollow') {
    c = 'icon-follow';
    t = 'Follow';
    h = "followToggle('add','" + m + "');";
  } else if (a == 'add') {
    c = 'icon-unfollow';
    t = 'UN-Follow';
    h = "followToggle('unfollow','" + m + "');";
  } else {
    //alert('huh? a="' + a + '"');
  }

  Ajakz.onload = followLink;
  Ajakz.Run(url);

  var ele = document.getElementById(en);
  ele.innerHTML = t;
  ele.setAttribute('class',c);
  ele.setAttribute('onclick',h);
}

function followLink () {
  if (Ajakz.req.readyState == 4) {
    if (Ajakz.req.status == 200) {
      var txt = Ajakz.req.responseText;
      if (txt) {
        document.location=txt;
      }
    }
  }
}

// Featured news story box

if (isIE6) noRotate = 1;

function featuredTabHover (link,userActivated,nextNum) {
  if (link) {
    if (userActivated == 1) {
      noRotate = 1;
      if (rotateID) clearTimeout(rotateID);
    }

    var prevNum = '';
    if (!nextNum) var nextNum = link.id.replace(/featured-(\d)_tab/, '$1');

    var lis = link.parentNode.parentNode.childNodes;
    for (var i = 0; i < lis.length; i++) {
      if (lis[i].tagName == 'LI') {
        if (lis[i].className != '') prevNum = i+1;
        lis[i].className = '';
      }
    }

    link.parentNode.className = 'current';
    var prevDiv = ge('featured-'+prevNum+'_t');
    var nextDiv = ge('featured-'+nextNum+'_t');
    if (prevNum != nextNum) {
      nextDiv.style.display = 'block';
      if (prevNum < nextNum) {
        prevDiv.style.zIndex = '1';
        if (isIE6) {
          resetDivs(nextDiv);
        } else {
          $(prevDiv).animate({top:'-402px'},'fast','swing',function(){resetDivs(nextDiv)});
        }
      } else {
        nextDiv.style.zIndex = '1';
        nextDiv.style.top = '-402px';
        if (isIE6) {
          resetDivs(nextDiv);
        } else {
          $(nextDiv).animate({top:0},'fast','swing',function(){resetDivs(nextDiv)});
        }
      }
    } else {
      prevDiv.style.display = 'none';
      nextDiv.style.display = '';
    }
  }
}

function resetDivs(n) {
  for (var i = 1; i < 6; i++) {
    var p = ge('featured-'+i+'_t');
    if (p.id != n.id) {
      p.style.display='none';
      p.style.top='0';
      p.style.zIndex='0';
    }
  }
  n.style.display='';
  n.style.top='0';
  n.style.zIndex='0';
}

var nextNum = 1;
function rotateFB () {
  var targ = 'featured-' + nextNum +'_tab';
  if (targ) {
    featuredTabHover(document.getElementById(targ));
    rotateID = setTimeout(rotateFB,9000);
    nextNum = (nextNum >=5) ? 1 : nextNum + 1;
  }
}

if (typeof noRotate == 'undefined') addEvent(window,'load',rotateFB);

// Countdown clock

function display() {
  var cd = document.getElementById('countdown-clock');
  var minutes = parseInt(cd.getElementsByTagName('i')[0].innerHTML);
  var hours = parseInt(cd.getElementsByTagName('b')[0].innerHTML);
  var days = parseInt(cd.getElementsByTagName('u')[0].innerHTML);

  if (minutes <= 0){
    minutes = 59;
    hours -= 1;
  }

  if (hours<0){
    hours = 23;
    days -= 1;
  }

  if (days < 0 || (days * 1440) + (hours * 24) + minutes < 1){ //Launched!
    cd.childNodes[0].childNodes[0].innerHTML = '';
    cd.className += ' countdown-complete';
  } else {
    minutes -= 1;
    cd.getElementsByTagName('i')[0].innerHTML = minutes;
    cd.getElementsByTagName('b')[0].innerHTML = hours;
    cd.getElementsByTagName('u')[0].innerHTML = days;
    setTimeout("display()",60000);
  }
}

function enableCountdown() {
  var cd = document.getElementById('countdown-clock');
  if ((cd && !cd.className) || (cd && !cd.className.search('countdown-complete'))) {
    cd = cd.getElementsByTagName('a')[0];
    var minutes = parseInt(cd.getElementsByTagName('i')[0].innerHTML);
    var hours = parseInt(cd.getElementsByTagName('b')[0].innerHTML);
    var days = parseInt(cd.getElementsByTagName('u')[0].innerHTML);
    if (!minutes) minutes = 0;
    if (!hours) hours = 0;
    if (!days) days = 0;

    if (minutes + hours + days > 0) {
      display();
    } else {
      cd.childNodes[0].innerHTML = '';
      cd.parentNode.className += ' countdown-complete';
    }
  } else {
    cd.childNodes[0].childNodes[0].innerHTML = '';
  }
}

function showloading () {
  document.getElementById('loading').style.display="";
}
function hideloading () {
  document.getElementById('loading').style.display="none";
}
function userconfig (type) {
  showloading();
  Ajakz.target = 'userconfig';
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.loadTargetHook = function () {hideloading();}
  Ajakz.Run('/cgi-bin/a.pl?config=' + type);
}
function setconfig (type, val, refresh, uid) {
  var u = uid ? '&uid=' + uid : '';
  showloading();
  Ajakz.target = 'userconfig';
  if (type == 'avatar') {
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.loadTargetHook = function () {updateavatar();}
  } else if (type == 'email') {
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.target = 'chgemf';
    Ajakz.loadTargetHook = function () {hideloading();}
  } else if (type == 'admin_notes' ||
     (uid && (type == 'sig' || type == 'bio' || type == 'location'))) {
    Ajakz.onload = Ajakz.loadTarget;
    Ajakz.target = 'admin_notes_b';
    Ajakz.loadTargetHook = function () {hideloading();document.getElementById('admin_notes').value='';}
  } else {
    if (refresh) {
      Ajakz.onload = Ajakz.loadTarget;
      Ajakz.loadTargetHook = function () {hideloading();}
    } else {
      Ajakz.onload = function () { if (Ajakz.req.readyState == 4 && Ajakz.req.status == 200) {hideloading();} }
      Ajakz.loadTargetHook = undefined;
    }
  }
  Ajakz.Run('/cgi-bin/a.pl?set=' + type + '&val=' + val + '&config=' + type + u);
}
function updateavatar () {
  Ajakz.target = 'avatarcontainer';
  Ajakz.onload = Ajakz.loadTarget;
  Ajakz.loadTargetHook = function () {hideloading();}
  Ajakz.Run('/cgi-bin/a.pl?get=avatar');
}
function togglesl () {
  document.getElementById('settinglist').style.display == 'none' ?
    document.getElementById('settinglist').style.display = '' :
    document.getElementById('settinglist').style.display = 'none';
}
function changemail (t) {
  t.parentNode.style.display='none';
  document.getElementById('chgemf').style.display='';
  var e = document.getElementById('emailinp');
  e.focus();
  e.select();
}
function gc (thing, maxl) {
  if (document.getElementById(thing).value.length > maxl) {
    document.getElementById(thing).value = document.getElementById(thing).value.substr(0,maxl);
    return false;
  }
  document.getElementById('curCount' + thing).innerHTML = document.getElementById(thing).value.length;
}

function addcontact (t, type, val) {
  t.innerHTML = "Adding..";
  Ajakz.onload = function () { if (Ajakz.req.readyState == 4 && Ajakz.req.status == 200) {t.innerHTML="Done.";} }
  Ajakz.loadTargetHook = undefined;
  Ajakz.Run('/cgi-bin/a.pl?set=contacts&val=' + type + ':a:' + val);
}


