String.prototype.trim = function()
{ return this.replace(/^\s+|\s+$/g,"");
}

function pushOnload(fn)
{ var oldfn = window.onload;
  if (typeof window.onload != 'function') { window.onload = fn; }
  else                                    { window.onload = function() { oldfn(); fn(); } }
}

function getElementsByClassName(oEl, sTag, sClass)
{	if (!oEl) return;
  var aEl = (sTag == "*" && oEl.all) ? oEl.all : oEl.getElementsByTagName(sTag);
  var aRet = new Array();
  sClass = sClass.replace(/\-/g, "\\-");
  var re = new RegExp("(^|\\s)" + sClass + "(\\s|$)");
  var oTemp;
  for(var i=0; i < aEl.length; i++)
  { oTemp = aEl[i];
    if(re.test(oTemp.className)) { aRet.push(oTemp); }
  }
  return (aRet);
}

function hasAnyClass(obj)
{ var result = false;
  if (obj.getAttributeNode("class") != null) result = obj.getAttributeNode("class").value;
  return result;
}

function stripe(id, cole, colo)
{ var table = (typeof id == 'object') ? id : document.getElementById(id);
  if (!table) return;
  var eve = false;
  var tb = table.getElementsByTagName("tbody");
  for (var hh = 0, item; item = tb[hh]; hh++)
  { var tr = item.getElementsByTagName("tr");
    for (var ii = 0, item; item = tr[ii]; ii++)
    { if (item.getAttributeNode("class") || item.style.backgroundColor) continue;
      var td = item.getElementsByTagName("td");
      for (var jj = 0, item; item = td[jj]; jj++)
      { if (item.getAttributeNode("class") || item.style.backgroundColor) continue;
        item.style.backgroundColor = eve ? cole : colo;
      }
      eve = !eve;
    }
  }
}

function stripeLots(className, cole, colo)
{ var list = getElementsByClassName(document, 'table', className);
  for (var ii = 0, item; item = list[ii]; ii++)
  { stripe(list[ii], cole, colo);
  }
}