Mega Code Archive

 
Categories / JavaScript DHTML / GUI Components
 

Fancy Clock

//World Clock (No DST - standard time only!)  //By http://www.btinternet.com/~kurt.grigg/javascript <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>World Clock. No DST, standard time only!</title> <style type = "text/css"> body{  background-color : #000000; } /*Alter .theContainer background colour & border styles only*/ .theContainer{ position:relative;width:120px;height:160px;text-align:center; background-color:#880000;border: 2px solid #ff0000; } .handsanddotsstyle{ position:absolute;top:0px;left:0px;width:2px;height:2px; font-size:2px;background-color:#000000; } .ampmstyle{ position:absolute;top:0px;left:0px;width:20px;height:10px; text-align:center;font-family:arial,sans-serif;font-size:12px;color:#000000; } .datestyle{ position:absolute;top:0px;left:0px;width:100px;text-align:center; font-family:arial,sans-serif;font-size:11px;color:#000000; } .facestyle{ position:absolute;top:0px;left:0px;width:15px;height:15px; text-align:center;font-family:arial,sans-serif;font-size:10px;color:#000000; } .citystyle{ position:absolute;top:0px;left:0px;width:110px;height:20px;z-index:100; } .selectstyle{ width:110px;font-family:arial,sans-serif;font-size:12px;color:#ffffff; background:#000000; } </style> </head> <body> <p> <script type="text/javascript"> //World Clock (No DST - standard time only!)  //By http://www.btinternet.com/~kurt.grigg/javascript if ((document.getElementById &&  document.firstChild && typeof document.getElementsByTagName != "undefined") && window.addEventListener || window.attachEvent){ (function(){ //Alter clock colours here: var fCol = "#fff000"; //face/number colour. var dCol = "#ff0000"; //dot colour. var hCol = "#ffffff"; //hours colour. var mCol = "#ffffff"; //minutes colour. var sCol = "#ff0000"; //seconds colour. var cCol = "#fff000"; //date colour. var aCol = "#ff0000"; //am-pm colour. var bCol = "#880000"; //select/form background colour. var tCol = "#fff000"; //select/form text colour. //Add places here - make sure format is correct! var locations = [ ["Your Time","0"], ["GMT","0"],   ["Rome","1"],  ["Cairo","2"],  ["Moscow","3"],  ["Tehran","3.30"],  ["Karachi","5"],  ["Bombay","5.30"],  ["Kathmandu","5.45"], ["Bangkok","7"],  ["Hong Kong","8"],  ["Tokyo","9"],  ["Darwin","9.30"],  ["Sydney","10"],  ["Suva","12"],  ["Honolulu","-10"],  ["San Francisco","-8"],  ["Arizona","-7"],  ["New York","-5"],  ["Newfoundland","-3.30"],  ["Nuuk","-3"]]; //Alter nothing below! Alignments will be lost! var d = document; var idx = d.getElementsByTagName('div').length; var ids = d.getElementsByTagName('select').length; var y = 87; var x = 60; var h = 4; var m = 5; var s = 5; var cf = []; var cd = []; var ch = []; var cm = []; var cs = []; var face = "3 4 5 6 7 8 9 10 11 12 1 2"; face = face.split(" "); var n = face.length; var e = 360/n; var hDims = 30/4; var zone = 0; var isItLocal = true; var ampm = ""; var daysInMonth = 31; var todaysDate = ""; var oddMinutes; var getOddMinutes; var addOddMinutes; var plusMinus = false; d.write("<div class = 'theContainer'>"                                     +"<div id = 'theCities"+idx+"' class = 'citystyle'>" +"<p style = 'margin:0px;'>"  +"<select id = 'city"+ids+"' class = 'selectstyle'>"); for (var i = 0; i < locations.length; i++){  d.write("<option value = "+locations[i][1]+">"+locations[i][0]+"<\/option>"); } d.write("<\/select><\/p><\/div>"); d.write('<div id = "theDate'+(idx)+'" class = "datestyle" style = "color:'+cCol+'">\!<\/div>'); d.write('<div id = "amOrPm'+(idx)+'" class = "ampmstyle" style = "color:'+aCol+'">\!<\/div>'); for (var i = 0; i < n; i++){  d.write('<div id = "theFace'+(idx+i)+'" class="facestyle" style="color:'+fCol+'">'+face[i]+'<\/div>');  } for (var i = 0; i < n; i++){  d.write('<div id = "theDots'+(idx+i)+'" class = "handsanddotsstyle" style = "background-color:'+dCol+'"><\/div>'); } for (var i = 0; i < h; i++){  d.write('<div id = "H'+(idx+i)+'" class = "handsanddotsstyle" style = "background-color:'+hCol+'"><\/div>'); } for (var i = 0; i < m; i++){  d.write('<div id = "M'+(idx+i)+'" class = "handsanddotsstyle" style = "background-color:'+mCol+'"><\/div>'); } for (var i = 0; i < s; i++){  d.write('<div id = "S'+(idx+i)+'" class = "handsanddotsstyle" style = "background-color:'+sCol+'"><\/div>'); } d.write("<\/div>"); function init(){ for (var i = 0; i < n; i++){  cf[i] = d.getElementById("theFace"+(idx+i)).style;   cf[i].top = y-6+30*1.4*Math.sin(i*e*Math.PI/180)+"px";   cf[i].left = x-6+30*1.4*Math.cos(i*e*Math.PI/180)+"px";  } for (var i = 0; i < n; i++){  cd[i] = d.getElementById("theDots"+(idx+i)).style;   cd[i].top = y+30*Math.sin(i*e*Math.PI/180)+"px";   cd[i].left = x+30*Math.cos(i*e*Math.PI/180)+"px";  } for (var i = 0; i < h; i++){  ch[i] = d.getElementById("H"+(idx+i)).style;  } for (var i = 0; i < m; i++){  cm[i] = d.getElementById("M"+(idx+i)).style;  } for (var i = 0; i < s; i++){  cs[i] = d.getElementById("S"+(idx+i)).style;  } d.getElementById("amOrPm"+idx).style.top = y-8+"px"; d.getElementById("amOrPm"+idx).style.left = x+6+"px"; d.getElementById("theCities"+idx).style.top = y-80+"px"; d.getElementById("theCities"+idx).style.left = x-55+"px"; d.getElementById("theDate"+idx).style.top = y+55+"px"; d.getElementById("theDate"+idx).style.left = x-49+"px"; d.getElementById("city"+ids).style.backgroundColor = bCol; d.getElementById("city"+ids).style.color = tCol; ClockAndAssign(); } function lcl(){ var c = document.getElementById("city"+ids); zone = c.options[c.selectedIndex].value; isItLocal = (c.options[0].selected); plusMinus = (zone.charAt(0) == "-"); oddMinutes = (zone.indexOf(".") != -1); if (oddMinutes){  getOddMinutes = zone.substring(zone.indexOf(".")+1,zone.length);  } if (plusMinus)  addOddMinutes = (oddMinutes)?parseInt(-getOddMinutes):0; else  addOddMinutes = (oddMinutes)?parseInt(getOddMinutes):0; } function ClockAndAssign(){ var hourAdjust = 0; var dayAdjust = 0; var monthAdjust = 0; var now = new Date(); var ofst = now.getTimezoneOffset()/60; var secs = now.getSeconds(); var secOffSet = secs - 15; if (secs < 15){   secOffSet = secs + 45;  } var sec = Math.PI * (secOffSet/30); var mins = now.getMinutes(); if (oddMinutes){   mins = mins+addOddMinutes;  } var minOffSet = mins - 15; if (mins < 15){   minOffSet = mins + 45;  } var min = Math.PI * (minOffSet/30); if (mins < 0){  mins += 60;  hourAdjust = -1;  } if (mins > 59){  mins -= 60;  hourAdjust = 1;  } hr = (isItLocal)?now.getHours()+hourAdjust:(now.getHours()+parseInt(ofst))+parseInt(zone)+hourAdjust; hrs = Math.PI * (hr-3)/6 + Math.PI * (parseInt(mins)) / 360; if (hr < 0){  hr += 24;  dayAdjust = -1;  } if (hr > 23){  hr -= 24;  dayAdjust = 1;  } day = now.getDate() + dayAdjust; if (day < 1){  day += daysInMonth;   monthAdjust = -1;  } if (day > daysInMonth){  day -= daysInMonth;   monthAdjust = 1;  } month = parseInt(now.getMonth() + 1 + monthAdjust); if (month == 2){  daysInMonth = 28;  } year = now.getYear(); if (year < 2000){  year = year + 1900;  } leapYear = (year%4 == 0); if (leapYear&&month == 2){  daysInMonth = 29;  } if (month < 1){  month += 12;  year--;  } if (month > 12){  month -= 12;  year++;  } todaysDate = day+" "+month+" "+year; ampm = (hr > 11)?"pm":"am"; for (var i = 0; i < s; i++){  cs[i].top = y+(i*hDims)*Math.sin(sec) + "px";  cs[i].left = x+(i*hDims)*Math.cos(sec) + "px";  } for (var i = 0; i < m; i++){  cm[i].top = y+(i*hDims)*Math.sin(min) + "px";  cm[i].left = x+(i*hDims)*Math.cos(min) + "px";  } for (var i = 0; i < h; i++){  ch[i].top = y+(i*hDims)*Math.sin(hrs) + "px";  ch[i].left = x+(i*hDims)*Math.cos(hrs) + "px";  } d.getElementById("amOrPm"+idx).firstChild.data = ampm; d.getElementById("theDate"+idx).firstChild.data = todaysDate; setTimeout(ClockAndAssign,100); } if (window.addEventListener){  window.addEventListener("load",init,false);  d.getElementById("city"+ids).addEventListener("change",lcl,false);  }   else if (window.attachEvent){  window.attachEvent("onload",init);  d.getElementById("city"+ids).attachEvent("onchange",lcl);  }  })(); } </script> </p> </body> </html>