window.onload = function() {

	BrowserDetect.init();

	if (document.getElementById("texte")) {

		if (BrowserDetect.browser != 'Safari') {

			makeScroll(document.getElementById("texte"));

		}

	}

}

function makeScroll(theScroller) {

	speed = 2;

	var moveup;
	var movedown;

	var innerScroll = document.createElement('DIV');

	innerScroll.id = "innerScroll";

	innerScroll.innerHTML = theScroller.innerHTML;

	theScroller.innerHTML = '';

	theScroller.appendChild(innerScroll);

	theScroller.style.overflow = 'hidden';

	innerScroll.style.position = 'relative';
	innerScroll.style.top = 0 + 'px';
	var scrollBG = document.createElement('DIV');
	scrollBG.style.position = 'absolute';
	scrollBG.style.top = parseInt(theScroller.offsetTop + 15) + 'px';
	scrollBG.style.width = 14 + 'px';
	scrollBG.style.height = parseInt(theScroller.offsetHeight - 30) + 'px';//réglage de la position à laquelle va s'arrêter le scroll bar vers le bas
	scrollBG.style.backgroundColor = "#F3F3B7";
	scrollBG.style.border = "0px solid #000000";
	scrollBG.style.padding = "1px";
	scrollBG.style.left = (theScroller.offsetWidth + theScroller.offsetLeft) + 'px';

	var scrollBGint;

	scrollBG.onmousedown = function(ev) {
		clearTimeout (scrollBGint);
		sendX = getMouseOffset(this, ev).y;
		if (getMouseOffset(this, ev).y < scrollTrack.offsetTop - scrollTrack.startY + 20) {
			scrollItUpNR(4);
		scrollBGint = setTimeout(scrollBGTracker, 200);
		} else if (getMouseOffset(this, ev).y > scrollTrack.offsetTop - scrollTrack.startY + 20) {
			scrollItDownNR(4);
		scrollBGint = setTimeout(scrollBGTracker, 200);
		} else {
			scrollTrack.style.top = scrollTrack.startY + getMouseOffset(this, ev).y + 20;
		}

	}

	scrollBG.onmouseup = function() {
		clearTimeout(scrollBGint);
	}

	function scrollBGTracker() {
		clearTimeout (scrollBGint);
		if (sendX < scrollTrack.offsetTop - scrollTrack.startY + 10) {
			scrollItUpNR(6);
			scrollBGint = setTimeout(scrollBGTracker, 100);
		} else if (sendX > scrollTrack.offsetTop - scrollTrack.startY + 30) {
			scrollItDownNR(6);
			scrollBGint = setTimeout(scrollBGTracker, 100);
		} else {
			scrollTrack.style.top = scrollTrack.startY + sendX - 20;
		}
	}

	theScroller.parentNode.insertBefore(scrollBG, theScroller);


	var scrollTrack = new Image();

//	scrollTrack.setAttribute('src', '/assets/Image/Web/phase_purple/scroll_track.gif');
	//scrollTrack.src = '/assets/Image/Web/phase_purple/scroll_track.gif';
	scrollTrack.src = 'images/scroll_bar.gif';
	theScroller.parentNode.insertBefore(scrollTrack, theScroller);
	scrollTrack.style.position = 'absolute';
	scrollTrack.style.width = 10 + 'px';
	scrollTrack.style.left = (scrollBG.offsetLeft + scrollBG.offsetWidth/2 - 5) + 'px'; // IE messes up the left so rather than add a new class etc then this seems to work...

	scrollTrack.distance = scrollBG.offsetHeight - 50;
	scrollTrack.startY = theScroller.offsetTop + 35;
	scrollTrack.style.top = scrollTrack.startY + 'px';
	//scrollTrack.setAttribute("class", "scroll_image");
	//scrollTrack.setAttribute("className", "scroll_image");


	//makeDraggable(scrollTrack);



	// Déplacement de la barre de scroll au clic ds le bg
	function updateTracker() {

//		scrollTrack.style.top =  -(parseInt(innerScroll.style.top) / (theScroller.parentNode.offsetHeight - innerScroll.offsetHeight) * (scrollTrack.distance)) + scrollTrack.startY + 'px';

scrollTrack.style.top = parseInt(innerScroll.style.top) / (theScroller.offsetHeight - innerScroll.offsetHeight)* (scrollTrack.distance) + scrollTrack.startY + 'px';

		if (parseInt(scrollTrack.style.top) > scrollTrack.startY + scrollTrack.distance) {
			scrollTrack.style.top = scrollTrack.startY + scrollTrack.distance + 'px';
		}

		if (parseInt(scrollTrack.style.top) < scrollTrack.startY) {
			scrollTrack.style.top = scrollTrack.startY + 'px';
		}

	}
	// fleche du haut
	function scrollItUp() {
		if (parseInt(innerScroll.style.top) < 0) {
			innerScroll.style.top = parseInt(innerScroll.style.top) + speed + 'px';
			updateTracker();
		}
		moveup=setTimeout(scrollItUp, 20);
	}
	// fleche du bas
	function scrollItDown() {
		if (parseInt(innerScroll.style.top) > -(innerScroll.offsetHeight - innerScroll.parentNode.offsetHeight) ) {
			innerScroll.style.top = parseInt(innerScroll.style.top) - speed + 'px';
			updateTracker();
		}
		movedown=setTimeout(scrollItDown,20);
	}


	// Non recursive versions for mouse wheel - speed increased else it seems too slow
	// clic ds bg vers la haut
	function scrollItUpNR(speedMult) {
		if (parseInt(innerScroll.style.top) < 0) {
			innerScroll.style.top = (parseInt(innerScroll.style.top) + (speedMult * speed)) + 'px';
			updateTracker();
		}
	}
	// clic ds bg vers la haut
	function scrollItDownNR(speedMult) {

		if (parseInt(innerScroll.style.top) > -(((innerScroll.offsetHeight) - innerScroll.parentNode.offsetHeight)) ) {
			innerScroll.style.top = (parseInt(innerScroll.style.top) - (speedMult * speed)) + 'px';
			updateTracker();
		}
	}

	var scrollUp = new Image();
	//scrollUp.setAttribute('src', '/assets/Image/Web/phase_purple/scroll_up.gif');
	scrollUp.setAttribute('src', 'images/scroll_up.gif');
	scrollUp.setAttribute('class', 'scroll_image');
	scrollUp.setAttribute('className', 'scroll_image');
	theScroller.parentNode.insertBefore(scrollUp, theScroller);
	scrollUp.style.position = 'absolute';
	scrollUp.style.left = (scrollBG.offsetLeft + scrollBG.offsetWidth/2 - 8) + 'px';
	scrollUp.style.top = (theScroller.offsetTop + 15) + 'px';
	scrollUp.onmousedown = function() {
		scrollItUp();
	}
	scrollUp.onmouseup = function() {
		clearTimeout(moveup);
	}


	var scrollDown = new Image();
	//scrollDown.setAttribute('src', '/assets/Image/Web/phase_purple/scroll_down.gif');
	scrollDown.setAttribute('src', 'images/scroll_down.gif');
	scrollDown.setAttribute('class', 'scroll_image');
	scrollDown.setAttribute('className', 'scroll_image');
	theScroller.parentNode.insertBefore(scrollDown, theScroller);
	scrollDown.style.position = 'absolute';
	scrollDown.style.left = (scrollBG.offsetLeft + scrollBG.offsetWidth/2 - 8) + 'px';
	scrollDown.style.top = (theScroller.offsetTop + theScroller.offsetHeight - 15) + 'px';
	scrollDown.onmousedown = function() {
		scrollItDown();
	}
	scrollDown.onmouseup = function() {
		clearTimeout(movedown);
	}

	document.onmousemove = mouseMove;
	document.onmouseup   = mouseUp;


	var dragObject  = null;
	var mouseOffset = null;

	function getMouseOffset(target, ev){
		ev = ev || window.event;

		var docPos    = getPosition(target);
		var mousePos  = mouseCoords(ev);
		return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
	}

	function mouseCoords(ev){
		if(ev.pageX || ev.pageY){
			return {x:ev.pageX, y:ev.pageY};
		}
		return {
			x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
			y:ev.clientY + document.body.scrollTop  - document.body.clientTop
		};
	}

	function getPosition(e){
		var left = 0;
		var top  = 0;

		while (e.offsetParent){
			left += e.offsetLeft;
			top  += e.offsetTop;
			e     = e.offsetParent;
		}

		left += e.offsetLeft;
		top  += e.offsetTop;

		return {x:left, y:top};
	}

	function mouseMove(ev){
		ev           = ev || window.event;
		var mousePos = mouseCoords(ev);

		if(dragObject){
			dragObject.style.position = 'absolute';

			dragY = mousePos.y - mouseOffset.y;

			if (dragY < (scrollTrack.startY) + theScroller.parentNode.offsetTop) {
				dragY = scrollTrack.startY + theScroller.parentNode.offsetTop;
			} else if (dragY > (scrollTrack.distance) + scrollTrack.startY + theScroller.parentNode.offsetTop) {
				dragY = (scrollTrack.startY) + (scrollTrack.distance) + theScroller.parentNode.offsetTop;
			}



			dragObject.style.top = dragY - theScroller.parentNode.offsetTop + 'px';

//			-(innerScroll.style.top / (theScroller.parentNode.offsetHeight - innerScroll.offsetHeight) * (scrollTrack.distance)) + scrollTrack.startY + theScroller.parentNode.offsetTop = dragY + 'px';


			// position du texte qd on tire la barre
			innerScroll.style.top =  -(((dragY - scrollTrack.startY - theScroller.parentNode.offsetTop) / (scrollTrack.distance)) * (theScroller.parentNode.offsetHeight - innerScroll.offsetHeight)) + 'px';



//			dragObject.style.left     = mousePos.x - mouseOffset.x;

			return false;
		}
	}

	function mouseUp(ev){
		dragObject = null;
		clearTimeout(moveup);
		clearTimeout(movedown);
		clearTimeout (scrollBGint);
	}

	function makeDraggable(item){

		if(!item) return;
		item.onmousedown = function(ev){
			dragObject  = this;
			mouseOffset = getMouseOffset(this, ev);
			return false;
		}
	}

	function handle(delta) {
		if (delta > 0) {
			scrollItUpNR(3);
		} else {
			scrollItDownNR(3);
		}
	}


	function wheel(event){
	        var delta = 0;
	        if (!event) /* For IE. */
	                event = window.event;
	        if (event.wheelDelta) { /* IE/Opera. */
	                delta = event.wheelDelta/120;
	                /** In Opera 9, delta differs in sign as compared to IE.
	                 */
	                if (window.opera)
	                        delta = -delta;
	        } else if (event.detail) { /** Mozilla case. */
	                /** In Mozilla, sign of delta is different than in IE.
	                 * Also, delta is multiple of 3.
	                 */
	                delta = -event.detail/3;
	        }
	        /** If delta is nonzero, handle it.
	         * Basically, delta is now positive if wheel was scrolled up,
	         * and negative, if wheel was scrolled down.
	         */
	        if (delta)
	                handle(delta);
	        /** Prevent default actions caused by mouse wheel.
	         * That might be ugly, but we handle scrolls somehow
	         * anyway, so don't bother here..
	         */
	        if (event.preventDefault)
	                event.preventDefault();
		event.returnValue = false;
	}

	/** Initialization code.
	 * If you use your own event management code, change it as required.
	 */
	//if (window.addEventListener)
	        /** DOMMouseScroll is for mozilla. */
	 //       window.addEventListener('DOMMouseScroll', wheel, false);
	/** IE/Opera. */
	//window.onmousewheel = document.onmousewheel = wheel;


}


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: "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"
		}
	]

};