//////////////////////////////////////////////////////////////
//    
//	EnkiScroll - 2004-04-03
//
//	© Enki Technologies
//	info@enki-tech.com
//
//////////////////////////////////////////////////////////////
// 
// Requirements :
// - misc.js must be loaded before enkiscroll.js
// 
//////////////////////////////////////////////////////////////
// To do:
// - Test cross browser compatibility (nn4, ie4 and mac)
// - ie5/pc: when clicking fast on the scroll bar below or 
// above the slider, some clicks don't move the slider (double clics ?)
//////////////////////////////////////////////////////////////


////////////////////////////
// Scroll class constructor
////////////////////////////
function ScrollItem(id) {
	
	// Public properties
	this.hideVRuler = true;
	this.hideHRuler = true;
	this.hasVDragger = true;
	this.hasHDragger = true;

	this.autoVDraggerHeight = true;
	this.autoHDraggerWidth = true;
	this.hasVDraggerContent = true;
	this.hasHDraggerContent = true;

	this.disableOnDragStart = true;

	this.vDraggerXOffset = 0;
	this.vDraggerYOffset = 0;
	this.hDraggerXOffset = 0;
	this.hDraggerYOffset = 0;

	// Private properties
	this.id = id;
	this.timer = null;
	this.needVScroll = false;
	this.needHScroll = false;
	this.vDragging = false;
	this.hDragging = false;
	this.dragMouseStartX = 0;
	this.dragMouseStartY = 0;
	this.dragContentStartLeft = 0;
	this.dragContentStartTop = 0;
	
	// Layer objects and Arrow objects
	this.containerLayer = 		null;
	this.contentLayer = 		null;
	this.vRulerLayer = 			null;
	this.vDraggerLayer = 		null;
	this.vDraggerContentLayer = null;
	this.vDraggerContainerLayer = null;
	this.hRulerLayer = 			null;
	this.hDraggerLayer = 		null;
	this.hDraggerContentLayer = null;
	this.vDraggerContainerLayer = null;
	this.upArrow = 				null;
	this.downArrow = 			null;
	this.leftArrow = 			null;
	this.rightArrow = 			null;
	this.containerLayerHeight = 0;
	this.containerLayerWidth = 	0;
	this.contentLayerHeight = 	0;
	this.contentLayerWidth = 	0;
	this.vRulerLayerHeight = 	0;
	this.vRulerLayerTop = 		0;
	this.vRulerLayerLeft = 		0;
	this.vRulerLayerWidth = 	0;
	this.vDraggerLayerHeight = 	0;
	this.vDraggerLayerTop = 	0;
	this.hRulerLayerWidth = 	0;
	this.hRulerLayerTop = 		0;
	this.hRulerLayerLeft = 		0;
	this.hRulerLayerHeight = 	0;
	this.hDraggerLayerWidth = 	0;
	this.hDraggerLayerLeft = 	0;
	
	// Browser info
	this.config = new Object();
	this.config.dom = document.getElementById ? true : false;
	this.config.nn4 = document.layers ? true : false;
	this.config.ie4 = (document.all && !this.config.dom) ? true : false;

	// Methods
	this.init = 					ScrollItem_init;
	this.getContentLeftPosition = 	ScrollItem_getContentLeftPosition;
	this.getContentTopPosition = 	ScrollItem_getContentTopPosition;
	this.vScroll = 					ScrollItem_vScroll;
	this.hScroll = 					ScrollItem_hScroll;
	this.vScrollTo = 				ScrollItem_vScrollTo;
	this.hScrollTo = 				ScrollItem_hScrollTo;
	this.stopScroll = 				ScrollItem_stopScroll;
	this.onMouseDown = 				ScrollItem_onMouseDown;
	this.onMouseMove = 				ScrollItem_onMouseMove;
	this.onMouseUp = 				ScrollItem_onMouseUp;

	// launch init when page is loaded
	var str = "var f = new Function ( \"" + this.id + ".init();\" );";
	eval(str);
	toutou.addOnLoad(f);
}


////////////////////////////
// init
////////////////////////////
function ScrollItem_init() {
	// Layers
	if (this.config.ie4) {
		this.containerLayer = eval("document.all." + this.id + "Container");
		this.contentLayer = eval("document.all." + this.id + "Content");
		this.containerLayerHeight = parseInt(this.containerLayer.clientHeight);
		this.containerLayerWidth = parseInt(this.containerLayer.clientWidth);
		this.contentLayerHeight = parseInt(this.contentLayer.scrollHeight);
		this.contentLayerWidth = parseInt(this.contentLayer.scrollWidth);
		this.vRulerLayer = eval("document.all." + this.id + "VRuler");
		this.vDraggerLayer = eval("document.all." + this.id + "VDragger");
		this.vDraggerContentLayer = eval("document.all." + this.id + "VDraggerContent");
		this.vDraggerContainerLayer = eval("document.all." + this.id + "VDraggerContainer");
		this.hRulerLayer = eval("document.all." + this.id + "HRuler");
		this.hDraggerLayer = eval("document.all." + this.id + "HDragger");
		this.hDraggerContentLayer = eval("document.all." + this.id + "HDraggerContent");
		this.hDraggerContainerLayer = eval("document.all." + this.id + "HDraggerContainer");
		this.upArrow = eval("document.all." + this.id + "UpArrow");
		this.downArrow = eval("document.all." + this.id + "DownArrow");
		this.leftArrow = eval("document.all." + this.id + "LeftArrow");
		this.rightArrow = eval("document.all." + this.id + "RightArrow");
	}
	else if (this.config.nn4) {
		this.containerLayer = eval("document." + this.id + "Container");
		this.contentLayer = eval("this.container.document." + this.id + "Content.top");
		this.containerLayerHeight = parseInt(this.containerLayer.clip.bottom);
		this.containerLayerWidth = parseInt(this.containerLayer.clip.right);
		this.contentLayerHeight = parseInt(this.contentLayer.clip.bottom);
		this.contentLayerWidth = parseInt(this.contentLayer.clip.right);
		this.vRulerLayer = eval("document." + this.id + "VRuler");
		this.vDraggerLayer = eval("document." + this.id + "VDragger");
		this.vDraggerContentLayer = eval("document." + this.id + "VDraggerContent");
		this.vDraggerContainerLayer = eval("document." + this.id + "VDraggerContainer");
		this.hRulerLayer = eval("document." + this.id + "HRuler");
		this.hDraggerLayer = eval("document." + this.id + "HDragger");
		this.hDraggerContentLayer = eval("document." + this.id + "HDraggerContent");
		this.hDraggerContainerLayer = eval("document." + this.id + "HDraggerContainer");
		this.upArrow = eval("document." + this.id + "UpArrow");
		this.downArrow = eval("document." + this.id + "DownArrow");
		this.leftArrow = eval("document." + this.id + "LeftArrow");
		this.rightArrow = eval("document." + this.id + "RightArrow");
	}
	else if (this.config.dom) {
		this.containerLayer = document.getElementById(this.id + "Container");
		this.contentLayer = document.getElementById(this.id + "Content");
		this.containerLayerHeight = parseInt(this.containerLayer.offsetHeight);
		this.containerLayerWidth = parseInt(this.containerLayer.offsetWidth);
		this.contentLayerHeight = parseInt(this.contentLayer.offsetHeight);
		this.contentLayerWidth = parseInt(this.contentLayer.offsetWidth);
		this.vRulerLayer = document.getElementById(this.id + "VRuler");
		this.vDraggerLayer = document.getElementById(this.id + "VDragger");
		this.vDraggerContentLayer = document.getElementById(this.id + "VDraggerContent");
		this.vDraggerContainerLayer = document.getElementById(this.id + "VDraggerContainer");
		this.hRulerLayer = document.getElementById(this.id + "HRuler");
		this.hDraggerLayer = document.getElementById(this.id + "HDragger");
		this.hDraggerContentLayer = document.getElementById(this.id + "HDraggerContent");
		this.hDraggerContainerLayer = document.getElementById(this.id + "HDraggerContainer");
		this.upArrow = document.getElementById(this.id + "UpArrow");
		this.downArrow = document.getElementById(this.id + "DownArrow");
		this.leftArrow = document.getElementById(this.id + "LeftArrow");
		this.rightArrow = document.getElementById(this.id + "RightArrow");
	}

	// Check Rulers and draggers
	this.needVScroll = (this.containerLayerHeight < this.contentLayerHeight);
	this.needHScroll = (this.containerLayerWidth < this.contentLayerWidth);
	if (!this.vRulerLayer || !this.vDraggerLayer) this.hasVDragger = false;
	if (!this.hRulerLayer || !this.hDraggerLayer) this.hasHDragger = false;
	if (!this.vDraggerContentLayer) this.hasVDraggerContent = false;
	if (!this.hDraggerContentLayer) this.hasHDraggerContent = false;

	// Hide unnecessary rulers and draggers
	if (this.hideVRuler && !this.needVScroll) {
		hideElement(this.vRulerLayer);
		hideElement(this.vDraggerLayer);
		hideElement(this.upArrow);
		hideElement(this.downArrow);
	}
	if (this.hideHRuler && !this.needHScroll) {
		hideElement(this.hRulerLayer);
		hideElement(this.hDraggerLayer);
		hideElement(this.leftArrow);
		hideElement(this.rightArrow);
	}

	// Vertical ruler and dragger
	if (this.hasVDragger && this.needVScroll) {
		if (this.config.ie4) {
			this.vRulerLayerHeight = parseInt(this.vRulerLayer.clientHeight);
			this.vRulerLayerTop = getOffsetTop(this.vRulerLayer);
			this.vRulerLayerWidth = parseInt(this.vRulerLayer.clientWidth);
			this.vRulerLayerLeft = getOffsetLeft(this.vRulerLayer);
			if (this.vDraggerContainerLayer) {
				this.vDraggerXOffset = -1 * getOffsetLeft(this.vDraggerContainerLayer);
				this.vDraggerYOffset = -1 * getOffsetTop(this.vDraggerContainerLayer);
			}
		}
		else if (this.config.nn4) {
			this.vRulerLayerHeight = parseInt(this.vRulerLayer.clip.bottom);
			this.vRulerLayerTop = parseInt(this.vRulerLayer.top);
			this.vRulerLayerWidth = parseInt(this.vRulerLayer.clip.right);
			this.vRulerLayerLeft = parseInt(this.vRulerLayer.left);
			if (this.vDraggerContainerLayer) {
				this.vDraggerXOffset = -1 * parseInt(this.vDraggerContainerLayer.left);
				this.vDraggerYOffset = -1 * parseInt(this.vDraggerContainerLayer.top);
			}
		}
		else if (this.config.dom) {
			this.vRulerLayerHeight = parseInt(this.vRulerLayer.offsetHeight);
			this.vRulerLayerTop = getOffsetTop(this.vRulerLayer);
			this.vRulerLayerWidth = parseInt(this.vRulerLayer.offsetWidth);
			this.vRulerLayerLeft = getOffsetLeft(this.vRulerLayer);
			if (this.vDraggerContainerLayer) {
				this.vDraggerXOffset = -1 * getOffsetLeft(this.vDraggerContainerLayer);
				this.vDraggerYOffset = -1 * getOffsetTop(this.vDraggerContainerLayer);
			}
		}
		
		this.vDraggerLayerHeight = parseInt( this.containerLayerHeight / this.contentLayerHeight * this.vRulerLayerHeight );
		if (this.config.ie4){
			if (this.autoVDraggerHeight)
				this.vDraggerLayer.style.height = this.vDraggerLayerHeight;
			else 
				this.vDraggerLayerHeight = parseInt(this.vDraggerLayer.clientHeight)
			this.vDraggerLayer.style.left = this.vRulerLayerLeft + this.vDraggerXOffset;
		}
		else if (this.config.nn4){
			if (this.autoVDraggerHeight)
				this.vDraggerLayer.height = this.vDraggerLayerHeight;
			else 
				this.vDraggerLayerHeight = parseInt(this.vDraggerLayer.clip.bottom)
			this.vDraggerLayer.left = this.vRulerLayerLeft + this.vDraggerXOffset;
		}
		else if (this.config.dom){
			if (this.autoVDraggerHeight)
				this.vDraggerLayer.style.height = this.vDraggerLayerHeight + "px";
			else 
				this.vDraggerLayerHeight = parseInt(this.vDraggerLayer.offsetHeight)
			var pos = this.vRulerLayerLeft + this.vDraggerXOffset + 0;
			this.vDraggerLayer.style.left = pos + "px";
		}
		this.vScrollTo(this.getContentTopPosition());  // set Dragger position
		showElement(this.vDraggerLayer);
	}

	// Horizontal ruler and dragger
	if (this.hasHDragger && this.needHScroll) {
		if (this.config.ie4) {
			this.hRulerLayerWidth = parseInt(this.hRulerLayer.clientWidth);
			this.hRulerLayerLeft = getOffsetLeft(this.hRulerLayer);
			this.hRulerLayerHeight = parseInt(this.hRulerLayer.clientHeight);
			this.hRulerLayerTop = getOffsetTop(this.hRulerLayer);
		}
		else if (this.config.nn4) {
			this.hRulerLayerWidth = parseInt(this.hRulerLayer.clip.right);
			this.hRulerLayerLeft = parseInt(this.hRulerLayer.left);
			this.hRulerLayerHeight = parseInt(this.hRulerLayer.clip.bottom);
			this.hRulerLayerTop = parseInt(this.hRulerLayer.top);
		}
		else if (this.config.dom) {
			this.hRulerLayerWidth = parseInt(this.hRulerLayer.offsetWidth);
			this.hRulerLayerLeft = getOffsetLeft(this.hRulerLayer);
			this.hRulerLayerHeight = parseInt(this.hRulerLayer.offsetHeight);
			this.hRulerLayerTop = getOffsetTop(this.hRulerLayer);
		}
		
		this.hDraggerLayerWidth = parseInt( this.containerLayerWidth / this.contentLayerWidth * this.hRulerLayerWidth );
		if (this.config.ie4){
			if (this.autoHDraggerWidth)
				this.hDraggerLayer.style.width = this.hDraggerLayerWidth;
			else 
				this.hDraggerLayerWidth = parseInt(this.hDraggerLayer.clientWidth)
			this.hDraggerLayer.style.top = this.hRulerLayerTop + this.hDraggerYOffset;
		}
		else if (this.config.nn4){
			if (this.autoHDraggerWidth)
				this.hDraggerLayer.width = this.hDraggerLayerWidth;
			else 
				this.hDraggerLayerWidth = parseInt(this.hDraggerLayer.clip.right)
			this.hDraggerLayer.top = this.hRulerLayerTop + this.hDraggerYOffset;
		}
		else if (this.config.dom){
			if (this.autoHDraggerWidth)
				this.hDraggerLayer.style.width = this.hDraggerLayerWidth + "px";
			else 
				this.hDraggerLayerWidth = parseInt(this.hDraggerLayer.offsetWidth)
			 var pos = this.hRulerLayerTop + this.hDraggerYOffset + 0;
			 this.hDraggerLayer.style.top = pos + "px";
		}
		this.hScrollTo(this.getContentLeftPosition());  // set Dragger position
		showElement(this.hDraggerLayer);
	}

	// load events
	if(this.config.nn4){
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
		window.onresize = location.reload();
	}

	if (this.disableOnDragStart) { document.ondragstart = function() { return false; } }
	var otherOnMouseDown = (document.onmousedown) ? document.onmousedown : new Function
	eval("document.onmousedown = function(e) { " + this.id + ".onMouseDown(e); otherOnMouseDown(e) }")
	var otherOnMouseMove = (document.onmousemove) ? document.onmousemove : new Function
	eval("document.onmousemove = function(e) { " + this.id + ".onMouseMove(e); otherOnMouseMove(e) }")
	var otherOnMouseUp = (document.onmouseup) ? document.onmouseup : new Function
	eval("document.onmouseup = function(e) { " + this.id + ".onMouseUp(e); otherOnMouseUp(e) }")
}


////////////////////////////
// getContentLeftPosition
////////////////////////////
function ScrollItem_getContentLeftPosition() {
	var leftPos;
	if (this.config.ie4) 		leftPos = this.contentLayer.style.pixelLeft;
	else if (this.config.nn4) 	leftPos = this.contentLayer.left;
	else if (this.config.dom)	leftPos = parseInt(this.contentLayer.offsetLeft);
	return leftPos;
}


////////////////////////////
// getContentTopPosition
////////////////////////////
function ScrollItem_getContentTopPosition() {
	var topPos;
	if (this.config.ie4) 		topPos = this.contentLayer.style.pixelTop;
	else if (this.config.nn4) 	topPos = this.contentLayer.top;
	else if (this.config.dom)	topPos = parseInt(this.contentLayer.offsetTop);
	return topPos;
}


////////////////////////////
// vScroll
////////////////////////////
function ScrollItem_vScroll(step,onceOnly) {
	if (!this.needVScroll) { return; }
	var topPos = this.getContentTopPosition();
	this.vScrollTo(topPos + step);

	if (!onceOnly)
		this.timer = setTimeout(this.id + ".vScroll(" + step + ")",25);
}


////////////////////////////
// hScroll
////////////////////////////
function ScrollItem_hScroll(step,onceOnly) {
	if (!this.needHScroll) { return; }
	var leftPos = this.getContentLeftPosition();
	this.hScrollTo(leftPos + step);

	if (!onceOnly)
		this.timer = setTimeout(this.id + ".hScroll(" + step + ")",25);
}


////////////////////////////
// vScrollTo
////////////////////////////
function ScrollItem_vScrollTo(contentTopPos) {
	if (!this.needVScroll) { return; }
	// stay within boundaries
	contentTopPos = parseInt(contentTopPos);
	if (contentTopPos > 0) contentTopPos = 0;
	var max = this.contentLayerHeight - this.containerLayerHeight;
	if (contentTopPos < -max) contentTopPos = -max;

	// scroll Content layer and dragger	
	if (this.hasVDragger)
		this.vDraggerLayerTop = this.vRulerLayerTop + parseInt( -contentTopPos / (this.contentLayerHeight-this.containerLayerHeight) * (this.vRulerLayerHeight-this.vDraggerLayerHeight) );
	if (this.config.ie4) {
		this.contentLayer.style.top = contentTopPos;
		if (this.hasVDragger) {
			if (this.hasVDraggerContent) {
				this.vDraggerContentLayer.style.top = this.vRulerLayerTop - this.vDraggerLayerTop;
				this.vDraggerLayer.style.top = this.vDraggerLayerTop + this.vDraggerYOffset;
			}
			else {
				this.vDraggerLayer.style.top = this.vDraggerLayerTop + this.vDraggerYOffset;
			}
		}
	}
	else if (this.config.nn4) {
		this.contentLayer.top = contentTopPos;
		if (this.hasVDragger) {
			if (this.hasVDraggerContent) {
				this.vDraggerContentLayer.top = this.vRulerLayerTop - this.vDraggerLayerTop;
				this.vDraggerLayer.top = this.vDraggerLayerTop + this.vDraggerYOffset;
			}
			else {
				this.vDraggerLayer.top = this.vDraggerLayerTop + this.vDraggerYOffset;
			}
		}
	}
	else if (this.config.dom) {
		this.contentLayer.style.top = contentTopPos + "px";
		if (this.hasVDragger) {
			if (this.hasVDraggerContent) {
				this.vDraggerContentLayer.style.top = this.vRulerLayerTop - this.vDraggerLayerTop + "px";
				var pos = this.vDraggerLayerTop + this.vDraggerYOffset + 0;
				this.vDraggerLayer.style.top = pos + "px";
			}
			else {
				var pos = this.vDraggerLayerTop + this.vDraggerYOffset + 0;
				this.vDraggerLayer.style.top = pos + "px";
			}
		}
	}
}


////////////////////////////
// hScrollTo
////////////////////////////
function ScrollItem_hScrollTo(contentLeftPos) {
	if (!this.needHScroll) { return; }
	// stay within boundaries
	contentLeftPos = parseInt(contentLeftPos);
	if (contentLeftPos > 0) contentLeftPos = 0;
	var max = this.contentLayerWidth - this.containerLayerWidth;
	if (contentLeftPos < -max) contentLeftPos = -max;

	// scroll Content layer and dragger	
	if (this.hasHDragger)
		this.hDraggerLayerLeft = this.hRulerLayerLeft + parseInt( -contentLeftPos / (this.contentLayerWidth-this.containerLayerWidth) * (this.hRulerLayerWidth-this.hDraggerLayerWidth) );
	if (this.config.ie4) {
		this.contentLayer.style.left = contentLeftPos;
		if (this.hasHDragger) {
			if (this.hasHDraggerContent) {
				this.hDraggerContentLayer.style.left = this.hRulerLayerLeft - this.hDraggerLayerLeft;
				this.hDraggerLayer.style.left = this.hDraggerLayerLeft + this.hDraggerXOffset;
			}
			else {
				this.hDraggerLayer.style.left = this.hDraggerLayerLeft + this.hDraggerXOffset;
			}
		}
	}
	else if (this.config.nn4) {
		this.contentLayer.left = contentLeftPos;
		if (this.hasHDragger) {
			if (this.hasHDraggerContent) {
				this.hDraggerContentLayer.left = this.hRulerLayerLeft - this.hDraggerLayerLeft;
				this.hDraggerLayer.left = this.hDraggerLayerLeft + this.hDraggerXOffset;
			}
			else {
				this.hDraggerLayer.left = this.hDraggerLayerLeft + this.hDraggerXOffset;
			}
		}
	}
	else if (this.config.dom) {
		this.contentLayer.style.left = contentLeftPos + "px";
		if (this.hasHDragger) {
			if (this.hasHDraggerContent) {
				this.hDraggerContentLayer.style.left = this.hRulerLayerLeft - this.hDraggerLayerLeft + "px";
				var pos = this.hDraggerLayerLeft + this.hDraggerXOffset + 0;
				this.hDraggerLayer.style.left = pos + "px";
			}
			else {
				var pos = this.hDraggerLayerLeft + this.hDraggerXOffset + 0;
				this.hDraggerLayer.style.left = pos + "px";
			}
		}
	}
}


////////////////////////////
// stopScroll
////////////////////////////
function ScrollItem_stopScroll() {
	clearTimeout(this.timer);
}


////////////////////////////
// onMouseDown
////////////////////////////
function ScrollItem_onMouseDown(e) {
	if (!this.hasVDragger && !this.hasHDragger) { return true; }
	if (!this.needVScroll && !this.needHScroll) { return true; }
	if((document.layers && e.which!=1) || (document.all && event.button!=1)) return true; // Enables the right mousebutton
	
	var mouseX = getMouseXPosition(e);
	var mouseY = getMouseYPosition(e);

	// Vertical scroll bar
	if (	mouseX >= this.vRulerLayerLeft &&
			mouseX <= this.vRulerLayerLeft + this.vRulerLayerWidth &&
			mouseY >= this.vRulerLayerTop &&
			mouseY <= this.vRulerLayerTop + this.vRulerLayerHeight
	) {
		if (mouseY < this.vDraggerLayerTop) {
			// click above dragger
			this.vScroll(this.containerLayerHeight,true);
		}
		else if (mouseY > this.vDraggerLayerTop + this.vDraggerLayerHeight) {
			// click below dragger
			this.vScroll(-this.containerLayerHeight,true);
		}
		else {
			// click on dragger
			this.vDragging = true;
			this.dragMouseStartY = mouseY;
			this.dragContentStartTop = this.getContentTopPosition();
		}
	}

	// Horizontal scroll bar
	else if (	mouseY >= this.hRulerLayerTop &&
				mouseY <= this.hRulerLayerTop + this.hRulerLayerHeight &&
				mouseX >= this.hRulerLayerLeft &&
				mouseX <= this.hRulerLayerLeft + this.hRulerLayerWidth
	) {
		if (mouseX < this.hDraggerLayerLeft) {
			// click left of dragger
			this.hScroll(this.containerLayerWidth,true);
		}
		else if (mouseX > this.hDraggerLayerLeft + this.hDraggerLayerWidth) {
			// click right of dragger
			this.hScroll(-this.containerLayerWidth,true);
		}
		else {
			// click on dragger
			this.hDragging = true;
			this.dragMouseStartX = mouseX;
			this.dragContentStartLeft = this.getContentLeftPosition();
		}
	}

	// Else nothing to do
	else { return true; }

	return false;
}


////////////////////////////
// onMouseMove
////////////////////////////
function ScrollItem_onMouseMove(e) {
	if (this.vDragging) {
		// Vertical scroll
		var mouseY = getMouseYPosition(e);
		var rulerDistance = mouseY - this.dragMouseStartY;
		var contentDistance = rulerDistance / this.vRulerLayerHeight * this.contentLayerHeight;
		this.vScrollTo(this.dragContentStartTop - contentDistance);

		// So ie-pc doesn't select gifs
		if (this.config.ie4) return false;
	}
	if (this.hDragging) {
		// Horizontal scroll
		var mouseX = getMouseXPosition(e);
		var rulerDistance = mouseX - this.dragMouseStartX;
		var contentDistance = rulerDistance / this.hRulerLayerWidth * this.contentLayerWidth;
		this.hScrollTo(this.dragContentStartLeft - contentDistance);

		// So ie-pc doesn't select gifs
		if (this.config.ie4) return false;
	}
	return false;
}


////////////////////////////
// onMouseUp
////////////////////////////
function ScrollItem_onMouseUp() {
	this.vDragging = false;
	this.hDragging = false;
	this.stopScroll();
	return false;
}


////////////////////////////
// Misceallaneous
////////////////////////////
function getOffsetLeft(el) {	// ie and dom only
	var ol = el.offsetLeft;
	while ((el = el.offsetParent) != null)
		ol += el.offsetLeft;
	return ol;
}
function getOffsetTop(el) {		// ie and dom only
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null)
		ot += el.offsetTop;
	return ot;
}
function getMouseXPosition(e) {
	var X;
	if (document.all) { X = event.clientX + document.body.scrollLeft; } 	// ie4
	else if (document.layers || document.getElementById) { X = e.pageX; }	// nn4 || dom
	return X;
}
function getMouseYPosition(e) {
	var Y;
	if(document.all){ Y = event.clientY + document.body.scrollTop; }		// ie4
	else if (document.layers || document.getElementById) { Y = e.pageY;	}	// nn4 || dom
	return Y;
}
function showElement(elt) {
	if (document.all || document.getElementById) { 
		if (elt && elt.style) { elt.style.visibility='visible'; }
	}
	else if (document.layers) { 
		if (elt) { elt.visibility='show'; }
	}
}
function hideElement(elt) {
	if (document.all || document.getElementById) { 
		if (elt && elt.style) { elt.style.visibility='hidden'; }
	}
	else if (document.layers) { 
		if (elt) { elt.visibility='hide'; }
	}
}


