/*  20 janvier 22h37  */
var js = {
	getXMLHttp : function(){
		var XMLHttp=false;
		if (typeof XMLHttpRequest != "undefined") {
			XMLHttp=new XMLHttpRequest();
			return XMLHttp;
		} else if (window.ActiveXObject) {
			var aVersions = [ "MSXML2.XMLHttp.5.0",
				"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
				"MSXML2.XMLHttp","Microsoft.XMLHttp"
				];
			for (var i = 0; i < aVersions.length; i++) {
				try {
					var oXmlHttp = new ActiveXObject(aVersions[i]);
					return oXmlHttp;
				}
				catch(err) { /*Do nothing*/ }
			}
		}
		throw new Error("XMLHttp object could not be created.");
	},
	getElementsByClassName : function(className, opts){
		if(!opts){
                    var opts = {};
                }
		var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
		var tag = opts.tag || "*";
		var elm = document.getElementById(opts.parentID) || document;
		var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
		var returnElements = [];
		var current;
		var length = elements.length;
		for(var i=0; i<length; i++){
			current = elements[i];
			if(testClass.test(current.className)){
				returnElements.push(current);
			}
		}
		return returnElements;
	},
	stripTags : function(str) {
		return str.replace(/<\/?[^>]+>/gi, '');
	},
	extractScripts : function(str) {
		return str.match(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img).join(' ');
	},
	stripScripts : function(str) {
		return str.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img, '');
	},
	update : function(container, url, opts){
		if(!opts){
                    var opts = {};
                }
		var method		= opts.method || "post";
		var encoding	= opts.encoding || "utf-8";
		var contentType = opts.contentType || "application/x-www-form-urlencoded";
		var parameters 	= opts.parameters || "null";
		var asynchronous= opts.asynchronous || true;
		var evalScripts = opts.evalScripts || false;
		var onComplete 	= opts.onComplete || false;
		var onLoading 	= opts.onLoading || false;
		var onError 	= opts.onError || false;
		if(method.toLowerCase()=="get") {
			url += "?"+parameters;
			parameters=null;
		}
		var XMLHttp = new js.getXMLHttp();
		XMLHttp.onreadystatechange=function() {
			if(XMLHttp.readyState==4) {
				if (XMLHttp.status == 200) {
					if(container)
                                        {
                                            document.getElementById(container).innerHTML = XMLHttp.responseText;
                                        }
					if(evalScripts)
                                        {
                                            eval(js.stripTags(String(js.extractScripts(XMLHttp.responseText))));
                                        }
					if(onComplete)
                                        {
                                            eval(onComplete);
                                        }
				}
				else {
					alert('There was a problem with the request. '+XMLHttp.status);
					if(onError)
                                        {
                                            eval(onError);
                                        }
				}
			}
			else if(onLoading)
                        {
                            eval(onLoading);
                        }
		};
		XMLHttp.open(method, url, asynchronous);
		XMLHttp.setRequestHeader('Content-Type', contentType+';'+encoding);
		XMLHttp.send(parameters);
	},
	request : function(url, opts){
		new js.update('', url, opts);
	},
	getParent : function(name,obj){
		if(!obj)
			return false;
		else if(obj.nodeName.toLowerCase()==name.toLowerCase())
			return obj;
		else
			this.getParent(name,obj.parentNode);
	},
	parseObj : function(obj){
		if(obj.hasChildNodes()) {
			for(var i=0; i<obj.childNodes.length; i++) {
				if(i===0) return obj;
				this.parseObj(obj.childNodes[i]);
			}
		} else return obj;
	},
	removeAllChild : function(obj){
		while(obj.hasChildNodes())
			obj.removeChild(obj.lastChild);
	},
	serialize : function(frmObj){
		var return_string="";
		obj = this.parseObj(frmObj);
		for(var i=0;i<obj.length;i++) {
			try {
				if(obj[i].nodeType==1 && obj[i].name && obj[i].nodeName.match(/(input)|(textarea)/i)) {
					try {
						if(!obj[i].getAttribute('type').match(/(submit)|(reset)|(image)/)) {
							try {
								if(obj[i].getAttribute('disabled').match(/(false)/))
									return_string += obj[i].name+"="+escape(obj[i].value)+"&";
							}
							catch(err){
								return_string += obj[i].name+"="+escape(obj[i].value)+"&";
							}
						}
					}
					catch(err) {
						// not an input type, so it's a textarea
						return_string += obj[i].name+"="+escape(obj[i].value)+"&";
					}
				}
			}
			catch(err){ /*Do nothing*/ }
		}
		return return_string.slice(0,-1);
	},
	createCookie : function(name, value, opts){
		if(!opts)
                {
                    var opts = {};
                }
		var cookie_string = name+"="+escape(value);
		var days = opts.days || -1;
		var path = opts.path || "/";
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		cookie_string+=";expires="+date.toGMTString();
		cookie_string+=";path="+escape(path);
		if(opts.domain) cookie_string+=";domain="+escape(opts.domain);
		if(opts.secure) cookie_string+=";secure";
		document.cookie = cookie_string;
	},
	readCookie : function(name) {
		var nameEQ = 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(nameEQ) === 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},
	eraseCookie : function(name) {
		new js.createCookie(name,'');
	},
	popUp : function(url,opts){
		if(!opts)
                {
                    var opts = {};
                }
		var name	= opts.name || "popup";
		var width	= opts.width || (screen.width)/2;
		var height	= opts.height || (screen.height)/2;
		var left 	= opts.left || (screen.width)/4;
		var top 	= opts.top || (screen.height)/4;
		var scrollbars	= opts.scrollbars || "no";
		var toolbar 	= opts.toolbar || "no";
		var menubar 	= opts.menubar || "no";
		var status 		= opts.status || "no";
		var location	= opts.location || "no";
		var resizable 	= opts.resizable || "no";
		var directories = opts.directories || "no";
		
		return window.open(url,name,'menubar='+menubar+',toolbar='+toolbar+',location='+location+',directories='+directories+',status='+status+',scrollbars='+scrollbars+',resizable='+resizable+',width='+width+',height='+height+',left='+left+',top='+top+'');
	},
	$ : function() {
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string')
				element = document.getElementById(element);
			if (arguments.length == 1)
				return element;
			elements.push(element);
		}
		return elements;
	},
	addEvent : function(obj, type, fn) {
		if(obj.attachEvent) {
			obj['e'+type+fn] = fn;
			obj[type+fn] = function(){
                            obj['e'+type+fn](window.event);
                        };
			obj.attachEvent('on'+type, obj[type+fn]);
		} else obj.addEventListener(type, fn, false);
	},
	removeEvent : function(obj, type, fn) {
		if(obj.detachEvent) {
			obj.detachEvent('on'+type, obj[type+fn]);
			obj[type+fn] = null;
		} 
                else
                {
                  obj.removeEventListener(type, fn, false);
                }
	},
	addLoadEvent : function(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		}
		else {
			window.onload = function() {
				oldonload();
				func();
			};
		}
	},
	addClass : function(obj, clName) {
		obj.className += " "+clName;
	},
	removeClass : function(obj, clName) {
		obj.className = obj.className.replace(clName,'');
	},
	browserDetect : {
		browser : function() { 
                    return this.searchString(this.dataBrowser);
                },
		OS : function() {
                    return this.searchString(this.dataOS);
            },
		version : function() {
			this.browser();
			return (navigator.userAgent) ? this.searchVersion(navigator.userAgent) : this.searchVersion(navigator.appVersion);
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]
	},
	isIE : function() {	return (js.browserDetect.browser()=="Explorer") ? true : false ; },
	calcTPS : function(val) {
		return (0.06*val).toFixed(2);
	},
	calcTVQ : function(val) {
		return (0.075*val).toFixed(2);
	},
	calcTVH : function(val) {
		return (0.15*val).toFixed(2);
	},
	setOpacity : function(obj,val) {
		obj.style.opacity=(val/100);
		obj.style.MozOpacity=(val/100);
		obj.style.KhtmlOpacity=(val/100);
		obj.style.filter='alpha(opacity='+val+')';
	},
	lightBox : function(path,opts) {
		if(!opts)
                {
                    var opts = {};
                }
		var filterColor = opts.filterColor || "#333";
		var opacity = opts.opacity || "50";
		var caption = opts.caption || "";
		var color 	= opts.color || "#666";
		var lang 	= opts.lang || "fr";
		var closeMessage = (lang=="fr") ? "Cliquez pour fermer" : "Click to close";
		fileType = "img";
		elWidth = opts.width || null;
		elHeight = opts.height || null;
		if(path.match(/\.(html|htm)$/i)) fileType = "html";

		document.body.style.cursor='wait';

		var h1 = document.body.scrollHeight;
		var h2 = document.body.offsetHeight;
		h = (h1<h2) ? h2 : h1;
		w = (document.body.scrollWidth);

		elFilter =  document.createElement('DIV');
		elLightBox =  document.createElement('DIV');
		
		elLightBox.innerHTML = 	'<table style="background-color:#eee;text-align:right;color:'+color+';font-weight:bold;">'+
						'<tr><td style="padding:0 5px"><span style="cursor:pointer" onclick="js.removeLightBox();return false;" title="'+closeMessage+'">X</span></td></tr>'+
						'<tr><td style="padding:2px 5px 5px 5px" id="js_extFile"></td></tr>'+
						'<tr><td style="padding:0 5px;text-align:left;">'+caption+'</td></tr>'+
						'</table>';
		if(fileType=="html") { js.showLightBox(elLightBox); }
		else {
			objImage = new Image();
			objImage.src = path;
			objImage.onLoad=js.showLightBox(elLightBox);
		}
		
		elLightBox.id='js_lightBox';
		elLightBox.style.zIndex='110';
		elLightBox.style.position='absolute';
		elLightBox.style.visibility='hidden';

		elFilter.id='js_filter';
		elFilter.style.backgroundColor=filterColor;
		elFilter.style.position='absolute';
		elFilter.style.height=h+'px';
		elFilter.style.zIndex='100';
		elFilter.style.width='100%';
		elFilter.style.top='0px';
		elFilter.style.left='0px';

		js.setOpacity(elFilter,opacity); // set filter opacity
		
		document.body.insertBefore(elFilter,document.body.firstChild);
	},
	showLightBox : function(elLightBox) {
		document.body.insertBefore(elLightBox,document.body.firstChild);
		if(fileType=="html") {
			js.$('js_extFile').innerHTML = '<iframe src="exemple.html" frameborder="0" height="'+eval((elHeight)?elHeight:(h/1.5))+'" width="'+eval((elWidth)?elWidth:(w/2))+'" />';
		}
		else {
			js.$('js_extFile').innerHTML = '<img src="'+objImage.src+'" id="js_img" border="0" alt="'+caption+'" title="'+caption+'" />';
			if(elWidth)  js.$('js_img').style.width	 = elWidth+'px';
			if(elHeight) js.$('js_img').style.height = elHeight+'px';
		}
		// some browser need a few millisecond to add an element to the page, we can't calculate the dimension if the element is not present
		setTimeout("js.$('js_lightBox').style.left=((w-js.$('js_lightBox').offsetWidth)/2)+'px'",1000);
		setTimeout("js.$('js_lightBox').style.top=((h-js.$('js_lightBox').offsetHeight)/3)+'px'",1000);
		setTimeout("js.$('js_lightBox').style.visibility='visible'",1000);
		document.body.style.cursor='';
	},
	removeLightBox : function() {
		document.body.removeChild(document.getElementById('js_lightBox'));
		document.body.removeChild(document.getElementById('js_filter'));
	},
	getTarget : function(e) {
		try{
			if(e.target) return e.target;
			if(e.srcElement) return e.srcElement;
		}
		catch(err) {/* do nothing */}
	}
};
