function isEmpty(s) {
  if ((s == null) || (s.length == 0)) return true;
  for (var i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if (c != ' ' && c != '\t') return false;
  }
  return true;
}

function isNumeric(s) {
  for (var i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if ((c < '0') || (c > '9')) return false;
  }
  return true;
}

function openWin(url,n,w,h,tb,mb,sb) {
  openWinReturn(url,n,w,h,tb,mb,sb);
}

function openWinReturn(url,n,w,h,tb,mb,sb) {
  var newwin;
  var opt = "scrollbars=yes,resizable=yes,toolbar=" + tb + ",menubar=" + mb + ",status=" + sb;
  if (w)
    opt += ",width=" + w;
  if (h)
    opt += ",height=" + h;
  newwin = window.open(url, n, opt);
  newwin.focus();
  return newwin;
}

function openSearch(t,w,h,tb,mb,sb) {
  var newwin = openWinReturn('','mailsearch',w,h,tb,mb,sb);
  if (!newwin.document.URL || newwin.document.URL.indexOf('/search.cgi') == -1)
    newwin.location = 'search.cgi?template='+t+'&r=' + Math.random();
}

function add_onload(handler) {
  if (document.body.onload) {
    var old_onload = document.body.onload
    document.body.onload = function() {old_onload(); handler() }
  } else {
    document.body.onload = handler
  }
}

function toArray (array) {
  if (typeof(array) == "undefined")
    return new Array;
  else if (typeof(array.length) == "undefined")
    return new Array(array);
  else
    return array;
}
    
function check_all(field, value) {
  var checkboxes = toArray(field);
  for (var i = 0; i < checkboxes.length; i++) {
    checkboxes[i].checked = value;
  }
}

function is_any_checked(field) {
  var checkboxes = toArray(field);
  for (var i = 0; i < checkboxes.length; i++) {
    if (checkboxes[i].checked)
      return true;
  }
  return false;
}

function count_checked(field) {
  var n = 0;
  var checkboxes = toArray(field);
  for (var i = 0; i < checkboxes.length; i++) {
    if (checkboxes[i].checked)
      n++;
  }
  return n;
}

function evenOddTableRows(tableid, evenclass, oddclass) {
  if (document.getElementById && document.getElementsByTagName) {
    var table = document.getElementById(tableid);
    if (!table) return;

    var tbodies = table.getElementsByTagName("tbody");
    for (var h = 0; h < tbodies.length; h++) {
      var rows = tbodies[h].getElementsByTagName("tr");
      for (var i = 0; i < rows.length; i++) {
        rows[i].className += " " + ((i % 2) ? oddclass : evenclass);
      }
    }
  }
}

function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    curleft = obj.offsetLeft
      curtop = obj.offsetTop
      while (obj = obj.offsetParent) {
	curleft += obj.offsetLeft
	curtop += obj.offsetTop
      }
  }
  return {left: curleft, top: curtop};
}
