As most of you surely know, yet another Samsung Unpacked event is almost upon us. The show is set for 3PM GMT. But, just to eliminate any possible confusion, here is a nifty countdown timer: var CDown = function() { this.state=0;// if initialized this.counts=[];// array holding countdown date objects and id to print to {d:new Date(2013,11,18,18,54,36), id:"countbox1"} this.interval=null;// setInterval object } CDown.prototype = { init: function(){ this.state=1; var self=this; this.interval=window.setInterval(function(){self.tick();}, 1000); }, add: function(date,id){ this.counts.push({d:date,id:id}); this.tick(); if(this.state==0) this.init(); }, expire: function(idxs){ for(var x in idxs) { var now = new Date(); if( ((now.getTime() - this.counts[idxs[x]].d.getTime()) / 60000) < 59 ) this.display(this.counts[idxs[x]], "Now!"); else this.display(this.counts[idxs[x]], "Over"); this.counts.splice(idxs[x], 1); } }, format: function(r){ var out=""; if(r.d != 0){out += r.d +" "+((r.d==1)?"day":"days")+", ";} if(r.h != 0){out += r.h +" "+((r.h==1)?"hour":"hours")+", ";} out += r.m +" "+((r.m==1)?"min":"mins")+", "; out += r.s +" "+((r.s==1)?"sec":"secs")+", "; return out.substr(0,out.length-2); }, math: function(work){ var y=w=d=h=m=s=ms=0; ms=(""+((work%1000)+1000)).substr(1,3); work=Math.floor(work/1000);//kill the "milliseconds" so just secs y=Math.floor(work/31536000);//years (no leapyear support) w=Math.floor(work/604800);//weeks d=Math.floor(work/86400);//days work=work%86400; h=Math.floor(work/3600);//hours work=work%3600; m=Math.floor(work/60);//minutes work=work%60; s=Math.floor(work);//seconds return {y:y,w:w,d:d,h:h,m:m,s:s,ms:ms}; }, tick: function(){ var now=(new Date()).getTime(), expired=[],cnt=0,amount=0; if(this.counts) for(var idx=0,n=this.counts.length;...
Source: http://www.gsmarena.com/watch_samsungs_unpacked_event_live_right_here-news-13524.php