	function makeArray(n) {
		this.length = n;
		return this;
    }
	
	monthAbbrs = new makeArray(12)
	monthAbbrs[1] = "Jan";
	monthAbbrs[2] = "Feb";
	monthAbbrs[3] = "Mar";
	monthAbbrs[4] = "Apr";
	monthAbbrs[5] = "May";
	monthAbbrs[6] = "Jun";
	monthAbbrs[7] = "Jul";
	monthAbbrs[8] = "Aug";
	monthAbbrs[9] = "Sep";
	monthAbbrs[10] = "Oct";
	monthAbbrs[11] = "Nov";
	monthAbbrs[12] = "Dec";
	
	var timerID ;
	
	function tzone(tz, os, ds, cl)
	{
		this.ct = new Date(0) ;		// datetime
		this.tz = tz ;		// text displayed
		this.os = os ;		// GMT offset
		this.ds = ds ;		// has daylight savings (0 = no, 1 = yes)
		this.cl = cl ;		// font color
	}
	
	function UpdateClocks()
	{
		// www.timeanddate.com/worldclock
		// tblColor sets it for all locations
		// this could also be set individually
		
		var tblColor = "#DFDFDF"
		var ct = new Array(
	
			new tzone('Silicon Valley: ', -8, 1, tblColor),
			new tzone('London: ',  0, 1, tblColor),
			new tzone('Tel Aviv: ', +2, 1, tblColor),
			new tzone('Shanghai: ', +8, 0, tblColor),
			
			new tzone('New York: ', -5, 1, tblColor),
			new tzone('Munich: ', 1, 1, tblColor),
			new tzone('Bangalore: ', +5.5, 0, tblColor),
			new tzone('Tokyo: ', +9, 0, tblColor)

		);
		
		var dt = new Date() ;	// [GMT] time according to machine clock
		// DST start and end dates are manually set here, not calculated.
		// This must be updated annually and only applies to the U.S.
		// http://wwp.greenwichmeantime.com/time-zone/rules/usa.htm
		// NOTE: dates below are zero-based indexes, i.e. Jan = 0, Feb = 1, etc.
		
		var startDST = new Date(dt.getFullYear(), 2, 12); // March 13, 2011
		while (startDST.getDay() != 0)
			startDST.setDate(startDST.getDate() + 1) ;

		var endDST = new Date(dt.getFullYear(), 10, 5) ; // November 6, 2011
		while (endDST.getDay() != 0)
			endDST.setDate(endDST.getDate() - 1) ;
	
		var ds_active ;		// DS currently active
	
		if (startDST < dt && dt < endDST)
			ds_active = 1 ;
		else
			ds_active = 0 ;
	
		// Adjust each clock offset if that clock has DS and in DS.
		for(n=0 ; n<ct.length ; n++)
			if (ct[n].ds == 1 && ds_active == 1) ct[n].os++ ;
		// compensate time zones
		gmdt = new Date() ;
		for (n=0 ; n<ct.length ; n++)
			ct[n].ct = new Date(gmdt.getTime() + ct[n].os * 3600 * 1000) ;
	
		document.getElementById("Clock0").innerHTML =
			'<font color="' + ct[0].cl + '">' + ct[0].tz + '</font>' ;
		document.getElementById("Clock0a").innerHTML =
			'<font color="' + ct[0].cl + '">' + ClockString(ct[0].ct) + '</font>' ;
		document.getElementById("Clock1").innerHTML =
			'<font color="' + ct[1].cl + '">' + ct[1].tz + '</font>' ;
		document.getElementById("Clock1a").innerHTML =
			'<font color="' + ct[1].cl + '">' + ClockString(ct[1].ct) + '</font>' ;
		document.getElementById("Clock2").innerHTML =
			'<font color="' + ct[2].cl + '">' + ct[2].tz + '</font>' ;
		document.getElementById("Clock2a").innerHTML =
			'<font color="' + ct[2].cl + '">' + ClockString(ct[2].ct) + '</font>' ;
		document.getElementById("Clock3").innerHTML =
			'<font color="' + ct[3].cl + '">' + ct[3].tz + '</font>' ;
		document.getElementById("Clock3a").innerHTML =
			'<font color="' + ct[3].cl + '">' + ClockString(ct[3].ct) + '</font>' ;
		document.getElementById("Clock4").innerHTML =
			'<font color="' + ct[4].cl + '">' + ct[4].tz + '</font>' ;
		document.getElementById("Clock4a").innerHTML =
			'<font color="' + ct[4].cl + '">' + ClockString(ct[4].ct) + '</font>' ;
		document.getElementById("Clock5").innerHTML =
			'<font color="' + ct[5].cl + '">' + ct[5].tz + '</font>' ;
		document.getElementById("Clock5a").innerHTML =
			'<font color="' + ct[5].cl + '">' + ClockString(ct[5].ct) + '</font>' ;
		document.getElementById("Clock6").innerHTML =
			'<font color="' + ct[6].cl + '">' + ct[6].tz + '</font>' ;
		document.getElementById("Clock6a").innerHTML =
			'<font color="' + ct[6].cl + '">' + ClockString(ct[6].ct) + '</font>' ;
		document.getElementById("Clock7").innerHTML =
			'<font color="' + ct[7].cl + '">' + ct[7].tz + '</font>' ;
		document.getElementById("Clock7a").innerHTML =
			'<font color="' + ct[7].cl + '">' + ClockString(ct[7].ct) + '</font>' ;
		timerID = window.setTimeout("UpdateClocks()", 1001) ;
	}
	
	function ClockString(dt)
	{
		var stemp, ampm ;
		// var dt_year = dt.getUTCFullYear() ;
		var dt_month = dt.getUTCMonth() + 1 ;
		var dt_day = dt.getUTCDate() ;
		var dt_hour = dt.getUTCHours() ;
		var dt_minute = dt.getUTCMinutes() ;
		// var dt_second = dt.getUTCSeconds() ;
		// dt_year = dt_year.toString() ;
	
		/*
		if (0 <= dt_hour && dt_hour < 12)
		{
			ampm = 'AM' ;
			if (dt_hour == 0) dt_hour = 12 ;
		} else {
			ampm = 'PM' ;
			dt_hour = dt_hour - 12 ;
			if (dt_hour == 0) dt_hour = 12 ;
		}
		*/
		
		dt_month = monthAbbrs[dt_month];
		if (dt_minute < 10)
			dt_minute = '0' + dt_minute ;
			
		// if (dt_second < 10)
			// dt_second = '0' + dt_second ;
		stemp = dt_month + ' ' + dt_day + ' ' + dt_hour + ":" + dt_minute  ;
		return stemp ;
	}

