/**
 * Params globaux pour les diaporamas
 */
 
var params = new Hash({
	'diapoX': 1920,
	'diapoY': 1285,
	'slideDuration': 12, //en secondes
	'transitionDuration': 250, // en millisecondes, après slideDuration
	'windowX': 1200, //base 1280x1024 pour IE7, c'est ajusté dynamiquement suivant l'espace réellement disponible.
	'windowY': 1004,
	'defaultIndex': 1,
	'zIndexMax': 25, //le z-index du claque visible : les autre photos doivent passer en dessous, mais le contenu doit rester au dessus (30 dans la css) : il faut le redéfinir page par page  pour limiter les calques a ceux ayant de images
	'bgMaskOpacity': 1, //opacité maximum du masque de transition
	'miniDiapoWidth': 72,
	'progressBarsFPS': 5,
	'diaporamaFadeFPS': 25,
	'toolTipParams': {
			showDelay: 0,
			hideDelay: 0,
			className: 'tips',
			offsets: {'x': 16, 'y': 16}
	  	}
});

var index = params.defaultIndex;//index du slide affiché
var intervalId = null; //réference du timer pour la boucle sur les slides
var fadeInOutFx = null; //objet Fx mootols globla pour pouvoir l'annuler de partout
var progressBarFx = null; //objet Fx mootols globla pour pouvoir l'annuler de partout

/** 
 * Initialisation avant affichage de la page
 */
window.addEvent('domready', function(e) {
	if (window.console) console.log('domready fired');
	if (isHomePage() || isContentPage()) {
		initDynamicContent();
		if (window.console) console.log('dynamic content init ok.');
	}

	$$('input.DatePicker').each( function(el){
		//if (window.console) console.log('Init date picker ' + el.getName());
		new DatePicker(el);
		//var id = el.get('id');
		//new vlaDatePicker(id, { style: 'adobe_cs3', alignX: 'left', alignY:'bottom'});
	});
});



var initDynamicContent = function() {
	
	//évènements sur les miniature des diapos
	$$('.miniDiapo').each(function(el, index) {
		el.addEvent('mouseover', function(e) {
			el.addClass("select");								  
		});
		el.addEvent('mouseout', function(e) {
			el.removeClass("select");								  
		});
		
	});
	//tip au survol des images, capturé sur le survol du masque
	var myTips = new Tips('.diapo_overlay', params.toolTipParams);


	//on repositionne toutes les zones overlay
	overlayReposition();


	//on positionne le premier slide pour démarrer dans de bonne conditions (sinon le dernier s'affiche) : en fait une demi transition
	restoreSlidesOrder('');
	//on fait 1/demi trnasition pour apparaitre la photo
	var diapo = $('diapo' + params.defaultIndex);
	if ($defined(diapo)) {
		diapo.setStyle('z-index', params.zIndexMax);
	}
	//le masque fait sont apparition
	var mask = $('diapo_mask');
	if ($defined(mask)) {
		mask.setStyle('opacity', params.bgMaskOpacity); //la masque est opaque au démarrage
		var fadeInOutFx = new Fx.Morph(mask, {duration: parseInt(params.transitionDuration), fps: params.diaporamaFadeFPS, link: 'chain', transition: Fx.Transitions.Linear});
		fadeInOutFx.start({
			'opacity': [params.bgMaskOpacity, 0]
		});		
	}
	var bandeau = $('bandeau_' + params.defaultIndex);
	if ($defined(bandeau)) {
		bandeau.setStyle('width', 0);
		if (window.console) console.log('init beginning progressbar on element Id = ' +bandeau.id);
		totalDuration = (params.transitionDuration*2)  + (params.slideDuration*1000);
		progressBarFx = new Fx.Morph(bandeau, {duration: totalDuration, transition: Fx.Transitions.Linear, fps: params.progressBarsFPS});
		progressBarFx.start({'width': [0, params.miniDiapoWidth]}); //la transition démarre ici sans délais car on ne fait que le fade-out du masque (1/2 trnsition)
	}
	index++;
	
	//la fonction a faire tourner en boucle pour animer les backgrounds et gérer les transitions : démarre à la fin de l'initialisation
	(function() { intervalId = loop.periodical(parseInt(params.slideDuration*1000)+params.transitionDuration); }).delay(0);
	
	window.addEvent('load', function(e) {
	//Le 'clic' sur le tip
	$$('.diapo_overlay').each(function(tip, index) {
		if (window.console) console.log('init tip click event');
		tip.addEvent('mousedown', function(e) {
			if ($('content').getStyle('visibility') == 'hidden') {
				showPageContent();	
				$('tip').setStyle('background-image', 'url(../images/fixes/plus_rouge.gif);');
			}
			else {
				hidePageContent();
				$('tip').setStyle('background-image', 'url(../images/fixes/moins_rouge.gif);');
			}
		});
	});
								 
});


window.addEvent('resize', function(e) {		
//on repositionne toutes les zones overlay
		overlayReposition();
});
	
}

var makeScrollbar = function(content,scrollbar,handle,horizontal,ignoreMouse){
	var steps = (horizontal?(content.getScrollSize().x - content.getSize().x):(content.getScrollSize().y - content.getSize().y))
	var slider = new Slider(scrollbar, handle, {	
		steps: steps,
		mode: (horizontal?'horizontal':'vertical'),
		onChange: function(step){
			// Scrolls the content element in x or y direction.
			var x = (horizontal?step:0);
			var y = (horizontal?0:step);
			content.scrollTo(x,y);
		}
	}).set(0);
	if( !(ignoreMouse) ){
		// Scroll the content element when the mousewheel is used within the 
		// content or the scrollbar element.
		$$(content, scrollbar).addEvent('mousewheel', function(e){	
			e = new Event(e).stop();
			var step = slider.step - e.wheel * 20;	
			slider.set(step);					
		});
	}
	// Stops the handle dragging process when the mouse leaves the document body.
	$(document.body).addEvent('mouseleave',function(){slider.drag.stop()});
}

var isHomePage = function() {
	isIndex = (document.location.href.contains('index.php') || realScriptName == 'index.php');
	isDir = (document.location.href.match(/^(.*)\/$/) != null)
	return (isIndex || isDir);
}
var isContentPage = function() {
	return (document.location.href.contains('type.php') || realScriptName == 'type.php');
}


/**
 * Fonction executée périodiquement
 */
var loop = function() {
	//le zIndexMax c'est la position du slide visible, les index sont en dessous
	if (index >= params.zIndexMax) {
		index = params.defaultIndex;	
	}
	if (window.console) console.log('another loop, next in  ' + parseInt(params.slideDuration*1000) + 'ms, index = ' + index);
	doSlide(index);
	index++;
}

/**
 * Faire la transition entre deux diapos
 */
var doSlide = function(currentIndex) {
			
	var el = $('diapo'+currentIndex); //le conteneur de l'image
	var mask = $('diapo_mask');
	
	
	if ($defined(el)) {
		if (window.console) console.log('doSlide beginning transition on element #' + currentIndex + ' Id = ' +el.id + ' current z-index = ' + el.getStyle('z-index').toInt() + '/'  + params.zIndexMax);
		
		//le premier effet fadeIn/fade Out du masque defant les images
		if (fadeInOutFx == null) { // on conserve l'objet pour les boucle suivantes
			fadeInOutFx = new Fx.Morph(mask, {duration: parseInt(params.transitionDuration), fps: params.diaporamaFadeFPS, link: 'chain', transition: Fx.Transitions.Linear});
		}
		fadeInOutFx.start({
			'opacity': [0, params.bgMaskOpacity]
		});
		fadeInOutFx.start({
			'opacity': [params.bgMaskOpacity, 0]
		});
		//restoreSlidesOrder(el.id);
		//changer d'image au milieu de la transition (la ou ca ne ce voit pas en théorie)
		//pour ca on joue sur les z-index dans une fonction anonyme (ca bug sinon) 
		(function() { 
			el.setStyle('z-index', params.zIndexMax); 
			restoreSlidesOrder(el.id);
		}).delay(params.transitionDuration);
	}
	//parralèlement on gère la progressBar sous la miniature
	var bandeau = $('bandeau_' + currentIndex);
	if ($defined(bandeau)) {
		if (window.console) console.log('doSlide beginning progressbar on element Id = ' +bandeau.id);
		totalDuration = params.transitionDuration + (params.slideDuration*1000);
		if (progressBarFx != null) {
			progressBarFx.set({'width':params.miniDiapoWidth});	
		}
		progressBarFx = new Fx.Morph(bandeau, {duration: totalDuration, transition: Fx.Transitions.Linear, fps:params.progressBarsFPS});
		progressBarFx.start.delay(params.transitionDuration, progressBarFx, new Array({'width': [0, params.miniDiapoWidth]}));
	}
	
	return true;
}

/*var slideOnTop(el, current) {
	el.setStyle('z-index', 
}*/
/**
 * Replacer les zIndex : sauf l'Id du slide visible
 */
var restoreSlidesOrder = function(exceptId) {
	$$('.diapos').each (function (el, index) {
		if (el.id != exceptId) {
			//le z-index d'origine est conservé dans l'attribut title
			el.setStyle('z-index', el.id.replace(/[^0-9]/g, ''));
		}
	});
}

var restorePrograssBars = function(exceptId) {
	if (progressBarFx != null) {
		progressBarFx.set({'width':params.miniDiapoWidth});	
	}
	$$('.miniDiapo .bandeau').each(function(el, index) {
		if (el.id != exceptId) {										
			if (window.console) console.log('restoring progressbar on element Id = ' +el.id);
			el.setStyle('width', params.miniDiapoWidth);		
		}
	});
}

var manualSlide = function(targetIndex) {
	$clear(intervalId);
	if (fadeInOutFx != null) {
		fadeInOutFx.cancel();	
		
	}
	if (progressBarFx!= null) {
		progressBarFx.cancel();
	}
	//progressBarFx = new Fx.Morph($('bandeau_' + index), {duration: totalDuration, transition: Fx.Transitions.Linear});
	//progressBarFx.start({'width': [0, params.miniDiapoWidth]});
	
	restorePrograssBars();//'bandeau_' + index);
	index = targetIndex;
	doSlide(index);
	index++;
	//replacer l'exécution périodique pour continuer à la suite du slide choisi manuellement
	intervalId = loop.periodical(parseInt(params.slideDuration*1000)+params.transitionDuration);
}

var manualSlideNext = function(el) {
		//index += 1;
		manualSlide(index);
		el.blur();
}

var isWindowVscrollNeeded = function() {
	var content = $('content'); 
	var header = $('header');
	var offres = $('all_offres');
	
	if (!$defined(content) || !$defined(header) || !$defined(offres)) {
		return false;	
	}
	
	//on est obligé de faire la somme des contenus, le reste ($('page') ou body) sont en height 100% donc == à la fenetre
	var contentHeight = content.getSize().y + header.getSize().y + offres.getSize().y;
	
	if (window.console) console.log('window size is  ' + params.windowX +'x'+params.windowY + '  content height is ' +contentHeight);

	
	if (contentHeight < params.windowY) {
		return false; //pas besoin de scroller
	}
	
	return true;	
}

	
var hidePageContent = function() {
	$('content').fade('out');
	if (isHomePage()) {
		var fond = $('fond1');
		fond.fade('out');
		
		$('diapo_overlay9').setStyles({
			top: $('all_offres').getCoordinates().top,
			height: $('fondLeft').getCoordinates().bottom - $('all_offres').getCoordinates().top
		});
		
	}else{
		$('diapo_overlay9').setStyle('display',  '');
	}
	
	$$('.tips').each(function(el, index) {
		el.addClass('moins');
	});
	//affichage des zones de survol supplémentaire
	$('diapo_overlay8').setStyle('display',  '');
	
}

var showPageContent = function() {
	$('content').fade('in');
	if (isHomePage()) {
		var fond = $('fond1');
		fond.fade(0.5);
		
		$('diapo_overlay9').setStyles({
			top: $('all_offres').getCoordinates().bottom,
			height: $('fondLeft').getCoordinates().bottom - $('all_offres').getCoordinates().bottom
		});
		
	}else{
		$('diapo_overlay9').setStyle('display',  'none');
	}
	
	$$('.tips').each(function(el, index) {
		el.removeClass('moins');
	});
	$('diapo_overlay8').setStyle('display',  'none');
	
}


/**
 * Repositionner les zones de survol possible, pour les pages types
 */ 
var overlayReposition = function() {
	if (!$defined($('diapo_overlay1'))) {
		return false;	
	}
	
	if (isHomePage()) {
		overlayRepositionHomePage();
	}
	else if (isContentPage()) {
		overlayRepositionContentPage();
	}
	else { //masquer tout sur les autres pages
		$$('.diapo_overlay').each(function(el, index) {
			el.setStyle('display', 'none');
	    });
	}
}

var overlayRepositionHomePage = function() {
	
	var pageHeight = $('diapo_embed').getCoordinates().height;
	//la base de CSS est dans le fichier css, on boug que les attributs nécessaires
	$('diapo_overlay1').setStyles({
		width: $('fondLeft').getPosition().x,
		height: (pageHeight - $('diapo_overlay1').getStyle('top').toInt())
	});
	
	var coordOffres = $('all_offres').getCoordinates();
	var coordLeftMenu = $('fondLeft').getCoordinates();
	var coordFond1 = $('fond1').getCoordinates();
	
	var targetTop =  coordOffres.height + coordOffres.top;
	
	//$('diapo_overlay2').setStyles($('fond1').getCoordinates());
	$('diapo_overlay2').setStyles({
		top: coordLeftMenu.bottom,
		left: coordFond1.left,
		/* height: coordLeftMenu.bottom + coordFond1.bottom, */
		height: coordFond1.bottom - coordLeftMenu.bottom ,
		width: coordFond1.right - coordFond1.left 
	});

	$('diapo_overlay3').setStyles({
		left: (coordLeftMenu.right),
		width: $('bandeau_' + params.defaultIndex).getPosition().x - coordLeftMenu.right,
		height: ($('all_offres').getPosition().y - coordLeftMenu.top)
	});

		
	$('diapo_overlay4').setStyles({
		display: 'none'
	 });
	
	$('diapo_overlay5').setStyles({
		left: $('diapo_overlay3').getCoordinates().right,
		height: $('navDiapos').getPosition().y - coordLeftMenu.top,
		width: '100%'
	 });
	
	$('diapo_overlay6').setStyles({
		left: $('diapo_overlay3').getCoordinates().right,
		top: $('navDiapos').getCoordinates().bottom,
		height: $('all_offres').getCoordinates().top  - $('navDiapos').getCoordinates().bottom,
		width: '100%'
	 });
	$('diapo_overlay7').setStyle('display',  'none');
	
	//les 2 derniers sont masqués par défaut et apparaisse quand le contenu est masqué à leur emplacement
	$('diapo_overlay8').setStyles({
		left: coordLeftMenu.left,
		top: coordLeftMenu.top,
		width: coordLeftMenu.width,
		right: coordLeftMenu.right,
		height: coordLeftMenu.height ,
		display: 'none'
								  
	});
	
	//le 9 devient visible mais se redimmensionne pour pouvoir avoir une zone cliquable directement sous les offres
	//$('diapo_overlay9').setStyles($('all_offres').getCoordinates());
	//$('diapo_overlay9').setStyle('display',  'none');
	
	$('diapo_overlay9').setStyles({
		top: $('all_offres').getCoordinates().bottom,
		left: $('fondLeft').getCoordinates().right,
		height: $('fondLeft').getCoordinates().bottom - $('all_offres').getCoordinates().bottom,
		width: $('all_offres').getCoordinates().width
	});

}

var overlayRepositionContentPage = function() {
	
	var pageHeight = $('diapo_embed').getCoordinates().height;
	//la base de CSS est dans le fichier css, on boug que les attributs nécessaires
	$('diapo_overlay1').setStyles({
		width: $('fondLeft').getPosition().x,
		height: (pageHeight - $('diapo_overlay1').getStyle('top').toInt())
	});
	
	var coordOffres = $('all_offres').getCoordinates();
	var coordLeftMenu = $('fondLeft').getCoordinates();
	
	var targetTop =  coordOffres.height + coordOffres.top;
	
	$('diapo_overlay2').setStyles({
		left: coordLeftMenu.left,
		top: targetTop,
		height: (pageHeight - targetTop),
		width: $('contentPartie').getPosition().x - $('diapo_overlay1').getStyle('width').toInt()
	});

	$('diapo_overlay3').setStyles({
		left: (coordLeftMenu.left + coordLeftMenu.width),
		width: $('bandeau_' + params.defaultIndex).getPosition().x - coordLeftMenu.right,
		height: ($('contentPartie').getPosition().y - coordLeftMenu.top)
	});

		
	$('diapo_overlay4').setStyles({
		left: coordLeftMenu.right,
		top: $('contentPartie').getPosition().y,
		height: targetTop - $('contentPartie').getPosition().y,
		width: $('contentPartie').getPosition().x - coordLeftMenu.right
	 });
	
	$('diapo_overlay5').setStyles({
		left: $('diapo_overlay3').getCoordinates().right,
		height: $('navDiapos').getPosition().y - coordLeftMenu.top,
		width: '100%'
	 });
	
	$('diapo_overlay6').setStyles({
		left: $('diapo_overlay3').getCoordinates().right,
		top: $('navDiapos').getCoordinates().bottom,
		height: $('contentPartie').getCoordinates().top  - $('navDiapos').getCoordinates().bottom,
		width: '100%'
	 });
	$('diapo_overlay7').setStyles({
		left: $('contentPartie').getCoordinates().right,
		top: $('contentPartie').getCoordinates().top,
		height: $('contentPartie').getCoordinates().bottom - $('contentPartie').getCoordinates().top,
		width: '100%'
	 });
	
	
	//les 2 derniers sont masqués par défaut et apparaisse quand le contenu est masqué à leur emplacement
	$('diapo_overlay8').setStyles({
		left: coordLeftMenu.left,
		top: coordLeftMenu.top,
		width: coordLeftMenu.width,
		right: coordLeftMenu.right,
		height: coordLeftMenu.height + $('all_offres').getCoordinates().height,
		display: 'none'
								  
	});
	$('diapo_overlay9').setStyles($('contentPartie').getCoordinates());
	$('diapo_overlay9').setStyle('display',  'none');
}