/* auteur: Bernard Martin-Rabaud */

/* Date de création: 10/11/2003 modifié le 28/01/2005 */



// FONCTIONS ET METHODES D'AFFICHE DE LA DATE



function complete2(nombre) {

  // met un "0" devant un nombre s'il est < 10

  return (nombre < 10) ? "0" + nombre : nombre;

}



Date.prototype.afficherDate = function()
{
  jours = new Array( 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre' );
  return complete2(this.getDate()) + " " + jours[this.getMonth()] + " " + this.getFullYear();
}



Date.prototype.afficherHeure = function() {

  // affiche l'heure

  return complete2(this.getHours()) + ":" + complete2(this.getMinutes()) + ":" + complete2(this.getSeconds());

}

Date.prototype.afficherGTM = function() {

  var heure = new Date();
  var nb_heure = new Date();
  //on recupere l'heure GTM
  heure.setTime(heure.getTime() + (heure.getTimezoneOffset()) * 60 * 1000);
  //différence entre l'heure l'heure du fuseau et l'heure GTM
  nb_heure=(this- heure)/3600000;
  nb_heure=Math.ceil(nb_heure);
  //affichage
  if(nb_heure>=10) nb_heure="+"+nb_heure+":00";//affichage 12 -> +12:00
  else if(nb_heure>0 && nb_heure<10) nb_heure="+0"+nb_heure+":00";//affichage 1 -> +01:00
  else if(nb_heure<0 && nb_heure>-10) nb_heure="-0"+Math.abs(nb_heure)+":00";//affichage -1 -> -01:00
  else if(nb_heure<=-10) nb_heure="-"+Math.abs(nb_heure)+":00";//affichage -12 -> -12:00
  return nb_heure;
}

Date.prototype.afficherDateHeure = function() {


  return "Date : "+this.afficherDate() + "\nHeure Locale : " + this.afficherHeure()+"\n(Décalage horaire : UTC/GMT"+this.afficherGTM()+")";

}



// CALCUL SIMPLE DE L'HEURE LOCALE EN FONCTION DU FUSEAU HORAIRE



function calculerHeureLocale(mon_fuseau) {

  // calcule l'heure en fonction du fuseau horaire - retourne un objet Date

  var heure = new Date();

  heure.setTime(heure.getTime() + (heure.getTimezoneOffset() + mon_fuseau*60) * 60 * 1000);

  return heure;

}



function afficherMonHeure1(mon_fuseau) {

  // affiche l'heure en fonction du fuseau horaire

  var heure = calculerHeureLocale(mon_fuseau);

  return heure.afficherDateHeure();

}

// CALCUL DU DERNIER DIMANCHE (POUR LES MOIS DE MARS ET OCTOBRE)
function dernierDimanche(an, mois, heure) {

  // retourne un objet Date au dernier dimanche du mois à l'heure indiquée

  var jour = new Date(an, mois, 1, heure, 0, 0);

  // jour du 1er du mois (lundi : 0, mardi : 1, ..., dimanche : 6)

  //jour_semaine = jour.getDay() ? jour.getDay() + 1 : 0;//6<-ca c'est l'original

  if(jour.getDay()==0)//Dimanche
  decalage=28;
else if(jour.getDay()==1)//Lundi
  decalage=27;
else if(jour.getDay()==2)//Mardi
  decalage=26;
else if(jour.getDay()==3)//Mercredi
  decalage=25;
else if(jour.getDay()==4)//Jeudi
  decalage=24;
else if(jour.getDay()==5)//Vendredi
  decalage=30;
else if(jour.getDay()==6)//Samedi
  decalage=29;


  jour.setTime(jour.getTime() + (decalage)*24*60*60*1000);

  return jour;

}

// CALCUL DU PREMIER DIMANCHE D'UN MOIS
function premierDimanche(an, mois, heure) {

  // retourne un objet Date au premier dimanche du mois à l'heure indiquée

  var jour = new Date(an, mois, 1, heure, 0, 0);

  // jour du 1er du mois (lundi : 0, mardi : 1, ..., dimanche : 6)

  //jour_semaine = jour.getDay() ? jour.getDay(): 7;//on met dimanche a 7 au lieu de 0

  if(jour.getDay()==0)//Dimanche
  decalage=0;
else if(jour.getDay()==1)//Lundi
  decalage=6;
else if(jour.getDay()==2)//Mardi
  decalage=5;
else if(jour.getDay()==3)//Mercredi
  decalage=4;
else if(jour.getDay()==4)//Jeudi
  decalage=3;
else if(jour.getDay()==5)//Vendredi
  decalage=2;
else if(jour.getDay()==6)//Samedi
  decalage=1;

  jour.setTime(jour.getTime() + (decalage)*24*60*60*1000);

  return jour;

}

// CALCUL DE L'HEURE LOCALE EN TENANT COMPTE DE L'HEURE D'HIVER/ETE DANS L'EU





Date.prototype.correctionHeureHiverEteEU = function() {

  var dd_mars = dernierDimanche(this.getFullYear(), 2, 2);


  var dd_oct = dernierDimanche(this.getFullYear(), 9, 2);
  //alert("UE ETE start = "+dd_mars.afficherDateHeure()+" , end= "+dd_oct.afficherDateHeure());
  if ((this.getTime() >= dd_mars.getTime()) && (this.getTime() <= dd_oct.getTime()))

  this.setTime(this.getTime() + 60*60*1000);

}



function afficherMonHeure2(mon_fuseau_hiver) {

  var heure = calculerHeureLocale(mon_fuseau_hiver);

  // correction pour les pays européens qui changent d'heure hiver/ét

  heure.correctionHeureHiverEteEU();

  return heure.afficherDateHeure();

}

// CALCUL DE L'HEURE LOCALE EN TENANT COMPTE DE L'HEURE D'HIVER/ETE DANS L'ETAT DE CALIFORNIE





Date.prototype.correctionHeureHiverEteUSA = function() {

  var dd_mars = premierDimanche(this.getFullYear(), 3, 2);//probleme sur le debut

  var dd_oct = dernierDimanche(this.getFullYear(), 9, 2);
  //alert("USA ETE start = "+dd_mars.afficherDateHeure()+" , end= "+dd_oct.afficherDateHeure());

  if ((this.getTime() >= dd_mars.getTime()) && (this.getTime() <= dd_oct.getTime()))

  this.setTime(this.getTime() + 60*60*1000);

}



function afficherMonHeure2(mon_fuseau_hiver) {

  var heure = calculerHeureLocale(mon_fuseau_hiver);

  // correction pour les pays européens qui changent d'heure hiver/ét

  heure.correctionHeureHiverEteUSA();

  return heure.afficherDateHeure();

}


// CALCUL DE L'HEURE LOCALE EN TENANT COMPTE DE L'HEURE D'HIVER/ETE EN AUSTRALIE




Date.prototype.correctionHeureHiverEteAUS = function() {



  var dd_oct = dernierDimanche(this.getFullYear(), 9, 2);

  //une année de plus
  anneep=this.getFullYear()+1;
  var dd_mars = dernierDimanche(anneep, 2, 2);

  //alert("AUS ETE start = "+dd_oct.afficherDateHeure()+" , end= "+dd_mars.afficherDateHeure());

  if ((this.getTime() <= dd_mars.getTime()) && (this.getTime() >= dd_oct.getTime()))

  this.setTime(this.getTime() + 60*60*1000);

}



function afficherMonHeure2(mon_fuseau_hiver) {

  var heure = calculerHeureLocale(mon_fuseau_hiver);

  // correction pour les pays européens qui changent d'heure hiver/ét

  heure.correctionHeureHiverEteAUS();

  return heure.afficherDateHeure();

}

// CALCUL DES HEURES LOCALES DE DIFFERENTS PAYS



function afficherHeurePays(pays,element) {

  // l'argument fuseau contient le fuseau horaire,

  // sauf pour l'Europe occidentale où il contient "1,2" (heure d'hiver, heure d'été)

  if (pays==1)//Paris
  {
    var fuseaux=["1","2"];

    var heure = calculerHeureLocale(fuseaux[0]);

    heure.correctionHeureHiverEteEU();
    //document.form_Paris.fieldP.value=heure.afficherDateHeure();

  }
else if (pays==2)//New York
  {
    var fuseaux=["-5","-4"]; //-8 -7

    var heure = calculerHeureLocale(fuseaux[0]);

    heure.correctionHeureHiverEteUSA();
  }
else if (pays==3)//Sydney
  {
    var fuseaux=["10","11"];

    var heure = calculerHeureLocale(fuseaux[0]);

    heure.correctionHeureHiverEteAUS();
  }
  //document.form_Paris.value=(heure.afficherDateHeure());

  //var texte="afficherHeurePays("+pays	+")";
  //alert(texte);

  //id=setTimeout(texte,1000);
  if(element==1) return  heure.afficherDate();
  else if (element==2) return   heure.afficherHeure();
  else if(element==3) return  heure.afficherGTM();
  else return "Date : "+ heure.afficherDate() + "\nHeure Locale : " +  heure.afficherHeure()+"\n(Décalage horaire : UTC/GMT"+ heure.afficherGTM()+")";

  //return heure.afficherDateHeure();
  //document.write(heure.afficherDateHeure());

}



// POUR AFFICHAGE DE L'HEURE LOCALE EN PAGE 2


/*
function remplirInputHeureLocale() {

document.forms["mon_heure_locale"].mon_heure.value = afficherMonHeure2(1);

//    document.forms["mon_heure_locale"].mon_heure.value = "mon cul";

}*/

