          monthnames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	  var reftime;
          var loadtime =new Date();
	  var cdref = new Array();
	  var cditem = new Array();
	  var cds = 0;

	  var finished_text = "In Progress";

	  var timer_callback = new Array();
	  var timer_endtime = new Array();
	  var timer_enabled = new Array();
	  var tcnt = 0;

	  function addTimerCallback(dt, expression){
		timer_callback[tcnt] = expression;
		timer_endtime[tcnt] = new Date();
		timer_endtime[tcnt].setYear(dt.substring(0,4));
		timer_endtime[tcnt].setMonth(dt.substring(4,6)-1);
		timer_endtime[tcnt].setDate(dt.substring(6,8));
		timer_endtime[tcnt].setHours(dt.substring(8,10));
		timer_endtime[tcnt].setMinutes(dt.substring(10,12));
		timer_endtime[tcnt].setSeconds(dt.substring(12,14));
		timer_enabled[tcnt] = true;
		tcnt++;
	  }

      function setrefreshtimer(dt){
      }

      function setlockdowntimer(dt){
      }

	  function preparetimers(srvtime) {
            document.getElementById('currenttime').innerHTML = "Preparing";
	    var servertime=new Date();
            servertime.setTime(Date.parse(srvtime));
	    reftime = loadtime.getTime()-servertime.getTime();
	    timerID = setTimeout("updatetimers()",1000);
	  }

	function resyncTimers(srvtime){
		var localtime =new Date();
	    var servertime=new Date();
            servertime.setTime(Date.parse(srvtime));
	    reftime = localtime.getTime()-servertime.getTime();
	}

          function showtime(offset) {
	    var localtime =new Date();
	    localtime.setTime(localtime.getTime()-offset);
            var hh = localtime.getHours();
            var mm = localtime.getMinutes();
            var ss = localtime.getSeconds();
            if (hh<10) hh = "0"+hh;
            if (mm<10) mm = "0"+mm;
            if (ss<10) ss = "0"+ss;
            return monthnames[localtime.getMonth()]+" "+localtime.getDate()+", "+localtime.getFullYear()+" "+hh+":"+mm+":"+ss;
	  }
          function showcountdown(offset) {
	    var localtime =new Date();
	    var cd = -(Math.floor((localtime.getTime()-loadtime.getTime()+offset)/1000)*1);
	    var dd = (Math.floor(cd/(24*60*60))*1);
	        cd = cd - dd * (24*60*60);
	    var hh = (Math.floor(cd/(60*60))*1);
	        cd = cd - hh * (60*60);
            var mm = (Math.floor(cd/(60))*1);
		cd = cd - mm * (60);
            var ss = cd;
            //if (hh<10) hh = "0"+hh;
            //if (mm<10) mm = "0"+mm;
            //if (ss<10) ss = "0"+ss;
            if (dd==0) {
              // Stuart - Intervals smaller than one hour
              if(hh == 0)
	              return mm+" Minutes and "+ss+" Seconds";
	          else
	              return hh+" Hours "+mm+" Minutes and "+ss+" Seconds";
            } else if (dd==1) {
              return "1 Day "+hh+" Hours "+mm+" Minutes and "+ss+" Seconds";
            } else if (dd<0) {
              return finished_text;
            } else
              return dd+" Days "+hh+" Hours "+mm+" Minutes and "+ss+" Seconds";
          }

	  function addcd(cdname,dt) {
	    var servertime=new Date();
	    servertime.setYear(dt.substring(0,4));
	    servertime.setMonth(dt.substring(4,6)-1);
	    servertime.setDate(dt.substring(6,8));
	    servertime.setHours(dt.substring(8,10));
	    servertime.setMinutes(dt.substring(10,12));
	    servertime.setSeconds(dt.substring(12,14));
	    cdref[cds] = loadtime.getTime()-servertime.getTime();
	    cditem[cds] = cdname;

		// Stuart (02/06/06) - Update timers immediately
		// document.getElementById(cdname).innerHTML = showcountdown(cdref[cds] - reftime);
	    cds++;
	  }

	  /**
	   *
	   * @access public
	   * @return void
	   **/
	  function changecd(i, dt){
	    var servertime=new Date();
	    servertime.setYear(dt.substring(0,4));
	    servertime.setMonth(dt.substring(4,6)-1);
	    servertime.setDate(dt.substring(6,8));
	    servertime.setHours(dt.substring(8,10));
	    servertime.setMinutes(dt.substring(10,12));
	    servertime.setSeconds(dt.substring(12,14));
	    cdref[i] = loadtime.getTime()-servertime.getTime();
	  }

	  function updatetimers() {
            document.getElementById('currenttime').innerHTML = showtime(reftime);
            for (i=0;i<cds;i++) {
                document.getElementById(cditem[i]).innerHTML = showcountdown(cdref[i]-reftime);
              }

			// Callback timers
			var localtime =new Date();
			localtime.setTime(localtime.getTime()-reftime);
			for(i = 0; i < tcnt; i++) {
				if((timer_enabled[i] == true) && (localtime > timer_endtime[i])) {
					timer_enabled[i] = false;
					eval(timer_callback[i]);
				}
			}

	    timerID = setTimeout("updatetimers()",1000);
	  }
