/********************************************************************************/
/*	CONFIGURATION																*/
/********************************************************************************/
// Url du site
var HTTP_ROOT = calendar_context + "/modules/calendar/" + calendar_site + "/" + calendar_lang + "/";

// Url du dossier contenant le fichier xml des événements
var HTTP_EVENTS = HTTP_ROOT + "events/";

// Fichier Xml à charger (contenant les événements)
var xmlFile = "events.xml";

// Tableau global des événements
var tEvents ;

// Objet global de type Evenement (cf classe Evenement)
var Event;

$(document).ready( function () {
	
	$("#menu_haut li").css("position","relative");
	
	$("ul.sous_menu").css("position","absolute");
	
	loadXML(xmlFile);
		
	/**
	 * NAVIGATION DU HAUT
	 */

    // On cache les sous-menus :
    $(".sous_menu").hide();   
	
    $("#menu_haut li.has_sous_menu > a:first-child").click( function () {
	    		
		// Si le sous-menu était déjà ouvert, on le referme :
	    if ($(this).next("ul.sous_menu:visible").length != 0) {
	        $(this).next("ul.sous_menu").slideUp("normal");
			$(this).removeClass("On");
			$(this).addClass("Off");
	    }
	    // Si le sous-menu est caché, on ferme les autres et on l'affiche :
	    else {
	        $("#menu_haut ul.sous_menu").slideUp("normal");
			$(this).next("ul.sous_menu").slideDown("normal");
						
			$("#menu_haut li.has_sous_menu > a:first-child").removeClass("Off");
			$("#menu_haut li.has_sous_menu > a:first-child").addClass("Off");
			$(this).removeClass("Off");
			$(this).addClass("On");
	    }
		
	    // On empêche le navigateur de suivre le lien :
	    return false;
    });
	
	
	/**
	 * NAVIGATION DE GAUCHE
	 */
	// On cache les sous-menus :
    $(".sous_nav").hide();   
	
    $(".navigation li.has_sous_menu > a:first-child").click( function () {
	    		
		// Si le sous-menu était déjà ouvert, on le referme :
	    if ($(this).next("ul.sous_nav:visible").length != 0) {
	        $(this).next("ul.sous_nav").slideUp("normal");
			$(this).removeClass("On");
			$(this).addClass("Off");			
	    }
	    // Si le sous-menu est caché, on ferme les autres et on l'affiche :
	    else {
	        $(".navigation ul.sous_nav").slideUp("normal");
			$(this).next("ul.sous_nav").slideDown("normal");
						
			$(".navigation li.has_sous_menu > a:first-child").removeClass("Off");
			$(".navigation li.has_sous_menu > a:first-child").addClass("Off");
			$(this).removeClass("Off");
			$(this).addClass("On");
	    }
		
	    // On empèche le navigateur de suivre le lien :
	    return false; 
    });	
	
	/**
	 * Fonction callback pour le rendering des dates du calendrier
	 * @param {Object Element} $td
	 * @param {Object Date} thisDate
	 * @param {String} month
	 * @param {String} year
	 */
	var testCallback = function($td, thisDate, month, year)
	{

		/** 
		 * Formatage de la date
		 * Date au format yyyy-mm-dd (2008-07-01)
		 */
		DDay = thisDate.getDate();
		if( DDay < 10 ){
			DDay = "0" + DDay;
		}
		
		MMonth = thisDate.getMonth();
		
		MMonth = parseInt(MMonth) + 1;
		
		if( MMonth < 10 ){
			MMonth = "0" + MMonth;	
		}	
		
		date = thisDate.getFullYear() + "-" + MMonth + "-" + DDay ;
		/** Fin formatage **/
		
		// console.log(date);
		
		// Recherche d'un événement pour la date courante
		if(  has_event(date)  ){
			// console.log("Date événement : " + date + " lien : " + Event.lien);
			$td.html('<a href="'+Event.lien+'" class="event" target="'+Event.typeLien+'">'+thisDate.getDate()+'</a>');	
			$td.addClass("td_event");
		}
		
	}
	
	// Affichage du calendrier
	// testCallback : fonction callback utilisée pour le rendering de chaque date (et notemment l'affichage des événements)
	$('#calendrier').datePicker({inline:true, renderCallback:testCallback, startDate:'01/01/1996'});
	
	if (typeof $.fn.lightBox == "function")
	{
		$('a.lightbox').lightBox();
	}
	
} ) ;


/**
 * La fonction associe le tableau global des événements avec celui qui a été créé apres le chargement du xml
 * @param Array array
 */
function setDatesEvents( array ){
	tEvents = array;
}


/**
 * La fonction teste si la date affiché dans le calendrier contient un événement particulier
 * @param String date (au format yyyy-mm-dd)
 */
function has_event( date ){
	
	if( tEvents.in_array(date) ){
		return true;
	}else{
		return false;
	}
	
}

/**
 * Surcharge de la classe Array qui permet de tester si un élément se retrouve à l'interieur d'un tableau
 * @param String val
 */
Array.prototype.in_array = function( val ){
	
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i].date == val) {
			
			// Affecte l'objet courant à la variable global Event
			Event = this[i]
			return true;
		}
	}
	return false;
	
}

/**
 * Classe Evenement utilisée pour le tableau global d'objets Evenement
 * @param String date (yyyy-mm-dd)
 * @param String lien
 */
function Evenement(date,lien,typeLien) {
  this.date=date;
  this.lien=lien;
  this.typeLien = typeLien;
}

/**
 * La fonction va charger un fichier xml distant dans le tableau global des événements
 * @param String xmlFile
 */
function loadXML( xmlFile ){

	$.ajax({
   	url: HTTP_EVENTS + xmlFile,
	async : false,
   	dataType: "xml",
   	success: function(xml){
			 var t_var = new Array();
             $(xml).find('event').each(function(){
			 	 
                 var date = $(this).find('date').text();
				 var lien = $(this).find('lien').text();
				 var typeLien = $(this).attr("target");
				 
				 if( ! typeLien ){
				 	typeLien = "_self";
				 }
				 
				 // console.log(typeLien);
				 
				 var e = new Evenement(date,lien,typeLien);
				 
				 t_var.push(e);
				 // console.log("Element date : "+date);
				 
             });
			 setDatesEvents(t_var);
   	}
 	});
}

