function determineTimeZone( ) {
    /* This function attempts to take a good guess at
       the user's actual timezone (including DST behavior)
       by sampling the difference between the user's local
       time and GMT on Jan/Apr/Jul/Sept 1 2006 (four dates
       for which the DST-induced difference should be evident.)
       The resulting offsets from GMT can then be compared 
       to a known list of standard time zones in order to
       guess the correct one. */
    var knownTimeZones = new Array( );
    knownTimeZones['America/Los_Angeles'] = new Array(); knownTimeZones['America/Los_Angeles'][1] = -480; knownTimeZones['America/Los_Angeles'][4] = -480; knownTimeZones['America/Los_Angeles'][7] = -420; knownTimeZones['America/Los_Angeles'][9] = -420;
    knownTimeZones['America/New_York'] = new Array(); knownTimeZones['America/New_York'][1] = -300; knownTimeZones['America/New_York'][4] = -300; knownTimeZones['America/New_York'][7] = -240; knownTimeZones['America/New_York'][9] = -240;
    knownTimeZones['America/Chicago'] = new Array(); knownTimeZones['America/Chicago'][1] = -360; knownTimeZones['America/Chicago'][4] = -360; knownTimeZones['America/Chicago'][7] = -300; knownTimeZones['America/Chicago'][9] = -300;
    knownTimeZones['America/Denver'] = new Array(); knownTimeZones['America/Denver'][1] = -420; knownTimeZones['America/Denver'][4] = -420; knownTimeZones['America/Denver'][7] = -360; knownTimeZones['America/Denver'][9] = -360;
    knownTimeZones['America/St_Johns'] = new Array(); knownTimeZones['America/St_Johns'][1] = -210; knownTimeZones['America/St_Johns'][4] = -210; knownTimeZones['America/St_Johns'][7] = -150; knownTimeZones['America/St_Johns'][9] = -150;
    knownTimeZones['Europe/London'] = new Array(); knownTimeZones['Europe/London'][1] = 0; knownTimeZones['Europe/London'][4] = 60; knownTimeZones['Europe/London'][7] = 60; knownTimeZones['Europe/London'][9] = 60;
    knownTimeZones['Asia/Bishkek'] = new Array(); knownTimeZones['Asia/Bishkek'][1] = 300; knownTimeZones['Asia/Bishkek'][4] = 360; knownTimeZones['Asia/Bishkek'][7] = 360; knownTimeZones['Asia/Bishkek'][9] = 360;
    knownTimeZones['Asia/Vladivostok'] = new Array(); knownTimeZones['Asia/Vladivostok'][1] = 600; knownTimeZones['Asia/Vladivostok'][4] = 660; knownTimeZones['Asia/Vladivostok'][7] = 660; knownTimeZones['Asia/Vladivostok'][9] = 660;
    knownTimeZones['Asia/Baghdad'] = new Array(); knownTimeZones['Asia/Baghdad'][1] = 180; knownTimeZones['Asia/Baghdad'][4] = 180; knownTimeZones['Asia/Baghdad'][7] = 240; knownTimeZones['Asia/Baghdad'][9] = 240;
    knownTimeZones['Australia/Brisbane'] = new Array(); knownTimeZones['Australia/Brisbane'][1] = 600; knownTimeZones['Australia/Brisbane'][4] = 600; knownTimeZones['Australia/Brisbane'][7] = 600; knownTimeZones['Australia/Brisbane'][9] = 600;
    knownTimeZones['Asia/Magadan'] = new Array(); knownTimeZones['Asia/Magadan'][1] = 660; knownTimeZones['Asia/Magadan'][4] = 720; knownTimeZones['Asia/Magadan'][7] = 720; knownTimeZones['Asia/Magadan'][9] = 720;
    knownTimeZones['Australia/Perth'] = new Array(); knownTimeZones['Australia/Perth'][1] = 480; knownTimeZones['Australia/Perth'][4] = 480; knownTimeZones['Australia/Perth'][7] = 480; knownTimeZones['Australia/Perth'][9] = 480;
    knownTimeZones['Pacific/Chatham'] = new Array(); knownTimeZones['Pacific/Chatham'][1] = 825; knownTimeZones['Pacific/Chatham'][4] = 765; knownTimeZones['Pacific/Chatham'][7] = 765; knownTimeZones['Pacific/Chatham'][9] = 765;
    knownTimeZones['Asia/Yakutsk'] = new Array(); knownTimeZones['Asia/Yakutsk'][1] = 540; knownTimeZones['Asia/Yakutsk'][4] = 600; knownTimeZones['Asia/Yakutsk'][7] = 600; knownTimeZones['Asia/Yakutsk'][9] = 600;
    knownTimeZones['Pacific/Enderbury'] = new Array(); knownTimeZones['Pacific/Enderbury'][1] = 780; knownTimeZones['Pacific/Enderbury'][4] = 780; knownTimeZones['Pacific/Enderbury'][7] = 780; knownTimeZones['Pacific/Enderbury'][9] = 780;
    knownTimeZones['Asia/Rangoon'] = new Array(); knownTimeZones['Asia/Rangoon'][1] = 390; knownTimeZones['Asia/Rangoon'][4] = 390; knownTimeZones['Asia/Rangoon'][7] = 390; knownTimeZones['Asia/Rangoon'][9] = 390;
    knownTimeZones['Pacific/Guadalcanal'] = new Array(); knownTimeZones['Pacific/Guadalcanal'][1] = 660; knownTimeZones['Pacific/Guadalcanal'][4] = 660; knownTimeZones['Pacific/Guadalcanal'][7] = 660; knownTimeZones['Pacific/Guadalcanal'][9] = 660;
    knownTimeZones['Europe/Helsinki'] = new Array(); knownTimeZones['Europe/Helsinki'][1] = 120; knownTimeZones['Europe/Helsinki'][4] = 180; knownTimeZones['Europe/Helsinki'][7] = 180; knownTimeZones['Europe/Helsinki'][9] = 180;
    knownTimeZones['Asia/Kabul'] = new Array(); knownTimeZones['Asia/Kabul'][1] = 270; knownTimeZones['Asia/Kabul'][4] = 270; knownTimeZones['Asia/Kabul'][7] = 270; knownTimeZones['Asia/Kabul'][9] = 270;
    knownTimeZones['America/Sao_Paulo'] = new Array(); knownTimeZones['America/Sao_Paulo'][1] = -120; knownTimeZones['America/Sao_Paulo'][4] = -180; knownTimeZones['America/Sao_Paulo'][7] = -180; knownTimeZones['America/Sao_Paulo'][9] = -180;
    knownTimeZones['Australia/Darwin'] = new Array(); knownTimeZones['Australia/Darwin'][1] = 570; knownTimeZones['Australia/Darwin'][4] = 570; knownTimeZones['Australia/Darwin'][7] = 570; knownTimeZones['Australia/Darwin'][9] = 570;
    knownTimeZones['Pacific/Auckland'] = new Array(); knownTimeZones['Pacific/Auckland'][1] = 780; knownTimeZones['Pacific/Auckland'][4] = 720; knownTimeZones['Pacific/Auckland'][7] = 720; knownTimeZones['Pacific/Auckland'][9] = 720;
    knownTimeZones['Europe/Samara'] = new Array(); knownTimeZones['Europe/Samara'][1] = 240; knownTimeZones['Europe/Samara'][4] = 300; knownTimeZones['Europe/Samara'][7] = 300; knownTimeZones['Europe/Samara'][9] = 300;
    knownTimeZones['Pacific/Norfolk'] = new Array(); knownTimeZones['Pacific/Norfolk'][1] = 690; knownTimeZones['Pacific/Norfolk'][4] = 690; knownTimeZones['Pacific/Norfolk'][7] = 690; knownTimeZones['Pacific/Norfolk'][9] = 690;
    knownTimeZones['Asia/Bangkok'] = new Array(); knownTimeZones['Asia/Bangkok'][1] = 420; knownTimeZones['Asia/Bangkok'][4] = 420; knownTimeZones['Asia/Bangkok'][7] = 420; knownTimeZones['Asia/Bangkok'][9] = 420;
    knownTimeZones['Asia/Ulan_Bator'] = new Array(); knownTimeZones['Asia/Ulan_Bator'][1] = 480; knownTimeZones['Asia/Ulan_Bator'][4] = 540; knownTimeZones['Asia/Ulan_Bator'][7] = 540; knownTimeZones['Asia/Ulan_Bator'][9] = 540;
    knownTimeZones['Pacific/Kiritimati'] = new Array(); knownTimeZones['Pacific/Kiritimati'][1] = 840; knownTimeZones['Pacific/Kiritimati'][4] = 840; knownTimeZones['Pacific/Kiritimati'][7] = 840; knownTimeZones['Pacific/Kiritimati'][9] = 840;
    knownTimeZones['Atlantic/Reykjavik'] = new Array(); knownTimeZones['Atlantic/Reykjavik'][1] = 0; knownTimeZones['Atlantic/Reykjavik'][4] = 0; knownTimeZones['Atlantic/Reykjavik'][7] = 0; knownTimeZones['Atlantic/Reykjavik'][9] = 0;
    knownTimeZones['Pacific/Gambier'] = new Array(); knownTimeZones['Pacific/Gambier'][1] = -540; knownTimeZones['Pacific/Gambier'][4] = -540; knownTimeZones['Pacific/Gambier'][7] = -540; knownTimeZones['Pacific/Gambier'][9] = -540;
    knownTimeZones['Asia/Dacca'] = new Array(); knownTimeZones['Asia/Dacca'][1] = 360; knownTimeZones['Asia/Dacca'][4] = 360; knownTimeZones['Asia/Dacca'][7] = 360; knownTimeZones['Asia/Dacca'][9] = 360;
    knownTimeZones['Atlantic/South_Georgia'] = new Array(); knownTimeZones['Atlantic/South_Georgia'][1] = -120; knownTimeZones['Atlantic/South_Georgia'][4] = -120; knownTimeZones['Atlantic/South_Georgia'][7] = -120; knownTimeZones['Atlantic/South_Georgia'][9] = -120;
    knownTimeZones['Atlantic/Azores'] = new Array(); knownTimeZones['Atlantic/Azores'][1] = -60; knownTimeZones['Atlantic/Azores'][4] = 0; knownTimeZones['Atlantic/Azores'][7] = 0; knownTimeZones['Atlantic/Azores'][9] = 0;
    knownTimeZones['Asia/Kamchatka'] = new Array(); knownTimeZones['Asia/Kamchatka'][1] = 720; knownTimeZones['Asia/Kamchatka'][4] = 780; knownTimeZones['Asia/Kamchatka'][7] = 780; knownTimeZones['Asia/Kamchatka'][9] = 780;
    knownTimeZones['Asia/Dubai'] = new Array(); knownTimeZones['Asia/Dubai'][1] = 240; knownTimeZones['Asia/Dubai'][4] = 240; knownTimeZones['Asia/Dubai'][7] = 240; knownTimeZones['Asia/Dubai'][9] = 240;
    knownTimeZones['Atlantic/Bermuda'] = new Array(); knownTimeZones['Atlantic/Bermuda'][1] = -240; knownTimeZones['Atlantic/Bermuda'][4] = -240; knownTimeZones['Atlantic/Bermuda'][7] = -180; knownTimeZones['Atlantic/Bermuda'][9] = -180;
    knownTimeZones['Asia/Calcutta'] = new Array(); knownTimeZones['Asia/Calcutta'][1] = 330; knownTimeZones['Asia/Calcutta'][4] = 330; knownTimeZones['Asia/Calcutta'][7] = 330; knownTimeZones['Asia/Calcutta'][9] = 330;
    knownTimeZones['Pacific/Marquesas'] = new Array(); knownTimeZones['Pacific/Marquesas'][1] = -570; knownTimeZones['Pacific/Marquesas'][4] = -570; knownTimeZones['Pacific/Marquesas'][7] = -570; knownTimeZones['Pacific/Marquesas'][9] = -570;
    knownTimeZones['Asia/Novosibirsk'] = new Array(); knownTimeZones['Asia/Novosibirsk'][1] = 360; knownTimeZones['Asia/Novosibirsk'][4] = 420; knownTimeZones['Asia/Novosibirsk'][7] = 420; knownTimeZones['Asia/Novosibirsk'][9] = 420;
    knownTimeZones['America/Santiago'] = new Array(); knownTimeZones['America/Santiago'][1] = -180; knownTimeZones['America/Santiago'][4] = -240; knownTimeZones['America/Santiago'][7] = -240; knownTimeZones['America/Santiago'][9] = -240;
    knownTimeZones['Asia/Katmandu'] = new Array(); knownTimeZones['Asia/Katmandu'][1] = 345; knownTimeZones['Asia/Katmandu'][4] = 345; knownTimeZones['Asia/Katmandu'][7] = 345; knownTimeZones['Asia/Katmandu'][9] = 345;
    knownTimeZones['Europe/Paris'] = new Array(); knownTimeZones['Europe/Paris'][1] = 60; knownTimeZones['Europe/Paris'][4] = 120; knownTimeZones['Europe/Paris'][7] = 120; knownTimeZones['Europe/Paris'][9] = 120;
    knownTimeZones['Australia/Broken_Hill'] = new Array(); knownTimeZones['Australia/Broken_Hill'][1] = 630; knownTimeZones['Australia/Broken_Hill'][4] = 570; knownTimeZones['Australia/Broken_Hill'][7] = 570; knownTimeZones['Australia/Broken_Hill'][9] = 570;
    knownTimeZones['Europe/Moscow'] = new Array(); knownTimeZones['Europe/Moscow'][1] = 180; knownTimeZones['Europe/Moscow'][4] = 240; knownTimeZones['Europe/Moscow'][7] = 240; knownTimeZones['Europe/Moscow'][9] = 240;
    knownTimeZones['America/Indianapolis'] = new Array(); knownTimeZones['America/Indianapolis'][1] = -300; knownTimeZones['America/Indianapolis'][4] = -300; knownTimeZones['America/Indianapolis'][7] = -300; knownTimeZones['America/Indianapolis'][9] = -300;
    knownTimeZones['Asia/Karachi'] = new Array(); knownTimeZones['Asia/Karachi'][1] = 300; knownTimeZones['Asia/Karachi'][4] = 300; knownTimeZones['Asia/Karachi'][7] = 300; knownTimeZones['Asia/Karachi'][9] = 300;
    knownTimeZones['America/Belize'] = new Array(); knownTimeZones['America/Belize'][1] = -360; knownTimeZones['America/Belize'][4] = -360; knownTimeZones['America/Belize'][7] = -360; knownTimeZones['America/Belize'][9] = -360;
    knownTimeZones['Pacific/Easter'] = new Array(); knownTimeZones['Pacific/Easter'][1] = -300; knownTimeZones['Pacific/Easter'][4] = -360; knownTimeZones['Pacific/Easter'][7] = -360; knownTimeZones['Pacific/Easter'][9] = -360;
    knownTimeZones['Pacific/Pitcairn'] = new Array(); knownTimeZones['Pacific/Pitcairn'][1] = -480; knownTimeZones['Pacific/Pitcairn'][4] = -480; knownTimeZones['Pacific/Pitcairn'][7] = -480; knownTimeZones['Pacific/Pitcairn'][9] = -480;
    knownTimeZones['Asia/Tehran'] = new Array(); knownTimeZones['Asia/Tehran'][1] = 210; knownTimeZones['Asia/Tehran'][4] = 270; knownTimeZones['Asia/Tehran'][7] = 270; knownTimeZones['Asia/Tehran'][9] = 270;
    knownTimeZones['Asia/Tokyo'] = new Array(); knownTimeZones['Asia/Tokyo'][1] = 540; knownTimeZones['Asia/Tokyo'][4] = 540; knownTimeZones['Asia/Tokyo'][7] = 540; knownTimeZones['Asia/Tokyo'][9] = 540;
    knownTimeZones['Australia/Lord_Howe'] = new Array(); knownTimeZones['Australia/Lord_Howe'][1] = 660; knownTimeZones['Australia/Lord_Howe'][4] = 630; knownTimeZones['Australia/Lord_Howe'][7] = 630; knownTimeZones['Australia/Lord_Howe'][9] = 630;
    knownTimeZones['Africa/Windhoek'] = new Array(); knownTimeZones['Africa/Windhoek'][1] = 120; knownTimeZones['Africa/Windhoek'][4] = 120; knownTimeZones['Africa/Windhoek'][7] = 60; knownTimeZones['Africa/Windhoek'][9] = 60;
    knownTimeZones['Atlantic/Cape_Verde'] = new Array(); knownTimeZones['Atlantic/Cape_Verde'][1] = -60; knownTimeZones['Atlantic/Cape_Verde'][4] = -60; knownTimeZones['Atlantic/Cape_Verde'][7] = -60; knownTimeZones['Atlantic/Cape_Verde'][9] = -60;
    knownTimeZones['Pacific/Honolulu'] = new Array(); knownTimeZones['Pacific/Honolulu'][1] = -600; knownTimeZones['Pacific/Honolulu'][4] = -600; knownTimeZones['Pacific/Honolulu'][7] = -600; knownTimeZones['Pacific/Honolulu'][9] = -600;
    knownTimeZones['America/Buenos_Aires'] = new Array(); knownTimeZones['America/Buenos_Aires'][1] = -180; knownTimeZones['America/Buenos_Aires'][4] = -180; knownTimeZones['America/Buenos_Aires'][7] = -180; knownTimeZones['America/Buenos_Aires'][9] = -180;
    knownTimeZones['Africa/Tunis'] = new Array(); knownTimeZones['Africa/Tunis'][1] = 60; knownTimeZones['Africa/Tunis'][4] = 60; knownTimeZones['Africa/Tunis'][7] = 60; knownTimeZones['Africa/Tunis'][9] = 60;
    knownTimeZones['America/Miquelon'] = new Array(); knownTimeZones['America/Miquelon'][1] = -180; knownTimeZones['America/Miquelon'][4] = -180; knownTimeZones['America/Miquelon'][7] = -120; knownTimeZones['America/Miquelon'][9] = -120;
    knownTimeZones['Africa/Johannesburg'] = new Array(); knownTimeZones['Africa/Johannesburg'][1] = 120; knownTimeZones['Africa/Johannesburg'][4] = 120; knownTimeZones['Africa/Johannesburg'][7] = 120; knownTimeZones['Africa/Johannesburg'][9] = 120;
    knownTimeZones['America/Godthab'] = new Array(); knownTimeZones['America/Godthab'][1] = -180; knownTimeZones['America/Godthab'][4] = -120; knownTimeZones['America/Godthab'][7] = -120; knownTimeZones['America/Godthab'][9] = -120;
    knownTimeZones['Australia/Sydney'] = new Array(); knownTimeZones['Australia/Sydney'][1] = 660; knownTimeZones['Australia/Sydney'][4] = 600; knownTimeZones['Australia/Sydney'][7] = 600; knownTimeZones['Australia/Sydney'][9] = 600;
    knownTimeZones['America/Phoenix'] = new Array(); knownTimeZones['America/Phoenix'][1] = -420; knownTimeZones['America/Phoenix'][4] = -420; knownTimeZones['America/Phoenix'][7] = -420; knownTimeZones['America/Phoenix'][9] = -420;
    knownTimeZones['Atlantic/Stanley'] = new Array(); knownTimeZones['Atlantic/Stanley'][1] = -180; knownTimeZones['Atlantic/Stanley'][4] = -180; knownTimeZones['Atlantic/Stanley'][7] = -240; knownTimeZones['Atlantic/Stanley'][9] = -240;
    knownTimeZones['Pacific/Fiji'] = new Array(); knownTimeZones['Pacific/Fiji'][1] = 720; knownTimeZones['Pacific/Fiji'][4] = 720; knownTimeZones['Pacific/Fiji'][7] = 720; knownTimeZones['Pacific/Fiji'][9] = 720;
    knownTimeZones['America/Anchorage'] = new Array(); knownTimeZones['America/Anchorage'][1] = -540; knownTimeZones['America/Anchorage'][4] = -540; knownTimeZones['America/Anchorage'][7] = -480; knownTimeZones['America/Anchorage'][9] = -480;
    knownTimeZones['Asia/Kuwait'] = new Array(); knownTimeZones['Asia/Kuwait'][1] = 180; knownTimeZones['Asia/Kuwait'][4] = 180; knownTimeZones['Asia/Kuwait'][7] = 180; knownTimeZones['Asia/Kuwait'][9] = 180;
    knownTimeZones['Pacific/Midway'] = new Array(); knownTimeZones['Pacific/Midway'][1] = -660; knownTimeZones['Pacific/Midway'][4] = -660; knownTimeZones['Pacific/Midway'][7] = -660; knownTimeZones['Pacific/Midway'][9] = -660;
    knownTimeZones['Africa/Cairo'] = new Array(); knownTimeZones['Africa/Cairo'][1] = 120; knownTimeZones['Africa/Cairo'][4] = 120; knownTimeZones['Africa/Cairo'][7] = 180; knownTimeZones['Africa/Cairo'][9] = 180;
    knownTimeZones['America/Puerto_Rico'] = new Array(); knownTimeZones['America/Puerto_Rico'][1] = -240; knownTimeZones['America/Puerto_Rico'][4] = -240; knownTimeZones['America/Puerto_Rico'][7] = -240; knownTimeZones['America/Puerto_Rico'][9] = -240;
    knownTimeZones['Asia/Krasnoyarsk'] = new Array(); knownTimeZones['Asia/Krasnoyarsk'][1] = 420; knownTimeZones['Asia/Krasnoyarsk'][4] = 480; knownTimeZones['Asia/Krasnoyarsk'][7] = 480; knownTimeZones['Asia/Krasnoyarsk'][9] = 480;

    for ( tz in knownTimeZones ) {
        // alert( tz );
        var is_match = 1;
        for( month in knownTimeZones[tz] ) {
            var localDate = new Date( 2006, month-1, 1 );
            offset = -1*localDate.getTimezoneOffset();
            // alert( "TZ=" + tz + ", month = " + month + ", this TZ offset = " + knownTimeZones[tz][month] + ", client TZ offset = " + offset );
            if( offset != knownTimeZones[tz][month] ) {
                // if( !confirm( "Not a match" ) ) {
                //    return "Quitting";
                //}
                is_match = 0;
            }
        }
        if( is_match )
            return tz;
    }

    return "America/Los_Angeles";
}


