/**************************************************************
	FRAMEWORK
	**************************************************************/
	
	var $utilities = {
		
		/*************************************************/
		$event:{
			$func:[],
			onmousemove:function(e){
				$utilities.$mouse.onmousemove(e);
				for(var i=0 ; i<$utilities.$event.$func.length ; i++){
					if($utilities.$event.$func[i].e == "onmousemove"){
						$utilities.$event.$func[i].action();
					}
				}
			}	,
			onload:function(e){
				for(var i=0 ; i<$utilities.$event.$func.length ; i++){
					if($utilities.$event.$func[i].e == "onload"){
						$utilities.$event.$func[i].action($utilities.$event.$func[i].param );
					}
				}
			}	,
			add:function(action, e, param){
				this.$func.push({action:action, e:e, param:param});
			}
		},
		/*************************************************/
		
		
		/*************************************************/
		$mouse:{
				_x:0,_y:0,
				onmousemove:function(e){
					var EVENT = e;
					var isIE = document.all?true:false;
					if (isIE) {
						var tempX = event.clientX + document.body.scrollLeft
						var tempY = event.clientY + document.body.scrollTop
					} else {
						var tempX = e.pageX
						var tempY = e.pageY
					}  
					if (tempX < 0){tempX = 0;}
					if (tempY < 0){tempY = 0;}
					this._x = tempX;
					this._y = tempY;
					return {'_x': tempX, '_y': tempY};
				}
		},
		/*************************************************/
		
		$object:{
			
			getStyle:function(obj, styleProp){
				if (obj.currentStyle){
					return obj.currentStyle[styleProp];
				}else if (window.getComputedStyle){
					return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
				}
			},
			getPosition:function(obj){
			  var curleft = 0;
			  var curtop = 0;
			  var border;
			  if (obj.offsetParent){
				do{
				  if (this.getStyle(obj, 'position') == 'relative'){
					if (border = this.getStyle(obj, 'border-top-width')) curtop += parseInt(border);
					if (border = this.getStyle(obj, 'border-left-width')) curleft += parseInt(border);
				  }
				  curleft += obj.offsetLeft;
				  curtop += obj.offsetTop;
				}
				while (obj = obj.offsetParent)
			  }
			  else if (obj.x){
				curleft += obj.x;
				curtop += obj.y;
			  }
			  return {'_x': curleft, '_y': curtop};
			}
			
		},
		/*************************************************/
		
		$cookie:{
			
			create:function(name,value,days) {
				if (days) {
					var date = new Date();
					date.setTime(date.getTime()+(days*24*60*60*1000));
					var expires = "; expires="+date.toGMTString();
				}
				else var expires = "";
				document.cookie = name+"="+value+expires+"; path=/";
			},
			
			read: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;
			},
			
			erase:function(name) {
				createCookie(name,"",-1);
			}
			
		}
		
	}
	
	
	var $fx = {
	
		$loop:null,
		$speed:10,
		$do_task:[],
		
		$do:function(func, obj){
			for(var i=0 ; i<this.$do_task.length ; i++){
				if( this.$do_task[i].obj == obj ){
					this.$do_task.splice(i,1);
				}
			}	
			this.$do_task.push({obj:obj, action:func, status:true, param:""});
			clearInterval( this.$loop );
			this.$loop = setInterval(this.$do_loop, this.$speed );
			return true;
		},
		
		$getParam:function(obj){
			for(var i=0 ; i<this.$do_task.length ; i++){
				if( this.$do_task[i].obj == obj ){
					return this.$do_task[i];
				}
			}
			return false;
		},
		
		$end:function(obj){
			for(var i=0 ; i<this.$do_task.length ; i++){
				if( this.$do_task[i].obj == obj ){
					this.$do_task[i].status = false;
				}
			}
			return true;
		},
		
		$do_loop:function( ){
			for(var i=0 ; i<$fx.$do_task.length ; i++){
				if( $fx.$do_task[i].status == false ){
					$fx.$do_task.splice(i,1);	
				}else{
					$fx.$do_task[i].action( $fx.$do_task[i].obj );	
				}
			}
			if( $fx.$do_task.length == 0 ){
				clearInterval( $fx.$loop );	
			}
		},
		
		fadeOut:function(obj){
			var fade = ($fx.$getParam(obj).param != undefined && $fx.$getParam(obj).param != null && $fx.$getParam(obj).param != "")?$fx.$getParam(obj).param:100;
			fade -= 10;
			if( fade <= 0 ){
				fade = 0;
				$fx.$end( obj );
			}
			$fx.$getParam(obj).param = fade;
			obj.style.opacity = (fade)/100;
			obj.style.filter = "alpha(opacity="+(fade)+")";	
			
		},
		
		fadeIn:function(obj){
			var fade = ($fx.$getParam(obj).param != undefined && $fx.$getParam(obj).param != null && $fx.$getParam(obj).param != "")?$fx.$getParam(obj).param:0;	
			fade += 10;
			if( fade >= 100 ){
				fade = 99;
				$fx.$end( obj );
			}
			$fx.$getParam(obj).param = fade;
			//alert(fade)
			obj.style.opacity = (fade)/100;
			obj.style.filter = "alpha(opacity="+(fade)+")";

			
		}
		
	}
	
	
	/*****************************************************************/
	
	var $BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	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: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			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.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
		]
	
	};
	$BrowserDetect.init();
	//alert($BrowserDetect.browser+" - "+$BrowserDetect.version);	
	if( $BrowserDetect.browser.toLowerCase() == "explorer" && ($BrowserDetect.version-0) <= 6 ){
		//document.write("<div style='width:100%;position:absolute;top:0px;left:0px;background:#fecb50;color:#111;font-weight:bold;font-family:verdana;font-size:10px;padding:4px;border-bottom:1px solid #f99200;'>Il est conseillé de mettre ŕ jour votre navigateur pour une meilleur visualisation de ce site Internet</div>");	
	}
	
	
	
	
	
	var IE = document.all?true:false
	if (!IE) document.captureEvents(Event.MOUSEMOVE)
	document.onmousemove = $utilities.$event.onmousemove;
	window.onload = $utilities.$event.onload;
