// World Date and Time script
// ==========================
//
// Current cities:
// ---------------
// New York
// Paris
// Las Vegas
// London
// Los Angeles
// Sydney

function wdt(st, city, datestyle, timestyle, showseconds, showday){
if (!document.getElementById || !document.getElementById(city)) return
var servertimestring=st
this.container=document.getElementById(city)
this.city=city
this.datestyle=datestyle
this.timestyle=24
if (timestyle=="time12") this.timestyle=12
this.showseconds=showseconds
this.showday=showday
this.localtime=this.serverdate=new Date(servertimestring)
var dst=DST(this.city, this.localtime)
this.localtime.setTime(this.serverdate.getTime()+dst)
this.updateTime()
this.updateContainer()
}

wdt.prototype.updateTime=function(){
var thisobj=this
this.localtime.setSeconds(this.localtime.getSeconds()+1)
setTimeout(function(){thisobj.updateTime()}, 1000)
}

wdt.prototype.updateContainer=function(){
var thisobj=this
var weekdaystxt=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
var monthwordstxt=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
var dd=this.serverdate.getDate()
dd=formatField(dd)
var mm=this.serverdate.getMonth()
mm=formatField(mm)
var mmm=monthwordstxt[this.serverdate.getMonth()].substring(0,3)
var mmmm=monthwordstxt[this.serverdate.getMonth()]
var yy=String(this.serverdate.getYear()).substring(2,4)
var yyyy=this.serverdate.getYear()
var hour=this.localtime.getHours()
var minutes=this.localtime.getMinutes()
var seconds=this.localtime.getSeconds()
var shortday=weekdaystxt[this.localtime.getDay()].substring(0,3)
var longday=weekdaystxt[this.localtime.getDay()]
this.container.innerHTML=formatField(hour, this.timestyle)+":"+formatField(minutes)
if (this.showseconds=="secondsON"){
this.container.innerHTML += ":"+formatField(seconds)
}
if (this.timestyle==12){
this.container.innerHTML += (hour>=12)? " PM" : " AM"
}
if (this.showday=="dayON" || this.showday=="daySHORT"){
this.container.innerHTML += " ("+shortday+")"
}
if (this.showday=="dayLONG"){
this.container.innerHTML += " ("+longday+")"
}
if (this.datestyle=="dateON" || this.datestyle=="dateSHORT"){
this.container.innerHTML=dd+"/"+mm+"/"+yy+" "+this.container.innerHTML
}
if (this.datestyle=="dateMEDIUM"){
this.container.innerHTML=dd+" "+mmm+" "+yyyy+" "+this.container.innerHTML
}
if (this.datestyle=="dateLONG"){
this.container.innerHTML=dd+" "+mmmm+" "+yyyy+" "+this.container.innerHTML
}
setTimeout(function(){thisobj.updateContainer()}, 1000)
}

function formatField(num, timestyle){
var hour
if (typeof timestyle!="undefined" && timestyle==12){
hour=(num>12)? num-12 : num
return (hour==0)? 12 : hour
}
return (num<=9)? "0"+num : num
}

function DST(city, dt){
var gmt=0 //used for Greenwich Mean Time 
var dst=0 //used for Daylight Saving Time
var ss=new Date(dt) //used for DST start date
var ee=new Date(dt) //used for DST end date
var day
//set GMT according to server time
ss.setMonth(2) //March - last Sunday
ss.setDate(31)
day=ss.getDay()
ss.setDate(31-day)
ee.setMonth(9) //October - last Sunday
ee.setDate(31)
day=ee.getDay()
ee.setDate(31-day)
if (dt>=ss && dt<ee) dt.setHours(dt.getHours()-1)
//set GMT offset times
if (city=="London") gmt=0
if (city=="Las Vegas" || city=="Los Angeles") gmt=-8
if (city=="New York") gmt=-5
if (city=="Paris") gmt=1
if (city=="Sydney") gmt=10
//set Daylight Saving offset times
if (city=="London" || city=="Paris"){
ss.setMonth(2) //March - last Sunday
ss.setDate(31)
day=ss.getDay()
ss.setDate(31-day)
ee.setMonth(9) //October - last Sunday
ee.setDate(31)
day=ee.getDay()
ee.setDate(31-day)
if (dt>=ss && dt<ee) dst=1
}
if (city=="Las Vegas" || city=="Los Angeles" || city=="New York"){
ss.setMonth(2) //March - second Sunday
ss.setDate(14)
day=ss.getDay()
ss.setDate(14-day)
ee.setMonth(10) //November - first Sunday
ee.setDate(7)
day=ee.getDay()
ee.setDate(7-day)
if (dt>=ss && dt<ee) dst=1
}
if (city=="Sydney"){
ss.setMonth(9) //October - last Sunday
ss.setDate(31)
day=ss.getDay()
ss.setDate(31-day)
ee.setMonth(2) //March - last Sunday
ee.setDate(31)
day=ee.getDay()
ee.setDate(31-day)
if (dt>=ss || dt<ee) dst=1
}
dst=(gmt+dst)*3600000
return dst
}