
function checkBrowser() {
	this.ver = navigator.appVersion;
	this.dom = document.getElementById?1:0;
	this.ie4 = (document.all && !this.dom)?1:0;
	this.ie5 = (this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
	this.ns4 = (document.layers && !this.dom)?1:0;
	this.ns5 = (this.dom && parseInt(this.ver)>=5)?1:0;
	this.dyn = (this.ie4||this.ie5||this.ns4||this.ns5);
	return this;
}

function getWinX() {
	if (typeof(window.innerWidth)=='number') return window.innerWidth;
	if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;
	if (document.body && document.body.clientWidth) return document.body.clientWidth;
	return 1;
}

function getWinY() {
	if (typeof(window.innerHeight)=='number') return window.innerHeight;
	if (document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight;
	if (document.body && document.body.clientHeight) return document.body.clientHeight;
	return 1;
}

String.prototype.trim = function() { return this.replace(/(^\s+)|(\s+$)/g, ''); }
function ltrim(str, chars) { return str.replace(new RegExp("^[" + (chars || "\\s") + "]+"), ""); }
function rtrim(str, chars) { return str.replace(new RegExp("[" + (chars || "\\s") + "]+$"), ""); } 
function trim(str, chars) { return ltrim(rtrim(str, chars), chars); }


// -------------------------------------------------------------------- POPUP WIN

function resizeScreen(sizeX, sizeY) {
	var nav = new checkBrowser();
	sizeX+= 0; sizeY+= 32;
	var posX = Math.floor((screen.width  - sizeX) / 2);
	var posY = Math.floor((screen.height - sizeY) / 3);
	if (nav.ns4) {
		var bx = window.outerWidth  - window.innerWidth;
		var by = window.outerHeight - window.innerHeight;
		window.resizeTo(sizeX - bx, sizeY - by);
		window.moveTo(posX, posY);
	} else {
		window.resizeTo(sizeX + 16, sizeY);
		window.moveTo(posX, posY);
	}
}


function openWin(url, wname, sizex, sizey, noresize, omode) { // omode = 0:focus | *1*:focus+open | 2:close+open
	var options = ",menubar=no,scrollbars=no,resizable=" + (((noresize != undefined) && (noresize))?"no":"yes");
	if ((sizex == undefined) || (sizex <= 0)) sizex = 640;
	if ((sizey == undefined) || (sizey <= 0)) sizey = 480;
	if (wname == undefined) wname = "";
	if ((omode == undefined) || (omode < 0) || (omode > 2)) omode = 1;
	var w;
	if (wname == "") w = window.open(url, "", "width=" + sizex + ",height=" + sizey + options);
	else {
		if ((eval("typeof("+wname+")")=="object") && (eval("typeof("+wname+".document)")=="object"))
		{ eval(wname + "." + ((omode < 2)?"focus":"close") + "();"); if (omode < 1) return false; }
		w = window.open(url, wname, "width=" + sizex + ",height=" + sizey + options);
		eval(wname+" = w;");
	}
	return w;
}


// -------------------------------------------------------------------- POPUP DIV

var zIndexTop = 500; // zIndex incrémenté pour elmOpen et la méthode "ontop" de : oPalette, oCalendar

function elmShow(id) {
	var elm = (typeof(id)=='object') ? id : document.getElementById(id);
	if (elm != undefined) elm.style.visibility = 'visible';
}
function elmHide(id) {
	var elm = (typeof(id)=='object') ? id : document.getElementById(id);
	if (elm != undefined) elm.style.visibility = 'hidden';
}

function elmClose(id) {
	var elm = (typeof(id)=='object') ? id : document.getElementById(id);
	if (elm != undefined) elm.style.display = 'none';
	if (typeof(id)!='object') updateCookieHash('elmToggle', id, 1);
}
function elmOpen(id) {
	var elm = (typeof(id)=='object') ? id : document.getElementById(id);
//	if (elm != undefined) elm.style.display = 'block';
	if (elm != undefined) elm.style.display = '';
	if ((zIndexTop != undefined) && (elm.style.zIndex < zIndexTop)) elm.style.zIndex = ++zIndexTop;
	if (typeof(id)!='object') updateCookieHash('elmToggle', id, 0);
}
function elmToggle(id) {
	var elm = (typeof(id)=='object') ? id : document.getElementById(id);
//	if (elm != undefined) elm.style.display = (elm.style.display == 'none') ? 'block' : 'none';
	if (! elm) return;
//	if (elm.style.display == 'none') { elmOpen(id); return 0; } else { elmClose(id); return 0; }
	if (elm.style.display == 'none') elmOpen(id); else elmClose(id);
}


function boxToggle(id) {
	var box = document.getElementById(id);
	if (! box) return;
	var res = box.className.match(/^(.*)_roll$/);
	if ((res!=null) && (res[1]!=undefined) && (res[1]!='')) {
		box.className = res[1];
		updateCookieHash('boxToggle', id, 0);
	} else {
		box.className+= "_roll";
		updateCookieHash('boxToggle', id, 1);
	}
}     

function lineToggle(idtab, classe, display) {
	var lines = document.getElementById(idtab).getElementsByTagName("tr");
	for (var i=0; i < lines.length; i++) {
		var curclass = lines[i].className;
		if (curclass.match(/nohide/)) continue;
		if ((classe != undefined) && (classe != '') && (! curclass.match(new RegExp("^(.* )?"+classe+"( .*)?$")))) continue;
		if (display != undefined) lines[i].style.display = display;
		else lines[i].style.display = (lines[i].style.display == "none") ? "" : "none";
	}
}

function lineHilight(obj) {
	var cur = obj.className;
	if      (cur == 'clLine1') obj.className = 'clLineA';
	else if (cur == 'clLine2') obj.className = 'clLineB';
	else if (cur == 'clLineA') obj.className = 'clLine1';
	else if (cur == 'clLineB') obj.className = 'clLine2';
}


function loading(msg1, msg2) {
	if (msg1 == undefined) msg1 = "chargement en cours...";
	if (msg2 == undefined) msg2 = "veuillez attendre sans fermer la fenêtre !";
	var img = "<img src=\"scripts/loading.gif\" border=0 alt=\"loading...\" />";
	var obj = document.getElementById('loading');
	if (obj == undefined) {
		obj = document.createElement("div");
		obj.id = 'loading';
		obj.innerHTML = msg1+"<br /><br /><br />"+img+"<br clear=\"all\" /><br /><br />"+msg2;
		document.body.appendChild(obj);
	}
	obj.style.visibility = 'visible';
}

function debug(msg) {
	var win = document.getElementById('debug');
	if (win == undefined) return;
	if (win.style.visibility != 'visible') win.style.visibility = 'visible';
	win.getElementsByTagName("p")[0].innerHTML = "debug: "+msg;
}


// -------------------------------------------------------------------- MENUS

var menuLocked  = 0;
var menuTimeout = null;
var menuTagList = new Array();

function lockMenu() { menuLocked = 1; }

function setMenuDelay(tag, sel, ms) { menuTimeout = setTimeout("setMenu('"+tag+"','"+sel+"');", ms); }

function remMenuDelay() { if (menuTimeout) clearTimeout(menuTimeout); }

function setMenu(tag, sel) {
	if (menuLocked == 1) return true;
//	debug("["+tag+":"+sel+"]");
	var menuList = document.getElementById('menulist'+tag).childNodes;
	for (var c=0; c<menuList.length; c++) {
		var id = menuList[c].id;
		if (id != undefined) {
			if (id.substr(0,5) =="smenu") menuList[c].className = (menuList[c].className.substr(0,4)=='mcur') ?'mcur':'menu';
			if (id.substr(0,4) == "menu") menuList[c].className = (menuList[c].className.substr(0,4)=='mcur') ?'mcur':'menu';
		}
	}
	if ((sel != undefined) && (sel != '-')) {
		var menu  = document.getElementById('menu'+tag+'_'+sel);
		var smenu = document.getElementById('smenu'+tag+'_'+sel);
		if (menu)  menu.className = ( menu.className.substr(0,4)=='mcur') ?'mcursel':'msel';
		if (smenu) smenu.className= (smenu.className.substr(0,4)=='mcur') ?'mcursel':'msel';
	}
	return true;
}

function setAllMenu(sel) { for (var tag in menuTagList) setMenu(menuTagList[tag], sel); }

function changeMenu(tag, cur) {
	var menuList = document.getElementById('menulist'+tag).childNodes;
	for (var c=0; c<menuList.length; c++) {
		var id = menuList[c].id;
		if ((id != undefined) && (id.substr(0,4) == "menu"))
			menuList[c].style.display = (menuList[c].name == "pid"+tag+"_"+cur) ? 'block' : 'none';
	}
}


// -------------------------------------------------------------------- SLIDES

function slideText_nw(tag, next, tempo, ms) {
	if (ms == undefined) ms = 150;
	var slides = new Array();
	var textList = document.getElementById(tag).childNodes;
	for (var c=0; c<textList.length; c++) {
		var id = textList[c].id;
		if ((id != undefined) && (id.substr(0,tag.length) == tag)) slides.push(id);
	}
	var prev = next - 1;
	if (next >= slides.length) next = 0;
	if ((prev < 0) || (prev >= slides.length)) prev = slides.length - 1;
//	debug("prev["+prev+"] next["+next+"]");
	document.getElementById(slides[prev]).style.zIndex = 110;
	document.getElementById(slides[next]).style.zIndex = 150;
	eval("if (to_"+tag+" != undefined) clearTimeout(to_"+tag+");");  // no wait
	transition(slides[prev], slides[next], ms, tag);
	return setTimeout("slideText_nw('"+tag+"', '"+(++next)+"', "+tempo+");", tempo);
}

function slideText(tag, next, tempo, ms) {
	if (ms == undefined) ms = 150;
	if (eval("to_"+tag) != 'ok') return setTimeout("slideText('"+tag+"', '"+next+"', "+tempo+");", ms);  // wait
	var slides = new Array();
	var textList = document.getElementById(tag).childNodes;
	for (var c=0; c<textList.length; c++) {
		var id = textList[c].id;
		if ((id != undefined) && (id.substr(0,tag.length) == tag)) slides.push(id);
	}
	var prev = next - 1;
	if (next >= slides.length) next = 0;
	if ((prev < 0) || (prev >= slides.length)) prev = slides.length - 1;
//	debug("prev["+prev+"] next["+next+"]");
	document.getElementById(slides[prev]).style.zIndex = 110;
	document.getElementById(slides[next]).style.zIndex = 150;
	transition(slides[prev], slides[next], ms, tag);
	return setTimeout("slideText('"+tag+"', '"+(++next)+"', "+tempo+");", tempo);
}

function transition(id1, id2, ms, tag) {
	var obj1 = document.getElementById(id1);
	var obj2 = document.getElementById(id2);
	var opa1 = obj1.style.opacity || 0;
	var opa2 = obj2.style.opacity || 0;
	opa1 = (opa1<0.05) ? 0 : opa1*0.75;
	opa2 = (opa2==0) ? 0.05 : opa2*1.30;
	if (opa2>1) opa2 = 1;
//	debug("opa1["+opa1+"]<br>opa2["+opa2+"]");
	obj1.style.opacity = opa1;
	obj2.style.opacity = opa2;
	obj1.style.filter = 'alpha(opacity='+ Math.round(opa1 * 100) +')';
	obj2.style.filter = 'alpha(opacity='+ Math.round(opa2 * 100) +')';
	if ((opa1 > 0) || (opa2 < 1)) {
		var to = setTimeout("transition('"+id1+"', '"+id2+"', "+ms+", '"+tag+"');", ms);
		if (tag != undefined) eval("to_"+tag+" = to;");
	} else if (tag != undefined) eval("to_"+tag+" = 'ok';");
}


function showPicture(url) { openWin(url, "PHOTO", 615, 625); }


// -------------------------------------------------------------------- FORMS

function getFrmObj(frm, def) {
	if (frm == undefined) frm = (def == undefined) ? "frm" : def;
	if (typeof(frm)=='object') return frm;
	var frmobj = document.getElementById(frm);
	if (! frmobj) frmobj = document.getElementsByName(frm)[0];
	return (frmobj) ? frmobj : document.forms[0];
}

function listReload(arg, val, frm, name) {
	frm = getFrmObj(frm, "frmlst"); if (! frm) return;
	if (name == undefined) name = "select[]";
	if (arg) eval("frm."+arg).value = val;
//	mise à jour de la variable "sellst" ?
	if (frm.sellst) {
		var list = frm.sellst.value;
		for (var i=frm.elements.length - 1; i >= 0; i--) {
			if (frm.elements[i].name != name) continue;
			var value = '|' + frm.elements[i].value + '|';
			var index = list.indexOf(value);
			if (frm.elements[i].checked) { if (index < 0) list+= value; }
			else { if (index >= 0) list = list.substr(0, index - 1) + list.substr(index + value.length + 1); }
		}
		frm.sellst.value = list;
	}
	frm.submit();
}

function listToggle(isChecked, frm, name) {
	frm = getFrmObj(frm, "frmlst"); if (! frm) return;
	if (name == undefined) name = "select[]";
	for (var i=0; i<frm.elements.length; i++)
		if (frm.elements[i].name == name)
			frm.elements[i].checked = isChecked;
}

function listInterval(frm, name) {
	frm = getFrmObj(frm, "frmlst"); if (! frm) return;
	if (name == undefined) name = "select[]";
	var check = 0;
	for (var i=frm.elements.length - 1; i >= 0; i--) {
		if (frm.elements[i].name == name)
		var etat = frm.elements[i].checked;
		if ((check==0) && (etat==1)) check = 1;
		if ((check==1) && (etat==0)) check = 2;
		if ((check==2) && (etat==1)) check = 3;
		if ((check==1) || (check==2)) frm.elements[i].checked = 1;
	}
}

function listNewOption(obj) {
	var m = prompt("Veuillez saisir le nouvel intitulé :", (obj.value=='[new]')?'':obj.text);
//	if (m != null) obj = new Option('[newok]', m, true, true);
	if (m != null) obj.text = obj.value = m;
}

function fieldValidate(field, min, max) {
	var obj = (typeof(field)=='object') ? field : document.getElementById(field);
	if (! obj) obj = document.getElementsByName(field);
	if (! obj) return false;
//	alert(obj.length);
	if ((min != undefined) && (obj.length < min)) { alert("Longueur minimale requise : "+min); return false; }
	if ((max != undefined) && (obj.length > max)) { alert("Longueur maximale requise : "+max); return false; }
	return true;
}

function countLength(field, div) {
	var obj = (typeof(field)=='object') ? field : document.getElementById(field);
	if (! obj) obj = document.getElementsByName(field);
	var elm = (typeof(div)=='object') ? div : document.getElementById(div);
	if (! obj || ! elm) return;
	elm.innerHTML = obj.value.length;
}


// -------------------------------------------------------------------- PARAMS

function parseUrl(name, latin) {
	var cururl = document.location.href;
	var key = (latin == undefined) ? encodeURIComponent(name) : escape(name);
	var i = cururl.indexOf('?'); if (i < 0) return false;
	while (i++ < cururl.length - key.length) {
		var debut = i + key.length + 1;
		if (cururl.substring(i, debut) == key+"=") {
			if (String("?&;").indexOf(cururl.charAt(i-1)) < 0) continue;
			var fin = cururl.indexOf("&", debut);
			if (fin < debut) fin = cururl.indexOf("#", debut);
			if (fin < debut) fin = cururl.length;
			return (latin == undefined) ? decodeURIComponent(cururl.substring(debut, fin)) : unescape(cururl.substring(debut, fin));
	} }
	return false;
}

function getParam(name, latin) {  // = parseUrl version RegExp
	var cururl = document.location.href;
	var key = (latin == undefined) ? encodeURIComponent(name) : escape(name);
	var re = new RegExp("\\?(.*[&;])?"+key+"=([^&#]*)([&#].*)?$");
	var res = re.exec(cururl);
	if (res != null) return (latin == undefined) ? decodeURIComponent(res[2]) : unescape(res[2]);
	return false;
}


function parseCookie(name, latin) {
	var key = ((latin == undefined) ? encodeURIComponent(name) : escape(name)) + '=';
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++) {
		var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1, c.length);
		if (c.indexOf(key) != 0) continue;
		return (latin == undefined) ? decodeURIComponent(c.substring(key.length, c.length)) : unescape(c.substring(key.length, c.length));
	}
	return false;
}

function getCookie(name, latin) {  // = parseCookie version RegExp
	var key = (latin == undefined) ? encodeURIComponent(name) : escape(name);
	var re = new RegExp("^(.*;\\s*)?"+key+"=([^;]*)(;.*)?$");
	var res = re.exec(document.cookie);
	if (res != null) return (latin == undefined) ? decodeURIComponent(res[2]) : unescape(res[2]);
	return false;
}

function setCookie(name, value, latin) {
	if (latin != undefined) document.cookie = escape(name) + "=" + escape(value);
	else document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
}

function updateCookieList(name, key, add, sep) {
	if (add == undefined) add = 1;
	if (sep == undefined) sep = ':';
	var cookieList = (getCookie(name) || "").split(sep);
	if (add) {
		for (var idx in cookieList) if (cookieList[idx] == key) return;
		cookieList.push(key);
	} else {
		for (var idx in cookieList) if (cookieList[idx] == key) cookieList.splice(idx, 1);
	}
	setCookie(name, cookieList.join(sep));
}

function updateCookieHash(name, key, val, sep) {
	if (sep == undefined) sep = ':';
	var cookieHash = (getCookie(name) || "").split(sep);
	var found = 0;
	for (var idx in cookieHash) {
		var hash = cookieHash[idx].split('=', 2);
		if (hash[0] == key) {
			if (hash[1] == val) return;
			cookieHash.splice(idx, 1, key+"="+val);
			found = 1; break;
	}	}
	if (! found) cookieHash.push(key+"="+val);
	setCookie(name, cookieHash.join(sep));
}


// -------------------------------------------------------------------- AJAX

function ajaxInitObject(alert) {
	if (window.XMLHttpRequest) return new XMLHttpRequest();
	if (window.ActiveXObject) {
		var names = [ "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP" ];
		for (var i in names) { try{ return new ActiveXObject(names[i]); } catch(e){} }
	}
	if (alert != undefined) window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
	return null;
}


function ajaxGetValue(url) {
	var xhr = ajaxInitObject(); if (xhr == null) return null;
	xhr.open('GET', url, false); xhr.send(null);
	if (xhr.readyState == 4) return (xhr.status==200) ? xhr.responseText : "[error code "+xhr.status+"]";
	return null;
}


function ajaxGetRequest(url, target) {
	var xhr = ajaxInitObject(); if (xhr == null) return false;
	xhr.onreadystatechange = function() {
		if (xhr.readyState != 4) return;
		updateContent(target, (xhr.status==200) ? xhr.responseText : "[error code "+xhr.status+"]");
	}; 
	xhr.open('GET', url, true);
	xhr.send(null); return true;
}


function updateContent(target, value) {
	var obj = (typeof(target)=='object') ? target : null;
	if (! obj) obj = document.getElementById(target);
	if (! obj) obj = document.getElementsByName(target)[0];
	if (! obj) return false;
	if (obj.value != undefined) obj.value = value; else obj.innerHTML = value;
	return true;
}


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


function cssZoom(modif, target) {
	if (target == undefined) target = "body";
	var obj = document.getElementById(target);
	if (! obj) obj = document.getElementsByName(target)[0];
	if (! obj) return;

	if (! isNaN(modif.charAt(0))) { obj.style.fontSize = modif+"em"; return; }
	var t = parseFloat(obj.style.fontSize);
	if (isNaN(t)) t = 2;
	t = eval("t" + modif);
	if (t < 0.5) t = 0.5; else if (t > 10) t = 10;
	obj.style.fontSize = t+"em";
}


function loadGallPicture(path, imgx, imgy) {
	var target = "imgPreview";
	var obj = document.getElementById(target);
	if (! obj) return;

	obj.src = "gfx/pixel.png";
//	obj.src = "gfx/loadanim2.gif";
	obj.style.width  = "100px";
	obj.style.height = "100px";
	obj.src = path;

	if (imgx == undefined) imgx = 400;
	if (imgy == undefined) imgy = 400;
	if (imgx/imgy < getWinX()/getWinY()) {
		obj.style.width = ""; obj.style.height = "90%";
//		obj.style.width = ""; obj.style.height = (getWinY()-60)+"px";
	} else {
		obj.style.width = "90%"; obj.style.height = "";
//		obj.style.width = (getWinX()-40)+"px"; obj.style.height = "";
	}

	elmOpen("galPreview");
//	alert(imgx+" x "+imgy+" ["+getWinX()+":"+getWinY()+"] : "+obj.style.width+" x "+obj.style.height);
}


function getCssValue(theClass, theElement) {
	var cssRules = (navigator.appName == "Microsoft Internet Explorer") ? 'rules' : 'cssRules';
	for (var sSheet=0; sSheet < document.styleSheets.length; sSheet++) {
		if (! document.styleSheets[sSheet].disabled) {
			for (var rule=0; rule < document.styleSheets[sSheet][cssRules].length; rule++) {
				if (document.styleSheets[sSheet][cssRules][rule].selectorText == theClass) {
					return document.styleSheets[sSheet][cssRules][rule].style[theElement];
	} } } }
	return null;
}


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