function tzEntry(sName, sValue, bDst) {
	this.name = sName;
	this.value = sValue;
	this.dst = bDst;
}

tzEntries = new Array();
tzEntries[0] = new tzEntry("(GMT-12:00) Eniwetok, Kwajalein", "Dateline:12:0", false);
tzEntries[1] = new tzEntry("(GMT-11:00) Midway Island, Samoa", "Samoa:11:0", false);
tzEntries[2] = new tzEntry("(GMT-10:00) Hawaii", "Hawaiian:10:0", false);
tzEntries[3] = new tzEntry("(GMT-09:00) Alaska", "Alaskan:9:4|1|1|10|-1|1", true);
tzEntries[4] = new tzEntry("(GMT-08:00) Pacific Time (US & Canada); Tijuana", "Pacific:8:4|1|1|10|-1|1", true);
tzEntries[5] = new tzEntry("(GMT-07:00) Mountain Time (US & Canada)", "Mountain:7:4|1|1|10|-1|1", true);
tzEntries[6] = new tzEntry("(GMT-07:00) Arizona", "US%20Mountain:7:0", false);
tzEntries[7] = new tzEntry("(GMT-06:00) Saskatchewan", "Canada%20Central:6:0", false);
tzEntries[8] = new tzEntry("(GMT-06:00) Central America", "Central%20America:6:0", false);
tzEntries[9] = new tzEntry("(GMT-06:00) Central Time (US & Canada)", "Central:6:4|1|1|10|-1|1", true);
tzEntries[10] = new tzEntry("(GMT-06:00) Mexico City", "Mexico:6:4|1|1|10|-1|1", true);
tzEntries[11] = new tzEntry("(GMT-05:00) Eastern Time (US & Canada)", "Eastern:5:4|1|1|10|-1|1", true);
tzEntries[12] = new tzEntry("(GMT-05:00) Bogota, Lima, Quito", "SA%20Pacific:5:0", false);
tzEntries[13] = new tzEntry("(GMT-05:00) Indiana (East)", "US%20Eastern:5:0", false);
tzEntries[14] = new tzEntry("(GMT-04:00) Atlantic Time (Canada)", "Atlantic:4:4|1|1|10|-1|1", true);
tzEntries[15] = new tzEntry("(GMT-04:00) Santiago", "Pacific%20SA:4:10|2|7|3|2|7", true);
tzEntries[16] = new tzEntry("(GMT-04:00) Caracas, La Paz", "SA%20Western:4:0", false);
tzEntries[17] = new tzEntry("(GMT-03:30) Newfoundland", "Newfoundland:3003:4|1|1|10|-1|1", true);
tzEntries[18] = new tzEntry("(GMT-03:00) Brasilia", "E.%20South%20America:3:10|3|1|2|2|1", true);
tzEntries[19] = new tzEntry("(GMT-03:00) Greenland", "Greenland:3:4|1|1|10|-1|1", true);
tzEntries[20] = new tzEntry("(GMT-03:00) Buenos Aires, Georgetown", "SA%20Eastern:3:0", false);
tzEntries[21] = new tzEntry("(GMT-02:00) Mid-Atlantic", "Mid-Atlantic:2:3|-1|1|9|-1|1", true);
tzEntries[22] = new tzEntry("(GMT-01:00) Azores", "Azores:1:3|-1|1|10|-1|1", true);
tzEntries[23] = new tzEntry("(GMT-01:00) Cape Verde Is.", "Cape%20Verde:1:0", false);
tzEntries[24] = new tzEntry("(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", "GMT:0:3|-1|1|10|-1|1", true);
tzEntries[25] = new tzEntry("(GMT) Casablanca, Monrovia", "Greenwich:0:0", false);
tzEntries[26] = new tzEntry("(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", "Central%20Europe:-1:3|-1|1|10|-1|1", true);
tzEntries[27] = new tzEntry("(GMT+01:00) Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb", "Central%20European:-1:3|-1|1|10|-1|1", true);
tzEntries[28] = new tzEntry("(GMT+01:00) Brussels, Copenhagen, Madrid, Paris", "Romance:-1:3|-1|1|10|-1|1", true);
tzEntries[29] = new tzEntry("(GMT+01:00) West Central Africa", "W.%20Central%20Africa:-1:0", false);
tzEntries[30] = new tzEntry("(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", "W.%20Europe:-1:3|-1|1|10|-1|1", true);
tzEntries[31] = new tzEntry("(GMT+02:00) Bucharest", "E.%20Europe:-2:3|-1|1|9|-1|1", true);
tzEntries[32] = new tzEntry("(GMT+02:00) Cairo", "Egypt:-2:5|1|6|9|-1|4", true);
tzEntries[33] = new tzEntry("(GMT+02:00) Helsinki, Riga, Tallinn", "FLE:-2:3|-1|1|10|-1|1", true);
tzEntries[34] = new tzEntry("(GMT+02:00) Athens, Istanbul, Minsk", "GTB:-2:3|-1|1|10|-1|1", true);
tzEntries[35] = new tzEntry("(GMT+02:00) Jerusalem", "Israel:-2:0", false);
tzEntries[36] = new tzEntry("(GMT+02:00) Harare, Pretoria", "South%20Africa:-2:0", false);
tzEntries[37] = new tzEntry("(GMT+03:00) Kuwait, Riyadh", "Arab:-3:0", false);
tzEntries[38] = new tzEntry("(GMT+03:00) Baghdad", "Arabic:-3:4|1|1|10|1|1", true);
tzEntries[39] = new tzEntry("(GMT+03:00) Nairobi", "E.%20Africa:-3:0", false);
tzEntries[40] = new tzEntry("(GMT+03:00) Moscow, St. Petersburg, Volgograd", "Russian:-3:3|-1|1|10|-1|1", true);
tzEntries[41] = new tzEntry("(GMT+03:30) Tehran", "Iran:-3003:3|1|1|9|4|3", true);
tzEntries[42] = new tzEntry("(GMT+04:00) Abu Dhabi, Muscat", "Arabian:-4:0", false);
tzEntries[43] = new tzEntry("(GMT+04:00) Baku, Tbilisi, Yerevan", "Caucasus:-4:3|-1|1|10|-1|1", true);
tzEntries[44] = new tzEntry("(GMT+04:30) Kabul", "Afghanistan:-3004:0", false);
tzEntries[45] = new tzEntry("(GMT+05:00) Ekaterinburg", "Ekaterinburg:-5:3|-1|1|10|-1|1", true);
tzEntries[46] = new tzEntry("(GMT+05:00) Islamabad, Karachi, Tashkent", "West%20Asia:-5:0", false);
tzEntries[47] = new tzEntry("(GMT+05:30) Calcutta, Chennai, Mumbai, New Delhi", "India:-3005:0", false);
tzEntries[48] = new tzEntry("(GMT+05:45) Kathmandu", "Nepal:-4505:0", false);
tzEntries[49] = new tzEntry("(GMT+06:00) Astana, Dhaka", "Central%20Asia:-6:0", false);
tzEntries[50] = new tzEntry("(GMT+06:00) Almaty, Novosibirsk", "N.%20Central%20Asia:-6:3|-1|1|10|-1|1", true);
tzEntries[51] = new tzEntry("(GMT+06:00) Sri Jayawardenepura", "Sri%20Lanka:-6:0", false);
tzEntries[52] = new tzEntry("(GMT+06:30) Rangoon", "Myanmar:-3006:0", false);
tzEntries[53] = new tzEntry("(GMT+07:00) Krasnoyarsk", "North%20Asia:-7:3|-1|1|10|-1|1", true);
tzEntries[54] = new tzEntry("(GMT+07:00) Bangkok, Hanoi, Jakarta", "SE%20Asia:-7:0", false);
tzEntries[55] = new tzEntry("(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "China:-8:0", false);
tzEntries[56] = new tzEntry("(GMT+08:00) Irkutsk, Ulaan Bataar", "North%20Asia%20East:-8:3|-1|1|10|-1|1", true);
tzEntries[57] = new tzEntry("(GMT+08:00) Kuala Lumpur, Singapore", "Singapore:-8:0", false);
tzEntries[58] = new tzEntry("(GMT+08:00) Taipei", "Taipei:-8:0", false);
tzEntries[59] = new tzEntry("(GMT+08:00) Perth", "W.%20Australia:-8:0", false);
tzEntries[60] = new tzEntry("(GMT+09:00) Seoul", "Korea:-9:0", false);
tzEntries[61] = new tzEntry("(GMT+09:00) Osaka, Sapporo, Tokyo", "Tokyo:-9:0", false);
tzEntries[62] = new tzEntry("(GMT+09:00) Yakutsk", "Yakutsk:-9:3|-1|1|10|-1|1", true);
tzEntries[63] = new tzEntry("(GMT+09:30) Darwin", "AUS%20Central:-3009:0", false);
tzEntries[64] = new tzEntry("(GMT+09:30) Adelaide", "Cen.%20Australia:-3009:10|-1|1|3|-1|1", true);
tzEntries[65] = new tzEntry("(GMT+10:00) Canberra, Melbourne, Sydney", "AUS%20Eastern:-10:10|-1|1|3|-1|1", true);
tzEntries[66] = new tzEntry("(GMT+10:00) Brisbane", "E.%20Australia:-10:0", false);
tzEntries[67] = new tzEntry("(GMT+10:00) Hobart", "Tasmania:-10:10|1|1|3|-1|1", true);
tzEntries[68] = new tzEntry("(GMT+10:00) Vladivostok", "Vladivostok:-10:3|-1|1|10|-1|1", true);
tzEntries[69] = new tzEntry("(GMT+10:00) Guam, Port Moresby", "West%20Pacific:-10:0", false);
tzEntries[70] = new tzEntry("(GMT+11:00) Magadan, Solomon Is., New Caledonia", "Central%20Pacific:-11:0", false);
tzEntries[71] = new tzEntry("(GMT+12:00) Fiji, Kamchatka, Marshall Is.", "Fiji:-12:0", false);
tzEntries[72] = new tzEntry("(GMT+12:00) Auckland, Wellington", "New%20Zealand:-12:10|1|1|3|3|1", true);
tzEntries[73] = new tzEntry("(GMT+13:00) Nuku\'alofa", "Tonga:-13:0", false);

// Common JavaScript functions for Web user preferences

function prf_isCookieEnabled() {
	if (navigator.appName.indexOf("Microsoft") >= 0 || eval(navigator.appVersion.charAt(0)) >= 5) 
		return navigator.cookieEnabled;
	return true;
}

function prf_isNumStr(str) {
	var i;
	var isNum = true;

	for (i = 0; i < str.length; i++) {
		if ("0123456789".indexOf(str.charAt(i)) < 0) {
			isNum = false;
			break;
		}
	}
	return isNum;
}

function prf_getDomainStr() {
	var dname = "";
	var dcmps = location.hostname.split(".");
	var ncmps = dcmps.length;

	if (ncmps == 1 || prf_isNumStr(dcmps[ncmps - 1])) {
		dname = "";
	}
	else {
		var i, start_idx;
		if (ncmps > 3 && dcmps[ncmps - 1].length == 2) {
			start_idx = ncmps - 3;
		}
		else {
			start_idx = ncmps -2;
		}
		for (i = start_idx; i < ncmps; i++) {
			dname += ".";
			dname += dcmps[i];
		}
	}

	return dname;
}

function utfEscape(str) {
	var i;
	var resultStr = "";
	for (i = 0; i < str.length; i++) {
		var val1, val2, val3;
		var escStr;
		var codePoint = str.charCodeAt(i);

		if (codePoint > 0x7FF) {
			val1 = ((codePoint & 0xF000) >> 12) | 0xE0;
			val2 = (codePoint & 0xFC0) >> 6 | 0x80;
			val3 = (codePoint & 0x3F) | 0x80;

			escStr = "%" + val1.toString(16).toUpperCase() +
				"%" + val2.toString(16).toUpperCase() +
				"%" + val3.toString(16).toUpperCase();
		}
		else if (codePoint > 0x7F) {
			val1 = ((codePoint & 0x7C0) >> 6) | 0xC0;
			val2 = (codePoint & 0x3F) | 0x80;

			escStr = "%" + val1.toString(16).toUpperCase() +
				"%" + val2.toString(16).toUpperCase();
		}
		else {
			escStr = escape(str.charAt(i));
		}
		resultStr += escStr;
	}

	return resultStr;
}


// JavaScript functions for time zone preferences

var prf_tz_initialized = false;
var currentTzPrf;
var newTzPrf;
var zoneOptions;

function prf_tz_getCookieDomainStr() {
	var cdomstr = "";
	var multiServer = true;
	var dstr;

	if (multiServer) {
		dstr = prf_getDomainStr();
		if (dstr.length > 0)
			cdomstr = "; domain=" + dstr;
	}
	return cdomstr;
}

function timeZonePreferences(sZone, sDst) {
	this.zone = sZone;
	this.dst = sDst;
}

function initialize() {
	var optidx;
	var sZone;
	var sDst

	if (prf_tz_initialized == false) {
		sZone = utfEscape("GMT") + ":" + "0" + ":" + "3|-1|1|10|-1|1";
		sDst = "1";
		currentTzPrf = new timeZonePreferences(sZone, sDst);
		newTzPrf = new timeZonePreferences(sZone, sDst);

		zoneOptions = new Array();
		for (optidx = 0; optidx < tzEntries.length; optidx++) {
			zoneOptions[optidx] = new Option(tzEntries[optidx].name, tzEntries[optidx].value);
		}

		prf_tz_initialized = true;
	}
}

function isCustom() {
	if (document.cookie.indexOf("DomTimeZonePrfM=+") == -1)
		return false;
	return true;
}

function isDstAvailable(idx) {
	return tzEntries[idx].dst;
}

function savePreferences() {
	var tzcookie;
	if (prf_isCookieEnabled()) {
		tzcookie = "DomTimeZonePrfM=";
		tzcookie += "+";
		tzcookie += ":" + "6";
		tzcookie += ":" + newTzPrf.zone;
		tzcookie += ":" + newTzPrf.dst;
		tzcookie += "; expires=";
		tzcookie += "Tuesday, 08-Sep-2020 04:53:34 GMT";
		tzcookie += "; path=/";
		tzcookie += prf_tz_getCookieDomainStr();
		document.cookie = tzcookie;

		currentTzPrf.zone = newTzPrf.zone;
		currentTzPrf.dst = newTzPrf.dst;

		return true;
	}
	alert("Could not save the preferences. Cookies must be enabled.");
	return false;
}

function deletePreferences() {
	var tzcookie;
	if (prf_isCookieEnabled()) {
		if (document.cookie.indexOf("DomTimeZonePrfM=") >= 0) {
			tzcookie = "DomTimeZonePrfM=-"
			tzcookie += "; expires=Saturday, 4-Oct-1997 13:00:00 GMT";
			tzcookie += "; path=/";
			tzcookie += prf_tz_getCookieDomainStr();
			document.cookie = tzcookie;
		}
		return true;
	}
	alert("Could not save the preferences. Cookies must be enabled.");
	return false;
}

function getTargetHost() {
	var host;
	var multiServer = true;
	var dstr = "";

	if (multiServer) {
		dstr = prf_getDomainStr();
		if (dstr.length == 0)
			host = "";
		else
			host = "*" + dstr;
	}
	else
		host = location.hostname;

	return host;
}
