// JavaScript Document

//construction du tableau d'image pour l'entête de la page
//elles seront appelée de façon aléatoire à partir de la fontion «LoadTopImage».
var map = 2;
var arTopImage = new Array();

for(i = 0; i <= 3 ; i++){
    arTopImage[i] = new Image();
    arTopImage[i].src = '/Html/Themes/Images/visuel' + (i+1) + '.jpg';
}

//obtention d'un nombre aléatoire
function getRandom(cpt)
{
	var ranNum= Math.floor(Math.random() * cpt);
	return ranNum;
}

//affichage d'une image aléatoire dans l'entête du site
function LoadTopImage()
{
    which = getRandom(4) // il y a 4 images..
    $('imgTop').src = arTopImage[which].src;
}

//mets l'item de menu en gras si son 'id' correspond au 'id' de la page
function LoadSubMenu()
{
   var arElements = document.getElementsByTagName('body');
   var pageId = arElements[0].id.substr(5,4);
   
   var arSubMenu = document.getElementsByClassName('subMenu');
   arSubMenu.each(function(item) {
        if(pageId == item.id.substr(4,4))
        {
            $(item.id).style.fontWeight = 'bold';
        }
   });
   
}

/**Affiche le formulaire de la liste des vols
/* @var type -> type de recherche : arrivées ou départs
/* @var language -> la langue de la page
/**/ 
function GetFlightsForm(type,language)
{
    new Ajax.Request('/WebMaestro/Modules/Flight/FlightsForm.class.php',
    {
         method: 'post',
	     onSuccess: function(transport){ 
	        $('RightSections').innerHTML = transport.responseText ;
	        ChangeFlightList(type,language);
	     },
	     onFailure: function(){ alert('Un problème est survenu lors de la requête au serveur.') }, 
	     parameters: { flightType : type, lang : language}
    });
}

//Affiche la liste des vols
//@var type -> type de recherche : arrivées ou départs
//@var language -> la langue de la page 
function GetFlightsList(type, language)
{
    new Ajax.Request('/WebMaestro/Modules/Flight/FlightsList.class.php',
    {
         method: 'post',
	     onSuccess: function(transport){ 
	        $('FlightsList').innerHTML = transport.responseText ;
	     },
	     onFailure: function(){ alert('Un problème est survenu lors de la requête au serveur.') }, 
	     parameters: {flightType : type, Submit: $('Submit').value , origine : $('origine').value, company : $('company').value, dateVol: $('dateVol').value, lang: language}
    });
}

//modifie le formulaire en fonction du choix effectué : arrivées ou départs
//@var type -> type de recherche : arrivées ou départs
//@var language -> la langue de la page 
function ChangeFlightList(type,language)
{
    switch(type)
    {
        case 'A':
            $('arrivals').style.fontWeight = 'bold'; 
            $('departures').style.fontWeight = 'normal';
            $('fromTo').innerHTML = 'Origine';
            break;
        case 'D':
            $('arrivals').style.fontWeight = 'normal'; 
            $('departures').style.fontWeight = 'bold';
            $('fromTo').innerHTML = 'Destination';
            break;
    }
    $('flightsForm').action = "javascript:GetFlightsList('"+type+"','"+language+"');";
}

//retourne la liste des 10 communiqués précédents disponibles
function GetPreviousCommuniques(index,page)
{
    if(index > 0)
    {
    
        new Ajax.Request('/WebMaestro/Modules/Communiques/AjaxCommuniquesSection.class.php',
        {
             method: 'post',
	         onSuccess: function(transport){ $('CommuniquesList').innerHTML = transport.responseText ;},
	         onFailure: function(){ alert('Un problème est survenu lors de la requête au serveur.') }, 
	         parameters: {currentindex : index, currentpage: page, type: 1}
        });
    }
}

//retourne les 10 prochains communiqués disponibles
function GetNextCommuniques(index,page,maxSize)
{
    if(index < (maxSize - 10)) 
    { 
        new Ajax.Request('/WebMaestro/Modules/Communiques/AjaxCommuniquesSection.class.php',
        {
             method: 'post',
	         onSuccess: function(transport){ $('CommuniquesList').innerHTML = transport.responseText ;},
	         onFailure: function(){alert('Un problème est survenu lors de la requête au serveur.') }, 
	         parameters: {currentindex : index, currentpage: page, type : 2 }
        });
    }
}

//retourne les 10 documents précédents disponibles
function GetPreviousDocuments(index,page)
{
    if(index > 0)
    {
    
        new Ajax.Request('/WebMaestro/Modules/Communiques/AjaxDocumentsSection.class.php',
        {
             method: 'post',
	         onSuccess: function(transport){ $('DocumentsList').innerHTML = transport.responseText ;},
	         onFailure: function(){ alert('Un problème est survenu lors de la requête au serveur.') }, 
	         parameters: {currentindex : index, currentpage: page, type: 1}
        });
    }
}

//retourne les 10 prochains documents disponibles

function GetNextDocuments(index,page,maxSize)
{
    if(index < (maxSize - 10)) 
    { 
        new Ajax.Request('/WebMaestro/Modules/Communiques/AjaxDocumentsSection.class.php',
        {
             method: 'post',
	         onSuccess: function(transport){ $('DocumentsList').innerHTML = transport.responseText ;},
	         onFailure: function(){alert('Un problème est survenu lors de la requête au serveur.') }, 
	         parameters: {currentindex : index, currentpage: page, type : 2 }
        });
    }
}


function zoomIn()
{
	if(map < 4){
	    map++;
	    $('mapdirection').src = '/Html/Themes/Images/AQ_map_niv' + map + '.gif';
	}
}

function zoomOut()
{
	if(map > 1){
	    map--;
	    $('mapdirection').src = '/Html/Themes/Images/AQ_map_niv' + map + '.gif';
	}
}

function zoomTo(zoomLevel)
{
	map = zoomLevel;
    $('mapdirection').src = '/Html/Themes/Images/AQ_map_niv' + map + '.gif';
}

// Gestionnaire de l'album photo (se sert du json généré)
var AlbumPhoto = {
	toggle: function() {
		if (e = $('EventItemPhoto')) {
			Element.toggle(e);
		}

		if (e = $('EventItemAlbum')) {
			Element.toggle(e);
		}
	}
};

var Cache = Class.create({
	initialize: function(collection) {
		collection.each(
			function(item) {
				var img = new Image();
				img.src = item;
			}
		);
	}
});

var AlbumCache = {
	convert: function(photos) {
		var list = [];

		photos.each(
			function(item) {
				list.push(item.smallThumbSrc);
			}
		);

		return list;
	}
};

//Gestionnaire de l'album photo
//Se sert du tableau en Json généré dans les section de photos pour retrouver ses valeurs
var Album = Class.create({
	initialize: function(json) {
	    this.json = json; //todo
		this.photos = json.albums[0].photos;
		this.itemPerPage = 8;
		this.photoIndex = 0;

		//Mets en cache les thumbnails de la prochaine page
		new Cache(AlbumCache.convert(this.photos.slice(this.itemPerPage, this.itemPerPage * 2)));
	}

	//Est-ce que l'index existe
	, isValid: function(index) {
		var newIndex = index;
		if (newIndex == this.photoIndex) {
			return false;
		}

		//Si c'est l'id HTML, ex.: img56
		if (typeof(index) == 'string') {
			newIndex = parseInt(index.substr(3));
		}

		//Si l'id n'existe pas
		if (!this.photos[newIndex]) {
			return false;
		}

		return newIndex;
	}

	//Affiche la photo correspondent à l'index
	, show: function(index) {
		var newIndex;
		if ((newIndex = this.isValid(index)) === false) {
			return false;
		}
    
		//Enlève la sélection de l'ancienne photo
	    $('img' + this.photoIndex).setStyle({border: 'solid 1px #FFFFFF'});

		//On chage de page si l'image est sur une autre page
		this.changePage(newIndex);

		//Ajoute la sélection à la nouvelle photo
		this.photoIndex = newIndex;
		$('img' + this.photoIndex).setStyle({border: 'solid 1px #DFAA00'});

		//Affiche la nouvelle photo
		$('SelectedImage').src = this.photos[this.photoIndex].photoSrc;

        //Change l'état des boutons si nécessaire
        this.switchButtonState();

		return true;
	}

	//Photo précédente
	, previousPhoto: function() {
		this.show(this.photoIndex - 1);
	}

	//Phochaine photo
	, nextPhoto: function() {
		this.show(this.photoIndex + 1);
	}

	//Page précédente, on sélectionne la dernière photo
	, previousPage: function() {
		var previousPage = this.getPageNumber(this.photoIndex) - 1;
		var previousIndex = previousPage * this.itemPerPage + this.itemPerPage - 1 ;

		this.show(previousIndex);
	}

	//Prochaine page, on sélectionne la première photo
	, nextPage: function() {
		var nextPage = this.getPageNumber(this.photoIndex) + 1;
		var nextIndex = nextPage * this.itemPerPage;

		this.show(nextIndex);

		//Mets en cache les thumbnails de la prochaine page
		new Cache(AlbumCache.convert(this.photos.slice(this.itemPerPage * (nextPage + 1), this.itemPerPage * (nextPage + 2))));
	}

	//Change la page pour cet index
	, changePage: function(newIndex) {

		var newPage = this.getPageNumber(newIndex);
		//On est sur la même page
		if (this.getPageNumber(this.photoIndex) == newPage) {
			return;
		}

		var photos = this.photos;
		var length = photos.length;
		var index = newPage * this.itemPerPage;

		arThumbs = $A(document.getElementsByClassName('imgThumb'));
		arThumbs.each(
			function(item) {
				if(index > length - 1) {
					item.setStyle({display: 'none'});
					index++;
					return;
				}

				item.setStyle({display: 'block'});
				item.id = "img" + index;
				item.src = photos[index].smallThumbSrc;
				index++;
			}
		);
	}

	//Permet de savoir sur quel page se trouve cet index
	, getPageNumber: function(index) {
		var pageNumber = parseInt(index / this.itemPerPage);
		return pageNumber;
	}
	
    //Change l'état des boutons
    , switchButtonState : function ()
    {
        //Cas de 1e photo
        if (this.photoIndex!=0)
            document.getElementById('MinusAlbum').className = 'MinusAlbumOn';
        else
            document.getElementById('MinusAlbum').className = 'MinusAlbumOff';        
        
        //Cas de 1e page
        if (this.getPageNumber(this.photoIndex)!=0)
            document.getElementById('BackAlbum').className = 'BackAlbumOn';            
        else
            document.getElementById('BackAlbum').className = 'BackAlbumOff';
        
        //Cas de dernière page
        if (this.getPageNumber(this.photoIndex)!=parseInt(this.photos.length / this.itemPerPage))
            document.getElementById('NextAlbum').className = 'NextAlbumOn';            
        else
            document.getElementById('NextAlbum').className = 'NextAlbumOff';        
        
        //Cas de dernière photo
        if (this.photos.length!=(this.photoIndex+1))
            document.getElementById('PlusAlbum').className = 'PlusAlbumOn';
        else
            document.getElementById('PlusAlbum').className = 'PlusAlbumOff';              
    }
    
    //Change l'album courant
    ,changeAlbum : function (ind)
    {
		this.show(0);
		this.photos = this.json.albums[ind].photos;

		//Mets en cache les thumbnails de la prochaine page
		new Cache(AlbumCache.convert(this.photos.slice(this.itemPerPage, this.itemPerPage * 2)));
		
		var photos = this.photos;
		var length = photos.length;
		var index = 0;

		arThumbs = $A(document.getElementsByClassName('imgThumb'));
		arThumbs.each(
			function(item) {
				if(index > length - 1) {
					item.setStyle({display: 'none'});
					index++;
					return;
				}

				item.setStyle({display: 'block'});
				item.id = "img" + index;
				item.src = photos[index].smallThumbSrc;
				index++;
			}
		);
		
		//Affiche la nouvelle photo
		$('SelectedImage').src = this.photos[this.photoIndex].photoSrc;
    }  	
});






