<?xml version="1.0" encoding="UTF-8"?>
<Module>
	<ModulePrefs
		title="Friends' Time"
		description="Application for your Orkut profile that displays the time and date at your friends' locations. You can preset the time zones of your friends, or they are automatically picked up when your friends setup the application on their own profiles. Friends' time is especially useful when you have friends oversea or a few time zones away, as it allows you to check what time it is at their locations before calling them. An integrated meeting planner tool makes very easy finding at what time to have an online group meeting or conference call."
		thumbnail="http://www.ljmsite.com/google/orkut/friendstime/friendstime_thumbnail.png"
		screenshot="http://www.ljmsite.com/google/orkut/friendstime/friendstime_screenshot.png"
                author="Jerome Mouton"
                author_email="igoogle_gadgets@ljmsite.com"
                author_location="Huntsville, AL, USA"
                author_affiliation="LjmSite"
                author_aboutme="Google API gadget and web application developer, tech project manager in globally dispersed team environment, computer geek on call, etc. Come check me out at LjmSite.com and contact me to discuss gadget projects or opportunities."
                author_link="http://www.ljmsite.com/"
                author_photo="http://www.ljmsite.com/google/gadgets/jerome.png"
	>
		<Require feature="opensocial-0.7"/>
		<Require feature="dynamic-height"/>
		<Locale messages="http://www.ljmsite.com/google/gadgets/worldclocks/en_ALL.xml" /> 
		<Locale lang="da" messages="http://www.ljmsite.com/google/gadgets/worldclocks/da_ALL.xml" /> 
		<Locale lang="de" messages="http://www.ljmsite.com/google/gadgets/worldclocks/de_ALL.xml" /> 
		<Locale lang="en" messages="http://www.ljmsite.com/google/gadgets/worldclocks/en_ALL.xml" /> 
		<Locale lang="es" messages="http://www.ljmsite.com/google/gadgets/worldclocks/es_ALL.xml" /> 
		<Locale lang="fi" messages="http://www.ljmsite.com/google/gadgets/worldclocks/fi_ALL.xml" /> 
		<Locale lang="fr" messages="http://www.ljmsite.com/google/gadgets/worldclocks/fr_ALL.xml" /> 
		<Locale lang="it" messages="http://www.ljmsite.com/google/gadgets/worldclocks/it_ALL.xml" /> 
		<Locale lang="ja" messages="http://www.ljmsite.com/google/gadgets/worldclocks/ja_ALL.xml" /> 
		<Locale lang="ko" messages="http://www.ljmsite.com/google/gadgets/worldclocks/ko_ALL.xml" /> 
		<Locale lang="nl" messages="http://www.ljmsite.com/google/gadgets/worldclocks/nl_ALL.xml" /> 
		<Locale lang="no" messages="http://www.ljmsite.com/google/gadgets/worldclocks/no_ALL.xml" />
		<Locale lang="pt-br" messages="http://www.ljmsite.com/google/gadgets/worldclocks/pt-br_ALL.xml" /> 
		<Locale lang="ru" messages="http://www.ljmsite.com/google/gadgets/worldclocks/ru_ALL.xml" /> 
		<Locale lang="sv" messages="http://www.ljmsite.com/google/gadgets/worldclocks/sv_ALL.xml" /> 
		<Locale lang="zh-cn" messages="http://www.ljmsite.com/google/gadgets/worldclocks/zh-cn_ALL.xml" /> 
		<Locale lang="zh-tw" messages="http://www.ljmsite.com/google/gadgets/worldclocks/zh-tw_ALL.xml" /> 
		<Locale lang="el" messages="http://www.ljmsite.com/google/gadgets/worldclocks/el_ALL.xml" /> 
		<Locale lang="hu" messages="http://www.ljmsite.com/google/gadgets/worldclocks/hu_ALL.xml" /> 
		<Locale lang="pl" messages="http://www.ljmsite.com/google/gadgets/worldclocks/pl_ALL.xml" /> 
		<Locale lang="th" messages="http://www.ljmsite.com/google/gadgets/worldclocks/th_ALL.xml" /> 
		<Locale lang="ro" messages="http://www.ljmsite.com/google/gadgets/worldclocks/ro_ALL.xml" /> 
		<Locale lang="uk" messages="http://www.ljmsite.com/google/gadgets/worldclocks/uk_ALL.xml" /> 
		<Locale lang="tr" messages="http://www.ljmsite.com/google/gadgets/worldclocks/tr_ALL.xml" /> 
		<Locale lang="hi" messages="http://www.ljmsite.com/google/gadgets/worldclocks/hi_ALL.xml" /> 
  </ModulePrefs>
  <Content type="html">
<![CDATA[
<!-- ALm6fM24PPyXMxRQX0GZT7m6_tQbypka3RRJdE32L1pwckXOb_RUJevdZ07Bs-SHe5JuCKrxpwbBE8J5s3jY2kjC51RAJ6Jpu3EUtd-3tQRVgxs26wAiY8__PFFfwgsRrjctyXYSTwgAdTzFlcxbaDdZEi8MEUp-Xw== -->

<script type="text/javascript">

///////////////////////////////////////////////////////////////////////////
// Object dumper for debug
///////////////////////////////////////////////////////////////////////////
var MAX_DUMP_DEPTH = 10;
function dumpObj(obj, name, indent, depth) {
  if (depth > MAX_DUMP_DEPTH) {
    return indent + name + ": <Maximum Depth Reached>\n";
  }

  if (typeof obj == "object") {
    var child = null;
    var output = indent + name + "\n";
    indent += "\t";
    for (var item in obj)
    {
      try {
        child = obj[item];
      } catch (e) {
        child = "<Unable to Evaluate>";
      }
      if (typeof child == "object") {
        output += dumpObj(child, item, indent, depth + 1);
      } else {
        output += indent + item + ": " + child + "\n";
      }
    }
    return output;
  } else {
    return obj;
  }
}

function getFirstName(full_name) {
    var first = full_name;
    var space = full_name.indexOf(' ');
    if(space != -1) {
        first = full_name.substring(0, space);
    }
    return first;
}

///////////////////////////////////////////////////////////////////////////
// Time zone offset database - Auto generated every hour
///////////////////////////////////////////////////////////////////////////
var tzOffset = new Object();
tzOffset['UTC']=0;
tzOffset['AF']=4.5;
tzOffset['AL']=2;
tzOffset['DZ']=1;
tzOffset['AS']=-11;
tzOffset['AD']=2;
tzOffset['AO']=1;
tzOffset['AI']=-4;
tzOffset['AG']=-4;
tzOffset['AR-BA']=-3;
tzOffset['AR-CT']=-3;
tzOffset['AR-CC']=-3;
tzOffset['AR-CH']=-3;
tzOffset['AR-DF']=-3;
tzOffset['AR-CB']=-3;
tzOffset['AR-CN']=-3;
tzOffset['AR-ER']=-3;
tzOffset['AR-FM']=-3;
tzOffset['AR-JY']=-3;
tzOffset['AR-LP']=-3;
tzOffset['AR-LR']=-3;
tzOffset['AR-MZ']=-3;
tzOffset['AR-MN']=-3;
tzOffset['AR-NQ']=-3;
tzOffset['AR-RN']=-3;
tzOffset['AR-SA']=-3;
tzOffset['AR-SJ']=-3;
tzOffset['AR-SL']=-3;
tzOffset['AR-SC']=-3;
tzOffset['AR-SF']=-3;
tzOffset['AR-SE']=-3;
tzOffset['AR-TF']=-3;
tzOffset['AR-TM']=-3;
tzOffset['AM']=4;
tzOffset['AW']=-4;
tzOffset['AU-ACT']=10;
tzOffset['AU3']=9.5;
tzOffset['AU1']=10.5;
tzOffset['AU-NSW']=10;
tzOffset['AU-NT']=9.5;
tzOffset['AU-QLD']=10;
tzOffset['AU-SA']=9.5;
tzOffset['AU-TAS']=10;
tzOffset['AU-VIC']=10;
tzOffset['AU-WA']=8;
tzOffset['AT']=2;
tzOffset['AZ']=5;
tzOffset['BS']=-4;
tzOffset['BH']=3;
tzOffset['BD']=6;
tzOffset['BB']=-4;
tzOffset['BY']=3;
tzOffset['BE']=2;
tzOffset['BZ']=-6;
tzOffset['BJ']=1;
tzOffset['BM']=-3;
tzOffset['BT']=6;
tzOffset['BO']=-4;
tzOffset['BA']=2;
tzOffset['BW']=2;
tzOffset['BR-AC']=-4;
tzOffset['BR-AL']=-3;
tzOffset['BR-AP']=-3;
tzOffset['BR-AM']=-4;
tzOffset['BR-BA']=-3;
tzOffset['BR-CE']=-3;
tzOffset['BR-DF']=-3;
tzOffset['BR-ES']=-3;
tzOffset['BR-FN']=-2;
tzOffset['BR-GO']=-3;
tzOffset['BR-MA']=-3;
tzOffset['BR-MT']=-4;
tzOffset['BR-MS']=-4;
tzOffset['BR-MG']=-3;
tzOffset['BR-PA1']=-3;
tzOffset['BR-PA2']=-4;
tzOffset['BR-PB']=-3;
tzOffset['BR-PR']=-3;
tzOffset['BR-PE']=-3;
tzOffset['BR-PI']=-3;
tzOffset['BR-RJ']=-3;
tzOffset['BR-RN']=-3;
tzOffset['BR-RS']=-3;
tzOffset['BR-RO']=-4;
tzOffset['BR-RR']=-4;
tzOffset['BR-SC']=-3;
tzOffset['BR-SP']=-3;
tzOffset['BR-SE']=-3;
tzOffset['BR-TO']=-3;
tzOffset['BN']=8;
tzOffset['BG']=3;
tzOffset['BF']=0;
tzOffset['BI']=2;
tzOffset['KH']=7;
tzOffset['CM']=1;
tzOffset['CA-AB']=-6;
tzOffset['CA-BC']=-7;
tzOffset['CA-BC1']=-7;
tzOffset['CA-BC2']=-6;
tzOffset['CA2']=-3;
tzOffset['CA2A']=-2.5;
tzOffset['CA-MB']=-5;
tzOffset['CA-NB']=-3;
tzOffset['CA-NF']=-2.5;
tzOffset['CA-NT']=-6;
tzOffset['CA-NS']=-3;
tzOffset['CA-NT2A']=-5;
tzOffset['CA-NT2B']=-5;
tzOffset['CA-NT2']=-4;
tzOffset['CA-NT2C']=-6;
tzOffset['CA-ON']=-4;
tzOffset['CA-ON1']=-5;
tzOffset['CA-PE']=-3;
tzOffset['CA-QC']=-4;
tzOffset['CA-SK']=-6;
tzOffset['CA-SK2']=-5;
tzOffset['CA-SK1']=-6;
tzOffset['CA-YT']=-7;
tzOffset['CV']=-1;
tzOffset['KY']=-5;
tzOffset['CF']=1;
tzOffset['TD']=1;
tzOffset['CL']=-4;
tzOffset['CL2']=-6;
tzOffset['CN']=8;
tzOffset['CX']=7;
tzOffset['CC']=6.5;
tzOffset['CO']=-5;
tzOffset['KM']=3;
tzOffset['CG']=1;
tzOffset['CD2']=2;
tzOffset['CD']=1;
tzOffset['CK']=-10;
tzOffset['CR']=-6;
tzOffset['CI']=0;
tzOffset['HR']=2;
tzOffset['CU']=-4;
tzOffset['CY']=3;
tzOffset['CZ']=2;
tzOffset['DK']=2;
tzOffset['DJ']=3;
tzOffset['DM']=-4;
tzOffset['DO']=-4;
tzOffset['EC']=-5;
tzOffset['EC2']=-6;
tzOffset['EG']=2;
tzOffset['SV']=-6;
tzOffset['GQ']=1;
tzOffset['ER']=3;
tzOffset['EE']=3;
tzOffset['ET']=3;
tzOffset['FK']=-3;
tzOffset['FO']=1;
tzOffset['FJ']=12;
tzOffset['FI']=3;
tzOffset['FR']=2;
tzOffset['GF']=-3;
tzOffset['PF3']=-9;
tzOffset['PF1']=-9.5;
tzOffset['PF']=-10;
tzOffset['PF2B']=-10;
tzOffset['PF2A']=-10;
tzOffset['GA']=1;
tzOffset['GM']=0;
tzOffset['GE']=4;
tzOffset['DE']=2;
tzOffset['GH']=0;
tzOffset['GI']=2;
tzOffset['GR']=3;
tzOffset['GL']=-2;
tzOffset['GL3']=0;
tzOffset['GL2']=-3;
tzOffset['GD']=-4;
tzOffset['GP']=-4;
tzOffset['GU']=10;
tzOffset['GT']=-6;
tzOffset['GN']=0;
tzOffset['GW']=0;
tzOffset['GY']=-4;
tzOffset['HT']=-4;
tzOffset['HN']=-6;
tzOffset['HK']=8;
tzOffset['HU']=2;
tzOffset['IS']=0;
tzOffset['IN']=5.5;
tzOffset['ID2']=8;
tzOffset['ID3']=9;
tzOffset['ID']=7;
tzOffset['IR']=4.5;
tzOffset['IQ']=3;
tzOffset['IE']=1;
tzOffset['IL']=3;
tzOffset['IT']=2;
tzOffset['JM']=-5;
tzOffset['JP']=9;
tzOffset['UM1']=-10;
tzOffset['JO']=3;
tzOffset['KZ']=6;
tzOffset['KZ1']=5;
tzOffset['KE']=3;
tzOffset['KI']=12;
tzOffset['KI2']=14;
tzOffset['KI3']=13;
tzOffset['KP']=9;
tzOffset['KR']=9;
tzOffset['KW']=3;
tzOffset['KG']=6;
tzOffset['LA']=7;
tzOffset['LV']=3;
tzOffset['LB']=3;
tzOffset['LS']=2;
tzOffset['LR']=0;
tzOffset['LY']=2;
tzOffset['LI']=2;
tzOffset['LT']=3;
tzOffset['LU']=2;
tzOffset['MO']=8;
tzOffset['MK']=2;
tzOffset['MG']=3;
tzOffset['MW']=2;
tzOffset['MY']=8;
tzOffset['MV']=5;
tzOffset['ML']=0;
tzOffset['MT']=2;
tzOffset['MH']=12;
tzOffset['MQ']=-4;
tzOffset['MR']=0;
tzOffset['MU']=4;
tzOffset['YT']=3;
tzOffset['MX']=-5;
tzOffset['MX3']=-7;
tzOffset['MX2']=-6;
tzOffset['MX2-3']=-6;
tzOffset['MX2-1']=-6;
tzOffset['MX2-2']=-6;
tzOffset['MX2A']=-7;
tzOffset['FM']=11;
tzOffset['FM1']=10;
tzOffset['UM2']=-11;
tzOffset['MD']=3;
tzOffset['MC']=2;
tzOffset['MN']=8;
tzOffset['MN1']=7;
tzOffset['ME']=2;
tzOffset['MS']=-4;
tzOffset['MA']=1;
tzOffset['MZ']=2;
tzOffset['MM']=6.5;
tzOffset['NA']=1;
tzOffset['NR']=12;
tzOffset['NP']=5.75;
tzOffset['NL']=2;
tzOffset['AN']=-4;
tzOffset['NC']=11;
tzOffset['NZ']=12;
tzOffset['NZ2']=12.75;
tzOffset['NI']=-6;
tzOffset['NE']=1;
tzOffset['NG']=1;
tzOffset['NU']=-11;
tzOffset['NF']=11.5;
tzOffset['MP']=10;
tzOffset['NO']=2;
tzOffset['OM']=4;
tzOffset['PK']=5;
tzOffset['PW']=9;
tzOffset['PS']=3;
tzOffset['PA']=-5;
tzOffset['PG']=10;
tzOffset['PY']=-4;
tzOffset['PE']=-5;
tzOffset['PH']=8;
tzOffset['PN']=-8;
tzOffset['PL']=2;
tzOffset['PT']=1;
tzOffset['PT2']=0;
tzOffset['PT1']=1;
tzOffset['PR']=-4;
tzOffset['QA']=3;
tzOffset['RE']=4;
tzOffset['RO']=3;
tzOffset['RU-AD']=4;
tzOffset['RU-AGB']=10;
tzOffset['RU-SE']=4;
tzOffset['RU-AL']=7;
tzOffset['RU-ALT']=7;
tzOffset['RU-AMU']=10;
tzOffset['RU-ARK']=4;
tzOffset['RU-AST']=4;
tzOffset['RU-BA']=6;
tzOffset['RU-BEL']=4;
tzOffset['RU-BRY']=4;
tzOffset['RU-BU']=9;
tzOffset['RU-CE']=4;
tzOffset['RU-CHE']=6;
tzOffset['RU-CHI']=10;
tzOffset['RU-CHU']=12;
tzOffset['RU-CU']=4;
tzOffset['RU-DA']=4;
tzOffset['RU-EVE']=8;
tzOffset['RU-IN']=4;
tzOffset['RU-IRK']=9;
tzOffset['RU-IVA']=4;
tzOffset['RU-YEV']=11;
tzOffset['RU-KB']=4;
tzOffset['RU-KGD']=3;
tzOffset['RU-KL']=4;
tzOffset['RU-KLU']=4;
tzOffset['RU-KAM']=12;
tzOffset['RU-KC']=4;
tzOffset['RU-KR']=4;
tzOffset['RU-KEM']=8;
tzOffset['RU-KHA']=11;
tzOffset['RU-KK']=8;
tzOffset['RU-KHM']=6;
tzOffset['RU-KIR']=4;
tzOffset['RU-KO']=4;
tzOffset['RU-KOP']=6;
tzOffset['RU-KOR']=12;
tzOffset['RU-KOS']=4;
tzOffset['RU-KDA']=4;
tzOffset['RU-KYA']=8;
tzOffset['RU-KGN']=6;
tzOffset['RU-KRS']=4;
tzOffset['RU-LEN']=4;
tzOffset['RU-LIP']=4;
tzOffset['RU-MAG']=12;
tzOffset['RU-ME']=4;
tzOffset['RU-MO']=4;
tzOffset['RU-MOW']=4;
tzOffset['RU-MOS']=4;
tzOffset['RU-MUR']=4;
tzOffset['RU-NEN']=4;
tzOffset['RU-NIZ']=4;
tzOffset['RU-NGR']=4;
tzOffset['RU-NVS']=7;
tzOffset['RU-OMS']=7;
tzOffset['RU-ORL']=4;
tzOffset['RU-ORE']=6;
tzOffset['RU-PNZ']=4;
tzOffset['RU-PER']=6;
tzOffset['RU-PRI']=11;
tzOffset['RU-PSK']=4;
tzOffset['RU-ROS']=4;
tzOffset['RU-RYA']=4;
tzOffset['RU-SA2']=11;
tzOffset['RU-SA3']=12;
tzOffset['RU-SA']=10;
tzOffset['RU-SAK']=11;
tzOffset['RU-SAM']=4;
tzOffset['RU-SAR']=4;
tzOffset['RU-SMO']=4;
tzOffset['RU-SPE']=4;
tzOffset['RU-STA']=4;
tzOffset['RU-SVE']=6;
tzOffset['RU-TAM']=4;
tzOffset['RU-TA']=4;
tzOffset['RU-TAY']=8;
tzOffset['RU-TOM']=7;
tzOffset['RU-TUL']=4;
tzOffset['RU-TY']=8;
tzOffset['RU-TVE']=4;
tzOffset['RU-TYU']=6;
tzOffset['RU-UD']=4;
tzOffset['RU-ULY']=4;
tzOffset['RU-UOB']=9;
tzOffset['RU-VLA']=4;
tzOffset['RU-VGG']=4;
tzOffset['RU-VLG']=4;
tzOffset['RU-VOR']=4;
tzOffset['RU-YAN']=6;
tzOffset['RU-YAR']=4;
tzOffset['RW']=2;
tzOffset['SH']=0;
tzOffset['KN']=-4;
tzOffset['LC']=-4;
tzOffset['PM']=-2;
tzOffset['VC']=-4;
tzOffset['WS']=-11;
tzOffset['SM']=2;
tzOffset['ST']=0;
tzOffset['SA']=3;
tzOffset['SN']=0;
tzOffset['RS']=2;
tzOffset['SC']=4;
tzOffset['SL']=0;
tzOffset['SG']=8;
tzOffset['SK']=2;
tzOffset['SI']=2;
tzOffset['SB']=11;
tzOffset['SO']=3;
tzOffset['ZA']=2;
tzOffset['ES2']=1;
tzOffset['ES']=2;
tzOffset['LK']=5.5;
tzOffset['SD']=3;
tzOffset['SR']=-3;
tzOffset['SJ']=2;
tzOffset['SZ']=2;
tzOffset['SE']=2;
tzOffset['CH']=2;
tzOffset['SY']=3;
tzOffset['TW']=8;
tzOffset['TJ']=5;
tzOffset['TZ']=3;
tzOffset['TH']=7;
tzOffset['TL']=9;
tzOffset['TG']=0;
tzOffset['TK']=13;
tzOffset['TO']=13;
tzOffset['TT']=-4;
tzOffset['TN']=1;
tzOffset['TR']=3;
tzOffset['TM']=5;
tzOffset['TC']=-4;
tzOffset['TV']=12;
tzOffset['UG']=3;
tzOffset['UA']=3;
tzOffset['AE']=4;
tzOffset['GB']=1;
tzOffset['US-AL']=-5;
tzOffset['US-AK']=-8;
tzOffset['US-AK1']=-9;
tzOffset['US-AZ']=-7;
tzOffset['US-AZ1']=-6;
tzOffset['US-AR']=-5;
tzOffset['US-CA']=-7;
tzOffset['US-CO']=-6;
tzOffset['US-CT']=-4;
tzOffset['US-DE']=-4;
tzOffset['US-DC']=-4;
tzOffset['US-FL']=-4;
tzOffset['US-FL1']=-5;
tzOffset['US-GA']=-4;
tzOffset['US-HI']=-10;
tzOffset['US-ID1']=-7;
tzOffset['US-ID']=-6;
tzOffset['US-IL']=-5;
tzOffset['US-IN']=-4;
tzOffset['US-IN1']=-5;
tzOffset['US-IA']=-5;
tzOffset['US-KS']=-5;
tzOffset['US-KS1']=-6;
tzOffset['US-KY']=-4;
tzOffset['US-KY1']=-5;
tzOffset['US-LA']=-5;
tzOffset['US-ME']=-4;
tzOffset['US-MD']=-4;
tzOffset['US-MA']=-4;
tzOffset['US-MI']=-4;
tzOffset['US-MI1']=-5;
tzOffset['US-MN']=-5;
tzOffset['US-MS']=-5;
tzOffset['US-MO']=-5;
tzOffset['US-MT']=-6;
tzOffset['US-NE']=-5;
tzOffset['US-NE1']=-6;
tzOffset['US-NV']=-7;
tzOffset['US-NH']=-4;
tzOffset['US-NJ']=-4;
tzOffset['US-NM']=-6;
tzOffset['US-NY']=-4;
tzOffset['US-NC']=-4;
tzOffset['US-ND']=-5;
tzOffset['US-ND1']=-6;
tzOffset['US-OH']=-4;
tzOffset['US-OK']=-5;
tzOffset['US-OR']=-7;
tzOffset['US-OR1']=-6;
tzOffset['US-PA']=-4;
tzOffset['US-RI']=-4;
tzOffset['US-SC']=-4;
tzOffset['US-SD']=-5;
tzOffset['US-SD1']=-6;
tzOffset['US-TN1']=-4;
tzOffset['US-TN']=-5;
tzOffset['US-TX']=-5;
tzOffset['US-TX1']=-6;
tzOffset['US-UT']=-6;
tzOffset['US-VT']=-4;
tzOffset['US-VA']=-4;
tzOffset['US-WA']=-7;
tzOffset['US-WV']=-4;
tzOffset['US-WI']=-5;
tzOffset['US-WY']=-6;
tzOffset['UY']=-3;
tzOffset['UZ']=5;
tzOffset['VU']=11;
tzOffset['VE']=-4.5;
tzOffset['VN']=7;
tzOffset['VG']=-4;
tzOffset['VI']=-4;
tzOffset['UM3']=12;
tzOffset['WF']=12;
tzOffset['YE']=3;
tzOffset['ZM']=2;
tzOffset['ZW']=2;

///////////////////////////////////////////////////////////////////////////
// Time zone names database - Auto generated every hour
///////////////////////////////////////////////////////////////////////////
var tzName = new Object();
tzName["UTC"]="UTC";
tzName["AF"]="Afghanistan";
tzName["AL"]="Albania";
tzName["DZ"]="Algeria";
tzName["AS"]="American Samoa";
tzName["AD"]="Andorra";
tzName["AO"]="Angola";
tzName["AI"]="Anguilla";
tzName["AG"]="Antigua and Barbuda";
tzName["AR-BA"]="Argentina - Buenos Aires";
tzName["AR-CT"]="Argentina - Catamarca";
tzName["AR-CC"]="Argentina - Chaco";
tzName["AR-CH"]="Argentina - Chubut";
tzName["AR-DF"]="Argentina - Ciudad de Buenos Aires";
tzName["AR-CB"]="Argentina - C&#243;rdoba";
tzName["AR-CN"]="Argentina - Corrientes";
tzName["AR-ER"]="Argentina - Entre Rios";
tzName["AR-FM"]="Argentina - Formosa";
tzName["AR-JY"]="Argentina - Jujuy";
tzName["AR-LP"]="Argentina - La Pampa";
tzName["AR-LR"]="Argentina - La Rioja";
tzName["AR-MZ"]="Argentina - Mendoza";
tzName["AR-MN"]="Argentina - Misiones";
tzName["AR-NQ"]="Argentina - Neuqu&#233;n";
tzName["AR-RN"]="Argentina - Rio Negro";
tzName["AR-SA"]="Argentina - Salta";
tzName["AR-SJ"]="Argentina - San Juan";
tzName["AR-SL"]="Argentina - San Luis";
tzName["AR-SC"]="Argentina - Santa Cruz";
tzName["AR-SF"]="Argentina - Santa Fe";
tzName["AR-SE"]="Argentina - Santiago del Estero";
tzName["AR-TF"]="Argentina - Tierra del Fuego";
tzName["AR-TM"]="Argentina - Tucum&#225;n";
tzName["AM"]="Armenia";
tzName["AW"]="Aruba";
tzName["AU-ACT"]="Australia - Australian Capital Territory";
tzName["AU3"]="Australia - Broken Hill";
tzName["AU1"]="Australia - Lord Howe Island";
tzName["AU-NSW"]="Australia - New South Wales";
tzName["AU-NT"]="Australia - Northern Territory";
tzName["AU-QLD"]="Australia - Queensland";
tzName["AU-SA"]="Australia - South Australia";
tzName["AU-TAS"]="Australia - Tasmania";
tzName["AU-VIC"]="Australia - Victoria";
tzName["AU-WA"]="Australia - Western Australia";
tzName["AT"]="Austria";
tzName["AZ"]="Azerbaijan";
tzName["BS"]="Bahamas";
tzName["BH"]="Bahrain";
tzName["BD"]="Bangladesh";
tzName["BB"]="Barbados";
tzName["BY"]="Belarus";
tzName["BE"]="Belgium";
tzName["BZ"]="Belize";
tzName["BJ"]="Benin";
tzName["BM"]="Bermuda";
tzName["BT"]="Bhutan";
tzName["BO"]="Bolivia";
tzName["BA"]="Bosnia and Herzegovina";
tzName["BW"]="Botswana";
tzName["BR-AC"]="Brazil - Acre";
tzName["BR-AL"]="Brazil - Alagoas";
tzName["BR-AP"]="Brazil - Amapa";
tzName["BR-AM"]="Brazil - Amazonas";
tzName["BR-BA"]="Brazil - Bahia";
tzName["BR-CE"]="Brazil - Ceara";
tzName["BR-DF"]="Brazil - Distrito Federal";
tzName["BR-ES"]="Brazil - Espirto Santo";
tzName["BR-FN"]="Brazil - Fernando de Noronha";
tzName["BR-GO"]="Brazil - Goias";
tzName["BR-MA"]="Brazil - Maranhao";
tzName["BR-MT"]="Brazil - Mato Grosso";
tzName["BR-MS"]="Brazil - Mato Grosso do Sul";
tzName["BR-MG"]="Brazil - Minas Gerais";
tzName["BR-PA1"]="Brazil - Para (eastern)";
tzName["BR-PA2"]="Brazil - Para (western)";
tzName["BR-PB"]="Brazil - Paraiba";
tzName["BR-PR"]="Brazil - Parana";
tzName["BR-PE"]="Brazil - Pernambuco";
tzName["BR-PI"]="Brazil - Piaui";
tzName["BR-RJ"]="Brazil - Rio de Janeiro";
tzName["BR-RN"]="Brazil - Rio Grande do Norte";
tzName["BR-RS"]="Brazil - Rio Grande do Sul";
tzName["BR-RO"]="Brazil - Rondonia";
tzName["BR-RR"]="Brazil - Roraima";
tzName["BR-SC"]="Brazil - Santa Catarina";
tzName["BR-SP"]="Brazil - Sao Paulo";
tzName["BR-SE"]="Brazil - Sergipe";
tzName["BR-TO"]="Brazil - Tocantins";
tzName["BN"]="Brunei Darussalam";
tzName["BG"]="Bulgaria";
tzName["BF"]="Burkina Faso";
tzName["BI"]="Burundi";
tzName["KH"]="Cambodia";
tzName["CM"]="Cameroon";
tzName["CA-AB"]="Canada - Alberta";
tzName["CA-BC"]="Canada - British Columbia";
tzName["CA-BC1"]="Canada - British Columbia (exception 1)";
tzName["CA-BC2"]="Canada - British Columbia (exception 2)";
tzName["CA2"]="Canada - Labrador";
tzName["CA2A"]="Canada - Labrador (exception)";
tzName["CA-MB"]="Canada - Manitoba";
tzName["CA-NB"]="Canada - New Brunswick";
tzName["CA-NF"]="Canada - Newfoundland";
tzName["CA-NT"]="Canada - Northwest Territories";
tzName["CA-NS"]="Canada - Nova Scotia";
tzName["CA-NT2A"]="Canada - Nunavut - Southampton Island";
tzName["CA-NT2B"]="Canada - Nunavut (Central)";
tzName["CA-NT2"]="Canada - Nunavut (Eastern)";
tzName["CA-NT2C"]="Canada - Nunavut (Mountain)";
tzName["CA-ON"]="Canada - Ontario";
tzName["CA-ON1"]="Canada - Ontario (western)";
tzName["CA-PE"]="Canada - Prince Edward Island";
tzName["CA-QC"]="Canada - Quebec";
tzName["CA-SK"]="Canada - Saskatchewan";
tzName["CA-SK2"]="Canada - Saskatchewan (exceptions - east)";
tzName["CA-SK1"]="Canada - Saskatchewan (exceptions - west)";
tzName["CA-YT"]="Canada - Yukon";
tzName["CV"]="Cape Verde";
tzName["KY"]="Cayman Islands";
tzName["CF"]="Central African Republic";
tzName["TD"]="Chad";
tzName["CL"]="Chile";
tzName["CL2"]="Chile - Easter Island";
tzName["CN"]="China";
tzName["CX"]="Christmas Island (Indian Ocean)";
tzName["CC"]="Cocos (Keeling) Islands";
tzName["CO"]="Colombia";
tzName["KM"]="Comoros";
tzName["CG"]="Congo";
tzName["CD2"]="Congo (Eastern)";
tzName["CD"]="Congo (Western)";
tzName["CK"]="Cook Islands";
tzName["CR"]="Costa Rica";
tzName["CI"]="Cote D'#146;Ivoire";
tzName["HR"]="Croatia";
tzName["CU"]="Cuba";
tzName["CY"]="Cyprus";
tzName["CZ"]="Czech Republic";
tzName["DK"]="Denmark";
tzName["DJ"]="Djibouti";
tzName["DM"]="Dominica";
tzName["DO"]="Dominican Republic";
tzName["EC"]="Ecuador";
tzName["EC2"]="Ecuador - Galapagos Islands";
tzName["EG"]="Egypt";
tzName["SV"]="El Salvador";
tzName["GQ"]="Equatorial Guinea";
tzName["ER"]="Eritrea";
tzName["EE"]="Estonia";
tzName["ET"]="Ethiopia";
tzName["FK"]="Falkland Islands (Malvinas)";
tzName["FO"]="Faroe Islands";
tzName["FJ"]="Fiji";
tzName["FI"]="Finland";
tzName["FR"]="France";
tzName["GF"]="French Guiana";
tzName["PF3"]="French Polynesia - Gambier Islands";
tzName["PF1"]="French Polynesia - Marquesas Islands";
tzName["PF"]="French Polynesia - Society Archipelago (inc. Tahiti)";
tzName["PF2B"]="French Polynesia - Tuamotu Archipelago";
tzName["PF2A"]="French Polynesia - Tubuai Islands";
tzName["GA"]="Gabon";
tzName["GM"]="Gambia";
tzName["GE"]="Georgia";
tzName["DE"]="Germany";
tzName["GH"]="Ghana";
tzName["GI"]="Gibraltar";
tzName["GR"]="Greece";
tzName["GL"]="Greenland - Greenland";
tzName["GL3"]="Greenland - Ittoqqortoormiit, Nerlerit Inaat";
tzName["GL2"]="Greenland - Pituffik";
tzName["GD"]="Grenada";
tzName["GP"]="Guadeloupe";
tzName["GU"]="Guam";
tzName["GT"]="Guatemala";
tzName["GN"]="Guinea";
tzName["GW"]="Guinea-Bissau";
tzName["GY"]="Guyana";
tzName["HT"]="Haiti";
tzName["HN"]="Honduras";
tzName["HK"]="Hong Kong";
tzName["HU"]="Hungary";
tzName["IS"]="Iceland";
tzName["IN"]="India";
tzName["ID2"]="Indonesia - (Central)";
tzName["ID3"]="Indonesia - (Eastern)";
tzName["ID"]="Indonesia - (Western)";
tzName["IR"]="Iran, Islamic Republic of";
tzName["IQ"]="Iraq";
tzName["IE"]="Ireland";
tzName["IL"]="Israel";
tzName["IT"]="Italy";
tzName["JM"]="Jamaica";
tzName["JP"]="Japan";
tzName["UM1"]="Johnston Atoll (USA)";
tzName["JO"]="Jordan";
tzName["KZ"]="Kazakhstan - (Eastern)";
tzName["KZ1"]="Kazakhstan - (Western)";
tzName["KE"]="Kenya";
tzName["KI"]="Kiribati - Gilbert Islands";
tzName["KI2"]="Kiribati - Line Islands";
tzName["KI3"]="Kiribati - Phoenix Islands";
tzName["KP"]="Korea, Democratic People'#146;s Republic of";
tzName["KR"]="Korea, Republic of";
tzName["KW"]="Kuwait";
tzName["KG"]="Kyrgyzstan";
tzName["LA"]="Lao People'#146;s Democratic Republic";
tzName["LV"]="Latvia";
tzName["LB"]="Lebanon";
tzName["LS"]="Lesotho";
tzName["LR"]="Liberia";
tzName["LY"]="Libyan Arab Jamahiriya";
tzName["LI"]="Liechtenstein";
tzName["LT"]="Lithuania";
tzName["LU"]="Luxembourg";
tzName["MO"]="Macao";
tzName["MK"]="Macedonia";
tzName["MG"]="Madagascar";
tzName["MW"]="Malawi";
tzName["MY"]="Malaysia";
tzName["MV"]="Maldives";
tzName["ML"]="Mali";
tzName["MT"]="Malta";
tzName["MH"]="Marshall Islands";
tzName["MQ"]="Martinique";
tzName["MR"]="Mauritania";
tzName["MU"]="Mauritius";
tzName["YT"]="Mayotte";
tzName["MX"]="Mexico - (South, Central, and Eastern)";
tzName["MX3"]="Mexico - Baja California Norte";
tzName["MX2"]="Mexico - Baja California Sur";
tzName["MX2-3"]="Mexico - Chihuahua";
tzName["MX2-1"]="Mexico - Nayarit";
tzName["MX2-2"]="Mexico - Sinaloa";
tzName["MX2A"]="Mexico - Sonora";
tzName["FM"]="Micronesia - Kosrae, Pohnpei";
tzName["FM1"]="Micronesia - Yap, Chuuk";
tzName["UM2"]="Midway Islands (USA)";
tzName["MD"]="Moldova";
tzName["MC"]="Monaco";
tzName["MN"]="Mongolia - (Central and Eastern)";
tzName["MN1"]="Mongolia - (Western)";
tzName["ME"]="Montenegro";
tzName["MS"]="Montserrat";
tzName["MA"]="Morocco";
tzName["MZ"]="Mozambique";
tzName["MM"]="Myanmar";
tzName["NA"]="Namibia";
tzName["NR"]="Nauru";
tzName["NP"]="Nepal";
tzName["NL"]="Netherlands";
tzName["AN"]="Netherlands Antilles";
tzName["NC"]="New Caledonia";
tzName["NZ"]="New Zealand";
tzName["NZ2"]="New Zealand - Chatham Islands";
tzName["NI"]="Nicaragua";
tzName["NE"]="Niger";
tzName["NG"]="Nigeria";
tzName["NU"]="Niue";
tzName["NF"]="Norfolk Island";
tzName["MP"]="Northern Mariana Islands";
tzName["NO"]="Norway";
tzName["OM"]="Oman";
tzName["PK"]="Pakistan";
tzName["PW"]="Palau";
tzName["PS"]="Palestinian Territory";
tzName["PA"]="Panama";
tzName["PG"]="Papua New Guinea";
tzName["PY"]="Paraguay";
tzName["PE"]="Peru";
tzName["PH"]="Philippines";
tzName["PN"]="Pitcairn";
tzName["PL"]="Poland";
tzName["PT"]="Portugal";
tzName["PT2"]="Portugal - Azores";
tzName["PT1"]="Portugal - Madeira Islands";
tzName["PR"]="Puerto Rico";
tzName["QA"]="Qatar";
tzName["RE"]="Reunion";
tzName["RO"]="Romania";
tzName["RU-AD"]="Russia - Adygea";
tzName["RU-AGB"]="Russia - Agin-Buryat";
tzName["RU-SE"]="Russia - Alania";
tzName["RU-AL"]="Russia - Altai Republic";
tzName["RU-ALT"]="Russia - Altaskiy Kray";
tzName["RU-AMU"]="Russia - Amur";
tzName["RU-ARK"]="Russia - Arkhangel'#146;";
tzName["RU-AST"]="Russia - Astrakhan'#146;";
tzName["RU-BA"]="Russia - Bashkortostan";
tzName["RU-BEL"]="Russia - Belgorod";
tzName["RU-BRY"]="Russia - Bryansk";
tzName["RU-BU"]="Russia - Buryatia";
tzName["RU-CE"]="Russia - Chechnya";
tzName["RU-CHE"]="Russia - Chelyabinsk";
tzName["RU-CHI"]="Russia - Chita";
tzName["RU-CHU"]="Russia - Chukot";
tzName["RU-CU"]="Russia - Chuvashia";
tzName["RU-DA"]="Russia - Dagestan";
tzName["RU-EVE"]="Russia - Evenki";
tzName["RU-IN"]="Russia - Ingushetia";
tzName["RU-IRK"]="Russia - Irkutsk";
tzName["RU-IVA"]="Russia - Ivanovo";
tzName["RU-YEV"]="Russia - Jewish Autonomous Oblast'#146;";
tzName["RU-KB"]="Russia - Kabardino-Balkaria";
tzName["RU-KGD"]="Russia - Kaliningrad";
tzName["RU-KL"]="Russia - Kalmykia";
tzName["RU-KLU"]="Russia - Kaluga";
tzName["RU-KAM"]="Russia - Kamchatka";
tzName["RU-KC"]="Russia - Karachay-Cherkessia";
tzName["RU-KR"]="Russia - Karelia";
tzName["RU-KEM"]="Russia - Kemerovo";
tzName["RU-KHA"]="Russia - Khabarovsk";
tzName["RU-KK"]="Russia - Khakassia";
tzName["RU-KHM"]="Russia - Khanty-Mansi";
tzName["RU-KIR"]="Russia - Kirov";
tzName["RU-KO"]="Russia - Komi";
tzName["RU-KOP"]="Russia - Komi-Permyak";
tzName["RU-KOR"]="Russia - Koryak";
tzName["RU-KOS"]="Russia - Kostroma";
tzName["RU-KDA"]="Russia - Krasnodar";
tzName["RU-KYA"]="Russia - Krasnoyarsk";
tzName["RU-KGN"]="Russia - Kurgan";
tzName["RU-KRS"]="Russia - Kursk";
tzName["RU-LEN"]="Russia - Leningradskaya Oblast'#146;";
tzName["RU-LIP"]="Russia - Lipetsk";
tzName["RU-MAG"]="Russia - Magadan";
tzName["RU-ME"]="Russia - Mari El";
tzName["RU-MO"]="Russia - Mordovia";
tzName["RU-MOW"]="Russia - Moscow City";
tzName["RU-MOS"]="Russia - Moskva";
tzName["RU-MUR"]="Russia - Murmansk";
tzName["RU-NEN"]="Russia - Nenets";
tzName["RU-NIZ"]="Russia - Nizhniy Novgorod";
tzName["RU-NGR"]="Russia - Novgorod";
tzName["RU-NVS"]="Russia - Novosibirsk";
tzName["RU-OMS"]="Russia - Omsk";
tzName["RU-ORL"]="Russia - Orel";
tzName["RU-ORE"]="Russia - Orenburg";
tzName["RU-PNZ"]="Russia - Penza";
tzName["RU-PER"]="Russia - Perm";
tzName["RU-PRI"]="Russia - Primorskiy";
tzName["RU-PSK"]="Russia - Pskov";
tzName["RU-ROS"]="Russia - Rostov";
tzName["RU-RYA"]="Russia - Ryazan'#146;";
tzName["RU-SA2"]="Russia - Sakha (Central)";
tzName["RU-SA3"]="Russia - Sakha (Eastern)";
tzName["RU-SA"]="Russia - Sakha (Western)";
tzName["RU-SAK"]="Russia - Sakhalin";
tzName["RU-SAM"]="Russia - Samara";
tzName["RU-SAR"]="Russia - Saratov";
tzName["RU-SMO"]="Russia - Smolensk";
tzName["RU-SPE"]="Russia - St. Petersburg City";
tzName["RU-STA"]="Russia - Stavropol";
tzName["RU-SVE"]="Russia - Sverdlovsk";
tzName["RU-TAM"]="Russia - Tambov";
tzName["RU-TA"]="Russia - Tatarstan";
tzName["RU-TAY"]="Russia - Taymyr";
tzName["RU-TOM"]="Russia - Tomsk";
tzName["RU-TUL"]="Russia - Tula";
tzName["RU-TY"]="Russia - Tuva";
tzName["RU-TVE"]="Russia - Tver'#146;";
tzName["RU-TYU"]="Russia - Tyumen'#146;";
tzName["RU-UD"]="Russia - Udmurtia";
tzName["RU-ULY"]="Russia - Ul'#146;yanovsk";
tzName["RU-UOB"]="Russia - Ust-Ordyn-Buryat";
tzName["RU-VLA"]="Russia - Vladimir";
tzName["RU-VGG"]="Russia - Volgograd";
tzName["RU-VLG"]="Russia - Vologda";
tzName["RU-VOR"]="Russia - Voronezh";
tzName["RU-YAN"]="Russia - Yamalo-Nenets";
tzName["RU-YAR"]="Russia - Yaroslavl'#146;";
tzName["RW"]="Rwanda";
tzName["SH"]="Saint Helena";
tzName["KN"]="Saint Kitts and Nevis";
tzName["LC"]="Saint Lucia";
tzName["PM"]="Saint Pierre and Miquelon";
tzName["VC"]="Saint Vincent and The Grenadines";
tzName["WS"]="Samoa";
tzName["SM"]="San Marino";
tzName["ST"]="Sao Tome and Principe";
tzName["SA"]="Saudi Arabia";
tzName["SN"]="Senegal";
tzName["RS"]="Serbia";
tzName["SC"]="Seychelles";
tzName["SL"]="Sierra Leone";
tzName["SG"]="Singapore";
tzName["SK"]="Slovakia";
tzName["SI"]="Slovenia";
tzName["SB"]="Solomon Islands";
tzName["SO"]="Somalia";
tzName["ZA"]="South Africa";
tzName["ES2"]="Spain - Canary Islands";
tzName["ES"]="Spain - Mainland, Baleares, Melilla, Ceuta";
tzName["LK"]="Sri Lanka";
tzName["SD"]="Sudan";
tzName["SR"]="Suriname";
tzName["SJ"]="Svalbard and Jan Mayen";
tzName["SZ"]="Swaziland";
tzName["SE"]="Sweden";
tzName["CH"]="Switzerland";
tzName["SY"]="Syrian Arab Republic";
tzName["TW"]="Taiwan";
tzName["TJ"]="Tajikistan";
tzName["TZ"]="Tanzania, United Republic of";
tzName["TH"]="Thailand";
tzName["TL"]="Timor-Leste";
tzName["TG"]="Togo";
tzName["TK"]="Tokelau";
tzName["TO"]="Tonga";
tzName["TT"]="Trinidad and Tobago";
tzName["TN"]="Tunisia";
tzName["TR"]="Turkey";
tzName["TM"]="Turkmenistan";
tzName["TC"]="Turks and Caicos Islands";
tzName["TV"]="Tuvalu";
tzName["UG"]="Uganda";
tzName["UA"]="Ukraine";
tzName["AE"]="United Arab Emirates";
tzName["GB"]="United Kingdom";
tzName["US-AL"]="USA - Alabama";
tzName["US-AK"]="USA - Alaska";
tzName["US-AK1"]="USA - Alaska (Aleutian Islands)";
tzName["US-AZ"]="USA - Arizona";
tzName["US-AZ1"]="USA - Arizona (Navajo Reservation)";
tzName["US-AR"]="USA - Arkansas";
tzName["US-CA"]="USA - California";
tzName["US-CO"]="USA - Colorado";
tzName["US-CT"]="USA - Connecticut";
tzName["US-DE"]="USA - Delaware";
tzName["US-DC"]="USA - District of Columbia";
tzName["US-FL"]="USA - Florida";
tzName["US-FL1"]="USA - Florida (far west)";
tzName["US-GA"]="USA - Georgia";
tzName["US-HI"]="USA - Hawaii";
tzName["US-ID1"]="USA - Idaho (northern)";
tzName["US-ID"]="USA - Idaho (southern)";
tzName["US-IL"]="USA - Illinois";
tzName["US-IN"]="USA - Indiana";
tzName["US-IN1"]="USA - Indiana (far west)";
tzName["US-IA"]="USA - Iowa";
tzName["US-KS"]="USA - Kansas";
tzName["US-KS1"]="USA - Kansas (exception)";
tzName["US-KY"]="USA - Kentucky (eastern)";
tzName["US-KY1"]="USA - Kentucky (western)";
tzName["US-LA"]="USA - Louisiana";
tzName["US-ME"]="USA - Maine";
tzName["US-MD"]="USA - Maryland";
tzName["US-MA"]="USA - Massachusetts";
tzName["US-MI"]="USA - Michigan";
tzName["US-MI1"]="USA - Michigan (exception)";
tzName["US-MN"]="USA - Minnesota";
tzName["US-MS"]="USA - Mississippi";
tzName["US-MO"]="USA - Missouri";
tzName["US-MT"]="USA - Montana";
tzName["US-NE"]="USA - Nebraska";
tzName["US-NE1"]="USA - Nebraska (western)";
tzName["US-NV"]="USA - Nevada";
tzName["US-NH"]="USA - New Hampshire";
tzName["US-NJ"]="USA - New Jersey";
tzName["US-NM"]="USA - New Mexico";
tzName["US-NY"]="USA - New York";
tzName["US-NC"]="USA - North Carolina";
tzName["US-ND"]="USA - North Dakota";
tzName["US-ND1"]="USA - North Dakota (western)";
tzName["US-OH"]="USA - Ohio";
tzName["US-OK"]="USA - Oklahoma";
tzName["US-OR"]="USA - Oregon";
tzName["US-OR1"]="USA - Oregon (exception)";
tzName["US-PA"]="USA - Pennsylvania";
tzName["US-RI"]="USA - Rhode Island";
tzName["US-SC"]="USA - South Carolina";
tzName["US-SD"]="USA - South Dakota (eastern)";
tzName["US-SD1"]="USA - South Dakota (western)";
tzName["US-TN1"]="USA - Tennessee (eastern)";
tzName["US-TN"]="USA - Tennessee (western)";
tzName["US-TX"]="USA - Texas";
tzName["US-TX1"]="USA - Texas (far west)";
tzName["US-UT"]="USA - Utah";
tzName["US-VT"]="USA - Vermont";
tzName["US-VA"]="USA - Virginia";
tzName["US-WA"]="USA - Washington";
tzName["US-WV"]="USA - West Virginia";
tzName["US-WI"]="USA - Wisconsin";
tzName["US-WY"]="USA - Wyoming";
tzName["UY"]="Uruguay";
tzName["UZ"]="Uzbekistan";
tzName["VU"]="Vanuatu";
tzName["VE"]="Venezuela";
tzName["VN"]="Viet Nam";
tzName["VG"]="Virgin Islands (British)";
tzName["VI"]="Virgin Islands (USA)";
tzName["UM3"]="Wake Island (USA)";
tzName["WF"]="Wallis and Futuna";
tzName["YE"]="Yemen";
tzName["ZM"]="Zambia";
tzName["ZW"]="Zimbabwe";

///////////////////////////////////////////////////////////////////////////
// Global data
///////////////////////////////////////////////////////////////////////////
var gFriendsIds =      new Array();   // Array of the friends and owner IDs
var gFriendsNames =    new Array();   // Array of the friends and owner names
var gIdNameMap =       new Object();  // Map of the friends and owner IDs to their full name
var gIdProfileUrlMap = new Object();  // Map of the friends and owner IDs to their profile URL
var gNameIdMap =       new Object();  // Map of the friends and owner names to their ID
var gIdSNameMap =      new Object();  // Map of the friends and owner IDs to their short name (generated)
var gOffsetLabelMap =  new Object();  // Map of the clock offsets to their description label
var gOwnerId;                         // Owner Id, as a global for convenience
var gViewerId;                        // Viewer Id, as a global for convenience
var gViewerTz = 'UTC'                 // Viewer timezone setting for setup menu convenience
var gSetupVisible = false;            // Flag to track whether or not the setup area is visible
var gClockCount = 0;                  // Number of clocks displayed

var gMode = 'ana4';  //ana2, ana3, ana4, ana5, digd
var gDigiFormat = '12'; // 0, 12,24
var gAnalogFormat = '12'; // 12, 24
var gDateFormat = 'date'; // date, day, d, mdy, dmy, ymd

///////////////////////////////////////////////////////////////////////////
// Initialization code
///////////////////////////////////////////////////////////////////////////
_IG_RegisterOnloadHandler(init);

function init() {
    // Make OpenSocial request to update the global social gadget data
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.OWNER_FRIENDS, {max:300}), 'friends');
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER), 'owner');
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), 'viewer');
    req.send(initCallback);
    
    // Initialize timeServerOffset__MODULE_ID__ based on server time	
    _IG_FetchContent('http://ns279479.ovh.net/utc.php?r='+Math.random(), function(output) {
        var now = new Date();
        var localutc = Math.round(now/1000);
        if((output.charAt(0) == 'B') && (output.indexOf('E') > 0)) {
            serverutc = eval(output.substring(1, output.indexOf('E')));
            timeServerOffset__MODULE_ID__ = localutc - serverutc;
            if(debug__MODULE_ID__) {
                if(Math.abs(timeServerOffset__MODULE_ID__) > 60) {
                    alert('Local time and server time ' + timeServerOffset__MODULE_ID__ + ' seconds apart.');
                }
            }
            return;
        }
        if(debug__MODULE_ID__) {
             alert('Error fetching time from server. Server answer: >' + output + '<.');
        }
    }, { refreshInterval: 0 });

}

function initCallback(dataResponse) {
    // Populate the arrays and maps
    var friends = dataResponse.get('friends');
    if(friends) {
        friends = friends.getData();
    }
    friends.each(function(person) {
        gIdNameMap[person.getId()] = person.getDisplayName();
        gIdSNameMap[person.getId()] = getFirstName(person.getDisplayName());
        gNameIdMap[person.getDisplayName()] = person.getId();
        gIdProfileUrlMap[person.getId()] = person.getField(opensocial.Person.Field.PROFILE_URL);
        gFriendsIds.push(person.getId());
        gFriendsNames.push(person.getDisplayName());
    });

    var owner = dataResponse.get('owner').getData();
    gOwnerId = owner.getId();
    gIdNameMap[gOwnerId] = owner.getDisplayName();
    gIdSNameMap[gOwnerId] = getFirstName(owner.getDisplayName());
    gNameIdMap[owner.getDisplayName()] = gOwnerId;
    gIdProfileUrlMap[gOwnerId] = owner.getField(opensocial.Person.Field.PROFILE_URL);
    gFriendsIds.push(gOwnerId);
    gFriendsNames.push(owner.getDisplayName());

    gFriendsNames.sort();

    gViewerId = -1;
    if(dataResponse.get('viewer') && dataResponse.get('viewer').getData()) {
        gViewerId = dataResponse.get('viewer').getData().getId();
    }

    // Now init the setup menu, based on the user type
    gSetupVisible = true;
    toggleSetup(false);

    // Now get the gadget specific data
    initClocks();
}

function initClocks() {
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.PersonId.OWNER, gFriendsIds), "ownerTZ_data");
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.PersonId.OWNER, 'mode'), 'mode');
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.PersonId.OWNER, 'digiformat'), 'digiformat');
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.PersonId.OWNER, 'dateformat'), 'dateformat');
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.Group.OWNER_FRIENDS, "tzdata"), "friendsTZ_data");
    req.send(initClocksCallback);
}

function initClocksCallback(data) {
    var noTzData = true;

    if(data.get('mode') && data.get('mode').getData() && data.get('mode').getData()[gOwnerId]) {
        var mode = data.get('mode').getData()[gOwnerId]['mode'];
        if(mode) {
            gMode = mode;
        }
    }
    if(data.get('digiformat') && data.get('digiformat').getData() && data.get('digiformat').getData()[gOwnerId]) {
        digiFormat = data.get('digiformat').getData()[gOwnerId]['digiformat'];
        if(digiFormat) {
            gDigiFormat = digiFormat;
        }
    }
    if(data.get('dateformat') && data.get('dateformat').getData() && data.get('dateformat').getData()[gOwnerId]) {
        dateFormat = data.get('dateformat').getData()[gOwnerId]['dateformat'];
        if(dateFormat) {
            gDateFormat = dateFormat;
        }
    }


    var ownerdata = data.get("ownerTZ_data");
    if(!ownerdata.hadError()) {
        ownerdata = ownerdata.getData();
        var friendsdata = data.get("friendsTZ_data");
        if(friendsdata) {
            friendsdata = friendsdata.getData();
        }

        for(i = 0; i < gFriendsIds.length; i++) {
            var offset = 100; // 100 to denote undefined
            var tz = 'UTC'
            if((friendsdata) && (friendsdata[gFriendsIds[i]]) && (friendsdata[gFriendsIds[i]]['tzdata'] != '') && (friendsdata[gFriendsIds[i]]['tzdata']))  {
                tz = friendsdata[gFriendsIds[i]]['tzdata'];
                offset = tzOffset[tz];
                if(gViewerId == gFriendsIds[i]) {
                    gViewerTz = tz;
                }
            }
            else if((ownerdata) && (ownerdata[gOwnerId]) && (ownerdata[gOwnerId][gFriendsIds[i]] != '') && (ownerdata[gOwnerId][gFriendsIds[i]]))  {
                tz = ownerdata[gOwnerId][gFriendsIds[i]];
                offset = tzOffset[tz];
            }
            
            if(offset != 100) {
                noTzData = false;
                var name = '<span style="font-size:inherit" title="' + gIdNameMap[gFriendsIds[i]] + ' - ' + tzName[tz]  + '">' + gIdSNameMap[gFriendsIds[i]] + '</span>';
                if(gOffsetLabelMap[offset]) {
                    gOffsetLabelMap[offset] += ', ' + name;
                }
                else {
                    gOffsetLabelMap[offset] = name;
                }
            }
        }
        // sort gOffsetLabelMap by its key values and update gClockCount with the clock count as we go
        var offsets = new Array();
        for(var offset in gOffsetLabelMap) {
            offsets.push(offset);
            gClockCount++;
        }
        offsets.sort(function (a, b) { return b-a });
        var offsetLabelMap = new Object();
        for(var i = 0; i < offsets.length; i++) {
            offsetLabelMap[offsets[i]] = gOffsetLabelMap[offsets[i]];
        }
        gOffsetLabelMap = offsetLabelMap;

    }

    // Case when the gadget is first added to a user profile (need config)
    // and the viewer is the owner or an owner's friend
    if(noTzData) {
        //if((gViewerId == gOwnerId) || gIdNameMap[gViewerId]) { 
            // Show the setup screen for the owner and owner's friend
            toggleSetup(false);
            //return;
        //}
        //else {
            // Set some default celebrities as fake friends to at least have something to show
            var tz;
            var name;
            tz = 'HK'; name = 'Jackie Chan';
            gOffsetLabelMap[tzOffset[tz]] = '<span style="font-size:inherit" title="' + name + ' - ' + tzName[tz]  + '">' + name + '</span>';
            tz = 'FR'; name = 'Johnny Depp';
            gOffsetLabelMap[tzOffset[tz]] = '<span style="font-size:inherit" title="' + name + ' - ' + tzName[tz]  + '">' + name + '</span>';
            tz = 'US-LA'; name = 'Brad Pitt';
            gOffsetLabelMap[tzOffset[tz]] = '<span style="font-size:inherit" title="' + name + ' - ' + tzName[tz]  + '">' + name + '</span>';
            tz = 'US-CA'; name = 'David Beckham';
            gOffsetLabelMap[tzOffset[tz]] = '<span style="font-size:inherit" title="' + name + ' - ' + tzName[tz]  + '">' + name + '</span>';
        //}
    }

    showMeetingPlannerLink();

    dateFormat__MODULE_ID__ = gDateFormat;

    analogDiv__MODULE_ID__ = document.getElementById('analogclocks__MODULE_ID__');

    if((gMode == 'digt') || (gMode == 'digd')) {	
        init_DigitalClocks__MODULE_ID__();
    }
    else if((gMode == 'ana1') || (gMode == 'ana2') || (gMode == 'ana3') || (gMode == 'ana4') || (gMode == 'ana5')) {
        // use gClockCount to get the best anaX instead of the hardcoded ana5
        // note that ana5 is best for the Canvas
        gMode = 'ana4';
        init_AnalogClocks__MODULE_ID__();
    }
}


////////////////////////////////////

function showMeetingPlannerLink() {
    var offset;
    var params = '';
    var i = 1;
    for(offset in gOffsetLabelMap) {
        params += 'tzname' + i + '=' + _esc(gOffsetLabelMap[offset]) + '&tzoffset' + i + '=' + offset + '&';
        i++;
    }
    _gel('meetingplannerlink').innerHTML = '<a class="link" target="_blank" href="http://www.ljmsite.com/google/gadgets/worldclocks/meetingplanner.php?' + params + 'timeformat=' + gDigiFormat +'">open meeting planner</a>';
}

///////////////////////////////////////////////////////////////////////////
// Toggle setup
///////////////////////////////////////////////////////////////////////////
function toggleSetup(refresh) {
    if(gViewerId == gOwnerId) {
        if(gSetupVisible) {
            _gel('setupLink').innerHTML = 'setup clocks';
            _gel('settings').innerHTML = '';
            gSetupVisible = false;
            if(refresh) {
                //initClocks();
                self.location.reload(true);
            }
        }
        else {
            _gel('setupLink').innerHTML = 'hide setup';
            showOwnerConfigMenu();
            gSetupVisible = true;
        }
    }
    else if(gIdNameMap[gViewerId]) {
        if(gSetupVisible) {
            _gel('setupLink').innerHTML = 'my location';
            _gel('settings').innerHTML = '';
            gSetupVisible = false;
            if(refresh) {
                //initClocks();
                self.location.reload(true);
            }

        }
        else {
            _gel('setupLink').innerHTML = 'hide setup';
            showViewerConfigMenu();
            gSetupVisible = true;
        }
    }
    else {
        _gel('setupLink').innerHTML = '';
    }
    _IG_AdjustIFrameHeight();
}


///////////////////////////////////////////////////////////////////////////
// Friend viewer configuration menu
///////////////////////////////////////////////////////////////////////////
function showViewerConfigMenu() {
    var html = '';
    html += '<form onsubmit="setFriendTZ(this); return false;"';
    html += '<input type="hidden" id="friendSel" name="friend" value="' + gViewerId + '" />';
    html += 'My location: ';
    html += '<td><select id="timezone" name="timezone">';
    for(tz in tzOffset) {
        var selected = '';
        if(tz == gViewerTz) {
            selected = ' selected';
        }
        html += '<option value="' + tz + '"' + selected + '>' + tzName[tz] + '</options>';
    }
    html += '</select>';
    html += '</td><td><input type="submit" value="save"/></td></tr></table></form>';
    _gel('settings').innerHTML = html;
}


///////////////////////////////////////////////////////////////////////////
// Owner configuration menu
///////////////////////////////////////////////////////////////////////////
function showOwnerConfigMenu() {
    var html = '<div class="linediv">&nbsp;</div><div><b>Assign your friends you want to see on the World Clocks to their geographical location.</b></div>';
    html += '<form onsubmit="setFriendTZ(this); return false;">';
    html += '<table><tr>';
    html += '<td><input type="submit" value="add/update"/></td>';
    html += '<td><select id="friendSel" name="friend">';
    html += '<option value="">-- select friend --</option>';
    var i;
    for(i in gFriendsNames) {
        html += '<option value="' + gNameIdMap[gFriendsNames[i]] + '">' + gFriendsNames[i] + '</option>';
    }
    html += '</select>';

    html += '<td><select id="timezone" name="timezone">';
    html += '<option value="">-- select time zone --</option>';
    for(tz in tzOffset) {
        html += '<option value="' + tz + '">' + tzName[tz] + '</options>';
    }
    html += '</select></td>';
    //html += '<td><input type="submit" value="add/update"/></td>';
    html += '</tr></table></form><div id="viewsettings"></div>';

    // Clock display options
    html += '<div class="linediv">&nbsp;</div>';
    html += '<form onsubmit="setClockParams(this); return false;">';
    html += '<table><tr><td>Gadget mode:</td><td><select id="mode" name="mode">';
    html += '<option value="ana5"' + (gMode=='ana5'?'selected':'') + '>Analog Clocks</option>';                // TOTO Add the selected marks!
    html += '<option value="digd"' + (gMode=='digd'?'selected':'') + '>Digital Clocks</option>';
    html += '</select></td></tr><tr><td>Digital time format:</td><td><select id="digiformat" name="digiformat">';
    html += '<option value="12"' + (gDigiFormat=='12'?'selected':'') + '>12h format (AM/PM)</option>';                // TOTO Add the selected marks!
    html += '<option value="24"' + (gDigiFormat=='24'?'selected':'') + '>24h format</option>';
    html += '</select></td></td><tr><td>Date format:</td><td><select id="dateformat" name="dateformat">';
    html += '<option value="date"' + (gDateFormat=='date'?'selected':'') + '>__MSG_Mon__ 21 __MSG_Aug__</option>';
    html += '<option value="day"'  + (gDateFormat=='day'?'selected':'') + '>__MSG_Monday__</option>';
    html += '<option value="d"'    + (gDateFormat=='d'?'selected':'') + '>__MSG_Mon__</option>';
    html += '<option value="mdy"'  + (gDateFormat=='mdy'?'selected':'') + '>8/21/2006</option>';
    html += '<option value="dmy"'  + (gDateFormat=='dmy'?'selected':'') + '>21/8/2006</option>';
    html += '<option value="ymd"'  + (gDateFormat=='ymd'?'selected':'') + '>2006/8/21</option>';
    html += '</select></td></td><tr><td>&nbsp;</td><td><input type="submit" value="save settings"/><span id="saveStatus"></span></td></tr></table></form>';

    _gel('settings').innerHTML = html;

    refreshSettings();
}

function refreshSettings() {
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.PersonId.OWNER, gFriendsIds), "ownerTZ_data");
    req.add(req.newFetchPersonAppDataRequest(opensocial.DataRequest.Group.OWNER_FRIENDS, "tzdata"), "friendsTZ_data");
    req.send(function(data) {
        var ownerdata = data.get("ownerTZ_data");
        if(ownerdata) {
            ownerdata = ownerdata.getData();
        }
        var friendsdata = data.get("friendsTZ_data");
        if(friendsdata) {
            friendsdata = friendsdata.getData();
        } 

        var html = '<table border="0" cellpadding="0" cellspacing="0">'; 

        for(i = 0; i < gFriendsIds.length; i++) {
            if((friendsdata) && (friendsdata[gFriendsIds[i]]) && (friendsdata[gFriendsIds[i]]['tzdata'] != '') && (friendsdata[gFriendsIds[i]]['tzdata']))  {
                html += '<tr><td><span id="p' + gFriendsIds[i] + '">' + gIdNameMap[gFriendsIds[i]] + '</span></td><td>' + tzName[friendsdata[gFriendsIds[i]]['tzdata']];
                html += '<td>(set by friend)</td></tr>';
            }
            else if((ownerdata) && (ownerdata[gOwnerId]) && (ownerdata[gOwnerId][gFriendsIds[i]] != '') && (ownerdata[gOwnerId][gFriendsIds[i]]))  {
                html += '<tr><td><span id="p' + gFriendsIds[i] + '">' + gIdNameMap[gFriendsIds[i]] + '</span></td><td>' + tzName[ownerdata[gOwnerId][gFriendsIds[i]]];
                html += '</td><td><a href="javascript:void();" onclick="deleteFriendTZ(\'' + gFriendsIds[i] + '\'); return false;"><input type="submit" value="remove"/></a></td></tr>';
            }
        }
        html += '</table>';
        document.getElementById('viewsettings').innerHTML = html;

        _IG_AdjustIFrameHeight();
    });	
}

function setClockParams(form) {
    _gel('saveStatus').innerHTML = 'saving...';
    gMode = form.mode.value;
    gDigiFormat = form.digiformat.value;
    gDateFormat = form.dateformat.value;
    var req = opensocial.newDataRequest();
    req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'mode', gMode));
    req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'digiformat', gDigiFormat));
    req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'dateformat', gDateFormat));
    req.send(function () {
        _gel('saveStatus').innerHTML = '';
        toggleSetup(true);
    });
}

function setFriendTZ(form) {
    var friendId = form.friend.value;
    var tz = form.timezone.value;
    if((friendId != '') && (tz != '')) {
        var req = opensocial.newDataRequest();
        if(gViewerId == gOwnerId) { // Owner sets the normal settings
            req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, friendId, tz));
        }
        if(friendId == gViewerId) { // Self setting his time zone requires another key (accessed by other app instances)
            req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'tzdata', tz));
            gViewerTz = tz;
        }
        req.send(refreshSettings);
    }
}

function deleteFriendTZ(personId) {
    // Display the person to be deleted as striked-out
    var e = _gel('p' + personId);
    e.style.textDecoration = 'line-through';

    // Clear the TZ value for the person
    var req = opensocial.newDataRequest();
    if(gViewerId == gOwnerId) { // Owner sets the normal settings
        req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, personId, ''));
    }
    if(personId == gViewerId) { // Self setting his time zone requires another key (accessed by other app instances)
        req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'tzdata', ''));
        gViewerTz = 'UTC';
    }
    req.send(refreshSettings);
}


///////////////////////////////////////////////////////////////////////////
// World Clocks code
///////////////////////////////////////////////////////////////////////////
var debug__MODULE_ID__ = false;
var timeServerOffset__MODULE_ID__ = 0;
var dateFormat__MODULE_ID__ = 'day';

var dayName__MODULE_ID__ = new Array('__MSG_Sun__','__MSG_Mon__','__MSG_Tue__','__MSG_Wed__','__MSG_Thu__','__MSG_Fri__','__MSG_Sat__','__MSG_Sun__');
var fulldayName__MODULE_ID__ = new Array('__MSG_Sunday__', '__MSG_Monday__', '__MSG_Tuesday__', '__MSG_Wednesday__', '__MSG_Thursday__', '__MSG_Friday__', '__MSG_Saturday__');
var monthName__MODULE_ID__ = new Array('__MSG_Jan__','__MSG_Feb__','__MSG_Mar__','__MSG_Apr__','__MSG_May__','__MSG_Jun__','__MSG_Jul__','__MSG_Aug__','__MSG_Sep__','__MSG_Oct__','__MSG_Nov__','__MSG_Dec__');

// --------- Analog clocks mode
// ------------------------------------------------------------------

// Part of the code for this mode is based on Mark Barrett's World Clocks Google Gadget: http://www.cheap-parking.net/world-clocks.xml	
var clockPos__MODULE_ID__;
var canCallResize__MODULE_ID__ = 0;
var widthB4Resize__MODULE_ID__ = 0;

var comstyle__MODULE_ID__ = 'position:absolute;top:0px;left:0px;font-family:arial,sans-serif;';
var ticker__MODULE_ID__;
var clocks__MODULE_ID__ = new Array();
var analogDiv__MODULE_ID__;

function getW__MODULE_ID__ () {
	var w;

	if(self.innerHeight){
		w = self.innerWidth;
	}
	else if(document.documentElement && document.documentElement.clientHeight){
		w = document.documentElement.clientWidth;
	}
	else if(document.body){
		w = document.body.clientWidth;
	}

	return w - 10; // Make it 10px smaller to allow scrolls...
}

// Class that provide the X and Y position of a clock based on its order number
function ClockPosition__MODULE_ID__(nbClocks, rows, columns) {
	this.nbClocks = nbClocks;
	this.rows = rows;
	this.columns = columns;

	this.getXPos = getXPos__MODULE_ID__;
	this.getYPos = getYPos__MODULE_ID__;
}

function getXPos__MODULE_ID__(clockNb) {
	var xpos = (clockNb +1) % this.columns;
	if(xpos == 0) {
		xpos = this.columns;
	}
	return xpos;
}

function getYPos__MODULE_ID__(clockNb) {
	return Math.ceil((clockNb + 1) / this.columns);
}

// Class that holds each clock information
function Clock__MODULE_ID__(tzOffset, tzLabel, digiformat, analogformat) {
	this.diameter = 0 ;
	this.numberSize = 0;
	this.textSize = 0;
	this.labelSize = 0;
	this.radius = 0;

	this.offset = 0 ;
	this.centerX = 0;
	this.centerY = 0;

	this.height = 0 ;
	this.width = 0 ;

	this.handShort = 0;
	this.handLong = 0;
	this.handSec = 0;

	this.calDimensions = ClockCalDIMS__MODULE_ID__;
	this.appendToDiv = ClockAppendToDiv__MODULE_ID__;
	this.positionObjects = ClockPositionObjects__MODULE_ID__;

	this.secDivs = new Array();
	this.minDivs = new Array();
	this.hourDivs = new Array();

	this.secCol = '#999';
	this.minCol = '#000';
	this.hourCol = '#000';
	this.numCol = '#666';
	this.miscCol = '#000';
	this.textCol = '#000';
	this.zoneCol = '#000';

	this.numDivs = new Array();
	this.dateDiv = new Array();
	this.ampmDiv = new Array();
	this.timeDiv = new Array();
	this.zoneDiv = new Array();

	this.timeOffset = tzOffset;
	this.timeZone = tzLabel;

	this.digiformat = digiformat;
	this.analogformat = analogformat;
}

function ClockCalDIMS__MODULE_ID__(wid){
	this.diameter = parseInt(wid / 1.315);
	this.numberSize = parseInt(this.diameter * 0.115);
	this.textSize = parseInt(this.diameter * 0.12);
	this.labelSize = (this.textSize > 10 ? this.textSize : 10);
	this.radius = parseInt(this.diameter / 2) ;

	this.offset = this.numberSize;
	this.centerX = this.offset + this.radius;
	this.centerY = this.centerX;
		
	this.height = this.offset * 3 + this.diameter + this.labelSize;
	this.width = this.offset * 2 + this.diameter;

	this.handShort = (this.radius / 2 + this.radius / 16 + 1);
	this.handLong = 2 * (this.radius / 2 - this.radius / 8 + 1);
	this.handSec = this.handLong + this.radius / 12;
}

function resize__MODULE_ID__(){
	clearTimeout(ticker__MODULE_ID__);
	if(canCallResize__MODULE_ID__){
		canCallResize__MODULE_ID__ = 0;
		w=getW__MODULE_ID__();
		for (var j = 0; j < clocks__MODULE_ID__.length; j++) {
			clocks__MODULE_ID__[j].calDimensions(w / clockPos__MODULE_ID__.columns);
			if(w > widthB4Resize__MODULE_ID__) {
				for (var i = clocks__MODULE_ID__[j].minDivs.length; i < clocks__MODULE_ID__[j].handLong; i++) {
					clocks__MODULE_ID__[j].minDivs[i]=appendToDoc__MODULE_ID__(clocks__MODULE_ID__[j].minDivs[i]);
				}
				for (var i = clocks__MODULE_ID__[j].secDivs.length; i < clocks__MODULE_ID__[j].handSec; i++) {
					clocks__MODULE_ID__[j].secDivs[i]=appendToDoc__MODULE_ID__(clocks__MODULE_ID__[j].secDivs[i]);					
				}
				for (var i = clocks__MODULE_ID__[j].hourDivs.length; i < clocks__MODULE_ID__[j].handShort; i++) {
					clocks__MODULE_ID__[j].hourDivs[i]=appendToDoc__MODULE_ID__(clocks__MODULE_ID__[j].hourDivs[i]);		
				}
			}
			else {
				for (var i = clocks__MODULE_ID__[j].minDivs.length-1; i>=clocks__MODULE_ID__[j].handLong ; i--) {
					removeFromDoc__MODULE_ID__(clocks__MODULE_ID__[j].minDivs);
				}
				for (var i = clocks__MODULE_ID__[j].secDivs.length-1; i>=clocks__MODULE_ID__[j].handSec ; i--) {
					removeFromDoc__MODULE_ID__(clocks__MODULE_ID__[j].secDivs);
				}
				for (var i = clocks__MODULE_ID__[j].hourDivs.length-1; i >= clocks__MODULE_ID__[j].handShort; i--) {
					removeFromDoc__MODULE_ID__(clocks__MODULE_ID__[j].hourDivs);
				}
			}
			clocks__MODULE_ID__[j].positionObjects(j);
		}
		widthB4Resize__MODULE_ID__ = w;
		canCallResize__MODULE_ID__ = 1;
	}
	analogDiv__MODULE_ID__.style.height = clockPos__MODULE_ID__.rows * clocks__MODULE_ID__[0].height + "px";
	_IG_AdjustIFrameHeight();
 	ticker__MODULE_ID__ = setTimeout('tickClocks__MODULE_ID__()', 1000);
}

function appendToDoc__MODULE_ID__(newDiv){
	newDiv = document.createElement("DIV")
	analogDiv__MODULE_ID__.appendChild(newDiv);
	return newDiv;
}
				
function removeFromDoc__MODULE_ID__(divArray){
	analogDiv__MODULE_ID__.removeChild(divArray[divArray.length-1]);
	divArray.pop();
}

function ClockAppendToDiv__MODULE_ID__() {
	this.dateDiv = appendToDoc__MODULE_ID__(this.dateDiv);
	this.ampmDiv = appendToDoc__MODULE_ID__(this.ampmDiv);
	this.zoneDiv = appendToDoc__MODULE_ID__(this.zoneDiv);
	this.zoneDiv.innerHTML = this.timeZone;
	this.timeDiv = appendToDoc__MODULE_ID__(this.timeDiv);

	for (var i = 1; i < 13; i++) {
		this.numDivs[i] = appendToDoc__MODULE_ID__(this.numDivs[i]);
		if(this.analogformat == 24) {
			this.numDivs[i].innerHTML = (i==12 ? '0' : i*2);
		}
		else {
			this.numDivs[i].innerHTML = i;
		}
	}
	for (var i = 0; i < this.handLong; i++) {
		this.minDivs[i] = appendToDoc__MODULE_ID__(this.minDivs[i]);
	}
	for (var i = 0; i < this.handSec; i++) {
		this.secDivs[i] = appendToDoc__MODULE_ID__(this.secDivs[i]);
	}

	for (var i = 0; i < this.handShort; i++) {
		this.hourDivs[i] = appendToDoc__MODULE_ID__(this.hourDivs[i]);
	}
}

function ClockPositionObjects__MODULE_ID__(nth){
	var xoff = (clockPos__MODULE_ID__.getXPos(nth) - 1) * (this.width + this.offset);
	var yoff = (clockPos__MODULE_ID__.getYPos(nth) - 1) * (this.width + 3*this.offset);
	var n = clockPos__MODULE_ID__.getXPos(nth) - 1; //TODO: use xoff instead of n for consistency

	this.dateDiv.style.cssText = comstyle__MODULE_ID__+'width:'+this.width+'px;font-size:' + this.textSize + 'px;color:'+ this.textCol +';text-align:center;top:' + (this.centerY - this.radius*0.4 + yoff) +'px;left:'+(n*(this.width+this.offset)) +'px;height:'+this.textSize+'px';

	this.ampmDiv.style.cssText = comstyle__MODULE_ID__+'width:'+this.width+'px;font-size:' + this.textSize + 'px;font-weight:bold;color:'+ this.textCol +';text-align:center;top:' + (this.centerY + this.radius*0.45 + yoff) +'px;left:'+(n*(this.width+this.offset)) +'px;height:'+this.textSize+'px';	

	this.timeDiv.style.cssText = comstyle__MODULE_ID__+'width:'+this.width+'px;font-size:' + this.textSize + 'px;color:'+ this.textCol +';text-align:center;top:' + (this.centerY + this.radius*0.15 + yoff) +'px;left:'+(n*(this.width+this.offset)) +'px;height:'+this.textSize+'px';

	this.zoneDiv.style.cssText = comstyle__MODULE_ID__+'width:'+this.width+'px;font-size:' +  this.labelSize + 'px;font-weight:bold;color:'+ this.zoneCol +';text-align:center;top:' + (this.centerY + this.radius + this.textSize - 0 + yoff) +'px;left:'+(n*(this.width+this.offset)) +'px;height:'+(this.labelSize)+'px';

	for (var i = 1; i < 13; i++) {
		this.numDivs[i].style.cssText = comstyle__MODULE_ID__+'font-weight:bold;font-size:' + this.numberSize + 'px;width:' + this.numberSize*2 + ';color:'+ this.numCol +';text-align:center;padding-top:' + (this.numberSize)/2 +'px;top:'+ (this.centerY-this.offset + yoff + 0.9*this.radius * Math.sin(i * Math.PI / 6 - Math.PI*.5)) +'px;left:'+ (this.centerX-this.numberSize + 0.9*this.radius * Math.cos(i * Math.PI / 6 - Math.PI*.5) + (n*(this.width+this.offset))) +'px';
	}

	var minHandWidth = 1 + Math.floor(this.width/100);
	var hourHandWidth = 1 + Math.floor(this.width/50);
	for (var i = 0; i < this.handLong; i++) {
		this.minDivs[i].style.cssText =  comstyle__MODULE_ID__+'width:' + minHandWidth + 'px;height:' + minHandWidth + 'px;font-size:' + minHandWidth + 'px;background:' + this.minCol + ';top:'+ (this.centerY + yoff) +';left:'+ (this.centerX + n*(this.width+this.offset));
	}
	for (var i = 0; i < this.handSec; i++) {
		this.secDivs[i].style.cssText = comstyle__MODULE_ID__+'width:1px;height:1px;font-size:1px;background:' + this.secCol + ';top:'+ (this.centerY + yoff) +';left:'+ (this.centerX + n*(this.width+this.offset));
	}

	for (var i = 0; i < this.handShort; i++) {
		this.hourDivs[i].style.cssText =  comstyle__MODULE_ID__+'width:' + hourHandWidth + 'px;height:' + hourHandWidth + 'px;font-size:' + hourHandWidth + 'px;background:' + this.hourCol  + ';top:'+ (this.centerY + yoff) +';left:'+ (this.centerX + n*(this.width+this.offset));
	}

	// Position the clock background bitmap
	var clkbg = _gel('cbg'+ nth +'__MODULE_ID__');
	clkbg.style.cssText = 'position:absolute';
	clkbg.style.left = parseInt(this.centerX + n*(this.width+this.offset) - (this.diameter + this.offset)/2) + 'px';
	clkbg.style.top = parseInt(this.centerY + yoff - (this.diameter + this.offset)/2) + 'px';
	clkbg.style.width = parseInt(this.diameter + this.offset) + 'px';
	clkbg.style.height = parseInt(this.diameter + this.offset) + 'px';
}

function tickClocks__MODULE_ID__() {
	var now = new Date();
	var utc = now.getTime() + (now.getTimezoneOffset() * 60000);
	for (var j = 0; j < clocks__MODULE_ID__.length; j++) {
		var nd = new Date(utc + 3600000*clocks__MODULE_ID__[j].timeOffset - 1000*timeServerOffset__MODULE_ID__);
		var hours = nd.getHours();
		var ampm = (nd.getHours() > 11) ? "PM" : "AM" ;
		var aSecond = Math.PI * nd.getSeconds() / 30 - Math.PI*.5;
		var aMinute = Math.PI * nd.getMinutes() / 30 - Math.PI*.5;
		var aHour = (Math.PI * hours / 6 + Math.PI * nd.getMinutes()/360) * 12/clocks__MODULE_ID__[j].analogformat - Math.PI*.5;
		var xoff = (clockPos__MODULE_ID__.getXPos(j) - 1) * (clocks__MODULE_ID__[j].width + clocks__MODULE_ID__[j].offset);
		var yoff = (clockPos__MODULE_ID__.getYPos(j) - 1) * (clocks__MODULE_ID__[j].width + 3 * clocks__MODULE_ID__[j].offset);

		var time = '';
		if(clocks__MODULE_ID__[j].digiformat > 0) {
			var h = nd.getHours();
			if((h > 12) && (clocks__MODULE_ID__[j].digiformat == 12)) {
				h -= 12;
			}
			time += h + ':';
			var m = nd.getMinutes();
			if(m < 10) {
				time += '0';
			}
			time += m;
		}

		if(clocks__MODULE_ID__[j].analogformat == 24) {
			ampm = time;
			time = '';
		}

		clocks__MODULE_ID__[j].dateDiv.innerHTML = formatDate__MODULE_ID__(nd.getDay(), nd.getDate(), nd.getMonth() + 1, nd.getYear());
		clocks__MODULE_ID__[j].ampmDiv.innerHTML = ampm;
		clocks__MODULE_ID__[j].timeDiv.innerHTML = time;

		for (var i = 0; i < clocks__MODULE_ID__[j].handSec; i++){
			clocks__MODULE_ID__[j].secDivs[i].style.top = clocks__MODULE_ID__[j].centerY + yoff + i * Math.sin(aSecond) +"px";
			clocks__MODULE_ID__[j].secDivs[i].style.left = clocks__MODULE_ID__[j].centerX + xoff + i * Math.cos(aSecond) +"px";
		}
		for (var i = 0; i < clocks__MODULE_ID__[j].handLong; i++){
			clocks__MODULE_ID__[j].minDivs[i].style.top = clocks__MODULE_ID__[j].centerY + yoff + i * Math.sin(aMinute) +"px";
			clocks__MODULE_ID__[j].minDivs[i].style.left = clocks__MODULE_ID__[j].centerX + xoff + i * Math.cos(aMinute) +"px";
		}
		for (var i = 0; i < clocks__MODULE_ID__[j].handShort; i++){
			clocks__MODULE_ID__[j].hourDivs[i].style.top = clocks__MODULE_ID__[j].centerY + yoff + i * Math.sin(aHour) +"px";
			clocks__MODULE_ID__[j].hourDivs[i].style.left = clocks__MODULE_ID__[j].centerX + xoff + i * Math.cos(aHour) +"px";
		}
	}
	now = new Date();
	var msecsTillNextSec = 1100 - (now.getTime() % 1000);
	if(debug__MODULE_ID__) {
		clocks__MODULE_ID__[0].ampmDiv.innerHTML = '>' + msecsTillNextSec + 'ms';
	}
	ticker__MODULE_ID__ = setTimeout('tickClocks__MODULE_ID__()', msecsTillNextSec);
}

function init_AnalogClocks__MODULE_ID__(){	
    var mode = gMode;
    var columns = 4;
    if(mode == 'ana3') {
        columns = 3;
    }
    else if(mode == 'ana4') {
        columns = 4;
    }
    else if(mode == 'ana1') {
        columns = 1;
    }
    else if(mode == 'ana5') {
        columns = 5;
    }

	widthB4Resize__MODULE_ID__ = w = getW__MODULE_ID__();

	var clockCnt = 0;
    var offset;
    for(offset in gOffsetLabelMap) { // TODO - is for...in here acceptable with an Object() ?
        clocks__MODULE_ID__[clockCnt] =  new Clock__MODULE_ID__(offset, gOffsetLabelMap[offset], gDigiFormat, gAnalogFormat);
        clocks__MODULE_ID__[clockCnt].calDimensions(w / columns);
        clocks__MODULE_ID__[clockCnt].appendToDiv();
        clockCnt++;
    }

	var rows = Math.ceil(clockCnt / columns);

	clockPos__MODULE_ID__ = new ClockPosition__MODULE_ID__(clockCnt, rows, columns);
	
	for(var i = 0; i < clockCnt; i++) {
		clocks__MODULE_ID__[i].positionObjects(i);
	}
	
	analogDiv__MODULE_ID__.style.height = rows * clocks__MODULE_ID__[0].height + 'px';	

	canCallResize__MODULE_ID__ = 1;
	ticker__MODULE_ID__ = setTimeout('tickClocks__MODULE_ID__()', 100);

	_IG_AdjustIFrameHeight();

	// Register the onResize handler
// Disable the onresize handler for now, and this is potentially causing more
// harm than good
//	window.onresize = resize__MODULE_ID__;
}

// --------- Digital clocks mode
// ------------------------------------------------------------------

var digitalClockOffsets__MODULE_ID__ = new Array();

function tickDigiclocks__MODULE_ID__() {

	var format = gDigiFormat;
	var now = new Date();
	var utc = now.getTime() + (now.getTimezoneOffset() * 60000);

	for(var i = 0; i < digitalClockOffsets__MODULE_ID__.length; i++) {
		var nd = new Date(utc + (3600000*digitalClockOffsets__MODULE_ID__[i]) - 1000*timeServerOffset__MODULE_ID__);
		var hours = nd.getHours();
		var ampm = '';
		
		var time = '';
		var h = nd.getHours();
		if(format == 12) {
			if(h > 12) {
				h -= 12;
			}
			ampm = (nd.getHours() > 11) ? " PM" : " AM" ;
		}
		time += h + ':';
		var m = nd.getMinutes();
		if(m < 10) {
			time += '0';
		}
		time += m + ampm;

		var clockTime = _gel('time_' + i);
		clockTime.innerHTML = time;

		if(gMode == 'digd') {
			var clockDate = _gel('date_' + i);
			clockDate.innerHTML = formatDate__MODULE_ID__(nd.getDay(), nd.getDate(), nd.getMonth() + 1, nd.getYear());
		}
	}
	ticker__MODULE_ID__ = setTimeout('tickDigiclocks__MODULE_ID__()', 1000);
}

function init_DigitalClocks__MODULE_ID__() {
	var clocks = _gel('digiclocks__MODULE_ID__');
	var clockID = 0;
	var offset;
	for(offset in gOffsetLabelMap) { // TODO - is for...in here acceptable with an Object() ?
		var clockLine = document.createElement('tr');
		clockLine.id = 'clock_' + clockID;
		//clockLine.title = gOffsetLabelMap[offset];

		var clockLabel = document.createElement('td');
		clockLabel.style.textAlign = 'right';
		clockLabel.id = 'label_' + clockID;
		//clockLabel.appendChild(document.createTextNode(gOffsetLabelMap[offset]));

		var clockTime = document.createElement('td');
		clockTime.id = 'time_' + clockID;

		var clockDate = document.createElement('td');
		clockDate.id = 'date_' + clockID; 

		var color = '#EFF7FF';
		if(clockID % 2) {
			color = '#DEEEFF';
		}
		clockLabel.style.background = color;
		clockTime.style.background = color;
		clockTime.style.textAlign = 'right';
		clockTime.style.fontWeight = 'bold';
		clockDate.style.background = color;
		clockDate.style.textAlign = 'left';
		clockDate.style.fontWeight = 'bold';
		
		clockLine.appendChild(clockLabel);
		clockLine.appendChild(clockDate);
		clockLine.appendChild(clockTime);

		clocks.appendChild(clockLine);

		// Not pretty to feed some HTML while doing some DOM by the label is already HTML formatted...
		_gel('label_' + clockID).innerHTML = gOffsetLabelMap[offset];

		digitalClockOffsets__MODULE_ID__[clockID] = offset;
		clockID++;
	}
	ticker__MODULE_ID__ = setTimeout('tickDigiclocks__MODULE_ID__()', 1000);

	analogDiv__MODULE_ID__.style.height = '0px';
	_IG_AdjustIFrameHeight();
}

// ---------- Misc utilities
// ------------------------------------------------------------------

function getOffset__MODULE_ID__(tz)
{
	var offset = 100; // Error return value
	if(tz in timeOffset__MODULE_ID__) {
		offset = timeOffset__MODULE_ID__[tz];
	}
	else if(!isNaN(parseFloat(tz))) {
		offset = parseFloat(tz);
	}
/* NO MINI MESSAGE
	else if((tz != '') && (tz != 'None') && (tz != 'none') && (tz != 'NONE')) {
		var msg = new _IG_MiniMessage(__MODULE_ID__);
		var errorMsg = msg.createDismissibleMessage('Invalid code: ' + tz + ' - Please find correct codes in <a href="http://www.ljmsite.com/google/gadgets/worldclocks/tzcodes.php" target="_blank">this list</a>');
		errorMsg.style.backgroundColor = "red";
		errorMsg.style.color = "white";
	}
*/
	return offset;
}

function formatDate__MODULE_ID__(dayw, day, month, year)
{
	var date = '';
	if(year < 2000) {
		year += 1900;
	}
	switch(dateFormat__MODULE_ID__){
		case 'date':
			date = dayName__MODULE_ID__[dayw] + ' ' + day + ' ' + monthName__MODULE_ID__[month - 1];
			break;
		case 'day':
			date = fulldayName__MODULE_ID__[dayw];
			break;
		case 'd':
			date = dayName__MODULE_ID__[dayw];
			break;
		case 'mdy':
			date = month + '/' + day + '/' + year;
			break;
		case 'dmy':
			date = day + '/' + month + '/' + year;
			break;
		case 'ymd':
			date = year + '/' + month + '/' + day;
			break; 
		default:
			date = '';
	}
	return date;
}

// ------------------------------------------------------------------

</script>

<style type="text/css">
* {font-size:12px;font-weight:500;margin-left:2px;margin-right:5px;text-decoration:none;color:#000000;font-family:Verdana,Arial,sans-serif;text-align:left;}
.linediv {margin-top:5px;margin-bottom:1px;clear:both;font-size:1px;line-height:1px;overflow:hidden;height:1px;background-color:#D9E6F7;width=99%}
.link {font-size:10px;font-weight:700;margin-left:2px;margin-right:5px;text-decoration:underline;white-space:nowrap;color:#02679C;font-family:Verdana,Arial,sans-serif;text-align:left;}
.link:visited {font-size:10px;font-weight:700;margin-left:2px;margin-right:5px;text-decoration:underline;white-space:nowrap;color:#02679C;font-family:Verdana,Arial,sans-serif;text-align:left;}

</style>

<div><a href="javascript:void();" class="link" onclick="toggleSetup(true); return false;" id="setupLink"></a>
<span id="meetingplannerlink"></span>
<!--<a href="tbd" class="link" target="_blank">something else here</a>-->
</div>

<span id="settings"></span>

<div class="linediv">&nbsp;</div>

<body style="margin:0;padding:0;">
<div id="analogclocks__MODULE_ID__" style="position:relative;">
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg0__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg1__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg2__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg3__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg4__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg5__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg6__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg7__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg8__MODULE_ID__" />
<img src="http://gadgets2.ljmsite.com/worldclocks/clockface-simple.png" width="0" height="0" alt="" id="cbg9__MODULE_ID__" />
</div>

<table border="0" cellpadding="3" cellspacing="0" align="center" width="100%">
<tbody id="digiclocks__MODULE_ID__"></tbody>
</table>

<!-- temporary bottom padding until we get the clocks label accounted for -->
<div style="text-align:center">&nbsp;<br /><br /></div>

]]>
  </Content>
</Module>
