// EXTENSIONS PERSONNELLES A LA BIBLIOTHEQUE sortabletable.js


function addClassName(el, sClassName) {
	var s = el.className;
	var p = s.split(" ");
	var l = p.length;
	for (var i = 0; i < l; i++) {
		if (p[i] == sClassName)
			return;
	}
	p[p.length] = sClassName;
	el.className = p.join(" ");

}

function removeClassName(el, sClassName) {
	var s = el.className;
	var p = s.split(" ");
	var np = [];
	var l = p.length;
	var j = 0;
	for (var i = 0; i < l; i++) {
		if (p[i] != sClassName)
			np[j++] = p[i];
	}
	el.className = np.join(" ");
}

SortableTable.prototype.toggleCheckBox = function (togglename) {
	if (togglename) {
		this.oToggleCheckBox = togglename;
	} else {
		this.oToggleCheckBox = this.element.id+'_';
	}
	// BALAYAGE DE TOUS LES FORMULAIRES DE LA PAGE
	for (var i = 0; i < document.forms.length; i++) {
		form = document.forms[i];
		// BALAYAGE DE TOUS LES ELEMENTS DE LA PAGE ET FILTRAGE SUR LES CHECKBOX
		for (var j = 0; j < form.elements.length; j++) {
			if (form.elements[j].type == 'checkbox') {
				// traitement de la coche générale
				if (this.oToggleCheckBox == form.elements[j].id ) {
					var etat_toggle = form.elements[j].checked;
					// traitement de toutes les autres
				} else if ( form.elements[j].id.substr(0,this.oToggleCheckBox.length)==this.oToggleCheckBox ) {
					form.elements[j].checked = etat_toggle;
				}
			}
		}
	}
}


SortableTable.prototype.getAllCheckBox = function (togglename,savestr) {
	var sauveidchk = '';
	var sauveidchk_no = '';
	// BALAYAGE DE TOUS LES FORMULAIRES DE LA PAGE
	for (var i = 0; i < document.forms.length; i++) {
		form = document.forms[i];
		// BALAYAGE DE TOUS LES ELEMENTS DE LA PAGE ET FILTRAGE SUR LES CHECKBOX
		for (var j = 0; j < form.elements.length; j++) {
			if (form.elements[j].type == 'checkbox') {
				// traitement de toutes les coches
				cochelue = form.elements[j].id ;
				if ( (togglename==cochelue.substr(0,togglename.length)) && (cochelue.length>togglename.length) ) {
					if (form.elements[j].checked) {
						sauveidchk = sauveidchk + "," + form.elements[j].id.substr(togglename.length);						
					} else {
						sauveidchk_no = sauveidchk_no + "," + form.elements[j].id.substr(togglename.length);
					}
				}
			}
		}
	}
	// ON RETOURNE SANS LA VIRGULE DU DEBUT LA LISTE DES COCHES "VRAIS"
	if (sauveidchk.length>0) 
		sauveidchk = sauveidchk.substr(1);
	else 
		sauveidchk = '';

	// ON RETOURNE SANS LA VIRGULE DU DEBUT LA LISTE DES COCHES "FAUSSES"
	if (sauveidchk_no.length>0) 
		sauveidchk_no = sauveidchk_no.substr(1);
	else 
		sauveidchk_no = '';

	var obj = st_MM_findObj(savestr); if (obj) obj.value = sauveidchk;
	var obj = st_MM_findObj('NOT_'+savestr); if (obj) obj.value = sauveidchk_no;


}

// APPELEE PAR LA LISTE DE L'ENTETE DE COLONNE "SELECTALL"
SortableTable.prototype.selectAll = function (selectname) {
	var objSelectAll = st_MM_findObj(selectname+'_ALL');
	// RECUPERATION DE LA VALEUR DU SELECTEUR

	var valueselected = "";
	for(var i=0; i<objSelectAll.options.length; i++) {
		if(objSelectAll.options[i].selected) {
			if (objSelectAll.options[i].value == "") return;
			valueselected = objSelectAll.options[i].value;
		}
	}
	// BALAYAGE DE TOUS LES FORMULAIRES DE LA PAGE
	for (var i = 0; i < document.forms.length; i++) {
		form = document.forms[i];
		// BALAYAGE DE TOUS LES ELEMENTS DE LA PAGE ET FILTRAGE SUR LES CHECKBOX
		for (var j = 0; j < form.elements.length; j++) {
			if (form.elements[j].type == 'select-one') {
				// on ignore la liste de selection globale et on ne garde que les listes qui commencent par 'selectname'
				if (form.elements[j].name.substr(0,selectname.length)==selectname ) {
					form.elements[j].value = valueselected;
				}
			}
		}
	}
}


// -------------------------------------------------------------------------------
// CETTE CLASSE GERE TOUTES LES LISTES DU FORMULAIRE
// -------------------------------------------------------------------------------

function initSelect(nomliste,tabvaleur) {
	this.tabvaleurselect = tabvaleur; 
	this.nomlisteselect  = nomliste; 
	this.fcteval = ''; // fonction a executer a chaque changement de valeur sur une liste
}


initSelect.prototype.onChangeSelect = function ( evalfct ) {
	this.fcteval = evalfct;
};


initSelect.prototype.writeSelect = function ( selectedline,idline ) {
	document.write('<select name="'+this.nomlisteselect+'_'+idline+'" size="1" class="classeselecteur" onChange="'+this.fcteval+'oGC.ReadyToValid()">'); 
	for (i=0;i<this.tabvaleurselect.length;i++) { 
		document.write('<option value="'+this.tabvaleurselect[i].value+'"'); 
		if (selectedline==this.tabvaleurselect[i].value) document.write(' selected="selected"'); 
		document.write('>'+this.tabvaleurselect[i].text+' </option>'); 
	} 
	document.write('</select>'); 
};

initSelect.prototype.writeSelectAll = function ( titleselect,styleselect,fctcalled,confirmationmsg ) {
	document.write('<select id="'+this.nomlisteselect+'_ALL" style="'+styleselect+'" size="1" class="classeselecteur" onChange="');
	if (confirmationmsg) document.write('if(confirm(unescape(\''+confirmationmsg+'\'))) {');
	document.write('oGC.ReadyToValid();'+fctcalled);
	if (confirmationmsg) document.write('}');
	document.write('">'); 
	document.write('<option value="" selected="selected">'+titleselect+'</option>'); 
	for (i=0;i<this.tabvaleurselect.length;i++) { 
		document.write('<option value="'+this.tabvaleurselect[i].value+'">'+this.tabvaleurselect[i].text+' </option>'); 
	} 
	document.write('</select>'); 
};




// var objSELECTEUR = new initSelect('SELECTEUR',[  {value:"1", text:"1930-40"}, {value:"2", text:"1950-60"}, {value:"3", text:"1970-80"} ]); 
// -------------------------------------------------------------------------------


// DEBUT DE CLASSE CommandGroup

function CommandGroup(formname,quitbtn,quitToUrl,btnactif) {
	this.formname  = formname; 
	this.quitbtn   = quitbtn;
	if (quitToUrl)
		this.quitToUrl = quitToUrl;
	else
		this.quitToUrl = '';
	if (btnactif)
		this.ValiderToujoursActif = true;
	else
		this.ValiderToujoursActif = false;
	this.libbtnValider  = "";
	this.libbtnQuitter  = "";
	this.libbtnRetablir = "";
	this.idCOMMIT       = st_MM_findObj('BTN_COMMIT');
	this.idCANCEL       = st_MM_findObj('BTN_CANCEL');
}

CommandGroup.prototype.InitButtons = function () {
	if (!this.quitbtn) {
		this.idCANCEL.value=this.libbtnRetablir; 
		this.idCANCEL.disabled=true;
		this.idCOMMIT.disabled=!this.ValiderToujoursActif;
	} else {
		this.idCOMMIT.disabled=!this.ValiderToujoursActif;
	}
}

CommandGroup.prototype.FindField = function () {
	// ON PREND LE 1ER CHAMP DU FORMULAIRE DONT ON CONNAIT LE NOM DU BOUTON COMMIT
	var field = this.idCOMMIT.form.elements[0];  
	var j=0;
	while ( true ) { 
		if (j==field.form.elements.length) break; 
		objet = field.form.elements[j]; 
		if (objet.type=='text') { 
			if (!objet.readOnly) { 
				if (!objet.disabled) { 
					objet.focus();  
					objet.select();  
					return;
				} 
			}
		} 
		j++; 
	} 
}  



CommandGroup.prototype.ReadyToValid = function () {
	if (this.quitbtn) {
		this.idCOMMIT.disabled=false;
		this.idCANCEL.value=this.libbtnRetablir;
	} else {
		this.idCANCEL.disabled=false;
		this.idCOMMIT.disabled=false;
	}
};

// QUAND ON FAIT "VALIDER" APRES AVOIR COLLECTE L'ETAT DES CASES A COCHE ET ENREGISTRE DANS LES CHAMPS CACHES
CommandGroup.prototype.Validation = function () {
	// ON SAUVEGARDE DANS LE CHAMP CACHE "COMMIT" LA VALEUR "YES"
	var obj = st_MM_findObj('COMMIT');
	if (obj) {
		obj.disabled=false;
		obj.value="YES";	
	}
	// ON INACTIVE LE CHAMP 'VALIDER' MEME SI ON A DEMANDE QU'IL SOIT TOUJOURS ACTIF
	this.idCANCEL.disabled=true;
	this.idCOMMIT.disabled=true;
	// ON FAIT LA COMMANDE "SUBMIT" DU FORMULAIRES
	eval('document.forms.'+this.formname+'.submit()');
};

// QUAND ON FAIT "ANNULER" OU "SORTIR" / "QUITTER" OU "RETABLIR" SELON LA CONFIGURATION VOULUE
CommandGroup.prototype.ResetOrQuit = function () {
	if (this.quitbtn) {
		if (this.idCOMMIT.disabled) {
			// CAS OU L'ON QUITTE
			this.idCANCEL.disabled=true;
			if (this.quitToUrl.length>0) {
				location.href=this.quitToUrl;
			} else{
				var obj = st_MM_findObj('CANCEL');
				if (obj) {
					obj.disabled=false;
					obj.value="YES";	
				}				
				eval('document.forms.'+this.formname+'.submit()');
			}
		} else {
			eval('document.forms.'+this.formname+'.reset()');
			this.idCOMMIT.disabled = !this.ValiderToujoursActif;
		    this.idCANCEL.value=this.libbtnQuitter;
		}
	} else {
		eval('document.forms.'+this.formname+'.reset()');
		this.idCOMMIT.disabled=!this.ValiderToujoursActif;
		this.idCANCEL.disabled=true;
	}
};


// FIN DE CLASSE CommandGroup


function st_MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=st_MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function st_MM_swapImage() { //v3.0
  var i,j=0,x,a=st_MM_swapImage.arguments;
  document.MM_sr=new Array;
  for(i=0;i<(a.length-2);i+=3)
  	if ((x=st_MM_findObj(a[i]))!=null){
		document.MM_sr[j++]=x;
		if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];
	}
}

function st_tmt_disableField(){
	if(document.getElementById){var args=st_tmt_disableField.arguments;
	for(var i=0;i<args.length;i=i+2){var obj=st_MM_findObj(args[i]);
	if(obj){(args[i+1])?obj.disabled=true:obj.disabled=false;}}}
}



function st_handleEnter (field, event) {  
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;  
		if (keyCode == 13) {  
			var i; 
			for (i = 0; i < field.form.elements.length; i++) { 
			    // pointage du champ passe en parametre 
				if (field == field.form.elements[i]) break;  
			} 
			i = (i + 1) % field.form.elements.length;  
			j = i; 
			while ( true ) { 
				if (j==field.form.elements.length) j=0; 
				objet = field.form.elements[j]; 
				if (objet.type=='text') { 
					if (!objet.readOnly) { 
						if (!objet.disabled && !objet.readOnly) { 
							objet.focus();  
							objet.select(); 
							return false; 
						} 
					}
				} 
				j++; 
			} 
			return false; 
		}   
		else  
		return true;  
}  

function st_getVal(o){
	var retVal="0"; 
	if (o.type=="select-one") {
		retVal=(o.selectedIndex==-1)?0:o.options[o.selectedIndex].value;
	} else if (o.length>1) {
		for (var i=0;i<o.length;i++) if (o[i].checked) retVal=o[i].value;
	} else if (o.type=="checkbox") {
		retVal=(o.checked)?o.value:0;
	} else {
		valeurformatee = o.value.replace(/[^0-9.]/g, '');
		retVal=Number(valeurformatee);
	}
	return parseFloat(retVal);
}

function st_calcForm() {
	var str="",a=st_calcForm.arguments; 
	for (var i=3;i<a.length;i++) {	
		str+=(a[i].indexOf("#")==-1)?a[i]:st_getVal(st_MM_findObj(a[i].substring(1)));
	}
	t=Math.round(a[1]*eval(str))/a[1];
	tS=t.toString();
	if(a[2]>0) {
		tSp=tS.indexOf(".");
		if(tSp==-1)	tS+=".";
		tSp=tS.indexOf(".");
		while(tSp!=(tS.length-1-a[2])){
			tS+="0";
			tSp=tS.indexOf(".");
		}
	} 
	st_MM_findObj(a[0]).value=tS;
}


function st_sumto (prefix) {  
	var i; 
	var cumul = 0;
	var field = st_MM_findObj("BTN_COMMIT");
	for (i = 0; i < field.form.elements.length; i++) { 
			objet = field.form.elements[i]; 
			if (objet.type=='text') {
				quelchamp = (objet.name)?objet.name:objet.id;
				if (prefix==quelchamp.substr(0,prefix.length)) {
					if (objet.value) {
						valeur_formatee = objet.value.replace(/[^0-9.]/g, '');
						cumul+=parseFloat(valeur_formatee);
					}
				}
			} 
	} 
	return cumul.toString();
}  


// -------------------------------------------------------------------------------
// CETTE CLASSE GERE TOUS LES CHAMPS DE TYPE INPUT
// -------------------------------------------------------------------------------

function InputText(inputname,style,avecmasque) {
	this.nomchamp  = inputname; 
	this.style     = style;
	this.script    = '';
	this.readOnly  = false;
	this.avecmasque = avecmasque;
	this.champ_quelconque_du_formulaire	= "BTN_COMMIT";
	this.imgdirectory = '';
	this.fcteval = ''; // fonction a executer a chaque changement de valeur sur une liste
}


InputText.prototype.IT_onChange = function ( evalfct ) {
	this.fcteval = evalfct;
};




// ATTACHE UN SCRIPT EXTERNE QUI EST EXCECUTE QUAND ON VALIDE LE CHAMP
InputText.prototype.IT_script = function ( scriptname ) {
	// suppression des guillements si ils existent
	this.script = scriptname.replace(/()/g,'');
};

// LE CHAMP EST EN LECTURE SEULEATTACHE UN SCRIPT EXTERNE QUI EST EXCECUTE QUAND ON VALIDE LE CHAMP
InputText.prototype.IT_readOnly = function () {
	this.readOnly  = true;	
}

InputText.prototype.IT_write = function ( value, idline ) {
	document.write('<input type="text" ');
	if (this.style!='') {
		document.write('style="'+this.style+'" '); 
	}
	if (this.avecmasque) {
		valeurformatee = eval( 'Msk'+this.nomchamp+'.format(\''+value+'\')' );
		document.write('value="'+valeurformatee+'" '); 
	} else {
		document.write('value="'+value+'" '); 
	}
	if (this.readOnly) {
		document.write('id="'+this.nomchamp+'_'+idline+'" class="classeoutput" readonly="true" '); 
	} else {
		document.write('name="'+this.nomchamp+'_'+idline+'" class="classeinput" '); 
		document.write('onKeyPress="'+this.fcteval+'oGC.ReadyToValid();return st_handleEnter(this,event);" '); 
		if (this.avecmasque) {
			document.write('onkeydown="Msk'+this.nomchamp+'.isAllowKeyPress(event,this);" '); 
			document.write('onkeyup="Msk'+this.nomchamp+'.getKeyPress(event,this);" ');
		}
		document.write('onblur="');
		if (this.avecmasque) {
			document.write('this.value=Msk'+this.nomchamp+'.format(this.value);');
		}
		var script_et_id = this.script+'('+idline+');';
		document.write(script_et_id+'"'); 	
	}
	document.write('>'); 
}


InputText.prototype.IT_write_incdec = function ( value, idline ) {

	var script_et_id = '';
	if (this.script!='') {
		script_et_id = this.script+'('+idline+');';
	}
	document.write('<table width="50" border="0" cellspacing="0" cellpadding="0"><tr valign="bottom"><td width="10" rowspan="2">');

	document.write('<input type="text" name="'+this.nomchamp+'_'+idline+'" class="classeinput"');
	if (this.style!='') {
		document.write('style="'+this.style+'" '); 
	}
	if (this.avecmasque) {
		valeurformatee = eval( 'Msk'+this.nomchamp+'.format(\''+value+'\')' );
		document.write('value="'+valeurformatee+'" '); 
	} else {
		document.write('value="'+value+'" '); 
	}
	if (this.readOnly) {
		document.write('readonly="true" '); 

	} else {
		document.write('onKeyPress="'+this.fcteval+'oGC.ReadyToValid();return st_handleEnter(this,event);" '); 
		if (this.avecmasque) {
			document.write('onkeydown="Msk'+this.nomchamp+'.isAllowKeyPress(event,this);" '); 
			document.write('onkeyup="Msk'+this.nomchamp+'.getKeyPress(event,this);" ');
		}
		document.write('onblur="');
		if (this.avecmasque) {
			document.write('this.value=Msk'+this.nomchamp+'.format(this.value);');
		}
		document.write(script_et_id+'"'); 	
	}
	document.write('>'); 

	document.write('</td><td width="*" valign="bottom"><a onclick="'+this.fcteval+'oGC.ReadyToValid();st_increment(\''+this.nomchamp+'\','+idline+');'+script_et_id+'"><img src="'+this.imgdirectory+'plus.gif"></a></td></tr><tr><td valign="top"><a onclick="'+this.fcteval+'oGC.ReadyToValid();st_decrement(\''+this.nomchamp+'\','+idline+');'+script_et_id+'"><img src="'+this.imgdirectory+'moins.gif"></a></td></tr></table>');
}



// POUR TOUS LES CHAMPS DE SAISIE QUI ONT UNE FORMULE DE CALCUL ON L'EXECUTE
InputText.prototype.IT_recalc = function () { 
	var i; 
	var cumul = 0;
	var field = st_MM_findObj(this.champ_quelconque_du_formulaire);
	for (i = 0; i < field.form.elements.length; i++) { 
			objet = field.form.elements[i]; 
			if (objet.type=='text') {
				if (objet.name) {
					if (this.nomchamp==objet.name.substr(0,this.nomchamp.length)) {
						id_du_champ = objet.name.substr(this.nomchamp.length+1);						
						eval( this.script+'('+id_du_champ+')'); 
					}
				}
			} 
	} 
}  




// POUR TOUS LES CHAMPS DE SAISIE AVEC MASQUE ON SUPPRIME LES CARACTERES RAJOUTES PAR MES MASQUES
InputText.prototype.IT_ready2submit = function () { 
	var field = st_MM_findObj(this.champ_quelconque_du_formulaire);
	for (var i = 0; i < field.form.elements.length; i++) { 
			objet = field.form.elements[i]; 
			if (objet.type=='text') {
				if (objet.name) {
						objet.value = objet.value.replace(/[^0-9.\/]/g, '');
				}
			} 
	} 
}  


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

function st_increment(champcible,id) {
	// LE CHAMP NOM_nn EXISTE-T-IL ?
	objet = st_MM_findObj(champcible+'_'+id);
	if (objet) {
		if (objet.value=='') objet.value=0;
		objet.value = objet.value.replace(/[^0-9.\/]/g, '');
		objet.value = parseFloat(objet.value)+1;
	}
}

function st_decrement(champcible,id) {
	// LE CHAMP NOM_nn EXISTE-T-IL ?
	objet = st_MM_findObj(champcible+'_'+id);
	if (objet) {
		if (objet.value=='') objet.value=0;
		objet.value = objet.value.replace(/[^0-9.\/]/g, '');
		objet.value = parseFloat(objet.value)-1;
		if (objet.value<0) objet.value=0;
	}
}

function st_calcformule(champcible,formule,id) {
	formule = formule.toUpperCase();
	idchampcible = -1;
	for (var i = 0; i < InputFieldsList.length; i++) {
		// ON MEMORISE L'INDICE DU CHAMP RESULTAT
		if (InputFieldsList[i]._name==champcible) idchampcible=i;
		// LE CHAMP NOM_nn EXISTE-T-IL ?
		objet = st_MM_findObj(InputFieldsList[i]._name+'_'+id);
		if (objet) {
			if (objet.value=='') objet.value=0;
			valeursansblanc = objet.value.replace(/[^0-9.\/]/g, '');
			var re = new RegExp(InputFieldsList[i]._name, "g");
			formule = formule.replace(re, valeursansblanc);
		}
	}	
	//alert(id+'='+eval(formule));
	resultat = eval(formule);
	if (resultat==null) 
		resultat = '0';
	else
		resultat = resultat.toString()
	// MISE EN FORME
	var oNumberMask = new Mask(InputFieldsList[idchampcible]._masque,'number',true);
	objet = st_MM_findObj(InputFieldsList[idchampcible]._name+'_'+id);
	if (objet) {
		objet.value =  oNumberMask.format(resultat);
	}
	
	
	
}