var cs_prive=window.location.pathname.match(/\/ecrire\/$/)!=null;
jQuery.fn.cs_todo=function(){return this.not('.cs_done').addClass('cs_done');};
var cs_verif_email = 1;
var cs_verif_nom = 1;
var cs_verif_deux = 0;
var onglet_actif = 0;

// fonction pour montrer un contenu
jQuery.fn.montre_onglet = function( selector ) {
	// click sur un titre
	if(this.is('.onglets_titre')) {
		var contenu = '#' + this[0].id.replace(/titre/,'contenu');
		var bloc = this.parent().parent();
		bloc.children('.selected').removeClass('selected').end()
			.children('.onglets_liste').children('.selected').removeClass('selected');
		jQuery(contenu).addClass('selected');
		this.addClass('selected');
	}
	// click sur un titre
	if(this.is('.onglets_contenu')) {
		var titre = this[0].id.replace(/contenu/,'titre');
		jQuery('#'+titre).montre_onglet();
	}
	return this;
};

// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions 
function onglets_init() {
  var cs_bloc = jQuery('div.onglets_bloc_initial', this);
  if(cs_bloc.length) {
	cs_bloc.prepend('<div class="onglets_liste"></div>')
		.children('.onglets_contenu').each(function(i) {
			this.id = 'onglets_contenu_' + i;
			jQuery(this).parent().children('.onglets_liste').append(
				'<h2 id="'+'onglets_titre_' + i + '" class="onglets_titre">' + this.firstChild.innerHTML + '</h2>'
			);
		})
		.children('h2').remove();
	jQuery('div.onglets_liste', this).each(function() {
		this.firstChild.className += ' selected';
		this.nextSibling.className += ' selected';
	});
	jQuery('h2.onglets_titre', this).hover(
		function(){
			jQuery(this).addClass('hover')
		},function(){
			jQuery(this).removeClass('hover')
		}
	);
	jQuery('div.onglets_bloc_initial', this)
		.attr('class','onglets_bloc').each(function(i) {this.id = 'ongl_'+i;});
	// clic du titre...
	jQuery('h2.onglets_titre', this).click(function(e) {
		jQuery(this).montre_onglet();
		return false;
	});
	// clic des <a>, au cas ou...
	jQuery('h2.onglets_titre a', this).click(function(e){
		jQuery(this).parents('h2').click();
		if (e.stopPropagation) e.stopPropagation();
		e.cancelBubble = true;
		return false;
	});
	// activation d'onglet(s) grace a l'url
	if(onglet_get && (this==document)) {
		var onglets = onglet_get.split(',');
		for (var i=0; i<onglets.length; i++)
			jQuery('#onglets_titre_'+onglets[i]).click();
	}
	// clic vers une note dans un onglet
	jQuery('.spip_note['+cs_sel_jQuery+'name^=nb], .spip_note['+cs_sel_jQuery+'id^=nb]').each(function(i) {
		jQuery(this).click(function(e){
			var href = this.href.substring(this.href.lastIndexOf("#"));
			jQuery(href).parents('.onglets_contenu').eq(0).montre_onglet();
			return true;
		});
	});
  }
}

function get_onglet(url) {
 tab=url.search.match(/[?&]onglet=([0-9,]*)/) || url.hash.match(/#onglet([0-9,]*)/);
 if (tab==null) return false;
 return tab[1];
}

var onglet_get = get_onglet(window.location);
var sommaire_sel = 'div.cs_sommaire_titre_avec_fond, div.cs_sommaire_titre_sans_fond';

// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions 
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function cs_sommaire_init() {
	jQuery(sommaire_sel, this)
		.cs_todo()
		.click( function(){
			jQuery(this).toggleClass('cs_sommaire_replie')
				.next().toggleClass('cs_sommaire_invisible')
			// annulation du clic
			return false;
		});
}

// Sauve l'etat du 1er sommaire de la page dans un cookie si on quitte la page, et le remet quand on revient
// pour SPIP < 2.0, il faut le plugin jquery.cookie.js
function cs_sommaire_cookie() {
	if(typeof jQuery.cookie!='function') return;
	var replie = jQuery.cookie('cs_sommaire');
	jQuery.cookie('cs_sommaire', null);
	if (Number(replie))
		jQuery(sommaire_sel).eq(0).addClass('cs_sommaire_replie')
			.next().toggleClass('cs_sommaire_invisible');
	jQuery(window).bind('unload', function() {
		jQuery.cookie('cs_sommaire',
			Number(jQuery(sommaire_sel).eq(0).is('.cs_sommaire_replie'))
		);
	});
}

var gloss_el = null;
var gloss_dt = null;
var gloss_dd = null;
var gloss_dl = null;

// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function glossaire_init() {
  if(jQuery('span.gl_js', this).length) {
	if(!jQuery('#glossOverDiv').length) {
		jQuery('body').append('<div id="glossOverDiv" style="position:absolute; display:none; visibility: hidden;"><span class="gl_dl"><span class="gl_dt">TITRE</span><span class="gl_dd">Definition</span></span></div>');
		gloss_el = document.getElementById('glossOverDiv');
		gloss_dl = gloss_el.firstChild;
		gloss_dt = gloss_dl.firstChild;
		gloss_dd = gloss_dl.lastChild;
	}
	jQuery('span.gl_mot', this).cs_todo().hover(
		function(e) {
			$this = jQuery(this);	  
			// cas du surligneur (SPIP 2)
			if(this.firstChild.className=="spip_surligne") {
				this.className = "gl_mot spip_surligne";
				this.innerHTML = this.firstChild.innerHTML;
			}
			gloss_dt.innerHTML = $this.parent().children('.gl_js')[0].title;  // titre
			gloss_dd.innerHTML = $this.parent().children('.gl_jst')[0].title; // definition
			reg = $this.css('font-size').match(/^\d\d?(?:\.\d+)?px/);
			if(reg) gloss_el.style.fontSize = reg[0];
			jQuery(gloss_el)
				.css('top', e.pageY.toString()+"px")
				.css('left', e.pageX.toString()+"px")
				.css('font-family', jQuery(this).css('font-family'));
			gloss_el.style.display    = 'block';
			gloss_el.style.visibility = 'visible';
			if(typeof jQuery.fn.offset=="function") { // plugin jquery.dimensions disponible a partir de SPIP 2
if(1) {///////////////////////// optimisation du placement, encore en test...
	var $glossOverDiv = jQuery('#glossOverDiv');
	var $gloss_dl = jQuery(gloss_dl);
	positionBy = 'auto'; // Type de positionnement : 'dessus', 'dessous', 'auto', 'mouse' (a tester...)
	ombre = 0;  // Taille d'une ombre, en pixels (non implemente)
	decalX = 2; // decalage entre le glossaire et le lien appelant
	width = 180; // largeur totale de #glossOverDiv : definie dans glossaire.css
	height = 'auto'; // hauteur totale de #glossOverDiv : 'auto' ou nombre de pixels
	// initiation verticale
	var glossHeight, wHeight;
	var linkHeight = this.offsetHeight;
	var defHeight = isNaN(parseInt(height, 10)) ? 'auto' : (/\D/g).test(height) ? height : height + 'px';
	var sTop, linkTop, posY, mouseY, baseLine;
	sTop = jQuery(document).scrollTop();
	// initiation horizontale
	var glossWidth = width + ombre;
	var linkWidth = this.offsetWidth;
	var linkLeft, posX, mouseX, winWidth;
	winWidth = jQuery(window).width();
	// c'est parti !
	linkTop = posY = $this.offset().top;
	linkLeft = $this.offset().left;
	mouseX = e.pageX;
	mouseY = e.pageY;
// securite pour l'instant
$glossOverDiv.css({margin:'0px'}); $gloss_dl.css({margin:'0px'});
	// calcul de la position horizontale : glossaire au centre du lien
	posX = Math.max(linkLeft - (glossWidth-linkWidth)/2,0);
	if (positionBy == 'dessous' || positionBy == 'dessus') { // glossaire fixe
		$glossOverDiv.css({left: posX + 'px'});
	} else {
		// au cas ou, glossaire a droite ou a gauche du lien ?
		posX2 = (linkWidth > linkLeft && linkLeft > glossWidth) || (linkLeft + linkWidth + glossWidth + decalX > winWidth)
		  ? linkLeft - glossWidth - decalX 
		  : linkWidth + linkLeft + decalX;
		// suivre la souris ?
		if (positionBy == 'mouse' || linkWidth + glossWidth > winWidth) {
		  posX = Math.max(mouseX - (glossWidth-linkWidth)/2,0); // glossaire au centre de la souris
		/*if (mouseX + 20 + glossWidth > winWidth)
			posX = (mouseX - glossWidth) >= 0 ? mouseX - glossWidth :  mouseX - (glossWidth/2);
		else posX = mouseX;*/
	}
	var pY = e.pageY;
	$glossOverDiv.css({left: (posX > 0 && positionBy != 'dessus') ? posX : (mouseX + (glossWidth/2) > winWidth) ? winWidth/2 - glossWidth/2 : Math.max(mouseX - (glossWidth/2),0)});
	}
	// calcul de la position verticale
	wHeight = jQuery(window).height();
	$glossOverDiv.css({overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight});
	glossHeight = defHeight == 'auto' ? Math.max($gloss_dl.outerHeight(),$gloss_dl.height()) : parseInt(defHeight,10);   
	glossHeight += ombre;
	tipY = posY;
	baseLine = sTop + wHeight;
	if (positionBy == 'dessous') tipY = posY + linkHeight + 2; // glossaire fixe sous le lien
	else if (positionBy == 'dessus') tipY = posY - glossHeight - 2; // glossaire fixe au-dessus du lien
	else if ( posX < mouseX && Math.max(posX, 0) + glossWidth > mouseX ) { // glossaire cache le lien
		if (posY + glossHeight > baseLine && mouseY - sTop > glossHeight) { 
		  tipY = posY - glossHeight - 2;
		} else { 
		  tipY = posY + linkHeight + 2;
		}
	} else if ( posY + glossHeight > baseLine ) {
		tipY = (glossHeight >= wHeight) ? sTop : baseLine - glossHeight;
	} else if ($this.css('display') == 'block' || positionBy == 'mouse') {
		tipY = pY;
	} else {
		tipY = posY /*- ombre*/;
	}
	$glossOverDiv.css({top: tipY + 'px'});
}////////////////////////////////////////

			} // typeof jQuery.fn.offset=="function"
			gloss_el.style.visibility = 'visible';
		},
		function(e) {
			gloss_el.style.display    = 'none';
			gloss_el.style.visibility = 'hidden';
		}
	);

	// accessibilite au clavier
	if(typeof jQuery.fn.offset=="function") { // plugin jquery.dimensions disponible a partir de SPIP 2
		jQuery('a.cs_glossaire').focus(
			function() {
				legl_mot = this.firstChild;
				gloss_dt.innerHTML = jQuery(this).children('.gl_js')[0].title;  // titre
				gloss_dd.innerHTML = jQuery(this).children('.gl_jst')[0].title; // definition
				reg = jQuery(this.firstChild).css('font-size').match(/^\d\d?(?:\.\d+)?px/);
				if(reg) gloss_el.style.fontSize = reg[0];
				var result = jQuery(this).offset({ scroll: false });
				jQuery(gloss_el)
					.css('top',result.top+"px")
					.css('left', result.left+"px")
					.css('font-family', jQuery(this.firstChild).css('font-family'));
				gloss_el.style.display    = 'block';
				gloss_el.style.visibility = 'visible';
			}
		);
		jQuery('a.cs_glossaire').blur(
			function() {
				gloss_el.style.display    = 'none';
				gloss_el.style.visibility = 'hidden';
			}
		);
	} // typeof jQuery.fn.offset=="function"
  }
}
function lancerlien(a,b){ x='ma'+'ilto'+':'+a+'@'+b; return x; }
function soft_scroller_init() { if(typeof jQuery.localScroll=="function") jQuery.localScroll({hash: true}); }
// fonction surchargeable : gestion du slide jQuery
jQuery.fn.blocs_toggle_slide_dist = function( selector ) {
	this.toggleClass('blocs_slide');
	if(typeof jQuery.fn.blocs_toggle_slide=='function')
		return this.blocs_toggle_slide();
	return this.is(".blocs_slide")?this.slideUp(blocs_slide):this.slideDown(blocs_slide);
};

jQuery.fn.blocs_set_title = function( selector ) {
	var title = this.parent().find('.blocs_title:last').text();
	if(!title) title = blocs_title_def;
	title = title.split(blocs_title_sep);
	this.children('a').attr('title', title[jQuery(this).is('.blocs_replie')?0:1]);
	return this;
};

// fonction de de/re-pliement
jQuery.fn.blocs_toggle = function() {
	if (!this.length) return this;
	// applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?
	var cible = this.is('.cs_blocs')? this.children('.blocs_titre').eq(0) : this;
	// on replie/deplie la cible...
	cible.toggleClass('blocs_replie').blocs_set_title();
	var dest = this[0].id.match('^cs_bloc_id_')?jQuery('div.'+this[0].id):cible.next();
	if(blocs_slide==='aucun') {
		dest.toggleClass('blocs_invisible');
		// est-on sur un resume ?
		if (dest.is('div.blocs_resume')) dest.next().toggleClass('blocs_invisible');
	} else {
		dest.blocs_toggle_slide_dist();
		// est-on sur un resume ?
		if (dest.is('div.blocs_resume')) dest.next().blocs_toggle_slide_dist();
	}
	// est-on sur un bloc ajax ?
	var lien = cible.children();
	var url = lien.attr("href");
	if(url != 'javascript:;') {
		// une fois le bloc ajax en place, plus besoin de le recharger ensuite
		lien.attr("href", 'javascript:;');
		// ici, on charge !
		cible.parent().children(".blocs_destination")
		//.animeajax()
		.load(url);
	}
	return this;
};

// replie tout sauf le bloc appelant et sa lignee parentale
jQuery.fn.blocs_replie_tout = function() {
	if(blocs_replier_tout) {
		// applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?
		var cible = this.is('.cs_blocs')? this : this.parents('div.cs_blocs');
		// lignee du bloc
		var lignee = cible.children('.blocs_titre');
		jQuery('.blocs_titre').not('.blocs_replie').not(lignee).blocs_toggle();
	}
	return this;
}

// une variable globale stockant le(s) bloc(s) a deplier si un clic ajax a eu lieu
var blocs_clic_ajax = null;

// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions 
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function blocs_init() {
	// clic sur un titre de bloc
	jQuery('.blocs_titre', this).cs_todo()
	  .click( function(){
		jQuery(this).blocs_replie_tout().blocs_toggle();
		// annulation du clic
		return false;
	   })
	  .each( function(){
		jQuery(this).blocs_set_title();
	  });
	// pour un lien 'replier_bloc' present dans le bloc
	jQuery('.blocs_destination a.replier_bloc', this).cs_todo()
	 .click( function(){
		s = jQuery(this).parents('.cs_blocs:first');
		// scroll vers le debut du bloc, si le plugin 'SrollTo' est present
		if(typeof jQuery.fn.scrollTo=="function") jQuery('body').scrollTo(s, 500, 
			{margin:true, /*axis:'y',*/ onAfter:function(){s.blocs_replie_tout().blocs_toggle();}});
		else s.blocs_replie_tout().blocs_toggle();
		// annulation du clic
		return false;
	   });
	// clic vers une note dans un bloc
	jQuery('.spip_note['+cs_sel_jQuery+'name^=nb], .spip_note['+cs_sel_jQuery+'id^=nb]').each(function(i) {
		jQuery(this).click(function(e){
			var href = this.href.substring(this.href.lastIndexOf("#"));
			href = jQuery(href).parents('.cs_blocs').eq(0).children('.blocs_titre').eq(0);
			// on neutralise une eventuelle animation
			old_blocs_slide = blocs_slide;
			if(blocs_slide!='aucun') blocs_slide = -1;
			if(href.is('.blocs_replie')) href.click();
			blocs_slide = old_blocs_slide;
			return true;
		});
	});

/*
// LA SUITE DE CE CODE NE FONCTIONNE POUR L'INSTANT QUE SUR LE PREMIER CLIC, JE NE SAIS PAS ENCORE PKOI...
	// stockage du bloc (numerote !) a reouvrir dans le cas d'un clic ajax sur une 
	// pagination SPIP contenue a l'interieur
	jQuery(".ajaxbloc .pagination a.noajax", this).cs_todo()
	  .click( function(){
		var parent = jQuery(this).parents('.cs_blocs');
		if(!parent.length) return true;
		var numero = /cs_bloc\d+/.exec(parent[0].className);
		if(numero!==null) blocs_clic_ajax = numero[0];
		return true;
	   });
	// rouvre le nouveau bloc ajax si un clic a eu lieu a l'interieur de l'ancien
	if(blocs_clic_ajax!==null) {
		jQuery('.'+blocs_clic_ajax, this).blocs_toggle();
		blocs_clic_ajax = null
	}
*/
}

// un JS actif replie les blocs invisibles
document.write('<style type="text/css">div.blocs_invisible{display:none;}</style>');

// Sauve l'etat des blocs numerotes dans un cookie si on quitte la page
function cs_blocs_cookie() {
	if(typeof jQuery.cookie!='function') return;
	var blocs_cookie_name = 'blocs' + window.location.pathname + window.location.search
	blocs_cookie_name = blocs_cookie_name.replace(/[ ;,=]/,'_');
	var deplies = jQuery.cookie(blocs_cookie_name);
	jQuery.cookie(blocs_cookie_name, null);
	if(deplies)
		jQuery(deplies).blocs_replie_tout().blocs_toggle();
	jQuery(window).bind('unload', function() {
		jQuery.cookie(blocs_cookie_name, blocs_deplies());
	});
}

// renvoie la liste des selecteurs de blocs ouverts
function blocs_deplies() {
	var deplies = '';
	jQuery('.cs_blocs').each(function() {
		var numero = /cs_bloc\d+/.exec(this.className);
		if(numero==null) return;
		replie = jQuery(this).children('.blocs_titre').eq(0).is('.blocs_replie');
		if(!replie) deplies += (deplies.length?', ':'') + 'div.' + numero[0];
	});
	return deplies.length?deplies:null;
}

// une fonction et une variable pour reperer une pagination
function blocs_get_pagination(url) {
	tab=url.match(/#pagination([0-9]+)/);
	if (tab==null) return false;
	return tab[1];
}

var blocs_pagination = blocs_get_pagination(window.location.hash);

/*
// Si un bloc contient une pagination inseree dans un bloc,
// code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :
jQuery(document).ready(function() {
	if(blocs_pagination!==false) {
		jQuery('div.cs_bloc' + blocs_pagination + ' .blocs_titre').eq(0).click();
		window.location.hash = '#pagination' + blocs_pagination;
	}
});
*/

/*
//	Pour un bloc dépliable du genre :
//	<BOUCLE_art(ARTICLES)>
//		#BLOC_TITRE
//		#TITRE
//		#BLOC_RESUME
//		#INTRODUCTION
//		#BLOC_DEBUT
//		#TEXTE
//		#BLOC_FIN
//	</BOUCLE_art>
//	le clic sur un point de suite cliquable de la balise #INTRODUCTION produit l'ouverture du bloc.
//	code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :
jQuery(document).ready(function(){
	jQuery('.blocs_resume>a.pts_suite')
	  .click( function(){
		jQuery(this).parents('.cs_blocs:first').children('.blocs_titre')
			.blocs_replie_tout().blocs_toggle();
		// annulation du clic
		return false;
		});
});
*/
/* Par defaut : blocs_slide = 'aucun' */
var blocs_replier_tout = 0;
var blocs_millisec = 100;
var blocs_slide = 'aucun';
var blocs_title_sep = /\|\|/g;
var blocs_title_def = 'DÃ©plier||Replier';

// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions 
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function cs_auteur_forum() {
	// selecteur du bloc de previsualisation
	var sel = jQuery('fieldset.previsu', this);
	if(!sel.length) return;
//	alert('previsu OK');
	var form = sel.parents('form').eq(0);
	if(!form.length) return;
	// SPIP 2.0 remplace 'auteur' par 'session_nom'
	var auteur = jQuery('#session_nom', this);
	if(!auteur.length) auteur = jQuery('#auteur', this);
	// SPIP 2.0 remplace 'email_auteur' par 'session_email'
	var email = jQuery('#session_email', this);
	if(!email.length) email = jQuery('#email_auteur', this);
	if(auteur.length || email.length)
	// eviter les forums anonymes
	form.cs_todo().bind('submit', function(event){
		var alert_nom = auteur.length && !auteur.val().length;
		var alert_email = email.length && !email.val().length;
		var alert_deux = cs_verif_deux && alert_nom && alert_email;
		if(!cs_verif_deux) {
			alert_nom = alert_nom && cs_verif_nom;
			alert_email = alert_email && cs_verif_email;
		} else if(!alert_deux)
			alert_nom = alert_email = false;
		auteur.css('background-color','').css('border','');
		email.css('background-color','').css('border','');
		if(alert_email) {
			email.focus();
			email.css('background-color','#FCC').css('border','solid #C30');
		}
		if(alert_nom) {
			auteur.focus();
			auteur.css('background-color','#FCC').css('border','solid #C30');
		}
		if(alert_deux) {
			alert("Merci de spÃ©cifier votre nom ou votre email !");
			return false;
		}
		if(alert_nom) {
			alert("Merci de spÃ©cifier votre nom !");
			return false;
		}
		if(alert_email) {
			alert("Merci de spÃ©cifier votre email !");
			return false;
		}
		return true;
	});
}

var cs_init = function() {
	cs_auteur_forum.apply(this);
	onglets_init.apply(this);
	cs_sommaire_init.apply(this);
	/* optimisation : 'IF(1)' */ if(!cs_prive) jQuery("a.spip_out,a.spip_url,a.spip_glossaire",this).attr("target", "_blank"); 
	glossaire_init.apply(this);
	jQuery('span.spancrypt', this).attr('class','cryptOK').html('&#6'+'4;');
	jQuery("a["+cs_sel_jQuery+"title*='..']", this).each(function () {
		this.title = this.title.replace(/\.\..t\.\./,'[@]');
	});
	soft_scroller_init.apply(this);
	if(window.location.search.match(/page=forum/)!=null) jQuery("legend:contains('modÃ©ration Ã  priori')", this).next().html('Ce forum est modÃ©rÃ© Ã  prioriÂ : votre contribution n\'apparaÃ®tra qu\'aprÃ¨s avoir Ã©tÃ© validÃ©e par un administrateur du site, sauf si vous Ãªtes identifiÃ© et autorisÃ© Ã  poster directement.');
	blocs_init.apply(this);
}
if(typeof onAjaxLoad=='function') onAjaxLoad(cs_init);
if(window.jQuery) {
var cs_sel_jQuery=typeof jQuery(document).selector=='undefined'?'@':'';
var cs_CookiePlugin="prive/javascript/jquery.cookie.js";
jQuery(document).ready(function(){
	if(jQuery("div.cs_sommaire").length) {
		// s'il y a un sommaire, on cache la navigation haute sur les pages
		jQuery("div.decoupe_haut").css("display", "none");
		// utilisation des cookies pour conserver l'etat du sommaire si on quitte la page
		if(cs_CookiePlugin) jQuery.getScript(cs_CookiePlugin, cs_sommaire_cookie);
	}
	/* optimisation : 'IF(0) \{if(jQuery("div.cs_blocs").length)
		jQuery.getScript(cs_CookiePlugin, cs_blocs_cookie); \}' */
	cs_init.apply(document);
});
}
