/*
 * ENCODING UTF-8
 */
/*******************************************************************************
	Valider le panier
	Les paramètres :
		qid = qid de la requête
		xsp = page xsp courante
		nbPg = nbre de résultats dans la page
		nbR = nbre de résultats total
*******************************************************************************/
function validePanier(qid,xsp,nbPg,nbR){
	//alert("dans validePanier avec qid="+qid+" xsp="+xsp+" lp="+lp+" nbPg="+nbPg+" nbR="+nbR+" nbNP="+nbNP);

	/* Ancien code utilisant les <input> */
  //var methodes = document.getElementsByName("selectNotices");
	//var method = "";
  //for(var i=0; i < methodes.length; i++){
	//	if(methodes[i].checked==true) method = methodes[i].value;
  //}
	var methodes = document.getElementById("sn_select");
	var method = methodes.options[methodes.selectedIndex].value;

	//alert("method="+method);

	/* Nouveau code utilisant le <select> */
  //alert("method="+method);
	//on veut ajouter les notices sélectionnées
  if(method == 'selected'){
		if(xsp=='search'){
			var c = 0;
			for(var j=0; j < document.getElementsByName("ids").length; j++){
				if(document.getElementsByName("ids")[j].checked==true) c++;
			}
			if( (c + nbNP) > lp ) limitePanier(c, nbNP, lp);
			else selectedToPanier(qid,xsp,method);
		}
		else if(xsp=='panier') unSelectedToPanier(qid,xsp,method);
	}
	//on veut ajouter les notices de la page courante
  else if(method == 'page'){
		if(xsp=='search'){
			if( (nbPg + nbNP) > lp ) limitePanier(nbPg);
			else pageToPanier(qid, xsp, method);
		}
		else if(xsp=='panier') unSelectedToPanier(qid,xsp,method);
	}
	//on veut ajouter toutes les notices du résultat de recherche
  else if(method == 'toutes'){
		if(xsp=='search'){
			if( (nbR + nbNP) > lp ) limitePanier(nbR);
			else urlToPanier(qid,'&ids=all',xsp,method);
		}
		else if(xsp=='panier') urlToPanier(qid,'&dids=all',xsp,method);
	}
	//on veut ajouter les notices comprises dans un intervalle
  else if(method == 'numeric'){
		var debut = document.getElementById("sn_debut").value;
		var fin = document.getElementById("sn_fin").value;
		if(debut==null || debut=="") alert("Vous devez donner un rang de départ pour la sélection des notices numérotées !");
		else if(fin==null || fin=="") alert("Vous devez donner un rang de fin pour la sélection des notices numérotées !");
		else{
			selectAllNums('ids',debut,fin,xsp);
			if(xsp=='search'){
				if( ((fin - debut) + nbP) > lp ) limitePanier(fin-debut);
				else urlToPanier(qid,'&idDebut='+debut+'&idFin='+fin,xsp,method);
			}
			else if(xsp=='panier') urlToPanier(qid,'&didDebut='+debut+'&didFin='+fin,xsp,method);
		}
  }

}

/*******************************************************************************
	Afficher une alerte lorsqu'on tente de dépasser la limite du panier
*******************************************************************************/
function limitePanier(nb2add){
	var message = "Impossible d'ajouter "+nb2add+" notice";
	if(nb2add > 1) message = message+"s";
	message = message + " à votre panier qui contient déjà "+nbNP+" notice";
	if(nbNP > 1) message = message+"s";
	message = message+". Capacité maximale du panier: "+lp+" notice";
	if(lp > 1) message = message+"s";
	message = message+".";
	alert(message);
	return false;
}

/*******************************************************************************
	Sélectionner tous les éléments @name=name
*******************************************************************************/
function selectAll(name,xsp){
	//alert("dans selectAll avec name="+name+" et xsp="+xsp);
  var nIds = document.getElementsByName(name);
  for(var i=0; i < nIds.length; i++){
		//pour le panier, on désélectionne
		if(xsp=='panier')
			if(nIds[i].checked == true) nIds[i].click();
		//pour les autres, on sélectionne
		if(xsp==null || xsp=='search')
			if(nIds[i].checked == false) nIds[i].click();
  }
}

/*******************************************************************************
	Click tous les éléments @name=name et debut <=ids <= fin
*******************************************************************************/
function selectAllNums(name,debut,fin,xsp){
	//alert("dans selectAllNums avec name="+name+" debut="+debut+" fin="+fin);
  var nIds = document.getElementsByName(name);
	if(debut!=null && debut!="" && fin !=null && fin!=""){
		for(var i = (debut - 1); i<= (fin - 1) && i < nIds.length; i++){
			//Pour le panier, on désélectionne
			if(xsp=='panier' && nIds[i].checked == true) nIds[i].click();
			//Pour un résultat de recherche, on sélectionne
			else if(nIds[i].checked == false) nIds[i].click();
		}
	}
}

/*******************************************************************************
	Créer la liste des notices de la page courante pour les mettre dans le panier
*******************************************************************************/
function pageToPanier(qid, xsp, method){
	//alert("dans pageToPanier avec qid="+qid+" xsp="+xsp+" method="+method);
	var liste = "";
	if(document.getElementsByName) {
	 var i = 0;
	 while ( i != document.getElementsByName("ids").length ){
		if(document.getElementsByName("ids")[i]!=null){
			var id = document.getElementsByName("ids")[i].value;
			if( id != '' ) liste = liste+'&ids='+id;
			i = i+1;
		}
	 }
	 //alert("i="+i);
	 // On envoie le qid et la liste des notices sélectionnées dans la fonction de construction de l'URL
	 urlToPanier(qid, liste, xsp, method);
	}
}

/*******************************************************************************
	Les notices sélectionnées vont dans le panier
*******************************************************************************/
function selectedToPanier(qid,xsp,method){
	//alert("dans selectedToPanier avec qid="+qid+" xsp="+xsp+" method="+method);
	var liste = "";
	if(document.getElementsByName) {
	 var i = 0;
	 while ( i != document.getElementsByName("ids").length ) {
		 var check = document.getElementsByName("ids")[i].checked;
		 if (check == true) {
			 var id = document.getElementsByName("ids")[i].value;
			 liste = liste+'&ids='+id;
		 }
		 i = i+1;
	 }
	 //alert("i="+i);
	 // On envoie le qid et la liste des notices sélectionnées dans la fonction de construction de l'URL
	 urlToPanier(qid,liste,xsp,method);
	}
}


/*******************************************************************************
	Les notices non sélectionnées sont supprimées
*******************************************************************************/
function unSelectedToPanier(qid,xsp){
 var liste = "";
 if(document.getElementsByName) {
   var i = 0;
   while ( i != document.getElementsByName("ids").length ) {
     var check = document.getElementsByName("ids")[i].checked;
     if (check == false) {
       var id = document.getElementsByName("ids")[i].value;
			 //alert("suppr "+id);
       liste = liste+'&dids='+id;
     }
     i = i+1;
   }
	 // On envoie le qid et la liste des notices sélectionnées dans la fonction de construction de l'URL
   urlToPanier(qid,liste,xsp);
 }
}

/*******************************************************************************
	Construit l'URL de validation du panier
*******************************************************************************/
function urlToPanier(qid, liste, xsp, method){
	//alert("dans urlToPanier avec qid="+qid+", liste="+liste+", xsp="+xsp+" et method="+method)
	var currentHref = window.location.pathname+'?';
	var qidInHref = 'false';
	// On filtre les paramètres de requête
	if(window.location.search!=''){
		var q = window.location.search.substr(1,window.location.search.length).split('&');
		for(var j=0; j < q.length; j++){
			if(q[j]!="" && q[j].indexOf('query')==-1 && q[j].indexOf('champ')==-1 && q[j].indexOf('from=')==-1 && q[j].indexOf('to=')==-1 && q[j].indexOf('sdxmoddate=')==-1 && q[j].indexOf('typedoc=')==-1 && q[j].indexOf('ids=')==-1 && q[j].indexOf('dids=')==-1 && q[j].indexOf('inclus=')==-1 && q[j].indexOf('supprime=')==-1 && q[j].indexOf('sauvegarde=')==-1 && q[j].indexOf('idDebut=')==-1 && q[j].indexOf('idFin=')==-1){
				if(q[j].indexOf('qid=')>-1) qidInHref='true';
				if(xsp=='panier' && q[j].indexOf('qid') > -1){
					//alert("intercepte le qid pour le panier");
					//On intercepte le qid pour le panier
				}
				else {
					//alert("laisse passer le paramètre ["+j+"] = "+q[j]);
					if(j==0) currentHref = currentHref+q[j];
					else currentHref = currentHref+'&'+q[j]
				}
		 }
		}
	}
	// On ajoute le qid de la requête passé en paramètre s'il n'est pas déjà dans l'URL
	if(qidInHref=='false' && qid!='' && xsp!='panier') currentHref = currentHref+'&qid='+qid;
	// On ajoute la liste des documents à mettre dans le panier
	if(liste!='') currentHref = currentHref+liste;
	//alert("currentHref="+currentHref);
	//alert("method="+method);
	if(method!=null && method!="") currentHref = currentHref+"&method="+method;
	//alert("currentHref="+currentHref);
	// On active la nouvelle URL
	window.location.href=currentHref;
	// Reset variables globales
	liste = q = "";
}

/*******************************************************************************
	On règle le paramètre caché déterminant le type de recherche effectuée :
	avancée (s=2) ou experte (s=3) ou combinee (s=4)
*******************************************************************************/
function verifieSearchType(){
	//On cherche si une popup d'index est ouverte
	if(indexWin != null){
		//DEBUG console.log('fenetre ouverte: '+indexWin.name);
		//DEBUG console.log('il faut fermer la fenetre, il fait froid. (fenetre ouverte: '+indexWin.name+')');
		indexWin.close(); //on ferme la popup
		indexWin = null; //on reinitialise, il n'y a plus de fenetre ouverte
	}

	var q_exp = document.getElementById('query_00');
	var q_comb = document.getElementById('query_s');
	var st = document.getElementById('searchtype');
	if ( st != null ) {
		if ( q_exp != null && q_exp.value != null) st.value = '3';
		else if( q_comb != null && q_comb.value != null) st.value = '4';
		else st.value = '2';
	}
}

/*******************************************************************************
	On décoche tous les critères de choix de type de document si on choisit tous les types
*******************************************************************************/
function uncheckall(name){

	var els;	// Le groupe d'élément sur lequel on va travailler

	// Sélectionne le groupe d'éléments sur lequel on va travailler
	if(name=='typedoc') els = document.search.typedoc;
	else if(name=='base') els = document.search.base;
	else if(name!='') els = document.getElementsByName(name);

	// Boucle sur chaque élément du groupe. S'il est coché, on clique dessus.
	for ( var i = 1; i < els.length; i++ ) {
		if (els[i].checked == true) {
			els[i].click();
		}
	}

}

/*******************************************************************************
	On décoche le critère de tous les types de document ou toutes les sources OAI
*******************************************************************************/
function uncheck(name){

	var el; // L'élément qu'on va travailler

	// Sélectionne l'élément sur lequel on va travailler suivant le paramètre 'name' reçu
	if(name=='typedoc') el = document.search.typedoc[0];
	else if(name=='base') el = document.search.base[0];
	else if(name!='') el = document.getElementsByName(name)[0];

	// Si l'élément n'est pas null et qu'il est coché, on clique dessus.
	if(el!=null && el.checked==true) el.click();

}
/*******************************************************************************
 On coche le critère correspondant à tous les types de documents ou toutes les
 sources OAI si on a décoché tous les types particuliers
*******************************************************************************/
function checkall(name){

	var els;		// La liste d'éléments dans laquelle on va travailler
	var nb = 0;	// Marqueur du nombre d'éléments cochés

	// Sélectionne le groupe d'éléments dans lequel on va travailler
	if(name=='typedoc') els = document.search.typedoc;
	else if(name=='base') els = document.search.base;
	else if(name!='') els = document.getElementsByName(name);

	if(els!=null && els.length > 0){

		// Boucle sur les éléments pour compter ceux qui sont cochés
		for(var i=1; i < els.length; i++){
			if(els[i].checked==true) nb++;
		}

		// Si on n'a plus d'éléments cochés, on coche le premier qui correspond à sélectionner tous les types
		if(nb <= 0){
			if(els[0]!=null && els[0].checked==false) els[0].checked=true;
		}

	}

}

/*******************************************************************************
	On met les éléments sélectionnés pour le panier
*******************************************************************************/
function rechargePanier(){
  var liste = "";
  if(document.getElementsByName) {
    var i = 0;
    while ( i != document.getElementsByName("ids").length ) {
      var check = document.getElementsByName("ids")[i].checked;
      if (check == true) {
        var id = document.getElementsByName("ids")[i].value;
        liste = liste+"&dids="+id;
      }
      i = i+1;
    }
    var currentHref = window.location.href;
    if(currentHref.indexOf("&dids=") > 0)
     currentHref = currentHref.substr(0,currentHref.indexOf("&dids="));
    if(currentHref.indexOf("sauvegarde=oui") > 0)
	    currentHref = currentHref.substr(0,currentHref.indexOf("sauvegarde=oui"));
     if(currentHref.indexOf("supprime=oui") > 0)
	    currentHref = currentHref.substr(0,currentHref.indexOf("supprime=oui"));
      if(currentHref.indexOf("inclus=oui") > 0)
	    currentHref = currentHref.substr(0,currentHref.indexOf("inclus=oui"));
    if(currentHref.lastIndexOf("?") < 0)
     currentHref = currentHref+'?';
    window.location.href=currentHref+liste;
    i = 0;
    liste = "";
  }
}

/*******************************************************************************
	Ajoute des paramètres dans le formulaire après validation
*******************************************************************************/
function ajouteParams(form){

  // Pour inclure les documents si on choisi la vue complète pour les résultats de recherche
	if(form.vue!=null)
			if(form.vue.options[form.vue.selectedIndex].value=='complet')
					form.docs.value='true';

	// Pour régler l'odre de tri des dates
	if(form.sf!=null){
		if(form.sf.options[form.sf.selectedIndex].id=='date_asc')
				form.so.value='asc';
		if(form.sf.options[form.sf.selectedIndex].id=='date_desc')
				form.so.value='desc';
	}

}

/*******************************************************************************
	Construit l'URL qui convient pour l'export de documents
*******************************************************************************/
function urlExport(format,formatTxt,type,qid,bases,nb,xsp){

	//alert("dans urlExport avec format="+format+" formatTxt="+formatTxt+" type="+type+" qid="+qid+" bases="+bases+" nb="+nb+" xsp="+xsp);

	var listDocs = "";

	if(document.getElementsByName) {

		var i = 0;
		var c = 0;

		// On tente de récupérer la liste des publications sélectionnées
		while ( i != document.getElementsByName("ids").length ) {
		 if (document.getElementsByName("ids")[i].checked == true) {
			 listDocs = listDocs+'&id='+document.getElementsByName("ids")[i].value;
			 c++;
		 }
		 i = i+1;
		}

	}

	var listBases = "";

	if(bases!=null && bases!=""){

		if(bases.indexOf(" ") > -1){

			var l = bases.split(" ");
			for(var k=0; k < l.length; k++){
				if(l[k]!="") listBases = listBases + "&base=" + l[k];
			}

		}

		else listBases = "&base="+bases;

	}

	// Les options de la fenetre contenant l'export
	var winOptions = "width=450, height=300, location=no, menubar=no, toolbar=no, resizable=yes, scrollbars=yes, status=yes";
	if(format=="biblio") winOptions = "width=700, height=450, location=no, menubar=no, toolbar=no, resizable=yes, scrollbars=yes, status=yes";
	else if( format=="save" ) winOptions = "width=500, height=300, location=no, menubar=no, toolbar=no, resizable=yes, scrollbars=yes, status=yes";

	//Pour les formats XML et PDF, on ouvre une nouvelle fenêtre
	if(format=="save" || format=="export" || format=="biblio"){

		//Cas particulier pour le panier où les notices sont sélectionnées par défaut ; si elles sont toutes sélectionnées, on n'a pas besoin de travailler avec la liste
		if(xsp=="panier"){
			var eWin = window.open("params.xsp?fonction="+format+"&type="+type+"&nb="+nb,"_blank", winOptions);
			eWin.focus();
		}
		//S'il y a une liste de documents, on l'utilise
		else if(c > 0){
			window.open("params.xsp?fonction="+format+listDocs+listBases+"&type="+type+"&nb="+nb,'_new');
		}
		//Sinon, on envoie le résultat complet de la requête
		else if(c <= 0 && qid!=""){
			window.open("params.xsp?fonction="+format+"&qid="+qid+listBases+"&type="+type+"&nb="+nb,'_new');
		}

	}

	// Formats XML et PDF
	else if(format=='xml' || format=='pdf'){
		//S'il y a une liste de documents, on l'utilise
		if(c > 0){
			window.open("export."+format+"?"+listDocs+listBases+"&type="+type+"&nb="+nb,'_new');
		}
		//Sinon, on envoie le résultat complet de la requête
		if(c <= 0 && qid!=""){
			window.open("export."+format+"?qid="+qid+listBases+"&type="+type+"&nb="+nb,'_new');
		}
	}

	//Exports CSV, TSV et Excel
	else if( type=='csv' || type=='tsv' || type=='excel' ){
		if(c > 0){
			window.location.href="export_"+type+"."+format+"?"+listDocs+listBases+"&type="+type+"&nb="+nb;
		}
		if(c <= 0 && qid!=""){
			window.location.href="export_"+type+"."+format+"?qid="+qid+listBases+"&nb="+nb;
		}
	}

	// Autres exports
	else{
		//S'il y a une liste de documents, on l'utilise
		if(c > 0){
			window.location.href="export."+format+"?"+listDocs+listBases+"&type="+type+"&nb="+nb;
		}
		//Sinon, on envoie le résultat complet de la requête
		if(c <= 0 && qid!=""){
			window.location.href="export."+format+"?qid="+qid+listBases+"&type="+type+"&nb="+nb;
		}
	}

	// Nullification
	i = c = 0;
	listDocs = format = qid = bases = "";

}

function urlDuplicate(noticeid, path, base, datatype){
	var winOptions = "width=450, height=300, location=no, menubar=no, toolbar=no, resizable=yes, scrollbars=yes, status=yes";
	var eWin = window.open("dupliquer.xsp?noticeid=" + noticeid + "&path=" + path + "&base=" + base + '&datatype=' + datatype,"_blank", winOptions);
	eWin.focus();
}

/***********************************************************************************
	Construit la popup qui convient pour paramétrer l'éclatement bibliometrique
************************************************************************************/
function urlBibliometrie(href,qid,nb){
	//alert("dans urlBibliometrie avec :\href=" + href + "\nqid="+ qid + "\nnb=" + nb);
	var c = 0;
	var listDocs = "";
/*	if(document.getElementsByName) {
		var i = 0;
		//On tente de récupérer la liste des publications sélectionnées
		while ( i != document.getElementsByName("ids").length ) {
			if (document.getElementsByName("ids")[i].checked == true) {
				listDocs = listDocs+'&id='+document.getElementsByName("ids")[i].value;
				c++;
			}
			i = i+1;
		}
	}*/
	// alert("listDocs="+listDocs);

	//Cas particulier pour la panier parce que les notices sont sélectionnées par défaut : si elles sont toutes sélectionnées, on n'utilise pas la liste
	/*if( c == document.getElementsByName("ids").length) c = 0;*/

	/*//S'il y a une liste de documents, on l'utilise
	if(c > 0){
		// alert("il y a une liste de documents, on l'utilise, c = " + c);
		window.open(href+"&nb="+nb+"&eq=1&bqid="+qid+listDocs,"_new","width=550, height=200, location=no, menubar=no, toolbar=no, resizable=yes, status=yes");
	}*/
	//Sinon, on envoie le résultat complet de la requête
	if(c <= 0 && qid!=""){
		// alert("on envoie le résultat complet de la requête, c = " + c  + "qid = " + qid);
		window.open(href+"&nb="+nb+"&eq=1&qid="+qid,"_new","width=550, height=200, location=no, menubar=no, toolbar=no, resizable=yes, status=yes");
	}
	// Nullification
	i = c = 0;
	listDocs = qid = "";

}

/*******************************************************************************
						Ouvre la fenetre de l'eclatement bibliometrique
*******************************************************************************/
function passBibliometrieParams(){
	var element=document.getElementById('elements').options[document.getElementById('elements').options.selectedIndex].value;
	var searchParams="";
	if(window.location.search!=''){
		var q = window.location.search.substr(1,window.location.search.length).split('&');
		for(var j=0; j < q.length; j++){
			if(q[j].indexOf('fonction')==-1 && q[j].indexOf('eq')==-1 && q[j].indexOf('vue')==-1 && q[j].indexOf('docs')==-1){
				if(searchParams=="") searchParams = q[j];
				else searchParams = searchParams+'&'+q[j]
		 }
		}
	}
	/*var href='export-bibliometrie-' + element + '.xls?'+searchParams;*/
	var href='export-bibliometrie2-' + element + '.xls?'+searchParams;
	// les variables nbNotices et tn sont définies dans params.xsl
	if( nbNotices > -1 ){
		// L'avertissement suivant le nombre de notices a exporter
		var avert = avertissementExport(tn, nbNotices);
		if(avert!=null){
			alert(avert);
		}
	}
	window.open(href,"passBibliometrieParams" ,"location=yes, menubar=yes, toolbar=yes, resizable=yes, scrollbars=yes");
	window.close();
}


/*******************************************************************************
	Construit la popup qui convient pour paramétrer l'impression
*******************************************************************************/
function urlImpr(href,qid,nb,xsp){

	//alert("dans urlImpr avec href="+href+" qid="+qid+" nb="+nb+" xsp="+xsp);

	var listDocs = "";

	if(document.getElementsByName) {

		var i = 0;
		var c = 0;

		//On tente de récupérer la liste des publications sélectionnées
		while ( i != document.getElementsByName("ids").length ) {

			if (document.getElementsByName("ids")[i].checked == true) {
				listDocs = listDocs+'&docid='+document.getElementsByName("ids")[i].value;
				c++;
			}

			i = i+1;

		}

	}
		/* On va créer un texte pour prévenir de l'export */
	/* var texte = "Imprimer";
	if(xsp=="panier"){
		  texte = texte + " " + nb;
		  if(nb > 1) texte = texte + " notices ?";
		  else texte = texte + " notice ?";
	}
	else if(c > 0){
		  texte = texte + " " + c;
		  if(c > 1) texte = texte + " notices ?";
		  else texte = texte + " notice ?";
	}
	else if(qid!=""){
		texte = texte + " " + c;
		if(nb > 1) texte = texte + " notices ?";
		else texte = texte + " notice ?";
	} */

	//Cas particulier pour la panier parce que les notices sont sélectionnées par défaut : si elles sont toutes sélectionnées, on n'utilise pas la liste
	if(xsp=="panier" && c == document.getElementsByName("ids").length) c = 0;

	//S'il y a une liste de documents, on l'utilise
	if(c > 0){
		/* if(confirm(texte))  */window.open(href+"&nb="+nb+"&eq=1&bqid="+qid+listDocs,"_new","width=450, height=250, location=no, menubar=no, toolbar=no, resizable=yes, status=yes");
	}

	//Sinon, on envoie le résultat complet de la requête
	if(c <= 0 && qid!=""){
		/* if(confirm(texte))  */window.open(href+"&nb="+nb+"&eq=1&qid="+qid,"_new","width=450, height=250, location=no, menubar=no, toolbar=no, resizable=yes, status=yes");
	}

	// Nullification
	i = c = 0;
	listDocs = qid = "";

}

/*******************************************************************************
	Ouvre la popup prête à l'impression avec les bons paramètres
*******************************************************************************/
function passImprParams(xsp){

	if(xsp==null || xsp=="") xsp = "search";

	var myVue=document.getElementById('vues').options[document.getElementById('vues').options.selectedIndex].value;

	var searchParams="";

	if(window.location.search!=''){
		var q = window.location.search.substr(1,window.location.search.length).split('&');
		for(var j=0; j < q.length; j++){
			if(q[j].indexOf('fonction')==-1 && q[j].indexOf('eq')==-1 && q[j].indexOf('vue')==-1 && q[j].indexOf('docs')==-1){
				if(searchParams=="") searchParams = q[j];
				else searchParams = searchParams+'&'+q[j]
		 }
		}
	}

	var href=xsp+'.impr?'+searchParams+'&vue='+myVue;

	if(myVue=='complet'){

		// On a demande une impression de la vue complete

		if(nbNotices > -1){
			var m = avertissementExport(tn, nbNotices);
			if(m!=null && m!=""){
				alert(m);
			}
		}

		href=href+'&docs=true';

	}

	// DEBUG alert("href="+href);

	window.open(href,"passImprParams" ,"location=no, menubar=no, toolbar=no, resizable=yes, scrollbars=yes");
}

/*******************************************************************************
	Pour passer les paramètres d'enregistrement
*******************************************************************************/
function passSaveParams(){

	var win=window.top.opener;

	var myType=document.getElementById('type').options[document.getElementById('type').options.selectedIndex].value;

	var searchParams="";

	if(window.location.search!=''){

		var q = window.location.search.substr(1,window.location.search.length).split('&');

		for(var j=0; j < q.length; j++){

			if(q[j].indexOf('hpp')==-1 && q[j].indexOf('fonction')==-1 && q[j].indexOf('eq')==-1 && q[j].indexOf('type')==-1){

				if(searchParams=="") searchParams = q[j];
				else searchParams = searchParams+'&'+q[j]

			}

		}

	}

	var ext = "";

	if(myType=='p1c' || myType=="p1r" || myType=="dc" || myType=="qdc") ext = ".xml.zip";
	else if(myType=='tsv' || myType=="csv") ext = "."+myType;
	else if(myType=='endnote') ext = ".enw";
	else if(myType=='excel') ext = ".xls";

	var urlExport='export';
	if(myType=='tsv' || myType=='csv' || myType=='endnote' || myType=='excel'){
		urlExport='export-optimize';
	}
	var href=urlExport+ext+'?'+searchParams+'&type='+myType;

	// DEBUG alert("nbNotices="+nbNotices);

	if( nbNotices > -1 ){

		// L'avertissement suivant le nombre de notices a exporter

		var avert = avertissementExport(tn, nbNotices);

		if(avert!=null){
			alert(avert);
		}

	}

	if(myType=="tsv" || myType=="csv"){
		window.location.href = href;
	}

	else{
		var saveWin=window.open(href,'save', "location=no, menubar=yes, toolbar=yes, resizable=yes, scrollbars=yes");
		window.close();
		saveWin.focus();
	}

	return false;

}

/*******************************************************************************
	Vider le formulaire
*******************************************************************************/
function resetForms(formId){
	//alert("dans resetForms avec formId="+formId)
	// On vient de faire une requête
	//if(window.location.search.indexOf("eq=1") > 0 || window.location.search.indexOf("mq=1") > 0){
		var nHref = window.location.pathname+"?s="+window.location.search.substr(3,1);
		window.location.href=nHref;
	//}
	// On n'a pas encopre exécuter de requête : on peut revenir aux valeurs par défaut
	/* else{
		if(formId!="" && document.getElementById(formId)) document.getElementById(formId).reset();
		else document.forms[0].reset();
		// Ré-initialisation des listes d'opérateurs
		var selects = document.forms[0].getElementsByTagName('select');
		if(selects!=null && selects.length > 0){
			for (i=0; i<selects.length; i++){
				if(selects[i]!=null){
					if(selects[i].disabled==true) selects[i].disabled=false;
				}
			}
		}

	} */
}

/*******************************************************************************
	Valider le bouton INDEX ou non suivant le type de champs
*******************************************************************************/
/* NOTE: En meme temps, on en profite pour
	- modifier le nom du champ de recherche si necessaire (pour les champs de type 'B', word *et* field)
	- modifier l'operateur intra-champ [MP] */
function showIndex(/* select courant */mySelect){

	// DEBUG
	// alert("Dans showIndex avec mySQelect=`"+mySelect.name+"` et sélection=`"+mySelect.options[mySelect.selectedIndex].value+"`");

	// NOTE:	Le bogue 1118 implique la modification des operateurs intra-champs :
	//				Type A	=	champs "word"							: - tous ces mots
	//																							- un de ces mots
	//																							- cette phrase
	//
	//				Type B	=	champs "word" et "field" :	- tous ces mots
	//																							- un de ces mots
	//																							- cette phrase
	//																							- sans libelle
	//
	//				Type C = champs "field"            :	- sans libelle
	//
	// 				TYPE D = auteurs                   :	- commence par
	//																							- contient
	//																							- cette phrase
	// [MP]

	var myOption = mySelect.options[mySelect.selectedIndex];// l'option selectionnee dans le select courant
	var myNb = mySelect.name.substring(5, mySelect.name.length);// le numero du critere courant
	var cIndex = document.getElementById("index"+myNb);// le bouton "Index" correspondant au select courant
	var cOp = document.getElementById("champ"+myNb+"_op");// l'operateur du critere de requete courant

	//On cherche si une popup est déjà ouverte et qui ne correspond pas a l'entree selectionnee
	if(indexWin != null && indexWin.name != ''){
		//DEBUG console.log('fenetre ouverte: '+indexWin.name+' ; myOption: '+myOption.value);
		if(indexWin.name != myOption.value && indexWin.name != myOption.value+'f'){
			//DEBUG console.log('il faut fermer la fenetre, il fait froid. (fenetre ouverte: '+indexWin.name+')');
			indexWin.close(); //on ferme la popup
			indexWin = null; //on reinitialise, il n'y a plus de fenetre ouverte
		}
	}

	// DEBUG alert("dans showIndex avec myOption.value="+myOption.value+" 3eme cOp="+cOp.options[2].text+" operateur_3_sans_index="+operateur_3_sans_index+" operateur_3_avec_index="+operateur_3_avec_index);

	if(cOp.disabled==true) cOp.disabled = false;// re-active la liste des operateurs de requete
	//cOp.options[2].text = operateur_3_sans_index; // re-initialise le texte du troisieme operateur de requete
	cOp.options[0].selected = true;// selectionne le premier operateur de requete par defaut
	cIndex.disabled = true;// desactive le bouton 'Index'
	myIndexName = "";// re-initialise le nom de l'index a travailler

	// Travaille sur les operateurs des champs de recherche sur les auteurs (type D)
	if( myOption.value.indexOf("auteurp") > -1
	)	setAuteurOperators(cOp);
	// Re-initialise les operateurs (au cas où on a precedemment selectionner un champ "auteur")
	else setNormalOperators(cOp);

	// On a selectionne un champ de type "field" (type C) avec acces a l'index :
	// on ne change pas le nom du champ ; on active le bouton d'index ; on modifie le texte de l'operateur de requete ; on desactive la iste des operateurs de requete
	if(champsField.indexOf(","+myOption.value+",") != -1){
		if( accesIndexBlackList.indexOf(","+myOption.value+",") == -1 && cIndex.disabled==true
		)	cIndex.disabled=false;	// Active l'acces a l'index si le champ courant n'est pas "blackliste"
		// selectionne le troisieme operateur ; utilise le libelle des recherche avec index ; desactive la modification de l'operateur intra-champ
		cOp.options[2].selected=true;
		cOp.options[2].text = operateur_3_avec_index;
		cOp.disabled=true;
		myIndexName = myOption.value;
	}

	// On a selectionne le champ  'word' d'un champ de type "wordEtField" (type B) :
	// on ajoute un "f" a la fin du nom de champ ; on active le bouton d'index ; on re-initialise l'operateur de requete ; on utilise le libelle des recherches sans index
	else if(champsWordEtField.indexOf(","+myOption.value+",") != -1){
		// Active l'acces a l'index si le champ courant n'est pas "blackliste"
		if( accesIndexBlackList.indexOf(","+myOption.value+",") == -1
		)	if(cIndex.disabled==true) cIndex.disabled=false;
		myIndexName = myOption.value+"f";
	}

	// On a selectionne le champ 'field' d'un champ de type "wordEtField" :
	// on active le bouton d'index ; on re-initialise l'operateur de requete
	else if( myOption.value.substr( myOption.value.length - 1, 1 ) == 'f' && champsWordEtField.indexOf( myOption.value.substring( 0, myOption.value.length - 1 ) ) != -1 ){
		//alert("champ field d'un wordetfield : active l'index");
		// Active l'acces a l'index si le champ courant n'est pas "blackliste"
		if( accesIndexBlackList.indexOf(","+myOption.value+",") == -1
		)	if(cIndex.disabled==true) cIndex.disabled=false;
		myIndexName = myOption.value;
	}

	else{
	  // On a selectionne un champ "word" :
		// on utilise le libelle des recherches avec index
		//cOp.options[2].text = operateur_3_sans_index;
	}

}

/*******************************************************************************

*******************************************************************************/
function setAuteurOperators(_select){
	if( _select!=null ){
		_select.options[0].text = operateur_auteur_1;
	  _select.options[0].value = "startsWith";
	  _select.options[1].text = operateur_auteur_2;
	  _select.options[1].value = "contains";
	  _select.options[2].text = operateur_auteur_3_sans_index;
	  _select.options[2].value = "exact";
	}
}

function setNormalOperators(_select){
	if( _select!=null ){
		_select.options[0].text = operateur_1;
	  _select.options[0].value = "and";
	  _select.options[1].text = operateur_2;
	  _select.options[1].value = "or";
	  _select.options[2].text = operateur_3_sans_index;
	  _select.options[2].value = "exact";
		// DEBUG alert("re-initialisation des operateur intra-champs : [1]="+_select.options[0].value+":"+_select.options[0].text+" ; [2]"+_select.options[1].value+":"+_select.options[1].text+" ; [3]"+_select.options[2].value+":"+_select.options[2].text);
	}
}

/*******************************************************************************
	Ouvre une popup d'index
*******************************************************************************/
var indexWin = null; //la fenetre popup
function indexPopup(myButton){

	// DEBUG alert("dans indexPopup avec myButton="+myButton.id+" et myIndexName="+myIndexName+" et baseUri="+baseUri+" et nb="+myButton.id.substring(6, myButton.id.length));

	// INFO:	On est oblige de calculer a chaque fois le nom de l'index a afficher suivant le champ selectionne dans la liste, car MS IE est bogue avec les onchange [MP 2006-06-06]
	myIndexName="";

	if( myIndexName=="" ){
		var myNb = myButton.id.substring(6, myButton.id.length);// le numero du critere courant
		var mySelect = document.getElementById("select_champ0" + myNb);
		var myOption = mySelect.options[mySelect.selectedIndex];// l'option selectionnee dans le select courant
		// On a selectionne un champ de type "wordEtField" : on ajoute un "f" a la fin du nom de champs
		if(champsWordEtField.indexOf(","+myOption.value+",") != -1) myIndexName = myOption.value+"f";
		else myIndexName = myOption.value
	}

	// DEBUG alert("myIndexName=`"+myIndexName+"`");

	if(myIndexName!=""){
		if(baseUri!=""){
			var _href;
			// Active ou non l'affichage des index OAI
			if( isOAI=="true" )
						_href = "oai-terms.xsp?field="+myIndexName;
			else	_href = "terms.xsp?field="+myIndexName;
			// Active ou non le tiltre obligatoire
			if( accesIndexFilterRequired.indexOf(','+myIndexName+',') > -1 )
						_href += "&filter=true&value=";
			// DEBUG alert("_href="+encodeURI(_href));
			if(indexWin == null || indexWin.name != myIndexName)
				indexWin = window.open(encodeURI(_href), myIndexName, "width=580, height=500, toolbar=no, menubar=no, location=no, scrollbars=yes, resizable=yes, status=yes")
			indexWin.focus();
		}
	}

	// DEBUG
	// else alert("myIndexName est vide dans indexPopup");

}

/*******************************************************************************
 	Nettoyer la zone de texte si on change de champ de recherche
*******************************************************************************/
function clean(mySelect, queryId){
	if(document.getElementById(queryId).value!=""){
		if(mySelect.options[mySelect.selectedIndex].value!=myIndexName) document.getElementById(queryId).value="";
		return true;
	}
	else return true;
}

/*******************************************************************************
	Mettre, dans la bonne zone de texte, la valeur selectionnee dans la liste des
	valeurs d'un index
*******************************************************************************/
function useIndexValue(iName, iValue){
	// On ne travaille qu'a condition d'avoir les deux parametres
	if(iName!="" && iValue!=""){
		// Il faut que la fenetre principale soit ouverte
		if(window.opener.closed==false){
			var mySelectId = "select_champ"+window.opener.myButtonId.substring(5, window.opener.myButtonId.length);
			var myInputId = "query"+window.opener.myButtonId.substring(5, window.opener.myButtonId.length);
			var mySelect = window.opener.document.getElementById(mySelectId);
			var myInput = window.opener.document.getElementById(myInputId);
			var cOp = window.opener.document.getElementById("champ"+window.opener.myButtonId.substring(5, window.opener.myButtonId.length)+"_op");
			if(myInput!=null && mySelect!=null){
				// on change le nom du champ interroge
				if(mySelect) mySelect.options[mySelect.selectedIndex].value = iName;
				// on place le terme selectionne dans la zone de texte
				myInput.value = iValue;
				// Travaille sur l'operateur de requete
				if( cOp!=null ){
				  if( iName.indexOf("auteurp") > -1
					)	cOp.options[2].text = window.opener.operateur_auteur_3_avec_index;
				  else cOp.options[2].text = window.opener.operateur_3_avec_index;// le texte de l'option sur l'operateur intra-champ de recherche avec index
					cOp.options[2].selected = true;// l'operateur sur "exact"
				  cOp.disabled = true;// l'operateur ne peut pas etre modifie
				}
				//Les deux lignes ci-dessous sont a decommenter si on veut ajouter les termes dans la zone textuelle plutot que mettre cette derniere a jour [MP 2005-12-13]
				//if(myInput.value=="") myInput.value = iValue;// la zone de texte est vide, on place le terme selectionne sans se poser de question
				//else myInput.value = myInput.value+";"+iValue;// la zone de texte n'est pas vide, on place le terme selectionne a la fin, precede d'un ';'

				/*window.opener.focus();
				window.close();*/
			}
			// le lien avec le formulaire est perdu
			else{
				alert("Le formulaire de recherche a été re-initialisé. Cette fenêtre sera fermée.");
				window.close();
			}
		}
	}
}
/*******************************************************************************
  Controler si l'utilisateur peut selectionner cette notice pour le panier ou non
*******************************************************************************/
function selectNotice(_input){
	//alert("dans selectNotice");
	if(_input!=null && _input.checked==true && nbNS!=null && nbNP!=null && lp!=null){

		//Si on ajoute une notice, la limite du panier sera depassee !
		if( (nbNS+1+nbNP) > lp ){
			alert('Impossible de selectionner plus de notices : votre panier est plein !');
			if(_input!=null) _input.click();
		}

		//On peut selectionner cette notice l'ajouter au panier
		else{
			//On selectionne la methode de selection qui correspond
			var s = document.getElementById('sn_select');
			if(s!=null) o=s.options[2].selected==true;
			//On incremente le nombre de notices selectionnees dans la page courante
			nbNS++;
		}

	}
}

/*******************************************************************************

*******************************************************************************/
function onBodyLoad(){

	//On ajouter une ancre pour placer le focus sur les resultats de recherche
	if( window.location.search.indexOf("eq=1") > 0 && window.location.hash=="" && window.location.href.indexOf("#resultats")==-1 )
			window.location.href=window.location.href+'#resultats';

}

/*******************************************************************************
  Construire une URL a partir des elements du formulaire de tableaux de bord
*******************************************************************************/
function myURL(myForm){
	var _u = 'tableaux.xsp?trg=' + document.cles_form.trg.value + '&eq=1&cle=' + document.cles_form.cle.value + '&id=' + document.cles_form.id.value + '&debut=' + document.cles_form.debut.options[document.cles_form.debut.selectedIndex].value + '&fin=' + document.cles_form.fin.options[document.cles_form.fin.selectedIndex].value;
	if(document.cles_form.typedoc!='')
		_u = _u + '&typedoc='+document.cles_form.typedoc.options[document.cles_form.typedoc.selectedIndex].value;
	return _u
}

/*******************************************************************************

*******************************************************************************/
function resetOperators( critere ){

	//javascript: alert('on a bouge !');var op = document.search.champ01_op; if( op!=null ) if( op.disable==true ) op.disable=false;

	var op = document.getElementById("champ"+critere+"_op");
	if( op!=null && op.disabled==true ) op.disabled=false;

}
/*******************************************************************************
 Controle le formulaire des index
*******************************************************************************/
function controleFormulaireIndex( myForm ){
	var ret = true;
	if(myForm!=null){
		// DEBUG alert("Dans controleFormulaireIndex avec filter=`"+myForm.filter.value+"` et text=`"+myForm.value.value+"`");
		if(myForm.filter!=null && myForm.filter.value=='true'){
			if( myForm.value!=null && myForm.value.value!=""/* && myForm.value.value.length==1*/ ){
				var ch = myForm.value.value.charAt(0);
				// DEBUG alert("chCode="+ch.charCodeAt(0));
				if(ch.charCodeAt(0)=="42"){
					alert(messageErreur);
					ret = false;
				}
			}
		}
	}
	return ret;
}
/*******************************************************************************
    Un avertissement
*******************************************************************************/
function avertissementExport(tn, nbNotices){

	var ret = "";
	var _tn = tn;
	if(_tn==null) _tn = 150;

	if(nbNotices!=null && message!=null && message!=""){



		ret = message;

		try{

			if(nbNotices > -1){

				var nbMs = _tn * nbNotices;				// Temps de traitement suppose en millisecondes
				var t = nbMs / 60000;
				if( nbMs > 30000 ) t = Math.ceil( t );

				// DEBUG alert("Pour nb=`"+nbNotices+"` notices a "+_tn+" ms/notice nbMs="+nbMs+" et t="+t);

				if(t < 1){
					ret += "moins d'une minute.";
				}
				else if(t == 1){
					ret += "une minute.";
				}
				else{
					ret += t+" minutes";
				}

			}

		} catch(e){
			// DEBUG alert("Le nombre de notices passees n'est pas un nombre ou null `"+nbNotices+"` : "+e);
		} finally{
			return ret
		}

	}

}

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function sendDuplicateForm(_url){
	var t = getCheckedValue(document.forms[0].elements['type']);
	if(t==null || t==''){
		alert('Vous devez choisir l\'une des 3 options de duplication.');
		return false;
	}
	else{
		var mHref= _url;
		mHref += "&type=";
		mHref += getCheckedValue(document.forms[0].elements['type']);
		window.location.href=mHref;
	}
}

