//http://upload.wikimedia.org/wikipedia/commons/3/3d/Timezones_optimized.png
//http://www.worldtimezone.com/daylight.htm
var tzinfo = new Array();
// chaque ville contient 4 données séparées par des ¤
// le premier : - si le décalage est avant greenwich, + s'il est sur ou après greenwich
// le deuxième : le nombre d'heures de décalage (sans les minutes)
// le troisième : le nombre de minutes de décalage si applicable, sinon 0
// le quatrième : 1 si le day saving time est pris en compte, sinon 0
tzinfo['Afrique'] = new Array();
tzinfo['Afrique']['Afrique du Sud'] = new Array();
tzinfo['Afrique']['Afrique du Sud']['Le Cap'] = '+¤2¤0¤0';

tzinfo['Amérique'] = new Array();
tzinfo['Amérique']['Argentine'] = new Array();
tzinfo['Amérique']['Argentine']['Buenos Aires'] = '-¤3¤0¤0';
tzinfo['Amérique']['Canada'] = new Array();
tzinfo['Amérique']['Canada']['Calgary'] = '-¤7¤0¤1';
tzinfo['Amérique']['Canada']['Edmonton'] = '-¤7¤0¤1';
tzinfo['Amérique']['Canada']['Montréal'] = '-¤5¤0¤1';
tzinfo['Amérique']['Canada']['Québec'] = '-¤5¤0¤1';
tzinfo['Amérique']['Canada']['Toronto'] = '-¤5¤0¤1';
tzinfo['Amérique']['Canada']['Vancouver'] = '-¤8¤0¤1';
tzinfo['Amérique']['Canada']['Winnipeg'] = '-¤6¤0¤1';
tzinfo['Amérique']['États-Unis'] = new Array();
tzinfo['Amérique']['États-Unis']['Chicago'] = '-¤6¤0¤1';
tzinfo['Amérique']['États-Unis']['Dallas'] = '-¤6¤0¤1';
tzinfo['Amérique']['États-Unis']['Denver'] = '-¤7¤0¤1';
tzinfo['Amérique']['États-Unis']['Los Angeles'] = '-¤8¤0¤1';
tzinfo['Amérique']['États-Unis']['New York'] = '-¤5¤0¤1';
tzinfo['Amérique']['Mexique'] = new Array();
tzinfo['Amérique']['Mexique']['Mexico'] = '-¤6¤0¤1';

tzinfo['Asie'] = new Array();
tzinfo['Asie']['Chine'] = new Array();
tzinfo['Asie']['Chine']['Beijing'] = '+¤8¤0¤0';
tzinfo['Asie']['Chine']['Shanghai'] = '+¤8¤0¤0';
tzinfo['Asie']['Inde'] = new Array();
tzinfo['Asie']['Inde']['Bombay'] = '+¤5¤30¤0';
tzinfo['Asie']['Japon'] = new Array();
tzinfo['Asie']['Japon']['Tokyo'] = '+¤9¤0¤0';


tzinfo['Europe'] = new Array();
tzinfo['Europe']['Angleterre'] = new Array();
tzinfo['Europe']['Angleterre']['Londres'] = '+¤0¤0¤1';
tzinfo['Europe']['Belgique'] = new Array();
tzinfo['Europe']['Belgique']['Bruxelles'] = '+¤1¤0¤1';
tzinfo['Europe']['France'] = new Array();
tzinfo['Europe']['France']['Paris'] = '+¤1¤0¤1';
tzinfo['Europe']['Russie'] = new Array();
tzinfo['Europe']['Russie']['Moscou'] = '+¤3¤0¤1';

tzinfo['Océanie'] = new Array();
tzinfo['Océanie']['Australie'] = new Array();
tzinfo['Océanie']['Australie']['Sydney'] = '+¤10¤0¤1';

var time_digit = new Array();
time_digit[0] = 'Europe¤France¤Paris';
time_digit[1] = 'Amérique¤États-Unis¤New York';
time_digit[2] = 'Europe¤Russie¤Moscou';
time_digit[3] = 'Océanie¤Australie¤Sydney';
time_digit[4] = 'Asie¤Inde¤Bombay';
time_digit[5] = 'Afrique¤Afrique du Sud¤Le Cap';
time_digit[6] = 'Amérique¤Mexique¤Mexico';

var labels_fuseau = new Array();
//continent¤pays¤ville¤left¤top
labels_fuseau[0] = 'Amérique¤États-Unis¤Los Angeles¤75¤155';
labels_fuseau[1] = 'Amérique¤Mexique¤Mexico¤107¤179';
labels_fuseau[2] = 'Amérique¤États-Unis¤New York¤150¤140';
labels_fuseau[3] = 'Europe¤France¤Paris¤270¤125';
labels_fuseau[4] = 'Europe¤Russie¤Moscou¤320¤109';
labels_fuseau[5] = 'Afrique¤Afrique du Sud¤Le Cap¤298¤271';
labels_fuseau[6] = 'Asie¤Japon¤Tokyo¤480¤150';
//'Djakarta 490 200
//'Le Caire 334 116
//'Melbourne 534 282

function getDecalageForLocation(tz)
{
    var info = tz.split('¤');
    if(info.length != 4) return 0;

    // decalage de l'heure par rapport a l'heure GMT
    var coef = (info[0] == '-') ? -1 : 1;
    var decalage = coef * parseInt(info[1]) * 60 + coef * parseInt(info[2]);

    // heure d'été si applicable
    if(is_dst == 1 && info[3] == '1')
    {
        decalage += 60;
    }

    return decalage;
}

function getTimeForLocation(tz)
{
    var info = tz.split('¤');
    if(info.length != 4) return '00h00';
	
    // decalage de l'heure par rapport a l'heure GMT
    var coef = (info[0] == '-') ? -1 : 1;
    var h = gmt_time[0] + coef * parseInt(info[1]);
    var m = gmt_time[1] + coef * parseInt(info[2]);
	
    // heure d'été si applicable
    if(is_dst == 1 && info[3] == '1')
    {
        h++;
    }

    // ajustement aux minutes
    if(m < 0)
    {
        m += 60;
        h--;
    }
    else if(m > 59)
    {
        m -= 60;
        h++;
    }

    // ajustement aux heures
    if(h < 0)
    {
        h += 24;
    }
    else if(h > 23)
    {
        h -= 24;
    }

    var new_time = '';
    if(h < 10) new_time += '0';
    new_time += h.toString()+'h';
    if(m < 10) new_time += '0';
    new_time += m.toString();
    return new_time;
}

function updateLabelsFuseau()
{
    var parts,label;
    for(i in labels_fuseau)
    {	
        label = document.getElementById('label_fuseau'+i);
        if(label)
        {
            parts = labels_fuseau[i].split('¤');
            if(parts.length == 5 && tzinfo[parts[0]][parts[1]][parts[2]])
            {
                label.innerHTML = '&nbsp;'+getTimeForLocation(tzinfo[parts[0]][parts[1]][parts[2]])+'&nbsp;';
            }
        }
    }

}



function updateTimes()
{
	
    gmt_time[2]++;
    if(gmt_time[2]==60)
    {
        gmt_time[1]++;
        gmt_time[2]=0;
    }
    else
        return;// pas besoin de continuer, ya que les secondes qui ont bougées

    if(gmt_time[1]==60)
    {
        gmt_time[0]++;
        gmt_time[1]=0;

    }
    if(gmt_time[0]==24)
    {
        gmt_time[0]=0;
    }
    updateLabelsFuseau()
}

function loadLabelsFuseau()
{
    var cadre = document.getElementById('fuseaux');
    for(i in labels_fuseau)
    {
        var parts = labels_fuseau[i].split('¤');
        cadre.innerHTML += '<div class="arial-9-b" style="position:absolute;top:'+parts[4]+'px;left:'+parts[3]+'px;">* '+parts[2]+'<span id="label_fuseau'+i+'" class="label_fuseau">&nbsp;00h00&nbsp;</span></div>';
    }
}

function start_timer()
{

    loadLabelsFuseau();
  
    updateLabelsFuseau();
    setInterval('updateTimes()', 1000);
}
