function isDST(gmt) {
	var lsm = new Date(gmt);
	var lso = new Date(gmt);
	lsm.setMonth(2); // March
	lsm.setDate(31);
	var day = lsm.getDay();// day of week of 31st
	lsm.setDate(31-day); // last Sunday
	lso.setMonth(9); // October
	lso.setDate(31);
	day = lso.getDay();
	lso.setDate(31-day);
	if (gmt < lsm || gmt >= lso) return 0;
	else return 1;
}

function isDST_US(gmt) {
	// Second Sunday of March till first Sunday of November
	var lsm = new Date(gmt);
	var lso = new Date(gmt);
	lsm.setMonth(2); // March
	lsm.setDate(1);
	var day = lsm.getDay();// day of week of 1st
	lsm.setDate(day==0?8:15-day); // second Sunday
	lso.setMonth(10); // November
	lso.setDate(1);
	day = lso.getDay();
	lso.setDate(day==0?1:8-day); // first Sunday
	if (gmt < lsm || gmt >= lso) return 0;
	else return 1;	
}

function _GetTime(offset, hasDST, cur, dstFunc) {
	if (cur == null) cur = new Date();
	var DayLight = 0;
	if (hasDST) {
		if (dstFunc == null) dstFunc = isDST;
		DayLight = dstFunc(cur);
	}

	var TimezoneOffset = offset // adjust for time zone
	ms = cur.getTime() + (cur.getTimezoneOffset() * 60000) + TimezoneOffset * 3600000 + (DayLight * 60 * 60 * 1000),
	time = new Date(ms);
	return time;
}

var tzmap = {
		'America/New York': function(cur) { return _GetTime(-5, true, cur, isDST_US)},
		'Europe/London': function(cur) {return _GetTime(0, true, cur)},
		'Europe/Brussels' : function(cur) {return _GetTime(1, true, cur)},
		'Europe/Moscow': function(cur) {return _GetTime(4, false, cur)},
		'Asia/Astana': function(cur) {return _GetTime(6, false, cur)},
		'Asia/Vladivostok': function(cur) {return _GetTime(11, false, cur)}
}

function GetLocalTime(tz, cur) {
	f = tzmap[tz];
	return f?f(cur):_GetTime(0, false, cur);
}

function GetCurTime(tz) {
	time = GetLocalTime(tz, null);
	curHour = time.getHours(),
	curMin = time.getMinutes(),
	curTime = [GetDay(time.getDay()), ((curHour < 10) ? "0" : ""), curHour, ":", ((curMin < 10) ? "0" : ""), curMin];
	return curTime.join("");
}

function GetDay(intDay){
    var DayArray = new Array("Sun&nbsp;", "Mon&nbsp;", "Tue&nbsp;", "Wed&nbsp;", "Thu&nbsp;", "Fri&nbsp;", "Sat&nbsp;")
    return DayArray[intDay]
}




function run_clocks() {
	
	document.getElementById('TimeNY').innerHTML = GetCurTime('America/New York');
	document.getElementById('TimeLON').innerHTML = GetCurTime('Europe/London');
	if(document.getElementById('TimeCET')) {
		document.getElementById('TimeCET').innerHTML = GetCurTime('Europe/Brussels');
	}
	document.getElementById('TimeMOS').innerHTML = GetCurTime('Europe/Moscow');
	var astana = document.getElementById('TimeAST'), vladivostock = document.getElementById('TimeVLD');
	if (astana) astana.innerHTML = GetCurTime('Asia/Astana');
	if (vladivostock) vladivostock.innerHTML = GetCurTime('Asia/Vladivostok');

	setTimeout("run_clocks()",5000);
		
}

