var timestamp=new Date().valueOf(); // utilisé pour forcer le fureteur à ne pas
// utiliser la page en cache lors des appels
// ajax

var log = log4javascript.getNullLogger();

//var log = log4javascript.getDefaultLogger();

var delaisDiaporama;
var gallerieProcess=null,galleriePublicationProcess=null,evaluationEcranProcessus,defilementProcessus,apercuTimeout;
var panneauInformationEnchargement=false;
var Handler=new Object();
var contenuOuvert=false;
var sectionCourante;
var sousSectionCourante;
var randomDiaporama=false;
var informationPresente=false;
var langage="fr";
var langages=[{nom:"français",code:"fr"},{nom:"english",code:"en"}];
var preloaded_images = new Array();
var preloaded_links=new Array();
var apercuCache=new Object();
var diaporamaImageIndex=0;
var diaporamaImageLinks=null;
var diaporamaActif=true;
var imageTransitionDelay=null;

preload=function(imageUrls,functionToCall,index){
	var image=new Image();
	image.src=imageUrls[index];
	if(index==imageUrls.length-1){
		$(image).load(functionToCall);
	}else{
		$(image).load(function(){
			preload(imageUrls,functionToCall,index+1);
		});
	}
};

isLinkLoaded=function(link){
	var i=0;
	for(i=0;i<preloaded_links.length;i++){
		if(preloaded_links[i]==link){
			return true;
		}
	}
	preloaded_links[i]=link;
	return false;
};

preloadImage=function(imageUrl){
	var i=0;
	for(i=0;i<preloaded_images.length;i++){
		if(preloaded_images[i]==imageUrl){
			return;
		}
	}
	preloaded_images[i]=imageUrl;
	new Image().src =imageUrl; 
};

Handler.internationalisation=function(selection){

	jQuery.each(selection,function(index,value){
		var contenu_localise=$("span."+langage,value);
		$(value).replaceWith(contenu_localise.html());
	});
};

Handler.information=function(selection){};

Handler.liensProjets=function(selection){

	selection.mouseover(function(event){
		clearTimeout(apercuTimeout);
		var target=$(event.currentTarget);
		var url=target.attr("href");
		var apercu=obtenirApercu(url);
		var e=$('#apercu_projet');
		var width=e.width()+100;
		var height=e.height();
		if(apercu.imageUrl!=null){
			e.html("<img src='"+apercu.imageUrl+"' width='"+width+"'/><div id='nom'>"+apercu.titre+"</div>");
		}	 
	});
	
	selection.mouseout(function(event){
		clearTimeout(apercuTimeout);
		apercuTimeout=setTimeout(function(){
				$('#apercu_projet').empty();
		},500);
	});
	
	selection.click(function(event){
		randomDiaporama=false;
		sectionCourante="portfolioProjet";
		sousSectionCourante="projets";
		$("#image_publication_devant").hide();
		$("#image_publication_derriere").hide();
		$("#devant").css("background-image",$("#derriere").css("background-image")).css("opacity",1);

		var target=$(event.currentTarget);

		$(".selectionProjet").removeClass("selectionProjet");

		target.addClass("selectionProjet");
		$("#banderole").addClass("animationProjets");
		$("#banderole").removeClass("animationEntreprise");

		var url=target.attr("href")+"?timestamp="+timestamp;

		window.setTimeout(function(){$("#chargeur").load(url,chargerPage)},250);

		event.preventDefault();

	});
	
	selection.append('<div class="ieFixe"></div>');
	

};


obtenirApercu=function(url){
	var apercu=apercuCache[url];
	if(!apercu){
		var response=$.ajax({
	      url: url,
	      global: false,
	      type: "GET",
	      dataType: "html",
	      async:false
		}).responseText;
		$("#prechargeur_apercu").html(response);
		var titre=$("#titre h1",$("#prechargeur_apercu")).html();
		var imageUrl=$("#gallerie a",$("#prechargeur_apercu")).attr("href");
		
		apercu={titre:titre,imageUrl:imageUrl};
		
		apercuCache[url]=apercu;
	}
	return apercu;
};


Handler.liensPublications=function(selection){

	selection.click(function(event){
		randomDiaporama=false;
		sousSectionCourante="publications";
		$("#image_publication_devant").show();
		$("#image_publication_derriere").show();
		var target=$(event.currentTarget);
		$(".selectionProjet").removeClass("selectionProjet");
		target.addClass("selectionProjet");
		$("#banderole").removeClass("animationProjets");
		$("#banderole").addClass("animationEntreprise");
		var url=target.attr("href")+"?timestamp="+timestamp;
		window.setTimeout(function(){$("#chargeur").load(url,chargerPage)},250);
		event.preventDefault();

	});

};



Handler.liensEntreprise=function(selection){

	selection.click(function(event){
		randomDiaporama=false;
		sectionCourante="entreprise";
		sousSectionCourante="titre";
		$("#image_publication_devant").hide();
		$("#image_publication_derriere").hide();
		$("#devant").css("background-image",$("#derriere").css("background-image")).css("opacity",1);		
		var target=$(event.currentTarget);
		$(".selectionMenu").removeClass("selectionMenu");
		target.addClass("selectionMenu");
		$("#banderole").removeClass("animationProjets");
		$("#banderole").addClass("animationEntreprise");
		var url=target.attr("href")+"?timestamp="+timestamp;
		window.setTimeout(function(){$("#chargeur").load(url,chargerPage);},250);
		event.preventDefault();
	});

};



Handler.liensPortfolio=function(selection){
	log.debug("in Handler.liensPortfolio");
	selection.click(function(event){
		randomDiaporama=false;
		sectionCourante="portfolioTitre";
		sousSectionCourante="titre";
		$("#image_publication_devant").hide();
		$("#image_publication_derriere").hide();
		$("#devant").css("background-image",$("#derriere").css("background-image")).css("opacity",1);
		var target=$(event.currentTarget);
		$(".selectionMenu").removeClass("selectionMenu");
		target.addClass("selectionMenu");
		$("#banderole").removeClass("animationProjets");
		$("#banderole").removeClass("animationEntreprise");
		var url=target.attr("href")+"?timestamp="+timestamp;
		window.setTimeout(function(){$("#chargeur").load(url,chargerPage)},250);
		event.preventDefault();
	});

	log.debug("out of Handler.liensPortfolio");

};


reculerImagePrecedente=function(){
	arreterDiaporama();
	$("#devant").clearQueue();
	$("#devant").stop().css("opacity","1");
	diaporamaImageIndex=diaporamaImageIndex-1;
	if(diaporamaImageIndex<0){
		diaporamaImageIndex=diaporamaImageLinks.length-1;
	}
	Handler.diaporama.cycle(diaporamaImageIndex,diaporamaImageLinks);
};

avancerImageSuivante=function(){
	arreterDiaporama();
	$("#devant").clearQueue();
	$("#devant").stop().css("opacity","1");
	diaporamaImageIndex=diaporamaImageIndex+1;
	if(diaporamaImageIndex>=diaporamaImageLinks.length){
		diaporamaImageIndex=0;
	}
	Handler.diaporama.cycle(diaporamaImageIndex,diaporamaImageLinks);
};

basculerDiaporamaLecture=function(){
	activerLectureDiaporama(!diaporamaActif);
};

activerLectureDiaporama=function(activer){
	if(activer){
		diaporamaActif=true;
		avancerImageSuivante();
		$("#diaporamaControle").switchClass("arreter","actif");
	}else{
		diaporamaActif=false;
		arreterDiaporama();
		$("#diaporamaControle").switchClass("actif","arreter");
	}
};


Handler.diaporama=function(links,delay){
	diaporamaImageLinks=null;
	arreterDiaporama();
	diaporamaActif=true;
	$("#devant").clearQueue();
	$("#devant").stop().css("opacity","1");
	if(!delay) delay=TRANSITION_IMAGE;
	jQuery.each(links,function(index,value){
		var v=$(value);
		v.click(function(event){
			var d;
			diaporamaImageIndex=index;
			if(imageTransitionDelay!=null){
				d=imageTransitionDelay;
				imageTransitionDelay=null;
			}else{
				d=delay;
			}
			if(event.pageX!=null){
				activerLectureDiaporama(false);
			}
			montrerImage(v,v.attr("href"),d);
		});
		var url=v.attr("href");
		preloadImage(url);
	});
	
	if(randomDiaporama){
		x=Math.floor ( Math.random ( ) * links.length);
	}else{
		x=0;
	}
	imageTransitionDelay=TRANSITION_DIAPORAMA;
	Handler.diaporama.cycle(x,links);
};



Handler.diaporama.cycle=function(imageIndex,links){
	$(links[imageIndex]).click();
	//diaporamaImageIndex=imageIndex;
	diaporamaImageLinks=links;
	if(links.length>1 && diaporamaActif){
		gallerieProcess=window.setTimeout(function(){
			if(imageIndex+1>=links.length) imageIndex=0; else imageIndex++;
			imageTransitionDelay=TRANSITION_DIAPORAMA;
			Handler.diaporama.cycle(imageIndex,links);
		},delaisDiaporama);
	}
};



Handler.diaporamaPublications=function(links,delay){
	arreterDiaporama();
	$("#image_publication_devant").show();
	$("#image_publication_derriere").show();
	$("#image_publication_devant").clearQueue();
	$("#image_publication_devant").stop().css("opacity","1");
	if(!delay) delay=TRANSITION_IMAGE;
	jQuery.each(links,function(index,value){
		var v=$(value);
		v.click(function(event){
			montrerImagePublications(v,v.attr("href"),delay);
			preloadImage(v.attr("href"));
		});	
	});

	Handler.diaporamaPublications.cycle(0,links);

};

Handler.diaporamaPublications.cycle=function(imageIndex,links){
	$(links[imageIndex]).click();
	if(links.length>1){
		galleriePublicationProcess=window.setTimeout(function(){
			if(imageIndex+1>=links.length) imageIndex=0; else imageIndex++;
			
			Handler.diaporamaPublications.cycle(imageIndex,links);
		},delaisDiaporama);
	}
};



Handler.gallerie=function(links){
	//arreterDiaporama();
	var html="<ul>";
		jQuery.each(links,function(index,value){
			var v=$(value);
			url=v.attr("href");
			html=html+"<li><a href='"+url+"' onClick='return false;'></a></li>";
			preloadImage(url);
		});
	html=html+"</ul>";
	$("#menu_images",$("#chargeur")).html(html);
	Handler.diaporama($("#menu_images a",$("#chargeur")),TRANSITION_IMAGE);

};


montrerImage=function(element,imageUrl,fadeDelay){
	
	arreterDiaporama();
	var passedInDelay=0+fadeDelay;
	var devant=$("#devant");
	var derriere=$("#derriere");
	var link=$(element);
	$(".imageSelected").removeClass("imageSelected");
	link.addClass("imageSelected");
	if(derriere.css("background-image")!='none')devant.css("background-image",derriere.css("background-image"));
	window.setTimeout(function(){
		var devant=$("#devant");
		var derriere=$("#derriere");
		devant.css("opacity",1);
		derriere.css("background-image","url("+imageUrl+")");
		log.debug("delais:"+passedInDelay);
		devant.stop().animate({opacity:"0"},passedInDelay);
		
	},100);
};



montrerImagePublications=function(element,imageUrl,fadeDelay){
	arreterDiaporama();
	var devant=$("#image_publication_devant");
	var derriere=$("#image_publication_derriere");
	var link=$(element);
	var initial=false;
	$(".imageSelected").removeClass("imageSelected");
	link.addClass("imageSelected");
	if(derriere.css("background-image")!='none') devant.css("background-image",derriere.css("background-image"));
	else {initial=true;derriere.css("opacity",0);}
	window.setTimeout(function(){
		var devant=$("#image_publication_devant");
		var derriere=$("#image_publication_derriere");
		devant.css("opacity",1);
		derriere.css("background-image","url("+imageUrl+")");
		if(!initial)devant.stop().animate({opacity:"0"},fadeDelay);
		else derriere.stop().animate({opacity:"1"},fadeDelay);
	},250);
};

arreterDiaporama=function(){
	
	if(gallerieProcess!=null) {
		clearTimeout(gallerieProcess);
		gallerieProcess=null;
	}
	if(galleriePublicationProcess!=null) {
		clearTimeout(galleriePublicationProcess);
		galleriePublicationProcess=null;
	}
};

manipulerContenu=function(racine){
	log.debug(">>manipulerContenu");
	for(var i=0;i<handlers.length;i++){
		var selection=$(handlers[i].selector,$(racine));
		if(selection.length>0){
			log.debug("handling "+handlers[i].selector+", found "+selection.length+" elements");
			handlers[i].handle(selection);
		}else{
			log.debug("no elements matching "+handlers[i].selector);
		}
	}
	log.debug("<<manipulerContenu");
};

chargerPage=function(){
	$("#diaporamaControle").fadeOut(500);
	var chargeur=$("#chargeur");
	manipulerContenu(chargeur);
	var titre=$("#titre",chargeur);
	var information=$("#information",chargeur);
	var menu_projets=$("#menu_projets",chargeur);
	var liens_publications=$("#liens_publications",chargeur);
	$("#banderole").stop(true,true);
	var t;
	t=insererTitre(titre,250);
	insererInformation(information,t+500);
	insererMenuProjets(menu_projets,t+500);
	insererLiensPublications(liens_publications,t+500);
	insererControleDiaporama(t);
};

insererTitre=function(nouveauContenu,delais){
	var current=$("#page #titre *");
	var d=0;
	current.stop();
	var transition_fade_out=500;
	if(current.children().length!=0 && nouveauContenu.length!=0){
		current.fadeOut(transition_fade_out);
	}

	var b=$("#banderole");
	if(!b.hasClass(sectionCourante)){
		d=2000;
	}
	if(nouveauContenu.length!=0){
		window.setTimeout(function(){
			if(!b.hasClass(sectionCourante)){
				b.switchClass(b.attr('class'),sectionCourante);
				if(sectionCourante=="portfolioTitre"){
					b.animate({bottom:0},d);
				}else if(sectionCourante=="entreprise"){
					var hp=$("#principal").height();
					var hb=$("#banderole").height();
					b.animate({bottom:hp-hb-150},d);
				}else if(sectionCourante=="portfolioProjet"){
					b.animate({bottom:-96},d);
				}else if(sectionCourante=="initial"){
					b.animate({bottom:-260},d);
				}
			}
			$("#page #titre").replaceWith(nouveauContenu);
			$("#page #titre *").hide().delay(delais+d).fadeIn(750);
		},transition_fade_out);
	}
	return d+delais+transition_fade_out;
};

insererInformation=function(contenu,delais){
	if(contenu.length!=0 && contenu.html()!=null){
		$("#information").replaceWith(contenu);
		contenuOuvert=false;
		informationPresente=true;
		panneauInformationEnchargement=true;
		initialiserContenu();
		$("#control").delay(2000).fadeIn(2000);
		$("#contenu #defilement_haut").hover(
				function(){
					if($("#information").position().top<0) $("#contenu #defilement_haut").css('cursor','pointer').stop().animate({opacity:1},500);
					else $("#contenu #defilement_haut").css('cursor','default');},
					function(){
						$("#contenu #defilement_haut").stop().animate({opacity:0.3},500);}
		).mousedown(defilerVersLeBas).mouseup(stopDefilement);
		$("#contenu #defilement_bas").hover(
				function(){
					if($("#information").position().top>defilementTopMinimum())	$("#contenu #defilement_bas").css('cursor','pointer').stop().animate({opacity:1},500);
					else $("#contenu #defilement_bas").css('cursor','default');},
					function(){
						$("#contenu #defilement_bas").stop().animate({opacity:0.3},500);}
		).mousedown(defilerVersLeHaut).mouseup(stopDefilement);
		$("#contenu").hide().fadeIn(1,function(){panneauInformationEnchargement=false});
	}else{
		panneauInformationEnchargement=false;
		informationPresente=false;
		$("#contenu").hide();
		$("#control").hide();
	}
};

insererControleDiaporama=function(delais){
	if(diaporamaImageLinks!=null && diaporamaImageLinks.length>1){
		if(diaporamaActif){
			$("#diaporamaControle").switchClass("arreter","actif");
		}
		$("#diaporamaControle").delay(delais).fadeIn(500);
	}
};

defilerVersLeBas=function(){
	clearTimeout(defilementProcessus);
	var i=$("#information");
	var ct=i.position().top;
	var x;
	if(!(ct>0)){
		var inc=VITESSE_SCROLL;
		if(0-ct<inc) inc=0-ct;
		i.animate({top:'+='+inc},100);		
		defilementProcessus=window.setTimeout(defilerVersLeBas,100);
	}else{
		i.css('top','0px');
	}
};

defilementTopMinimum=function(){
	var i=$("#information");
	var c=$("#contenu");
	var min=(((c.height())-i.height())*1.5);
	return min;
};

defilerVersLeHaut=function(){
	clearTimeout(defilementProcessus);
	var i=$("#information");
	var c=$("#contenu");
	var ct=i.position().top;
	var min=defilementTopMinimum();

	if(ct>min){
		var inc=VITESSE_SCROLL;
		if(ct-min<inc) inc=ct-min;
		i.animate({top:'-='+inc},100);		
		defilementProcessus=window.setTimeout(defilerVersLeHaut,100);
	}
};

stopDefilement=function(){
	$("#information").stop();
	clearTimeout(defilementProcessus);
};

initialiserContenu=function(transition){ 
	if(contenuOuvert){
		$("#control").removeClass("ferme").addClass("ouvert");
		if(!transition){
			$("#contenu").stop(true,true).removeClass("ferme").addClass("ouvert");
		}else {
			$("#contenu").stop(true,true).switchClass("ferme","ouvert",500);
		}
	}else{
		$("#control").removeClass("ouvert").addClass("ferme");
		if(!transition) $("#contenu").stop(true,true).removeClass("ouvert").addClass("ferme");

		else {
			$("#contenu").stop(true,true).switchClass("ouvert","ferme",500);
		}
	}
};

basculerContenu=function(){
	if(panneauInformationEnchargement==false){
		contenuOuvert=!contenuOuvert;
		initialiserContenu(true);
	}	
};

insererMenuProjets=function(menu_projets,delais){
	var current=$("#menu_projets");
	current.stop();
	if(sectionCourante=="entreprise"){
		if(current.children().length!=0){
			current.fadeOut(500);
		}
		$("#menu_projets").replaceWith("<div id='menu_projets'></div>");
	}else{
		if(menu_projets.length!=0 && current.children().length!=0 ){
			current.fadeOut(500);
		}
		if(menu_projets.length!=0){
			window.setTimeout(function(){
				$("#menu_projets").replaceWith(menu_projets);
				$("#menu_projets").hide().delay(delais).fadeIn(250);
			},500);
		}
	}
};



insererLiensPublications=function(contenu,delais){
	var current=$("#liens_publications");
	current.stop();
	if(sousSectionCourante!="publications" && contenu.length==0){
		if(current.children().length!=0){
			current.fadeOut(500);
			$("#liens_publications").replaceWith("<div id='liens_publications'></div>");
		}
	}else{
		if(contenu.length!=0 && current.children().length!=0 ){
			current.fadeOut(500);
		}
		if(contenu.length!=0){
			window.setTimeout(function(){
				$("#liens_publications").replaceWith(contenu);
				$("#liens_publications").hide().delay(delais).fadeIn(250);
			},500);
		}
	}
};

demarrer=function(){
		randomDiaporama=true;
		delaisDiaporama=DELAIS_DIAPORAMA_INITIAL;
		var lang=getUrlVar("langage");
		if(lang!=null) langage=lang;
		manipulerContenu($(document));
		evaluerEcran();
		window.setTimeout(function(){
			$("#loading").hide();
			$("#page").show(); // montrer la page
			$("#contenu").hide();
			$("#control").hide();
			$("#diaporamaControle").hide();
			$("#principal").mouseenter(function(event){
				if(informationPresente==true){
					$("#control").stop(true,true).fadeIn(500);
				}
			});
			
			$("#principal").mouseleave(function(event){
				if(informationPresente==true && contenuOuvert==false){
					$("#control").stop(true,true).fadeOut(500);
				}
			});

			$("#banderole").addClass("initial").delay(1500).toggleClass("initial",2000);
			$("#titre").hide().delay(3500).fadeIn(1000);
			insererControleDiaporama(4000);
		},1000);

		delaisDiaporama=DELAIS_DIAPORAMA;
		$(window).resize(function() {
			if(evaluationEcranProcessus ) clearTimeout(evaluationEcranProcessus);
			evaluationEcranProcessus=window.setTimeout(evaluerEcran,50);
		});
		
		var menu_entreprise=$("#menu_entreprise ul");
		for(var i=0;i<langages.length;i++){
			if(langages[i].code!=langage){
				menu_entreprise.append("<li><a  href='index.html?langage="+langages[i].code+"'>"+langages[i].nom+"</a></li>");
			}
		}
};

prechargement=function(element){
	var links=$("a.dynamique",element);
	loadLinksSequentially(links,0);
	var links=$("#diaporama a",element);
	loadLinksSequentially(links,0);
	var links=$("#gallerie a",element);
	loadLinksSequentially(links,0);
};

loadLinksSequentially=function(links,index){
	log.debug(links.length+" size:  index:"+index);
	if(index!=links.length){
	var l=$(links[index]);
	var prechargeur=$("#prechargeur");
	var link=l.attr("href");
	log.debug(link);
	if(!isLinkLoaded(link)){
		if(link.indexOf(".html")==link.length-5){
			prechargeur.load(link,function(){prechargement(prechargeur);loadLinksSequentially(links,index+1);});
		}else{
			preload([
			         link
			         ],function(){loadLinksSequentially(links,index+1);},0
			);
		}
	}
	}else{
		return;
	}
};

evaluerEcran=function(){
	var h=$(window).height();
	var computedHeight=h*.85;
	if(computedHeight<400){computedHeight=500;}
	else if(computedHeight>630){computedHeight=630;}
	var computedMargin=40-(630-computedHeight);
	if(computedMargin<5)computedMargin=5;
	$("#page").css("margin-top",computedMargin);
	$("#principal").height(computedHeight);
};


getUrlVars=function(){
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i < hashes.length; i++)
	{
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;

};

getUrlVar=function(name){
	return getUrlVars()[name];

};

var handlers=[{selector:"span.i18n",handle:Handler.internationalisation},
              {selector:"#diaporama a",handle:Handler.diaporama},
              {selector:"#diaporama_publications a",handle:Handler.diaporamaPublications},
              {selector:"#gallerie a",handle:Handler.gallerie},
              {selector:"#liens_publications a.dynamique",handle:Handler.liensPublications},
              {selector:"#menu_projets a.dynamique",handle:Handler.liensProjets},
              {selector:"#menu_portfolio a.dynamique",handle:Handler.liensPortfolio},
              {selector:"#menu_entreprise a.dynamique",handle:Handler.liensEntreprise},
              {selector:"#information",handle:Handler.information}];

