function rootURI (loc) {
  if (loc == null) {
    if ($$('base').size() != 0)
      return $$('base')[0].href;
    else
      loc = window.location;
  }
  return loc.protocol + '//' + (loc.hostname == null ? loc.hostname : loc.host) + '/';
}

function readParam (u, k) {
  k = escape(k);
  var s = u.indexOf(k);

  if (s < 0)
    return null;

  var m = u.indexOf('=', s);
  var f = u.indexOf('&', m);

  return unescape(u.substring(m+1, (f > 0 ? f : u.length)));
}

function writeParam (u, k, v) {
  // do not use slashes or this will break
  if ( (k == undefined) || (v == undefined) )
    return false;

  k = escape(k); v = escape(v);

  if (u.indexOf(k) < 0) {
    if (u.indexOf('?') < 1)
      return u + '?' + k + '=' + v;
    else
      return u + '&' + k + '=' + v;
  }
  else {
    var s = u.indexOf(k);
    var m = u.indexOf('=', s);
    var f = u.indexOf('&', m);
    return u.substring(0, m) + v + (f > 0 ? u.substring(f, u.length) : null);
  }
}

function labelFor (e)
{
  l = $$('label').find (function(i) {
    if (i.htmlFor == e.readAttribute('id'))
      return true;
  });
  return l;
}
