// --------------------------------- variables ---------------------------------

var page_actuel = 1;/**< page actuellement sélectionné */

var page = new Array;/**< liste des page */

var pdiscuss_actuel = 1;/**< page de discussion actuellement sélectionné */

var pdiscuss = new Array;/**< liste des page de discussion */

var $comp = jQuery.noConflict();/**< réference de jquery pour éviter les conflits  */

var cache_disc = "";/**< variable de sauvegarde de l'environnement des discussions */

var cache_page = "";/**< variable de sauvegarde de l'environnement des pages */

var pos_disc="txt";/**< positionnement actuel discussion (disc) / texte du chapitre (txt) */

var i_d = 1;/**< indentifiant du chapitre en court */

var displayPane;/**< largeur du panneau de gauche */

var slideP = false;
var slideP_pos = 0;
var silde_min = 0;
var splitWidth = 0;

var error_p = false;/**< gestion des erreurs */

var bb_url;/**< identifiant de la page précédente */

var browser = [];/**< browser utiliser par l'utilisateur */

var pouleWebReader = null; /**<  Depuis WebReader */

if(typeof APIJS!='object'){
	var APIJS = new Object();/**< API Javascript */
	var APIJS;
}
var nbpage;/**<  nombre de page */

var nbpdiscuss;/**<  nombre de discussion */

/** 
* initialisation
*/
function demarp() {
        		// identifiant du chapitre
        		i_d = $comp('body').attr("name");
        		
						if(document.getElementById("nbpage"))
										nbpage = $comp("#nbpage").val();
						else nbpage = 1;
        		
						if(document.getElementById("nbpdiscuss"))
										nbpdiscuss = $comp("#nbpdiscuss").val();
						else nbpdiscuss = 1;
						
            // navigateur de l'utilisateur ?
            jQuery.each(jQuery.browser, function(i,val){
                    // safari opera msie mozilla
                    browser[i] = val;
            });
            
            if ((typeof checkForMathML!="undefined") && typeof w_isiwig=="undefined"){
                    translate();
            }
            
            $comp(window).bind("resize", function(evt){
            		mpMake();
            });
            	
            // récupération de l'id la page précédente
            bb_url = LireCookie("b_url");
            
            // enregistrement de la page actuelle
            SetCookie('b_url', i_d,false);
            
            // connexion/deconnexion
							if(CONEX_A){
								$comp("#conex_logo")
								.attr({onClick : 'window.location.replace("index.php?id=0");'})
								.find('img').attr({src:"../images/com/disconnect.png"});
								$comp("#conex_logo").after('<a onclick="chargerJS(ROOT_URL+\'js/outils/account.js\',\'onload_account();\')">'
									+'<img class="lien_img" src="../images/com/account.png"></a>');
							}
            // gestion de la barre de lecture
            $comp("#RightPane").mouseup(function(e){
                    if(typeof poule_instance=='undefined'){// non visible en position éditeur
                            if((e.which == 1) && (e.ctrlKey))
                            {
                                    Y = e.pageY-$comp("#bandeau").height()+$comp(this).scrollTop()-$comp("#pointer").height();
                                    $comp("#pointer").animate({top: Y},"normal");
                                    $comp("#pointerb").animate({top: Y},"normal");
                            }
                    }
            });
            
            // évenement keypress (déplacement de la barre de navigation)
            $comp(window).bind("keypress", function(evt){
                    if(typeof poule_instance=='undefined'){// non visible en position éditeur   
                        if( (evt.keyCode == 38 && evt.ctrlKey) || (evt.keyCode == 40 && evt.ctrlKey) ){
                            var t = document.getElementById("pointer").offsetTop;
                            if(evt.keyCode==40){
                                $comp("#pointer, #pointerb").css({top: t+7});
                            } else {
                                $comp("#pointer, #pointerb").css({top: t-7});
                                }
                        }
                    }
            });
            
            // evenement keyup (navigation,changement de page...)
            $comp(window).bind("keyup", function(evt){
            		
							if( (document.getElementById("opt_save_var")==undefined)
											&& ( (document.getElementById("bt_right")) || (document.getElementById("bt_left")) ) ){
										var sc = document.getElementById('RightPane').parentNode.scrollTop;
										var t = null;
										$comp('.btnav').each(function(){
												 if($comp(this).offset().top>sc){
													 t = $comp(this);
												 return false;
												 }
										 });
											if(evt.keyCode == 37 && !evt.ctrlKey){// before
															mvp(t,false,'up');
											} else if(evt.keyCode == 39 && !evt.ctrlKey){// after
															mvp(t,false,'down');
											} else if( (evt.keyCode == 39 && evt.ctrlKey) || (evt.keyCode == 37 && evt.ctrlKey) ){
															menu_s();
											 // basculement discussion / texte
											} else if( (evt.keyCode == 38 && evt.shiftKey) || (evt.keyCode == 40 && evt.shiftKey) ){
															if(document.getElementById("discut")){
																			if(pos_disc=="disc")
																							bascule_dicut();
																			else
																							show_disc(pdiscuss_actuel);
																					
																			var sel = window.getSelection();
																			sel.removeAllRanges();
															}
											} else if(evt.keyCode == 48 || evt.keyCode == 96){
															window.location.href = "index.php?id=4";
											}
								}
            });
            
            // closure session
            // on retire le bouton d'enregistrement du marque page
            if(CLOSURE_SESSION)
            	$comp("#pointerb").remove();
            
            // initialisation des pages et discusionns (découpage)
            cutPage();
            
            // si on vient d'une recherche on crée un surlignement
            if (typeof array_searc != "undefined") {
                    comp_engi=0;
                    for (var i=0; i<array_searc.length; i++) {
                            surlign(document.getElementById("milieucss"),array_searc[i],0,comp_engi);
                            comp_engi++;
                            if(comp_engi==5){
                                    comp_engi=0;
                            }
                    }
            }
            
            // on rend visibles quelques éléments
            var view = "#menugcss,#bandeau,#menugtop,#titre,#partie_head,#chapter_head,#milieucss,#bt_opt";
            $comp(view).css('visibility','visible');
            
            // enregistrement de la taille du splitter
            splitWidth = $comp("#split").width();
            
            // changement de largeur du menu (down)
            $comp("#split").mousedown(function(e){
                        slideP = true;
                        slideP_pos = e.pageX;
            });
            
            // changement de largeur du menu (move & up)
            $comp("body").mouseup(function(e){
                    if(slideP){
                        slideP = false;
                        SetCookie('menugcss_width', $comp("#LeftPane").width(),false);
                    }
            }).mousemove(function(e){
                    if(slideP){
                        var x = e.pageX;
                        
                        if(x<=slideP_pos){
                            var s = slideP_pos-x;
                            var LeftPaneWidth = $comp("#LeftPane").width()-s;
                        } else {
                            var s = x-slideP_pos;
                            var LeftPaneWidth = $comp("#LeftPane").width()+s;
                        }
                        if(LeftPaneWidth>silde_min){
                            _slideP(LeftPaneWidth);
                            slideP_pos = x;
                        }
                    }
            });
            
            // chargement de largeur du menu de gauche
            var menugcss_width = LireCookie("menugcss_width");
            
            if(menugcss_width==null)
            	menugcss_width=200;
            
            _slideP(menugcss_width*1);
            
            // cacher le panneau de gauche si nécessaire
            if(LireCookie('LeftPane')=='block')
                menu_s();
            
            // donner le focus sur la partie droite
            document.getElementById("RightPane").focus();
            document.getElementById("RightPane").blur();
            
            // tooltip
            $comp('.revcom').simpletooltip();
            
            // ellipsis
            $comp('.text_part,.text_part_click,.text_chap,.text_chap_click,.m_lien_cat,.m_lien_sscat').ellipsis(true);
            
            for (var key in APIJS){
            	if(typeof APIJS[key] == "function")
            		APIJS[key]();
            }

}

/** 
* changement de largeur du menu
*/
function _slideP(w){
	$comp("#LeftPane").width(w);
	$comp("#split").css("left",w);
	$comp("#RightPane").css("left",w+splitWidth);
	mpMake();
}

var ptpx = 20;

function mpMake(){
			
			$comp('.btnav').remove();
			if((i_d*1)>19){
			// connaitre la taille de la fenetre de lecture
 		 var sfl = $comp('#RightPane').height( )-(ptpx*2);
 		 
 		 // Connaitre la taille de la page
 		 if(document.getElementById('RightPane').scrollHeight>0)
 		 	 var sp = document.getElementById('RightPane').scrollHeight;
 		 else
 		 	 var sp = $comp('#RightPane').height( );
 		 
 		 // nombre de segments
 		 var s = Math.ceil(sp/sfl);
 		 
 		 // insertion du premier élément
 		 $comp('#RightPane').append('<span class="btnav btvt" id="fpm" style="top:15px;" onclick="mvp(this,true)"></span>');
 		 
 		 for (var i=1; i <= s-1; i++) {
 		 	 $comp('#RightPane').append('<span class="btnav btv" style="top:'+(ptpx+(sfl*i))+'px" onclick="mvp(this,true)"></span>');
 		 }
 		 
 		 // insertion du dernier élément
 		 $comp('#RightPane').append('<span class="btnav btvb" id="lpm" style="top:'+(sp-ptpx)+'px" onclick="mvp(this,true)"></span>');
 		  }
		}

function mvp(me,c,d){
 	 var sc = document.getElementById('RightPane').scrollTop;
 	 var t = $comp(me).css('top');
 	 t = (t.substr(0,t.length-2))*1;
 	 var wh = $comp('#RightPane').height( );
 	 var maj = Math.round(wh/2);
 	 var id = $comp(me).attr('id');
 	 var h = document.getElementById('RightPane').scrollHeight;
 	 var p = null;
 	 // première ou dernière
 	 if((h-sc-wh<=7 || id=='lpm') && d!='up')
 	 	 p = '.bt_right';
 	 
 	 if(id=="fpm" && d!='down')
   	 p = '.bt_left';
   
 	 if(p == null){
		 if(c){
			 if((t-sc)>=maj)
				 var x = $comp(me);
			 else
				 var x = $comp(me).prev('.btnav');
		 } else {
		 	 
			 if(d=='up'){
					 var x = $comp(me).prev('.btnav');
			 } else {
				 if((t-sc)>ptpx)
					 var x = $comp(me);
				 else
					 var x = $comp(me).next('.btnav');
			 }
		 }
		 var to = $comp(x).css('top');
		 to = ((to.substr(0,to.length-2))*1)-ptpx;;
		 
		 $comp('#RightPane').animate({scrollTop: to}, 1000);
   } else {
   	 // déplacement en chapitre, en page ou en discussion
   	 var chap = false;
   	 var _nbp = nbpage;
   	 var _pac = page_actuel;
		 if(pos_disc=="disc"){
			 _nbp = nbpdiscuss;
			 _pac = pdiscuss_actuel;
		 }
		 if(_nbp>1){
		 	 if(p=='.bt_right'){// avancer
		 	 	 if(_pac==_nbp)
		 	 	 	 chap = true;
		 	 	 else
		 	 	 	 var go_p = _pac+1;
		 	 } else {// reculer
		 	 	 if(_pac==1)
   	 	 	 	 chap = true;
   	 	 	 else
   	 	 	 	 var go_p = _pac-1;
		 	 }
		 } else {
		 	 chap = true;
		 }
		 
   	 
   	 if(chap){
			 var _goto = $comp(p).find('a').attr('href');
			 if(_goto!=undefined){
			 	 if(p=='.bt_left')
			 	 	 SetCookie('downc','y',true);
			 	 else
			 	 	 DeleteCookie('downc');
			   window.location.href = _goto;
			 }
		 } else {
			  if(pos_disc=="disc")
			  	show_disc(go_p);
			  else
			  	view_page(go_p,'y');
		 }
   }
 }

/** 
* chargement des scripts pour l'éditeur en ajax de champs
*/
function _ajax_editor(data){
		if(test_error(data)){
		tmp_data = data;
		Reg = /script id=\"java1\" type=\"text\/javascript\"\>([^¶]*)endscript/m;
		var tab = data.match(Reg);
		window.eval(tab[1]);
								chargerCSS(ROOT_URL+a_j['css_poule'],"");
								chargerCSS(ROOT_URL+a_j['css_outils'],"");
								chargerCSS(ROOT_URL+a_j['css_file'],"");
								
								chargerJS(ROOT_URL+"js/editor/lang/lang_"+lang_cour+".js","");
								chargerJS(ROOT_URL+"js/editor/lang/lang_"+lang_cour+"-m.js","");
								chargerJS(ROOT_URL+a_j['pile'],"");
								chargerJS(ROOT_URL+a_j['floatwin'],"");
								chargerJS(ROOT_URL+a_j['j_menu'],"");

								chargerJS(ROOT_URL+a_j['edit_objet'],"");
								chargerJS(ROOT_URL+a_j['j_combo_poule'],"");
								chargerJS(ROOT_URL+a_j['j_accordion'],"");
								chargerJS(ROOT_URL+a_j['j_selectboxes'],"");
								chargerJS(ROOT_URL+a_j['latexmathml'],"");
								chargerJS(ROOT_URL+a_j['file'],"");
								chargerJS(ROOT_URL+a_j['edit_poule'],"");
								chargerJS(ROOT_URL+a_j['edit_wiki'],"__ajax_editor()");
	 }
}

/** 
* éditeur en ajax de champs
*/
function ajax_editor(txt,type,ref_id,title){
	$comp.post("goto.php",
			{ charg: "editorc",editxt:txt,categ:type,ref_id:ref_id,contenu:title,id_wiki:i_d},
				function(data){
					_ajax_editor(data);
			}
	);
}

/** 
* éditeur en ajax
*/
function pl_edit(me){
	showwait('',true);
	
	$comp.post("goto.php",
			{ charg: "editor",
			groupe:$comp('#'+me).find("input[name='groupe']").val(),
			categ:$comp('#'+me).find("input[name='categ']").val(),
			id_wiki:$comp('#'+me).find("input[name='id_wiki']").val(),
			ref_id:i_d,
			filext:$comp('#'+me).find("input[name='filext']").val(),
			ref_ancre:$comp('#'+me).find("input[name='ref_ancre']").val()
			},
				function(data){
					_ajax_editor(data);
			}
	);
	
}

function pl_acces(categ,value,id){
				if(id=='')
						id = i_d;
				$comp.post("goto.php",
						{charg:"connex",categ:categ,ref_id:id,liste:value},
				function(data){
					
						if(test_error(data)){
							if(data.substr(0,3)=='id='){
									window.location.href = "reload.php?"+data;
							} else {
								$comp("#conex_author_bt").html(data);
								chargerJS(ROOT_URL+"js/outils/ajax_conex.js","onload_conex('"+categ+"','"+value+"','"+id+"');");
							}
						}
				});
}

function pl_ajoudim(chapter,name){
		window.location.href = "index.php?id="+chapter+"&name="+name+"&lang="+lang_cour;
}

function removejscssfile(filename, filetype){
 var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from
 var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()
 }
}



/** 
* insertion dans le DOM d'un nouveau fichier CSS
* @param (string file) adresse du fichier
*/
function chargerCSS(file){
		head = document.getElementsByTagName('head')[0];
		var css = document.createElement('link');
		css.setAttribute('rel','stylesheet');
		css.setAttribute('type','text/css');
		css.setAttribute('media','screen');
		css.setAttribute('href',file);
		head.appendChild(css);
}

/** 
* insertion dans le DOM d'un nouveau fichier SCRIPT
* @param (string file) adresse du fichier
* @param (string func) fonction à appeler après le chargement
*/
function chargerJS(file,func){
		head = document.getElementsByTagName('head')[0];
		var script = document.createElement('script');
		var not_present = true;
		// on test pour savoir si le javascript n'est pas déja chargé
		$comp('script').each(function(){
						if($comp(this).attr('src')==file){
								not_present=false;
						}
		});
		if(not_present){
				script.setAttribute('type','text/javascript');
				//script.setAttribute('type','text/javascript;version=1.8');
				script.setAttribute('src',file);
				if(typeof(func) != 'undefined'){
						script.onload = function () {
								eval(func);
						}
				}
				head.appendChild(script);
		} else {
				if(typeof(func) != 'undefined'){
						eval(func);
				}
		}
} 

// ------------------------------- OPTIONS / VAR -------------------------------

/** 
* lancement de l'interface pour la gestion des options / variables
* @param (string value) id du chapitre
* @param (string module) nom du module
*/
function opt(value,module){	
		$comp.post("goto.php",
			{ action:"demarage", charg:"optionsajorx", ref_id:value, module:module,lang:lang_cour},
				function(data){
						$comp('#bt_opt').remove(); 
						$comp('#milieucss').html(data);
				});
}

/** 
* sauvegarde pour les options / variables
*/
function opt_save(){
		chargerJS(ROOT_URL+"js/outils/options.js","save_options();");
}

// -----------------------------------------------------------------------------

/** 
* fonction de slide sur des éléments DIV du DOM
* @param (string value) nom de l'élément
*/
function slide(value){		
		var div = $comp('div[id=ref'+value+']');
		if(div.css('display') == 'none'){
				div.show("slow");
		} else {
				div.hide("slow");
		}
}

/**
* surligner les différents mots après une recherche 
* cette function est fortement inspiré par le travail 
* de http://www.jquery.info/spip.php?article49
*/
function surlign(el,find_txt,rep_index,nb_class) {
		regex = new RegExp("("+echap(find_txt)+")", 'g');
		for(var startIndex=0,endIndex=el.childNodes.length;startIndex<endIndex;startIndex++) {
				var item = el.childNodes[startIndex];
				if(item){
						if ( item.nodeType != 8 ) {
								if(item.nodeType==3) {
										var text = item.data;
										var newtext="",match,index=0;
										regex.lastIndex = 0;
										while( match = regex.exec(text) ) {
												repl_text = text.substr(match.index,match[0].length); 
												repl_text_tp = repl_text;
												
												if( (rep_index && rep_index==count_search) || (!rep_index) ){
														newtext += text.substr(index,match.index-index)+'<span class="recherc_xmlatex'+nb_class+'">'+repl_text+"</span>";
												} else {
														newtext += text.substr(index,match.index-index)+repl_text_tp+"";
												}
												index = match.index+match[0].length;
										}
										if(newtext) {
												newtext += text.substring(index);
												var repl = $comp.merge([],$comp("<span>"+newtext+"</span>")[0].childNodes);
												endIndex += repl.length-1;
												startIndex += repl.length-1;
												$comp(item).before(repl).remove();
										}
								} else {
										if(item.nodeType==1){
												surlign(item,find_txt,rep_index,nb_class);
										}
								}
						}
				}
		}
}

/** 
* affichage du panneau de navigation de gauche
*/
function menu_s(x){
		var d = $comp("#LeftPane").css('display');
        
		if(d!="none" || x=='none'){
				displayPane = $comp("#LeftPane").width();
                $comp("#LeftPane, #split").css('display','none');
                $comp("#RightPane").css("left",0);
                $comp("#menus_").attr('src','../images/com/msl.png');
		} else {
            $comp("#LeftPane, #split").css('display','block');
            _slideP(displayPane);
            $comp("#menus_").attr('src','../images/com/msr.png');
		}
		if(x==undefined)
				SetCookie('LeftPane', d,false);
    
		mpMake();
}

// ---------------------------------- cookies ----------------------------------

/** 
* récupère la valeur d'un cookie
* @param (string offset) 
* @return (string)
*/
function getCookieVal(offset){
		var endstr=document.cookie.indexOf (";", offset);
		if (endstr==-1) endstr=document.cookie.length;
		return unescape(document.cookie.substring(offset, endstr));
}

/** 
* récupère le contenu d'un cookie
* @param (string name) nom du cookie
* @return (string or null)
*/
function LireCookie(nom){
		var arg = nom+"=";
		var alen = arg.length;
		var clen = document.cookie.length;
		var i = 0;
		while (i<clen)
		{
				var j=i+alen;
				if (document.cookie.substring(i, j)==arg) return getCookieVal(j);
				i=document.cookie.indexOf(" ",i)+1;
				if (i==0) break;
		}
		return null;
}

/** 
* déposse un cookie
* @param (string name) nom du cookie
* @param (string value) valeur du cookie
* @param (boolean time) crée une date d'expiration
*/
function SetCookie(name,value,time){
		var _expire = '';
		if(time){
				var today = new Date(), expires = new Date();
				expires.setTime(today.getTime() + (365*24*60*60*1000));
				var _expire = "expires=" + expires.toGMTString();
		}
		document.cookie = name +"=" + value + ";"+ _expire ;
}

function DeleteCookie (name) {
	document.cookie=name+'="";expires=Thu, 01-Jan-70 00:00:01 GMT';
} 

// ------------------------------- Marque page ---------------------------------

/** 
* enregistre un marque-page
*/
function SaveMark(){
		var link = location.href.split('#');
		SetCookie('mark_w', window.innerWidth,true);
		SetCookie('mark_leftw', document.getElementById("LeftPane").offsetWidth,true);
		SetCookie('mark_leftd', document.getElementById("LeftPane").style.display,true);
		SetCookie('mark_link', link[0],true);
		SetCookie('mark_top', document.getElementById("pointer").offsetTop,true);
		SetCookie('mark_scrolltop', document.getElementById('RightPane').scrollTop,true);
		SetCookie('mark_page', page_actuel,true);
}

/** 
* recherche la présense d'un marque page et affiche le marque-page
*/
function GoMark()
{
		var link = LireCookie("mark_link");
		if(link!=null){
				var _link = location.href.split('#');
				if(_link[0]==link){
						_GoMark();
				} else {
						window.location.href = link+'#gomark';
				}
		}
}

/** 
* affiche le marque-page
*/
function _GoMark(){
		window.innerWidth = LireCookie("mark_w");
		var mark_leftd = LireCookie("mark_leftd");
    _slideP(mark_leftd);
		view_page(LireCookie("mark_page"));
		$comp('#RightPane').animate({scrollTop: LireCookie("mark_scrolltop")}, "fast");
		var top = LireCookie("mark_top");
		$comp("#pointer").animate({top: top},"slow");
		$comp("#pointerb").animate({top: top},"slow");		
		if(mark_leftd != $comp("#LeftPane").css('display'))
				menu_s();
}

// -----------------------------------------------------------------------------

/** 
* restituion d'une adresse email
* @param (DOM me) élement lien (<a>)
* @param (string f) fin du texte de l'email
* @param (string d) début du texte de l'email
*/
function rest(me,f,d) {
		var x = "@";
		var y = "mailto:";
		me.href = y+d+x+f;
}

/** 
* application du bon namespace pour les éléments MathML 
* Peter Jipsen http://www.chapman.edu/~jipsen GNU/GPL v2
* @param (DOM node) élément MathML
*/
function convertMath(node) {// for Gecko
		if (node.nodeType==1) {
				var newnode = 
				document.createElementNS("http://www.w3.org/1998/Math/MathML",
						node.nodeName.toLowerCase());
				for(var i=0; i < node.attributes.length; i++)
				try{
						newnode.setAttribute(node.attributes[i].nodeName,node.attributes[i].nodeValue);
				} 
				catch (error){}
				for (var i=0; i<node.childNodes.length; i++) {
						var st = node.childNodes[i].nodeValue;
						if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n") 
								newnode.appendChild(convertMath(node.childNodes[i]));
				}
				return newnode;
		}
		else return node;
}

/** 
* application du bon namespace pour les éléments SVG 
* @param (DOM node) élément SVG
*/
function convertsvg(node) {// for Gecko
		if (node.nodeType==1) {
				var newnode = 
				document.createElementNS("http://www.w3.org/2000/svg",
						node.nodeName.toLowerCase());
				for(var i=0; i < node.attributes.length; i++)
				newnode.setAttribute(node.attributes[i].nodeName,
						node.attributes[i].nodeValue);
				for (var i=0; i<node.childNodes.length; i++) {
						var st = node.childNodes[i].nodeValue;
						if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n") 
								newnode.appendChild(convertsvg(node.childNodes[i]));
				}
				return newnode;
		}
		else return node;
}

/** 
* conversion des éléments "math" et "svg" 
* pour leur affichage dans un fichier html 
* et affectation de l'événement (mouseup) aux paragraphes
*/
function convert() {
		var mmlnode = document.getElementsByTagName("math");
		for (var i=0; i<mmlnode.length; i++){
				if (document.createElementNS!=null)
						{mmlnode[i].parentNode.replaceChild(convertMath(mmlnode[i]),mmlnode[i]);}
		}
		var svgnode = document.getElementsByTagName("svg");
		for (var i=0; i<svgnode.length; i++){
				if (document.createElementNS!=null)
						{svgnode[i].parentNode.replaceChild(convertsvg(svgnode[i]),svgnode[i]);}
		}
    
		// closure session
    if(CLOSURE_SESSION){
    	Poulenote.elementDrop();
    } else {
        $comp(".p_xmlatex_noident,.p_xmlatex,.right_xmlatex,.left_xmlatex").bind("mouseup", function(e){
                    if( (e.which == 1) && (!e.ctrlKey) ){
                            var para = $comp(this).find('.num_xmlatex');
                            if(para.css('visibility') == 'visible'){
                                    para.css('visibility','hidden');
                            } else {
                                    para.css('visibility','visible');
                            }
                    }
        });
    }
}

/** 
* initialisation des pages et des dicussions
*/
function cutPage(){
		var infos = location.href.split('#');
		var lapage_ancre = "";
		var left = '';
		var lapage = 1;
		if(infos[1]){
				if(infos[1].substr(0,4)=="para")
						left = ' style="left:-15px"';
				if(infos[1]=="document"){
					lapage = page_actuel;
				} else if(infos[1]=="gomark"){
					lapage = 1;
					lapage_ancre = "gomark";
				} else {
					lapage_ancre = "page";
					lapage = $comp("#"+infos[1]).parents('.pagenumber').attr("name");
					if(lapage==undefined){
							lapage = $comp("#"+infos[1]).parents('.discusscom').attr("name");
							if(lapage==undefined){
									lapage = 1;
							} else {
									lapage_ancre = 'discuss';
							}
					}
			 }
		}
		
		// découpage des discussions
		if(document.getElementById("nbpdiscuss")){
				if(document.getElementById("discuss1")){
						for (i=0;i<nbpdiscuss;i++){
							var p = $comp("#discuss"+(i+1));
							pdiscuss[i+1] = p.html();
							p.remove();
						}
				}
        // enregistrement du cadre des discussions
				cache_disc = $comp("#discussions").html();
                $comp("#discussions").remove();
		}
		
		// découpage des pages
		for (i=0;i<nbpage;i++){
				var p = $comp("#page"+(i+1));
				page[i+1] = p.html();
				p.remove();
		}
		
		// enregistrement du cadre des pages
		cache_page = $comp("#document").html();
		$comp("#document").html('');
		
		pastPage(1,'page');
		
		var anchor = getQueryVariable('ancre');
		var pointer = '→&#160;';
        
		if(anchor == null){
			anchor = '';
		} else {
			anchor = '#'+anchor;
			if(bb_url!=null)
				pointer = '↔&#160;';
		}
		
		if(lapage_ancre == "page"){
				// ancre page
				view_page(lapage);
				window.location.href = '#'+infos[1];
				if(hc_file)
						$comp('#'+infos[1]).prepend('<a class="pointer_ancre"'+left+' href="chapitre-'+bb_url+'-'+lang_cour+'.html'+anchor+'">'+pointer+'</a>');
				 else
						$comp('#'+infos[1]).prepend('<a class="pointer_ancre"'+left+' href="index.php?id='+bb_url+'&lang='+lang_cour+anchor+'">'+pointer+'</a>');
				
				$comp('#'+infos[1]).css('visibility','visible');
				
		} else if(lapage_ancre == "discuss") {
				// ancre discussion
				show_disc(lapage);
				window.location.href = '#'+infos[1];
				if(hc_file)
						$comp('#'+infos[1]).prepend('<a class="pointer_ancre"'+left+' href="chapitre-'+bb_url+'-'+lang_cour+'.html'+anchor+'">'+pointer+'</a>');
				else
					 $comp('#'+infos[1]).prepend('<a class="pointer_ancre"'+left+' href="index.php?id='+bb_url+'&lang='+lang_cour+anchor+'">'+pointer+'</a>');
				
				$comp('#'+infos[1]).css('visibility','visible');
				
    } else if(lapage_ancre == "gomark") {
    		// marque page
				_GoMark();
		} else {
			if(LireCookie("downc")=='y'){// remonter au clavier
				if(nbpage>1)
						view_page(nbpage);
				}
		}
}

/** 
* colle la page 
* @param (integer n) numéro de la page
* @param (string type) type de page "page/discussion"
 */
function pastPage(n,type){
		if(CLOSURE_SESSION)
			var cpn = i_d;
    if(n==undefined)
        n=1;
    if(type=="page"){
    		if(CLOSURE_SESSION)
    			cpn += '0';
        $comp('#document').html(cache_page);
        $comp("#page").html(page[n]);
    } else {
    		if(CLOSURE_SESSION)
    			cpn += '1';
        // on colle le cadre de base des discussions 
        $comp('#document').html(cache_disc);
        $comp("#discusstt").html('<div id="page">'+pdiscuss[n]+'</div>');
    }
     // closure session
     if(CLOSURE_SESSION){
     	 closureInit(cpn+n,n);
     } else {
     	 // conversion svg et mathml
     	 convert();
     }
}

/** 
 * Retourne la valeur d'un paramètre de la query string 
 * @param  string Le nom du paramètre 
 * @return string La valeur du paramètre 
 */ 
function getQueryVariable(variable){
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i = 0; i < vars.length; i++) {
      var pair = vars[i].split("=");
      if (pair[0] == variable) {
        return pair[1]; 
      }
  }
  return null;
}

/** 
* affichage d'une page texte selon son numéro
* @param (string go_p) numéro de la page
*/
function view_page(go_p,c){
	if(nbpage>1){
			go_p = go_p*1;
			if(go_p <= nbpage){
					if(nbpage > 1){
						// closure session
						if(CLOSURE_SESSION)
							closureSavePage();
						
						pastPage(go_p,'page');
						compt_page(go_p);
						if(c=='y' || LireCookie('downc')=='y'){
							if(go_p>page_actuel){
								if(LireCookie('downc')=='y'){
									DeleteCookie('downc');
									$comp('#RightPane').animate({scrollTop: document.getElementById('RightPane').scrollHeight}, 0);
								} else {
									$comp('#RightPane').animate({scrollTop: 0}, 0);
								}
							} else {
								$comp('#RightPane').animate({scrollTop: document.getElementById('RightPane').scrollHeight}, 0);
							}
						}
						page_actuel = go_p;
					} else {
						// closure session
						if(CLOSURE_SESSION)
							closureSavePage();
						
						pastPage(1,'page');
						$comp('#RightPane').animate({scrollTop: 0}, 0);
					}
					mpMake();
			}
	}
}

/** 
* affichage des numéros des pages
*/
function compt_page(x){
    $comp('#compt_page_haut > .bt_page_act, #compt_page_bas  > .bt_page_act').attr('class','bt_page');
    $comp('#bt_page_haut'+x+', #bt_page_bas'+x).attr('class','bt_page_act');
}


/** 
* affichage d'une page de discussion selon son numéro
* @param (string pg) numéro de la page
*/
function show_disc(pg){
    // on change la navigation
    if(document.getElementById("nbpdiscuss")){
        
        // au cas ou il n'y a pas de encore de discussion sur cette page
        if(pdiscuss[pg]==undefined)
                    pdiscuss[pg] = "";
        
        if(pg <= nbpdiscuss){
            if(pdiscuss[pg]==undefined)
                    pdiscuss[pg] = "";
            
            // on colle la page
            pastPage(pg,'discus');
            
            // on bascule si on est en mode texte
            if(pos_disc=="txt"){
                bascule_dicut(false);
            }
            compt_disc(pg);
            pdiscuss_actuel = pg;
        }
    } else {
        // on bascule si on est en mode texte
        if(pos_disc=="txt")
            bascule_dicut(true);
    }
    
    window.location.href = "#chapter_head";
}

/** 
* affichage des numéros des discussions
*/
function compt_disc(x){
    $comp('#discussions > .bt_page_act').attr('class','bt_page');
    $comp('#bt_disc_haut'+x+', #bt_disc_bas'+x).attr('class','bt_page_act');
}

/** 
* bascule entre le texte et les discutions
*/
function bascule_dicut(put){
		// closure session
		if(CLOSURE_SESSION){
			if(put)
        closureSavePage();
    }
    
    if(pos_disc=="txt"){
        // on enregistre l'espace actuel
        pos_disc="disc";
        
        // au cas ou il n'y a pas de encore de discussion sur cette page
        if(pdiscuss[page_actuel]==undefined)
                    pdiscuss[page_actuel] = "";
        
        // on colle la discussion selon son numéro de page
        if(put)
            pastPage(pdiscuss_actuel,'discus');
        
        // on reconstruit la navigation
        bar_disc = $comp('#discut').html();
        letexte = $comp('#discut').attr("name");
        
        if($comp('#compt_page_bas').html()==null)
                bas = "<input class='bouton' value='"+letexte+"' type='submit' onclick='bascule_dicut(true);'/>";
        else
                bas = $comp('#compt_page_bas').html();
        
        $comp('#discut').html(bas);
        $comp('#discut_logo').attr("src","../images/com/txt.png");
        $comp('#discut_logo').parent().attr("onClick","bascule_dicut(true)");
    } else {
        // on enregistre l'espace actuel
        pos_disc="txt";
        
        // on passe sur le texte
        // on colle le texte selon la page
        pastPage(page_actuel,'page');
        
        // on reconstruit la navigation
        $comp('#discut').html(bar_disc);
        $comp('#discut_logo').attr("src","../images/com/bul.png");
        $comp('#discut_logo').parent().attr("onClick","show_disc(pdiscuss_actuel)");
        
        // on met les compteurs de page comme il faut
        compt_page(page_actuel);
    }
}

// -----------------------------------------------------------------------------

/** 
* cache le message d'attente
*/
function cachewait(){
		document.getElementById('pleaseWait').style.display='none';	
		document.getElementById('pleaseWait_bt').style.display='none';	
		if(document.getElementById('backmessage'))
				$comp("#backmessage").remove();
}

/** 
* affiche le message d'attente
* @param (string txt) texte à afficher
* @param (boolean temp) affiche une horloge pour patienter
*/
function showwait(txt,temp){
		if(temp){
				txt='<img style="vertical-align:middle;" border="0" src="'+ROOT_URL+'images/com/history.gif" />&#160;&#160;'+txt;
				document.getElementById('pleaseWait_bt').style.display='none';
		}
		$comp('#pleaseWait_txt').html(txt);
		$comp('#pleaseWait').css({visibility:'hidden',display:'block'});
		if(error_p)
			$comp('#pleaseWait').css('width','600px');
		else
			$comp('#pleaseWait').css('width','300px');
		LeftPosition = Math.round((window.innerWidth-document.getElementById('pleaseWait').offsetWidth)/2);
		TopPosition = Math.round((window.innerHeight-document.getElementById('pleaseWait').offsetHeight)/2);
		$comp("#pleaseWait").css({ left:LeftPosition+'px', top:TopPosition+'px',visibility:'visible'});
}

/** 
* test un message de retour ajax 
* @param (string txt) texte à tester
*/
function test_error(txt){
		document.getElementById('pleaseWait_bt').style.display='none';
		error_p = false;
		txt = $comp.trim(txt);
		var _in = txt.substr(0,3);
		switch (_in) {
		 case '###' : // message d'erreur
		 case '<br' :
				if(document.getElementById('pleaseWait').style.display=='block'){
						cachewait();
				}
				error_p = true;
				$comp("#baspage").after("<div id='backmessage'></div>");
				$comp("#pleaseWait_bt").css({display:'block'});
				if(_in=='<br')
					showwait(txt.substr(6,txt.length),false);
				else
					showwait(txt.substr(3,txt.length),false);
				return false;
		break;
		case '§§§' : // redirection 
				window.location.href = txt.substr(3,txt.length);
		break;
		case '£££' : // recharger la page 
				window.location.reload();
		break;
		case '???' : // question
				x = window.confirm(txt.substr(3,txt.length));
				if(x =="1")
						return 2;
				else
						return 3;
		break;
		default:
				return true;
		break;
		}
		return false;
}

/** 
* affiche le message d'attente et le cache après un délai
* @param (string txt) texte à afficher
*/
function showresult_txt(txt){
		document.getElementById("pleaseWait_txt").innerHTML = txt;
		setTimeout("cachewait();",1500);
}

/** 
* méthode pour échaper différents caractères : / ] [ ) [
* @param (string q) texte à échapper
*/
function echap(q) {
		regex = [
		[/[\/]/ig,'\\/'],
		[/[\[]/ig,'\\['],
		[/[\]]/ig,'\\]'],
		[/[\(]/ig,'\\('],
		[/[\)]/ig,'\\)']];
				for(var i=0,l=regex.length;i<l;i++)
						q = q.replace(regex[i][0],regex[i][1]);
				return q;
};