// JavaScript Document

// vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars
var tzone = null;
var clockID = null;
var clockRunning = false;
var x = new Date();
var ltime = x.getTime();
var stime = new Date();
	stime = stime.getTime();
var diff = stime - ltime;
var btime = ltime;

var weekday=new Array(7)
	weekday[0]="Sunday"
	weekday[1]="Monday"
	weekday[2]="Tuesday"
	weekday[3]="Wednesday"
	weekday[4]="Thursday"
	weekday[5]="Friday"
	weekday[6]="Saturday"

var MonthName=new Array(12)
	MonthName[0] = "January";
	MonthName[1]= "February";
	MonthName[2]= "March";
	MonthName[3]= "April";
	MonthName[4]= "May";
	MonthName[5]= "June";
	MonthName[6]= "July";
	MonthName[7]= "August";
	MonthName[8]= "September";
	MonthName[9]= "October";
	MonthName[10]= "November";
	MonthName[11]= "December";


	var Zone_letter = " ";
	var Military = "none";
	var Civilian_Time_Zone = "Un-Knowen";  
	var zone_offset = " "; 
	var adj_offset = 0;
	
	var lltime = new Date(ltime - diff);
	var tzone_date = new Date();
	var local_offset = tzone_date.getTimezoneOffset();
	    local_offset = parseFloat(local_offset);
	    local_offset = local_offset / 60;
	var adjusted_offset = tzone_date.getTimezoneOffset(local_offset);
	
	var rational_offset = "\&nbsp= Please wait.";
	var rational_tzone = null;
	var offset_parts = new Array();
	var military_time   = "Military Time Zone" ;
	var civilian_time   = "Civilian_time";
	
	var start = 301;
	var left = "Clock updated";
	
	var t = null;
	var sec = null;

// endvars-endvars-endvars-endvars-endvars-endvars-endvars-endvars-endvars

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// Function-Function-Function-Function-Function-Function-Function

function UpdateDisplay(update) 
{
	divWrite("last_update", update);
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// Function-Function-Function-Function-Function-Function-Function-Function
function DateDisplay(DisplayDate, layer) 
{
	divWrite(layer, DisplayDate);
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//Function-Function-Function-Function-Function-Function-Function-Function

function TimeDisplay(DisplayTime, layer) 
{
	divWrite(layer, DisplayTime);
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endfunc

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// add a leading zero if the time is hour or minutes is a single digit
function padout(number) { return (number < 10) ? '0' + number : number; }
// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//Function-Function-Function-Function-Function-Function-Function-Function
function stop()
{
	if(clockRunning) clearTimeout(clockID);
	clockRunning = false;
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// Function-Function-Function-Function-Function-Function-Function

function makeTIME(day, date, month, year, hour, minute, seconds, layerDate, layerTime)
{
	var AmPm;
	
	day = weekday[day];
	
	month = MonthName[month]

	minute 	= padout(minute);
	seconds = padout(seconds);


	if (hour >= 0 && hour <= 11)
	{
		AmPm = ("a.m.");
	}
	else 
	{
		AmPm = ("p.m.");
	}

	if (hour >= 13)
	{
		adjHR = (parseInt(hour) - 12);
	}
	else
	{
		adjHR = hour;
	}


		DateDisplay(day + ", " + date + " " + month + " " + year, layerDate);
		TimeDisplay(hour + ":" + minute + ":" + seconds + " / " + adjHR + ":" + minute + ":" + seconds + " " + AmPm, layerTime);

}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction


// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

var noos = null;

// Function-Function-Function-Function-Function-Function-Function

function showUpdate(remaining) 
{
	noos = "<input type=\"button\" name=\"manual_update\" value=\"Click here to manually re-synchronize the clock\" onClick=\"window.location.reload(true)\;\">";

	if (remaining > 1 && remaining <= 300)
	{
		UpdateDisplay("The clock will automatically re-synchronize in " + remaining + " seconds.");
		setTimeout('UpdateButtonDisplay(noos)', 10000);
	}

	else if (remaining == 1)
	{
		UpdateDisplay("The clock will automatically re-synchronize in " + remaining + " second.");
	}
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction-endFunction

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// Function-Function-Function-Function-Function-Function-Function-func-func-func-func-func-func-func
function OffsetRationalizer(rational_tzone) 
{
	var plus_minus = "+/- ";

//  check to see if Daylight Saving time is observe.
//  remember that in the Southern Hemisphere - DST is from October intil March	
	adjusted_offset = checkTimeZone(local_offset);


// set to a negative of positve numbner or +/- of GMT
	
	if (local_offset < 0)
		{
			plus_minus = "+ ";
		}
	if (local_offset > 0)
		{
			plus_minus = "- ";
		}

	local_offset 	= Math.abs(local_offset);
	adjusted_offset	= Math.abs(adjusted_offset);

	local_offset = new String(local_offset);
	offset_parts = local_offset.split(".");

// convert decimal to parts of an hour (#.25 = #:15)	
	switch (offset_parts[1])
			 {
				case "00" :
					offset_parts[1] = "00";
					break;
				case "25" :
					offset_parts[1] = "15";
					break;
				case "5" :
					offset_parts[1] = "30";
					break;
				case "75" :
					offset_parts[1] = "45";
					break;
				default :
					offset_parts[1] = "00";
					break;
			 }
	

	local_offset = offset_parts[0];
	if (offset_parts[1] != "00")
	{
		local_offset = local_offset + ":" + offset_parts[1];
	}
	
	zone_offset = (plus_minus + adjusted_offset);
//	Time_zone_name(zone_offset, Zone_Letter, Military, Civilian_Time_Zone ); 

		switch (zone_offset)
			 {
				case "+/- 0" :
					Zone_Letter			= "Z";
					Military			= "Zulu";
					Civilian_Time_Zone	= "GMT: Greenwich Mean / UT: Universal";
					break;
				case "+ 1" :
					Zone_Letter			= "A";
					Military			= "Alpha";
					Civilian_Time_Zone	= "CET: Central European";
					break;
				case "+ 2" :
					Zone_Letter			= "B";
					Military			= "Bravo";
					Civilian_Time_Zone	= "EET: Eastern European";
					break;
				case "+ 3" :
					Zone_Letter			= "C";
					Military			= "Charlie";
					Civilian_Time_Zone	= "BT: Baghdad";
					break;
				case "+ 3:30" :
					Zone_Letter			= "C*";
					Military			= " ";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 4" :
					Zone_Letter			= "D";
					Military			= "Delta";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 4:30" :
					Zone_Letter			= "S*";
					Military			= " ";
					Civilian_Time_Zone	= "Kabul";
					break;
				case "+ 5" :
					Zone_Letter			= "E";
					Military			= "Echo";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 5:30" :
					Zone_Letter			= "E*";
					Military			= " ";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 5:45" :
					Zone_Letter			= "E * *";
					Military			= " ";
					Civilian_Time_Zone	= "Kathmandu";
					break;
				case "+ 6" :
					Zone_Letter			= "F";
					Military			= "Foxtrot";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 6:30" :
					Zone_Letter			= "F*";
					Military			= " ";
					Civilian_Time_Zone	= "Rangoon";
					break;
				case "+ 7" :
					Zone_Letter			= "G";
					Military			= "Golf";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 8" :
					Zone_Letter			= "H";
					Military			= "Hotel";
					Civilian_Time_Zone	= "CCT: China Coast";
					break;
				case "+ 9" :
					Zone_Letter			= "I";
					Military			= "India";
					Civilian_Time_Zone	= "JST: Japan Standard";
					break;
				case "+ 9:30" :
					Zone_Letter			= "I*";
					Military			= " ";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 10" :
					Zone_Letter			= "K";
					Military			= "Kilo";
					Civilian_Time_Zone	= "GST: Guam Standard";
					break;
				case "+ 10:30" :
					Zone_Letter			= "K*";
					Military			= " ";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 11" :
					Zone_Letter			= "L";
					Military			= "Lima";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 11:30" :
					Zone_Letter			= "L*";
					Military			= " ";
					Civilian_Time_Zone	= "None";
					break;
				case "+ 12" :
					Zone_Letter			= "M";
					Military			= "Mike";
					Civilian_Time_Zone	= "IDLE: International Date Line East / NZST: New Zealand Standard";
					break;
					
//    West of Greenwich					
				case "- 1" :
					Zone_Letter			= "N";
					Military			= "November";
					Civilian_Time_Zone = "WAT: West Africa";
					break;
				case "- 2" :
					Zone_Letter			= "O";
					Military			= "Oscar";
					Civilian_Time_Zone = "AT: Azores / Mid-Atlantic";
					break;
				case "- 3" :
					Zone_Letter			= "P";
					Military			= "Papa";
					Civilian_Time_Zone = "AT: Azores";
					break;
				case "- 3:30" :
					Zone_Letter			= "P*";
					Military			= " ";
					Civilian_Time_Zone = "Newfoundland";
					break;

				case "- 4" :
					Zone_Letter			 = "Q";
					Military			 = "Quebec";
					Civilian_Time_Zone   = "AST: Atlantic Standard";
					Civilian_Time_Zone_D = "ADT: Atlantic Daylight";
					break;
				case "- 5" :
					Zone_Letter			= "R";
					Military			= "Romeo";
					Civilian_Time_Zone = "EST: Eastern Standard";
					Civilian_Time_Zone_D = "EDT: Eastern Daylight";
					break;
				case "- 6" :
					Zone_Letter			= "S";
					Military			= "Sierra";
					Civilian_Time_Zone = "CST: Central Standard";
					Civilian_Time_Zone_D = "CDT: Central Daylight";
					break;
				case "- 7" :
					Zone_Letter			= "T";
					Military			= "Tango";
					Civilian_Time_Zone = "MST: Mountain Standard";
					Civilian_Time_Zone_D = "NDT: Mountain Daylight";
					break;
				case "- 8" :
					Zone_Letter			= "U";
					Military			= "Uniform";
					Civilian_Time_Zone = "PST: Pacific Standard";
					Civilian_Time_Zone_D = "PDT: Pacific Daylight";
					break;
				case "- 9" :
					Zone_Letter			= "V";
					Military			= "Victor";
					Civilian_Time_Zone = "YST: Yukon Standard";
					Civilian_Time_Zone_D = "YDT: Yukon Daylight";
					break;
				case "- 10" :
					Zone_Letter			= "W";
					Military			= "Whiskey";
					Civilian_Time_Zone = "AHST: Alaska-Hawaii Standard / CAT: Central Alaska";
					Civilian_Time_Zone_D = "AhDT: Alaska-Hawaii Daylight / CAT: Central Alaska";
					break;
				case "- 11" :
					Zone_Letter			= "X";
					Military			= "X-ray";
					Civilian_Time_Zone = "NT: Nome";
					break;
				case "- 12" :
					Zone_Letter			= "Y";
					Military			= "Yankee";
					Civilian_Time_Zone = "IDLW: International Date Line West";
					break;
			}
			

	rational_offset = "\&nbsp= GMT " + plus_minus + adjusted_offset;
	military_time   = "Military Time Zone - " + Zone_Letter + " (" + Military + ")";
	civilian_time   = "Civilian Time Zone - " + Civilian_Time_Zone;

}

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//  Determin if location observes Daylight Saving Time
//  remember that in the Southern Hemisphere - DST is from October intil March	

function checkTimeZone(adj_offset)
{
   var rightNow = new Date();
   var date_jan = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
   var date_june = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
   var temp = date_jan.toGMTString();
   var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   var temp = date_june.toGMTString();
   var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   var hoursDiffJanTime = (date_jan - date3) / (1000 * 60 * 60);
   var hoursDiffJuneTime = (date_june - date4) / (1000 * 60 * 60);
   var DST_Observed_string = "un-known";
   
   if (hoursDiffJuneTime == hoursDiffJanTime) { 
      DST_Observed_string = "Daylight Saving Time is NOT observed here.";
      adj_offset = hoursDiffJanTime;
   } else {
      DST_Observed_string =  "Daylight Saving Time is observed here.";
	  if (hoursDiffJuneTime > hoursDiffJanTime) { 
     	 adj_offset = hoursDiffJanTime;
	   }
	   else {
    	 adj_offset = hoursDiffJuneTime;
	   }
   }

	adj_offset	= Math.abs(adj_offset);
   	if (local_offset < adj_offset) {
		DST_Observed_string = new String(DST_Observed_string + " " + 
								"Currently you are on Daylight Saving Time (DT).");
		}
	else {
	  	DST_Observed_string = new String(DST_Observed_string + " " + 
								"Currently you are on Standard Time (ST).");
		  }
		  
	divWrite("dst_observed", DST_Observed_string );

    return (adj_offset);
}

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars-vars

var start_sec = (new Date()).getTime();
var count = 0;

// endvars-endvars-endvars-endvars-endvars-endvars-endvars-endvars-endvars

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// Function-Function-Function-Function-Function-Function-Function-func-func-func-func-func-func-func
function display() 
{
	if (count > 0)
	{
		new_diff = init_diff + 1000;

	}

	btime = (new Date()).getTime();
	lltime = new Date(btime + diff);

	init_diff = (btime - start_sec);
	if (count > 0)
	{
		overall_diff = new_diff - init_diff;

		if (overall_diff > 999 || overall_diff < -999)
		{
			window.location.reload(true);
		}
	}

	showUpdate(left);
	
// set Univesal Time (UTC) //
	var UTCMonth 	= lltime.getUTCMonth();
	var UTCDay 		= lltime.getUTCDay();
	var UTCDate 	= lltime.getUTCDate();
	var UTCYear 	= lltime.getUTCFullYear();
	
	var UTCHours 	= lltime.getUTCHours();
	var UTCMinutes 	= lltime.getUTCMinutes();
	var aSeconds 	= lltime.getUTCSeconds();
	makeTIME (UTCDay, UTCDate, UTCMonth, UTCYear, UTCHours, UTCMinutes, aSeconds, "utc_date", "utc_time");
	
	divWrite("local_time_zone_view", rational_offset);
	divWrite("military_time_zone_view", military_time);
	divWrite("civilian_time_zone_view", civilian_time );
//	divWrite("offsethelp", zonehelp);

// Set local Time //
	var lMonth 	= lltime.getMonth();
	var lDay 	= lltime.getDay();
	var lDate 	= lltime.getDate();
	var lYear 	= lltime.getFullYear();
	
	var lHours 	= lltime.getHours();
	var lMinutes = lltime.getMinutes();
	var aSeconds = lltime.getSeconds();
	makeTIME (lDay, lDate, lMonth, lYear, lHours, lMinutes, aSeconds, "local_date", "local_time");

	left = (start - 1);
	start = left;
	
	if (left < 0)
	{
		window.location.reload(true);
	}
	
	clockID = setTimeout("display()", 1000 - (lltime.getTime()  % 1000));
		
	clockRunning = true;
	
	count = count + 1;
}

// endFunction-endFunction-endFunction-endFunction-endFunction-endfunc

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//Function-Function-Function-Function-Function-Function-Function-Function
function GetTime()
{
	stop();
	
	display();
	
	rational_tzone = 0;
	OffsetRationalizer(rational_tzone);
}
// endFunction-endFunction-endFunction-endFunction-endFunction-endFunction

// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
