1// script by Josh Fraser (http://www.onlineaspect.com)
2
3function calculate_time_zone() {
4	var rightNow = new Date();
5	var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);  // jan 1st
6	var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0); // june 1st
7	var temp = jan1.toGMTString();
8	var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
9	temp = june1.toGMTString();
10	var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
11	var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
12	var daylight_time_offset = (june1 - june2) / (1000 * 60 * 60);
13	var dst;
14	if (std_time_offset == daylight_time_offset) {
15		dst = "0"; // daylight savings time is NOT observed
16	} else {
17		// positive is southern, negative is northern hemisphere
18		var hemisphere = std_time_offset - daylight_time_offset;
19		if (hemisphere >= 0)
20			std_time_offset = daylight_time_offset;
21		dst = "1"; // daylight savings time is observed
22	}
23	var i;
24	// check just to avoid error messages
25	if (document.getElementById('timezone')) {
26		for (i = 0; i < document.getElementById('timezone').options.length; i++) {
27			if (document.getElementById('timezone').options[i].value == convert(std_time_offset)+","+dst) {
28				document.getElementById('timezone').selectedIndex = i;
29				break;
30			}
31		}
32	}
33}
34
35function convert(value) {
36	var hours = parseInt(value);
37   	value -= parseInt(value);
38	value *= 60;
39	var mins = parseInt(value);
40   	value -= parseInt(value);
41	value *= 60;
42	var secs = parseInt(value);
43	var display_hours = hours;
44	// handle GMT case (00:00)
45	if (hours == 0) {
46		display_hours = "00";
47	} else if (hours > 0) {
48		// add a plus sign and perhaps an extra 0
49		display_hours = (hours < 10) ? "+0"+hours : "+"+hours;
50	} else {
51		// add an extra 0 if needed
52		display_hours = (hours > -10) ? "-0"+Math.abs(hours) : hours;
53	}
54
55	mins = (mins < 10) ? "0"+mins : mins;
56	return display_hours+":"+mins;
57}
58
59onload = calculate_time_zone;