// ** I18N

// Calendar FR language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Encoding: any
// Distributed under the same terms as the calendar itself.

// For translators: please use UTF-8 if possible.  We strongly believe that
// Unicode is the answer to a real internationalized world.  Also please
// include your contact information in the header, as can be seen above.

// Translator: David Duret, <pilgrim@mala-template.net> from previous french version
// Ajout des feries et vacances : Fabrice Morin

// full day names
Calendar._DN = new Array
("Dimanche",
 "Lundi",
 "Mardi",
 "Mercredi",
 "Jeudi",
 "Vendredi",
 "Samedi",
 "Dimanche");

// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary.  We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
//   Calendar._SDN_len = N; // short day name length
//   Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.

// short day names
Calendar._SDN = new Array
("Dim",
 "Lun",
 "Mar",
 "Mer",
 "Jeu",
 "Ven",
 "Sam",
 "Dim");

// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 1;

// full month names
Calendar._MN = new Array
("Janvier",
 "Février",
 "Mars",
 "Avril",
 "Mai",
 "Juin",
 "Juillet",
 "Août",
 "Septembre",
 "Octobre",
 "Novembre",
 "Décembre");

// short month names
Calendar._SMN = new Array
("Jan",
 "Fev",
 "Mar",
 "Avr",
 "Mai",
 "Juin",
 "Juil",
 "Aout",
 "Sep",
 "Oct",
 "Nov",
 "Dec");

// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "A propos du calendrier";

Calendar._TT["ABOUT"] =
"DHTML Date/Heure Sélecteur\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-)
"Pour la dernière version visitez : http://www.dynarch.com/projects/calendar/\n" +
"Distribué par GNU LGPL.  Voir http://gnu.org/licenses/lgpl.html pour les détails." +
"\n\n" +
"Sélection de la date :\n" +
"- Utiliser les boutons \xab, \xbb  pour sélectionner l\'année\n" +
"- Utiliser les boutons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour sélectionner le mois\n" +
"- Garder la souris sur un bouton pour une sélection plus rapide\n" +
"\n" +
"Périodes de vacances scolaires :\n" +
"- En haut en mauve pour la zone A,\n" +
"- Au milieu en orange pour la zone B,\n" +
"- En bas en vert pour la zone C";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selection de l\'heure :\n" +
"- Cliquer sur heures ou minutes pour incrementer\n" +
"- ou Maj-clic pour decrementer\n" +
"- ou clic et glisser-deplacer pour une selection plus rapide";

Calendar._TT["PREV_YEAR"] = "Année préc. (maintenir pour menu)";
Calendar._TT["PREV_MONTH"] = "Mois préc. (maintenir pour menu)";
Calendar._TT["GO_TODAY"] = "Atteindre la date du jour";
Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)";
Calendar._TT["NEXT_YEAR"] = "Année suiv. (maintenir pour menu)";
Calendar._TT["SEL_DATE"] = "Sélectionner une date";
Calendar._TT["DRAG_TO_MOVE"] = "Déplacer";
Calendar._TT["PART_TODAY"] = " (Aujourd'hui)";

// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Afficher %s en premier";

// This may be locale-dependent.  It specifies the week-end days, as an array
// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";

Calendar._TT["CLOSE"] = "Fermer";
Calendar._TT["TODAY"] = "Aujourd'hui";
Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur";

// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";

Calendar._TT["WK"] = "Sem.";
Calendar._TT["TIME"] = "Heure :";

// ----------------------------------------------------------------
// Code pour afficher les dates speciales (jours feries)

// Dans les parametres de Calendar.setup, ajouter la ligne :
//  dateStatusFunc    :    ourDateStatusFunc

// Author : fmorin (a partir du composant trouve sur http://www.aidejavascript.com/article.php3?id_article=115)
// ------------------------------------------------------------------

  // Les dates fixes de jours feries
  var SPECIAL_DAYS = {
    0 : [ 1 ],		// Janvier
	1 : [],			// Fevrier
	2 : [],			// Mars
	3 : [],			// Avril
	4 : [ 1, 8 ],	// Mai
	5 : [],			// Juin
	6 : [ 14 ],		// Juillet
	7 : [ 15 ],		// Aout
	8 : [],			// Septembre
	9 : [],			// Octobre
	10 : [ 1, 11 ],	// Novembre
	11 : [ 25 ]		// Decembre
  };

  // Les dates de vacances scolaires, par annee et par zone
  // Zone A (Caen, Clermont-Ferrand, Grenoble, Lyon, Montpellier, Nancy-Metz, Nantes, Rennes, Toulouse)
  // Zone B (Aix-Marseille, Amiens, Besancon, Dijon, Lille, Limoges, Nice, Orleans-Tours, Poitiers, Reims, Rouen, Strasbourg)
  // Zone C (Bordeaux, Creteil, Paris, Versailles)
  var VACANCES = {
    2005 : [ 
      // Zone A
      [["1-2"],["12-27"],[],["16-30"],["1"],[],["2-31"],["1-31"],["1"],["22-31"],["1-2"],["17-31"]],
      // Zone B
	  [["1-2"],["5-20"],[],["9-24"],[],[],["2-31"],["1-31"],["1"],["22-31"],["1-2"],["17-31"]],
	  // Zone C
	  [["1-2"],["19-28"],["1-6"],["23-30"],["1-8"],[],["2-31"],["1-31"],["1"],["22-31"],["1-2"],["17-31"]] ],
    2006 : [ 
      // Zone A
      [["1-2"],["18-28"],["1-5"],["22-30"],["1-8"],[],["5-31"],["1-31"],["1-3"],["25-31"],["1-5"],["23-31"]],
      // Zone B
	  [["1-2"],["11-26"],[],["15-30"],["1"],[],["5-31"],["1-31"],["1-3"],["25-31"],["1-5"],["23-31"]],
	  // Zone C
	  [["1-2"],["4-19"],[],["8-23"],[],[],["5-31"],["1-31"],["1-3"],["25-31"],["1-5"],["23-31"]] ]
  };

  function dateIsSpecial(year, month, day) {
    var m = joursFeries(year, month);
    if (!m) return false;
    for (var i in m) if (m[i] == day) return true;
    return false;
  };

  function dateChanged(calendar) {
    // Beware that this function is called even if the end-user only
    // changed the month/year.  In order to determine if a date was
    // clicked you can use the dateClicked property of the calendar:
    if (calendar.dateClicked) {
      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
      var y = calendar.date.getFullYear();
      var m = calendar.date.getMonth();     // integer, 0..11
      var d = calendar.date.getDate();      // integer, 1..31
      // redirect...
      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
    }
  };

  function dateZonesVacances(y, m, d) {
    var zone = "0";

	// Pour chacune des trois zones
	for (var z=0; z < 3; z++) {
		if (VACANCES[y] == null) {
			// Si les dates de conges n'ont pas été renseignees pour cette annee, on ne retourne pas de conges.
			return 0;
		}
		var happyDays = VACANCES[y][z][m];
		for (var i=0; i < happyDays.length; i++) {
			var indexTiret = (happyDays[i]).indexOf('-');
			if (indexTiret != -1) {
				var debut = (happyDays[i]).substring(0,indexTiret);
				var fin = (happyDays[i]).substring(indexTiret+1,(happyDays[i]).length);
				if ( (d >= debut) && (d <= fin) ) {
					for (var j = parseInt(debut); j <= parseInt(fin) ; j++) {
						if (d == j) {
							zone = concatZones(zone, z);
							break;
						}
					}
				}
			} else {
				if (d == happyDays[i]) {
					zone = concatZones(zone, z);
					break;
				}
			}
		}
	}
	return zone;
  }

  function concatZones(zone, z) {
	if (zone == 0) {
		zone = (z + 1);
	} else {
		zone = zone + ("" + (z + 1)); // concatenation des zones concernees
	}
	return zone;
  }

  function publicDateStatusFunc(date, y, m, d) {
	if (dateIsSpecial(y, m, d)) {
      return "special";
	} else {
      return false; // other dates are enabled
      // return true if you want to disable other dates
	}
  };

  function schoolDateStatusFunc(date, y, m, d) {
    var cellStyle = "";

	if (dateIsSpecial(y, m, d)) {
      cellStyle = "special ";
	}

	var dateZones = dateZonesVacances(y, m, d);
	if (dateZones != 0) {
      cellStyle += ("z" + dateZones + " ");
	}

	if (cellStyle != "") {
	  return cellStyle;
	} else {
      return false; // other dates are enabled
      // return true if you want to disable other dates
	}
  };

function joursFeries(year, month) {
   // ajoute aux jours fériés fixes les jours fériés mobiles : lundi de Pâques, Ascension et lundi de Pentecôte
   var jours_feries = new Array();
   for (var i = 0 ; i < SPECIAL_DAYS[month].length ; i++) {
      jours_feries[i] = SPECIAL_DAYS[month][i];
   }
   var jour = paques(year);
   jour.jourSuivant();
   // lundi de Pâques
   if (month == jour.getMonth()) {
      jours_feries.splice(1, 0, jour.getDate());
   }
   // ascension
   jour.jourSuivant(38);
   if (month == jour.getMonth()) {
	   if (jour.getMonth() > 3) {
		  jours_feries.splice(3, 0, jour.getDate());
	   } else {
		  jours_feries.splice(2, 0, jour.getDate());
	   }
   }
   // lundi de Pentecôte
   jour.jourSuivant(11);
   if (month == jour.getMonth()) {
	   jours_feries.splice(4, 0, jour.getDate());
   }
   return jours_feries;
}

function paques(annee) {
   annee = parseInt(annee);
   var date_paques = null;
   var b = annee - 1900;
   var c = annee % 19;
   var d = Math.floor((7*c+1)/19);
   var e = (11*c+4-d) % 29;
   var f = Math.floor(b/4);
   var g = (b+f+31-e) % 7;
   var avril = 25-e-g;
   if (avril > 0) date_paques = new Date(annee, 3, avril);
   else date_paques = new Date(annee, 2, avril + 31);
   return date_paques;
}

Date.prototype.jourSuivant = function() {
   // incrémente le jour de la date en fonction du nombre de jours en argument (si pas d'argument, l'incrément = 1)
   // p. ex. var jour = new Date(2004, 0, 1) (soit 01/01/2004), jour.jourSuivant() donnera le 02/01/2004
   // et jour.jourSuivant(31) donnera le 01/02/2004
   if (arguments.length) var increment = parseInt(arguments[0]);
   else var increment = 1;
   this.setDate(this.getDate() + increment);
}