function tick() {
  var elements=arguments;
  var date=new Date();
  var offset=date.getTimezoneOffset()*60000;
  var utc=date.getTime()+offset;

  try { // Firefox, Opera 8.0+, Safari
    req=new XMLHttpRequest();
  }
  catch (e) { // Internet Explorer
    try {
      req=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        req=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {
        return false;
      }
    }
  }

  req.onreadystatechange=function() {
    if(req.readyState==4 && req.status==200) {
      date.setTime(parseInt(req.responseText));
      for (var i=0; i<elements.length; ++i) {
        if (elements[i]!=null && elements[i].innerHTML!=null) {
          elements[i].innerHTML=date.toLocaleString();
        }
      }
    }
  }

  req.open("GET", "/time?utc="+utc+"&offset="+offset, true);
  req.send(null);

  return true;
}

interval_id=window.setInterval("tick(document.getElementById(\"clock\"))", 1000);
