//date
function Ajd() {
	ajd = new Date();
	Jour = new Array;
		Jour[0] = "Dimanche";
		Jour[1] = "Lundi";
		Jour[2] = "Mardi";
		Jour[3] = "Mercredi";
		Jour[4] = "Jeudi";
		Jour[5] = "Vendredi";
		Jour[6] = "Samedi";
	Mois = new Array;
		Mois[0] = "Janvier" ;
		Mois[1] = "Février" ;
		Mois[2] = "Mars" ;
		Mois[3] = "Avril";
		Mois[4] = "Mai" ;
		Mois[5] = "Juin" ;
		Mois[6] = "Juillet" ;
		Mois[7] = "Août";
		Mois[8] = "Septembre";
		Mois[9] = "Octobre";
		Mois[10] = "Novembre";
		Mois[11] ="Décembre";
	DataAjd = Jour[ajd.getDay()] + " " + ajd.getDate() + " " + Mois[ajd.getMonth()] + " " +  ajd.getFullYear();

	var el = document.getElementById("LayerAjd");//reference a l'emplacement de la date
	var txt = document.createTextNode(DataAjd);
	if (el.hasChildNodes()) {
		if ( el.lastChild.nodeName!="#text" && el.lastChild.nodeName!="#comment" ) {
			el.lastChild.innerHTML = DataAjd;//si balises interne detectees (autre que comments)
		} else {
		el.replaceChild(txt, el.lastChild); 
		}
	} else {
		el.appendChild(txt);
	}
}

//table transform, regroupe toutes lignes en une seule
function tableTransform() {

	//vérifier si les cellules sont vides : ne pas récupérer pour le final
	function emptyStr (el) { 
		var str = (el.innerHTML) ? el.innerHTML.replace(/&nbsp;/gi,'') :
							(el.innerText) ? el.innerText : 
							(el.textContent) ? el.textContent : ""; 
		str = str.replace(/^\s+/g, '').replace(/\s+$/g, '');//
		return (str=="");//true si vide
	} 
						
	var scrollClass = 'scroller';//main scroll div class identifier
	var contentClass = 'scroller_content';//content scroll div class identifier
	var nbscrolls = 0; //num de scroll content en cours (juste pour debug)
	var maxW = 764; //px
	var minW = 718; //px
	var resize;//permet de déterminer si 1 seule tr rencontrée (resize largeur=true)
	
	// get the reference for all divs in the page
	var allDivs = document.getElementsByTagName("div");
	
	/*
	** les boucles recherchent les multiples scrollers possibles sur la pages
	** cherche un main scroller puis
	** associe chaque contenu à un main scroller (scroller[0] contient un scroller_content[0]
	*/

	for (var nbDivs = 0 ; nbDivs < allDivs.length ; ++nbDivs) {
		if ( allDivs[nbDivs].className.indexOf(scrollClass) != -1 ) {
			
			//si le div en court d'analyse détient  la classe d'un scroller
			resize = (resize==false) ? false : true;
		  var contentDivs = allDivs[nbDivs].getElementsByTagName("div");
			for (var nbContentDivs = 0 ; nbContentDivs < contentDivs.length ; ++nbContentDivs) {
				
				//parse les autres divs présents dans ce main scroll
				if ( contentDivs[nbContentDivs].className.indexOf(contentClass) != -1 ) {
					// si un div interne au main detient la classe attendue scroll_content, 				  
					nbscrolls += 1;
					/*
					** on peut commencer le traitement
					** on réference le main scroll actuel
					** et son contenu attaché
					*/
					var scroller_main = allDivs[nbDivs];
					var content_div = contentDivs[nbContentDivs];
		
					//
					// etape 1a : compte les lignes du table
					//
				
					// get the reference for the #mainscroller>scroller_content>table, and assign table id=contbl
					var contbl = content_div.getElementsByTagName('table')[0];	
					
					//tr marche en doublons: 1ere tr = photos, 2e tr = description
					var tr     = contbl.rows;
					var nbrow  = tr.length; 
					
					//si plus d'une tr extrait le contenu des tr suplémentaires 
					if ((nbrow/2)>1) {
						resize = false;//plusieurs tr : ne pas redimensionner
	
						//
						// etape 1b : extrait les cellules du tableau, distinctement par paires de lignes (haut/bas)
						// extrait chaque cellule du tableau et les regroupe : les images sur 1 ligne -trAtd-, les textes sur l'autre -trBtd-
						//
						var t=0, trAtd = new Array(); trBtd = new Array();
						//1 iétration scanne une paire de ligne
						for (var a=0; a < nbrow; a=a+2) {
					
							//traite les cellules par paires (L1C1 et L2C1 simultanément)
							//tant qu'il y a des cellules sur A
							for (var b=0; b < tr[a].cells.length; b++) {
								if( tr[a].cells[b] && !emptyStr(tr[a].cells[b]) ) {//au moins la cell du haut existe bien et qu'elle n'est pas vide

								
									trAtd[t] = tr[a].cells[b].cloneNode(true);//vu quelle existe et pas vide, on la clone
//if (nbscrolls<2 && b<5) alert(trAtd[t].tagName)								

									if ( tr[a].cells[b].getAttribute('rowspan') == 2 ) {
										trBtd[t] = null;
									}
									else {
										//si la 1er n'a pas de rowspan, on clone normallement 
										trBtd[t] = tr[a+1].cells[b].cloneNode(true);
									}
									t++;//et passe à la rangée suivante
									
								}
							}//for (b=0
						}//for (a = 0
					
						//
						// etape 2 : recree un tableau avec les cellules extraites, regroupant les cellules du haut/bas sur 1 meme ligne
						//
					
						//
						//creer le nouveau tableau pour accueilir la paire de ligne photo / textes
						table = document.createElement("table");

						//attributs du tableau
						//récupérer les attributs du tableau d'origine et les appplique à l'identique au nouveau
						for (i=0;i<contbl.attributes.length;i++){
							if (contbl.attributes[i].specified)
								table.setAttribute(contbl.attributes[i].nodeName, contbl.attributes[i].nodeValue);
						}
						
						//supprime totalement le tableau d'origine devenu inutile
						content_div.removeChild(contbl);
					
						//créé la paire de lignes pour du tableau final
						var rowA = table.insertRow(0);//cree TR/ligne du haut
						var rowB = table.insertRow(1);//cree TR/ligne du bas
						
	
						var nbTD = trAtd.length;
						for (t=0; t < nbTD; t++) {
	
							//trAtd[t] contient deja les tags TD
								//newCellA = rowA.insertCell(t);//insere une cellule vide dans la ligne du haut
							  //newCellA.appendChild(trAtd[t]);//y rattache le contenu de la cellule haute d'origine
							rowA.appendChild(trAtd[t]);//y rattache le contenu de la row haute d'origine
							if (trBtd[t]!=null) rowB.appendChild(trBtd[t]);//y rattache le contenu de la cellule basse d'origine, uniquement!=vide
							
						}
					
						//attache le nouveau tableau au container
						content_div.appendChild(table);
	
						//
						// crée les controles du scroller uniquement si assez d'items pour necessiter un défilement.
						// attache les buttons
						//
						createControls(scroller_main.getAttribute('id'), content_div.getAttribute('id'));
						
				  }//if nbtr > 1
				}//si div a la classe content
			}//parse tous les divs interne au main
			
			if (resize==true) {
				//si aucun scroll necessaire
				document.getElementById( content_div.getAttribute('id') ).style.width = "100%";
		  }
			
		}//si div trouvé avec la classe Main scroll
	}//parse chaque div de la page
	
}

function getDivPos(divId){
	//recherche le numéro du div dans l'id
	var expression = /^.+(\d+)/;
	expression.exec(divId);
	currentPosition = RegExp.$1; //valeur possible: vide (aucun numéro trouvé) ou un chiffre
	return currentPosition;
}
//
//CREE LES BOUTONS ET AJOUTE LES COMPORTEMENTS RESPECTIFS
function createControls(scrollerId, scroller_contentId) {
	
	//recherche le numéro du div dans l'id
	currentPosition = getDivPos(scrollerId);

	//reference pour le div#scrollerX (principal)
	var scroller_main = document.getElementById(scrollerId);
	//reference pour le div#scroller_contentX (contenu)
	var content_div = document.getElementById(scroller_contentId);

	//associe un id différent aux boutons suivant le Main
	var btnLId = 'left'  + currentPosition;
	var btnRId = 'right' + currentPosition;

	//genere et positionne le btn1
	var btnL = document.createElement('div');
	btnL.setAttribute('id', btnLId);
	btnL.setAttribute('className', 'left disabL');//IE ONLY
	btnL.setAttribute('class', 'left disabL');//demarre en bout gauche donc met le style disabled sur btn gauche des le depart
	btnL.setAttribute('title', "Survoler pour faire défiler, cliquer pour accélérer");
	scroller_main.insertBefore(btnL, content_div);

	//genere et positionne le btn2
	var btnR = document.createElement('div');
	btnR.setAttribute('id', btnRId);
	btnR.setAttribute('className', 'right enabR');//demarre en bout gauche donc met le style disabled sur btn gauche des le depart
	btnR.setAttribute('class', 'right enabR');//demarre en bout gauche donc met le style disabled sur btn gauche des le depart
	btnR.setAttribute('title', "Survoler pour faire défiler, cliquer pour accélérer");
	scroller_main.insertBefore(btnR, content_div);

	//evenements gauche
	addEvent(btnL, 
					 'mousedown', 
					 function(){clearInterval(currentScroller);currentScroller = setInterval( function(){myScroll2(scroller_contentId,-speedRapide)},50);},
					 false);
	addEvent(btnL,
					 'mouseup',
					 function(){clearInterval(currentScroller)},
					 false);
	addEvent(btnL,
					 'mouseover',
					 function(){clearInterval(currentScroller);currentScroller = setInterval( function(){myScroll2(scroller_contentId,-speedLent)},50);},
					 false);
	addEvent(btnL,
					 'mouseout', 
					 function(){clearInterval(currentScroller)},
					 false);
	
	//evenements droit
	addEvent(btnR,
					 'mousedown',
					 function(){clearInterval(currentScroller);currentScroller = setInterval( function(){myScroll2(scroller_contentId,+speedRapide)},50);},
					 false);
	addEvent(btnR,
					 'mouseup',
					 function(){clearInterval(currentScroller)},
					 false);
	addEvent(btnR,
					 'mouseover',
					 function(){clearInterval(currentScroller);currentScroller = setInterval( function(){myScroll2(scroller_contentId,+speedLent)},50);},
					 false);
	addEvent(btnR,
					 'mouseout',
					 function(){clearInterval(currentScroller)},
					 false);
	
}

// controle le défilement du contenu
var speedRapide = 25; // vitesse en acceleree
var speedLent = 10;   // vitesse normale
var currentScroller;  // contient la fonction appelee au survol/click
function myScroll2(contentId, value) {
	
	//recherche le numéro du div dans l'id
	currentPosition = getDivPos(contentId);

	var old = document.getElementById(contentId).scrollLeft; //valeur du scroll en entrant
	document.getElementById(contentId).scrollLeft += value;//scroll

	//si on arrive a un bout ou à l'autre: cache le bouton correspondant
	var btnL = document.getElementById('left'  + currentPosition);
	var btnR = document.getElementById('right' + currentPosition);

	//si bout gauche
	if (document.getElementById(contentId).scrollLeft == 0) {
		btnL.setAttribute('className', 'left disabL');
		btnL.setAttribute('class'    , 'left disabL');

		btnR.setAttribute('className', 'right enabR');
		btnR.setAttribute('class'		 , 'right enabR');

	} 
	//si bout droit (la position n'augmente plus)
	else if (document.getElementById(contentId).scrollLeft == old) {
		btnL.setAttribute('className', 'left enabL');
		btnL.setAttribute('class'		 , 'left enabL');

		btnR.setAttribute('className', 'right disabR');
		btnR.setAttribute('class'		 , 'right disabR');
	} 
	//autre cas: aucun bout atteint
	else {
		btnL.setAttribute('className', 'left enabL');
		btnL.setAttribute('class'    , 'left enabL');

		btnR.setAttribute('className', 'right enabR');
		btnR.setAttribute('class'    , 'right enabR');
	}
}

//ATTACHER DES EVENEMENT SUR IE ET FF DE LA MEME MANIERE
//FF: utilise addEventListener('click', myfunction, false);
//IE: utilise attachEvent(  'onmousedown', function);
function addEvent(obj, evType, fn, useCapture){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		//Impossible de gérer les evenements.
	}
} 

window.onload  = function () {
	Ajd();//date du jour
	tableTransform();//prepare contenu à scroller
}