/*
 * $Id: miscTools.js,v 1.4 2007/05/29 10:23:59 vjany Exp $
 * $Revision: 3 $
 * $Date: 22/04/08 16:23 $
 */
 
// --- COMMON CROSS-BROWSER COMPATIBILITY CODE
var isDOM=document.getElementById?1:0;
var isIE=document.all?1:0;
var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;
var isIE4=isIE&&!isDOM?1:0;
var isOp=window.opera?1:0;
var isDyn=isDOM||isIE||isNS4;


// convert all characters to lowercase to simplify testing
var agt=navigator.userAgent.toLowerCase();

// *** BROWSER VERSION ***
// Note: On IE5, these return 4, so use is_ie5up to detect IE5.
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie4up  = (is_ie && (is_major >= 4));
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);



/* --------------------------------------------------
	Population automatique des propriétés d'un objet
*/
function addProps(obj, data, names, addNull) {
	for (var i = 0; i < names.length; i++) if(i < data.length || addNull) obj[names[i]] = data[i];
}



/* --------------------------------------------------
	Recherche un objet DHTML d'ID donné et le renvoit (ou null si inexistant)
*/
function getObj(id) {
	if (isDOM && document.getElementById(id)!=null) {
		return document.getElementById(id);
	}
	
	// on cherche dans document.layers (Netscape)
	if (document.layers && eval("document."+id)!=null) {
		return eval("document."+id);
	}
	
	// on cherche dans document.all
	if (isIE && eval("typeof(document.all[id])")!="undefined") {
		return document.all[id];
	}

	
	// sinon on cherche dans les formulaires
	for(var i=0; i<document.forms.length; i++) {
		try {
			if (eval("typeof(document.forms[i]."+id+")")!="undefined")
				return eval("document.forms[i]."+id);
		}
		catch(e) {}
	}

	// sinon on cherche dans les frames
	if (typeof(document.frames)!="undefined") {
		for(var i=0; i<document.frames.length; i++) {
			try {
				if (eval("typeof(document.frames[i]."+id+")")!="undefined")
					return eval("document.frames[i]."+id);
			}
			catch(e) {}
		}
	}

	// sinon on cherche dans les images
	for(var i=0; i<document.images.length; i++) {
		try {
			if (eval("typeof(document.images[i]."+id+")")!="undefined")
				return eval("document.images[i]."+id);
		}
		catch(e) {}			
	}

	// pas trouvé !!
	return null;
}


/* --------------------------------------------------
	Gestion des actions sur le onload du document
*/
var onLoadActions = new Array();

function addOnLoadAction(action)
{
	if (action!=null && action!="")
		onLoadActions[onLoadActions.length] = action;
}

function executeOnLoadActions()
{
	var i;
	for(i=0; i<onLoadActions.length; i++)
		eval(onLoadActions[i]);
}




/* --------------------------------------------------
	Gestion des actions sur le onresize du document
*/
var onResizeActions = new Array();

function addOnResizeAction(action)
{
	if (action!=null && action!="")
		onResizeActions[onResizeActions.length] = action;
}

function executeOnResizeActions()
{
	var i;
	for(i=0; i<onResizeActions.length; i++)
		eval(onResizeActions[i]);
}

window.onresize = executeOnResizeActions;


/* --------------------------------------------------
	Ouvre une fenêtre de taille donnée, centrée sur l'écran
*/
function openCenteredWindow(name, url, w, h, notResizable)
{
	var features = ",directories=no,location=no,status=no,toolbar=no,scrollbars=yes,modal=yes";
	if (notResizable)
		features += ",resizable=no";
	else
		features += ",resizable=yes";
	var win = null;
	try {
		win = window.open(url, name, getCenteringWinPos(w,h)+features, true);
		win.focus();
	}
	catch(e) {
		alert("Vous devez désactiver votre bloqueur de popups !");
	}
	return win;
}

function getCenteringWinPos(w,h){
    var sW = parseInt(screen.availWidth, 10);
    var sH = parseInt(screen.availHeight, 10);
    if (sW / sH > 2)    // si double ecran
        sW = Math.round(sW/2);

    var x = Math.round((sW - w)/2);
    var y = Math.round((sH - h)/2);
    
    return "width="+w+",height="+h+",top="+y+",left="+x;
}

function openPopup(url, name) {
	openCenteredWindow(name, url, 700, 500, false);
	return false;
}



// -------------------------
function toDo() {
	alert("Cette action n'est pas encore implémentée !")
}


/* --------------------------------------------------
	Simule un clic sur un lien
*/
function goToURL(u, targetName)
{
	if (typeof(u)=="undefined" || u==null || u=="")
		return true;

	if (u.indexOf("javascript:")==0)
	{
		var jscode = u.substring(11);
		if (eval(jscode))
			return true;
		else
			return false;
	}

	if (typeof(targetName)!="undefined" && targetName!=null){
		var w = window.open(u, targetName);
		w.focus();
  }else{
    	window.location.href=u;
   }
}


/* --------------------------------------------------
	Soumission d'un formulaire en javascript
	(avec appel du callback onsubmit s'il existe)
*/
function submitForm(f) {
	var result = true;

	if (typeof(f.onsubmit)!="undefined" && f.onsubmit!=null)
		result = f.onsubmit();

	if (result)
		f.submit();

	return result;
}



/* --------------------------------------------------
	Soumission d'un formulaire (MainForm par défaut) avec positionnement 
	du champ caché ACTION et avec appel du callback 'onsubmit' s'il existe.
*/
function submitAction(action, f) {
	if (typeof(f)=="undefined" || f==null)
		f = document.MainForm;
		
	f.ACTION.value = action;
	
	return submitForm(f);
}


/* --------------------------------------------------
	Change l'ordre de tri d'une liste (formulaire MainForm)
*/
function changeTri(index) {
 	var f = document.MainForm;
 	
	if (f.SORTCOLUMNINDEX.value==index) {
		// On inverse l'ordre
		f.SORTCOLUMNORDER.value = f.SORTCOLUMNORDER.value=="D" ? "A" : "D";
	}
	else
		f.SORTCOLUMNORDER.value = "A";				
	f.SORTCOLUMNINDEX.value=index;
	
	submitAction("sort", f);
}




/* --------------------------------------------------
	Callback appelé sur onKeyPressed pour exécuter une action JSsi ENTER est tapé
*/
function executeOnEnter(action, event) {
	var key = event.keyCode;

	if (key == 13) {
		eval(action);
		return false;
	}

	return true;
}
/* --------------------------------------------------
	Callback appelé sur onKeyPressed pour soumettre le formulaire si ENTER est tapé
	obj : objet DHTML du champ text (typiquement : this)
	beforeSubmitAction : action facultative a exécuter avant le submit
						 Dans ce cas le submit n'a lieu que si l'action retourne vrai ou rien.
						 Sil elle retoute faux, le submit n'a pas lieu.
*/
function submitOwnerFormOnEnter(obj,event, beforeSubmitAction) {
    var key = event.keyCode;

	if (key == 13) {
		var result = true;
		if (typeof(beforeSubmitAction)!="undefined" && beforeSubmitAction!=null && beforeSubmitAction!="")
			result = eval(beforeSubmitAction);

		if (typeof(result)=="undefined" || result)
		submitForm(obj.form);
		
		return false;
	}

	return true;
}

/* --------------------------------------------------
	Va au champ du formulaire suivant (simule TAB) sur un appui sur ENTER
*/
function tabOnEnter (field, evt) {
	var keyCode = document.layers ? evt.which : document.all ? 
	evt.keyCode : evt.keyCode;
	if (keyCode != 13)
		return true;
	else {
		var nextField = getNextElement(field);
		nextField.focus();
		if (typeof(nextField.select)!="undefined")
			nextField.select();
			
		return false;
	}
}


function getNextElement(field) {
	var fieldFound = false;
	var form = field.form;

	for (var e = 0; e < form.elements.length; e++) {
		if (fieldFound && form.elements[e].type != 'hidden')
			break;
		if (field == form.elements[e])
			fieldFound = true;
	}

	return form.elements[e % form.elements.length];
}



function getRadioValue(radioButtonOrGroup) {
  var value = null;
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      if (radioButtonOrGroup[b].checked)
        value = radioButtonOrGroup[b].value;
  }
  else if (radioButtonOrGroup.checked)
    value = radioButtonOrGroup.value;
  return value;
}

function setRadioValue(radioButtonOrGroup, value) {
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      radioButtonOrGroup[b].checked = (value == radioButtonOrGroup[b].value);
  }
  else
  	radioButtonOrGroup.checked = (value == radioButtonOrGroup.value);
}


function clearRadio(radioButtonOrGroup) {
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      radioButtonOrGroup[b].checked=false;
  }
  else {
  	radioButtonOrGroup.checked=false;
  }
}



function isEmpty(value) {	
	return (typeof(value)=="undefined" || value==null || (typeof(value)=="string" && trimString(value)=="") || (typeof(value.length)!="undefined" && value.length<1));
}



function getSelectValue(field) {
	if (field.selectedIndex<0 || field.options.length<1)
		return null;
		
	return field.options[field.selectedIndex].value;
}

function setSelectValue(field, value, text, force) {
	// on cherche d'abord dans les options existantes
	for(var i=0; i<field.options.length; i++) {
		if (field.options[i].value == value) {
			field.selectedIndex = i;
			return;
		}
	}
	
	if (force) {		
		var opt = new Option(text, value);
		try {
			field.add(opt);
		}
		catch(e) {
			field.options[field.options.length] = opt;
		}
		opt.text = text;
		opt.value = value;			
		field.selectedIndex = field.options.length-1;
	}
}

function getSelectedValues(select) {
  var r = new Array();
  for (var i = 0; i < select.options.length; i++)
    if (select.options[i].selected)
      r[r.length] = select.options[i].value;
  return r;
}

function setSelectedValues(select, values) {
  clearSelectedValues(select);
  for(var r=0; r<values.length; r++) {  
	  for (var i = 0; i < select.options.length; i++) {
	  	if (values[r]==select.options[i].value)
	    	select.options[i].selected=true;
	  }
  }
}
/*
function getSelectedTexts(select) {
  var r = new Array();
  for (var i = 0; i < select.options.length; i++)
    if (select.options[i].selected)
      r[r.length] = select.options[i].text;
  return r;
}
function getSelectedIndices(select) {
  var r = new Array();
  for (var i = 0; i < select.options.length; i++)
    if (select.options[i].selected)
      r[r.length] = i;
  return r;
}
*/

function isSelectedValue(select, value) {
  for (var i = 0; i < select.options.length; i++) {
    if (select.options[i].selected && value==select.options[i].value)
    	return true;
  }
  return false;
}


function clearSelectedValues(select) {
  for (var i = 0; i < select.options.length; i++)
    select.options[i].selected=false;
}


var showCalendarSelect_hiddenField = null;
var showCalendarSelect_selectField = null;

function showCalendarSelect(selectField, hiddenField, anchorname, format) {
	hiddenField.value = getSelectValue(selectField);
	showCalendarSelect_selectField = selectField;
	showCalendarSelect_hiddenField = hiddenField;
	showCalendar(hiddenField, anchorname, "showCalendarSelect_returnFunction", format);
}

function showCalendarSelect_returnFunction(y, m, d) {
	var dt = new Date(y,m-1,d,0,0,0);
	var val = showCalendarSelect_hiddenField.value = formatDate(dt, window.CalendarPopup_dateFormat);
	setSelectValue(showCalendarSelect_selectField, val, val, true);
	return true;
}

/* ----------------------------------------------------------------------
 * Affiche une popup de choix de date
 * Paramètres :
 * 		- field : objet de formulaire (champ texte ou hidden) à renseigner
 * 		- anchorname : nom de l'ancre <a> associé au bouton d'ouverture de la popup (utilisé pour positionner la popup)
 * 		- format : (facultatif) format de la date (par défaut : dd/MM/yyyy)
 * 		- disabledWeekDays : (facultatif) jours de la semaine désactivés (tableau d'entier entre 0 et 6)
 * 		- disabledDates : (facultatif) périodes désactivées (tableau d'agrégats { start=Date(), end=Date() }
 * 		- selectedDate : date présélectionnée (par défaut : date du jour)
 */
function showCalendar(field, anchorname, format, disabledWeekDays, disabledDates, selectedDate) {
	var calendar = new CalendarPopup();
	calendar.setMonthNames('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
	calendar.setDayHeaders('D','L','M','M','J','V','S');
	calendar.setWeekStartDay(1);
	calendar.setTodayText("Aujourd'hui");
	calendar.showYearNavigation();

	if (typeof(anchorname)=="undefined")
		anchorname=null;
		
	if (typeof(format)=="undefined" || format==null || format=="")
		format="dd/MM/yyyy";
		
	if (typeof(disabledWeekDays)!="undefined" && disabledWeekDays!=null && disabledWeekDays.length>0) {
		// jours de la semaine désactivés (tableau d'entier entre 0 et 6)
		var instr="calendar.setDisabledWeekDays(";
		for(var i=0; i<disabledWeekDays.length; i++) {
			if (i>0)
				instr+=",";
			instr += disabledWeekDays[i];
		}
		instr+=")";
		eval(instr);
	}
	
	if (typeof(disabledDates)!="undefined" && disabledDates!=null) {
		// périodes désactivées (tableau d'agrégats { start=Date(), end=Date() }
		for(var i=0; i<disabledDates.length; i++)
			calendar.addDisabledDates(disabledDates[i].start, disabledDates[i].end);			
	}
		
	calendar.select(field, anchorname, format, selectedDate);
}


var ONEDAY = 1000 * 60 * 60 * 24;

function popupChoixDate(fieldDebut, anchorName) {
	verifieFormatDate(fieldDebut);
	var disabledDates;
	disabledDates = new Array();
	disabledDates[0] = { start:null, end:null };
	var selectedDate = null;
	showCalendar(fieldDebut, anchorName, null, null, disabledDates, selectedDate);
}


/*
 * Vérifie que la date d'un champ est au format jj/mm/aaaa, la met dans ce format si possible 
 * sinon met la chaine à vide. 
 */
function verifieFormatDate(field, format) {
	if (typeof(format)=="undefined" || format==null)
		format = "dd/MM/yyyy";

	window.CalendarPopup_dateFormat = format;
	var d = parseDate2(field.value);
	field.value = (d==null) ? field.value : formatDate(d, format);
	
	return true;
}


function popupChoixDateDebut(fieldDebut, fieldFin, anchorName) {
        verifieFormatDate(fieldDebut);
        verifieFormatDate(fieldFin);

        var disabledDates;

        var dateFin = fieldFin.value;
        if (dateFin=="")
                dateFin=null;
        else {
                var dFin = parseDate(dateFin);
                if (dFin!=null) {
                        // calcul du lendemain de la date de fin actuelle (pour l'exclusion)
                        var t = dFin.getTime() + ONEDAY;
                        dateFin = formatDate(new Date(t), "dd/MM/yyyy");

                        disabledDates = new Array();
                        disabledDates[0] = { start:dateFin, end:null };
                }
        }

        // on propose la date de fin si pas encore de date de dÃ©but
        var selectedDate = null;
        if (fieldDebut.value==null || fieldDebut.value=="")
                selectedDate = fieldFin.value;

        showCalendar(fieldDebut, anchorName, null, null, disabledDates, selectedDate);
}

function cmpDate(dateMin,dateMax) {
	verifieFormatDate(dateMin);
	verifieFormatDate(dateMax);

	dateDebut= formatDate(new Date(dateMin), "yyyyMMdd");
	dateFin = formatDate(new Date(dateMax), "yyyyMMdd");
	alert(dateDebut+":"+dateFin) ;
	if (dateDebut >= dateFin) {
		return -1;
	}
	return 0;
}

function popupChoixDateFin(fieldDebut, fieldFin, anchorName) {
        verifieFormatDate(fieldDebut);
        verifieFormatDate(fieldFin);

        var disabledDates;

        var dateDebut = fieldDebut.value;
        if (dateDebut=="")
                dateDebut=null;
        else {
                var dDebut = parseDate(dateDebut);
                if (dDebut!=null) {
                        // calcul de la veille de la date dÃ©but actuelle (pour 'exclusion)
                        var t = dDebut.getTime() - ONEDAY;
                        dateDebut = formatDate(new Date(t), "dd/MM/yyyy");

                        disabledDates = new Array();
                        disabledDates[0] = { start:null, end:dateDebut };
                }
        }

        // on propose la date de fin si pas encore de date de dÃ©but
        var selectedDate = null;
        if (fieldFin.value==null || fieldFin.value=="")
                selectedDate = fieldDebut.value;

        showCalendar(fieldFin, anchorName, null, null, disabledDates, selectedDate);
}




// --- preload d'images
function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}




// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download. 
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================
function CheckBoxGroup(){this.controlBox=null;this.controlBoxChecked=null;this.maxAllowed=null;this.maxAllowedMessage=null;this.masterBehavior=null;this.formRef=null;this.checkboxWildcardNames=new Array();this.checkboxNames=new Array();this.totalBoxes=0;this.totalSelected=0;this.setControlBox=CBG_setControlBox;this.setMaxAllowed=CBG_setMaxAllowed;this.setMasterBehavior=CBG_setMasterBehavior;this.addToGroup=CBG_addToGroup;this.expandWildcards=CBG_expandWildcards;this.addWildcardCheckboxes=CBG_addWildcardCheckboxes;this.addArrayCheckboxes=CBG_addArrayCheckboxes;this.addSingleCheckbox=CBG_addSingleCheckbox;this.check=CBG_check;}
function CBG_setControlBox(name){this.controlBox=name;}
function CBG_setMaxAllowed(num,msg){this.maxAllowed=num;if(msg!=null&&msg!=""){this.maxAllowedMessage=msg;}}
function CBG_setMasterBehavior(b){this.masterBehavior = b.toLowerCase();}
function CBG_addToGroup(){if(arguments.length>0){for(var i=0;i<arguments.length;i++){this.checkboxWildcardNames[this.checkboxWildcardNames.length]=arguments[i];}}}
function CBG_expandWildcards(){if(this.formRef==null){alert("ERROR: No form element has been passed.  Cannot extract form name!");return false;}for(var i=0;i<this.checkboxWildcardNames.length;i++){var n = this.checkboxWildcardNames[i];var el = this.formRef[n];if(n.indexOf("*")!=-1){this.addWildcardCheckboxes(n);}else if(CBG_nameIsArray(el)){this.addArrayCheckboxes(n);}else{this.addSingleCheckbox(el);}}}
function CBG_addWildcardCheckboxes(name){var i=name.indexOf("*");if((i==0) ||(i==name.length-1)){searchString=(i)?name.substring(0,name.length-1):name.substring(1,name.length);for(var j=0;j<this.formRef.length;j++){currentElement = this.formRef.elements[j];currentElementName=currentElement.name;var partialName =(i)?currentElementName.substring(0,searchString.length) : currentElementName.substring(currentElementName.length-searchString.length,currentElementName.length);if(partialName==searchString){if(CBG_nameIsArray(currentElement)) this.addArrayCheckboxes(currentElement);else this.addSingleCheckbox(currentElement);}}}}
function CBG_addArrayCheckboxes(name){if((CBG_nameIsArray(this.formRef[name])) &&(this.formRef[name].length>0)){for(var i=0;i<this.formRef[name].length;i++){this.addSingleCheckbox(this.formRef[name][i]);}}}
function CBG_addSingleCheckbox(obj){if(obj != this.formRef[this.controlBox]){this.checkboxNames[this.checkboxNames.length]=obj;this.totalBoxes++;if(obj.checked){this.totalSelected++;}}}
function CBG_check(obj){var checked=obj.checked;if(this.formRef==null){this.formRef=obj.form;this.expandWildcards();if(this.controlBox==null || obj.name!=this.controlBox){this.totalSelected +=(checked)?-1:1;}}if(this.controlBox!=null&&obj.name==this.controlBox){if(this.masterBehavior=="all"){for(i=0;i<this.checkboxNames.length;i++){this.checkboxNames[i].checked=checked;}this.totalSelected=(checked)?this.checkboxNames.length:0;}else{if(!checked){obj.checked =(this.totalSelected>0)?true:false;obj.blur();}}}else{if(this.masterBehavior=="all"){if(!checked){this.formRef[this.controlBox].checked=false;this.totalSelected--;}else{this.totalSelected++;}if(this.controlBox!=null){this.formRef[this.controlBox].checked=(this.totalSelected==this.totalBoxes)?true:false;}}else{if(!obj.checked){this.totalSelected--;}else{this.totalSelected++;}if(this.controlBox!=null){this.formRef[this.controlBox].checked=(this.totalSelected>0)?true:false;}if(this.maxAllowed!=null){if(this.totalSelected>this.maxAllowed){obj.checked=false;this.totalSelected--;if(this.maxAllowedMessage!=null){alert(this.maxAllowedMessage);}return false;}}}}}
function CBG_nameIsArray(obj){return((typeof obj.type!="string")&&(obj.length>0)&&(obj[0]!=null)&&(obj[0].type=="checkbox"));}
// ===================================================================




function getCheckedValues(f, fieldName) {
	var values = "";
	for (var i=0; i<f.elements.length; i++) {
		var field = f.elements[i];
		if (field.name==fieldName &&  field.type=="checkbox" && field.checked) {
			if (values.length>0)
				values+=",";
			values += field.value;
		}
	}
	
	return values;
}

function setCheckedValues(f, fieldName, listeIds, clearUnset) {
	var tousIds = ","+listeIds+",";
	for (var i=0; i<f.elements.length; i++) {
		var field = f.elements[i];
		if (field.name==fieldName && field.type=="checkbox"){
			if (tousIds.indexOf(","+field.value+",")>=0)
				field.checked=true;
			else if (clearUnset)
				field.checked=false;			
		}
	}
}


function getNbCheckedValues(f, fieldName) {
	var nb = 0;
	for (var i=0; i<f.elements.length; i++) {
		var field = f.elements[i];
		if (field.name==fieldName &&  field.type=="checkbox" && field.checked) {
			nb++;
		}
	}
	
	return nb;
}





function checkAllValues(f, fieldName) {
	for (var i=0; i<f.elements.length; i++) {
		var field = f.elements[i];
		if (field.name==fieldName && field.type=="checkbox")
			field.checked=true;
	}
}

function uncheckAllValues(f, fieldName) {
	for (var i=0; i<f.elements.length; i++) {
		var field = f.elements[i];
		if (field.name==fieldName && field.type=="checkbox")
			field.checked=false;
	}
}

// Adapte la valeur d'un checkbox booléen en fonction de son état
// coché => "true"
// pas coché => "false"
function updateHiddenLinkedBoolean(field, hiddenFieldName, checkedValue, uncheckedValue) {
	var f = field.form;
	
	if (typeof(hiddenFieldName)=="undefined" || hiddenFieldName==null || hiddenFieldName=="") {
		hiddenFieldName = field.name.substring(1);
	}
	
	if (typeof(checkedValue)=="undefined" || checkedValue==null)
		checkedValue=checkedValue;

	if (typeof(uncheckedValue)=="undefined" || uncheckedValue==null)
		uncheckedValue=uncheckedValue;
	
	var hField = eval("f."+hiddenFieldName);
	hField.value = field.checked ? checkedValue : uncheckedValue;

	return true;
}



var endOfSessionTimer = null;
var endOfSessionAlertTimer = null;
var endOfSessiondelaiAlerteSec = null;
var deltaEndOfSessionSec = null;
function setEndOfSessionTimer(dureeSessionSec, delaiAlerteSec) {
	endOfSessiondelaiAlerteSec = Math.floor(delaiAlerteSec/60);

	var deltaEndOfSessionSec = Math.max(0, dureeSessionSec-delaiAlerteSec);
	endOfSessionAlertTimer = setTimeout("alertEndOfSession();", deltaEndOfSessionSec*1000);
	endOfSessionTimer = setTimeout("closeSession();", dureeSessionSec*1000);
}


function getNowTime() {
	var date = new Date();

	var h = date.getHours();
	if (h<10) h="0"+h;	
	var m = date.getMinutes();
	if (m<10) m="0"+m;	
	
	return h+"h"+m;
}

function alertEndOfSession() {
	var txt = "";	
	txt += "Il est actuellement "+getNowTime()+"\n\n\n";
	txt += "ATTENTION !\n";
	txt += "Votre session de travail va expirer dans "+endOfSessiondelaiAlerteSec+" mn.\n";
	txt += "Si vous n'enregistrez pas vos éventuelles modifications d'ici-là, toutes celles que vous avez effectuées depuis votre dernière sauvegarde seront perdues.";

	alert(txt);

	if (sessionExpired)
		closeSession();
}


var sessionExpired = false;
function closeSession() {
	sessionExpired = true;

	var txt = "";	
	txt += "A "+getNowTime()+" ";
	txt += ", VOTRE SESSION A EXPIRÉ !\n\nVous devez vous reconnecter si vous voulez continuer à utiliser l'application Mobile Data Source.";
	alert(txt);

	goToURL("logout.php");
}



/* -------------------------------------------------- */
function getWindowWidth() {
	if (document.all) {
		if (!document.documentElement.clientWidth)
			return document.body.clientWidth;
		else
			return document.documentElement.clientWidth;
	}
	else
		return window.innerWidth;
}

/* -------------------------------------------------- */
function getWindowHeight() {
	if (document.all) {
		if (!document.documentElement.clientHeight)
			return document.body.clientHeight;
		else
			return document.documentElement.clientHeight;
	}
	else
		return window.innerHeight;
}


/* -------------------------------------------------- */
function adapteHauteurZone(zoneId, ieReservedHeight, othersReservedHeight) {
	var zone = getObj(zoneId);
	var sh = zone.scrollHeight; 

	var h = getWindowHeight();
	
	if (isIE)
		h -= ieReservedHeight;
	else
		h -= othersReservedHeight;
	
	
	h = Math.min(zone.scrollHeight, h);
	
	zone.style.height = h+"px";
}



/* ----------------------------------------------------
	Retaille un image à une taille maximum
*/
function autoResizeIfBigger(imgId, maxW, maxH) {
	var img = getObj(imgId);

	var w = img.width;
	var h = img.height;

	if (w==0 && h==0) {
		setTimeout("autoResizeIfBigger('"+imgId+"',"+maxW+","+maxH+")", 1250);
		return;
	}
	
	if (w > maxW) {
		h = h*(maxW/w);
		w = maxW;	
	}

	if (h > maxH) {
		w = w*(maxH/h);
		h = maxH;	
	}

	img.width = Math.round(w);
	img.height = Math.round(h);
	
	if (typeof(img.style.visibility)!="undefined") {
		img.style.visibility="visible";
		img.style.top="0px";
		img.style.left="0px";
	}
}


//fonction qui calcule la resolution de l'appareil photo
function gestResolution(){
	alert ("function called");
	document.mainForm.resolution_photo_1.value=150;
}


function replace(string,text,by) {
// Replaces text with by in string
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;
    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;
    var newstr = string.substring(0,i) + by;
    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);
    return newstr;
}
