var is = new Object()
is.ie = (document.all) ? 1:0
is.ns4 = (document.layers) ? 1:0
is.w3c = (document.getElementById && !is.ie) ? 1:0
is.win = (navigator.userAgent.toLowerCase().indexOf("win") > 0) ? 1:0
is.mac = (navigator.userAgent.toLowerCase().indexOf("mac") > 0) ? 1:0


function ff_getObj(strLayer, objLayerOwner) {
	if (is.ie) return document.all[ strLayer ];
	else if (is.ns4)
	{
		if (!objLayerOwner) objLayerOwner = document.layers;
		var i = 0;
		var layer = objLayerOwner[ strLayer ];
	
		while ( !layer && ( i < objLayerOwner.length ) )
			layer = ff_getObj( strLayer, objLayerOwner[i++].document.layers );

		return layer;
	}
	else if (is.w3c) return document.getElementById( strLayer );
}


function ff_getY(strLayer) {
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if(is.ie||is.w3c) return objLayer.offsetTop;
		else if (is.ns4) return objLayer.top;
	}
}


function ff_getW(strLayer) {
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if(is.ie) return objLayer.style.pixelWidth
		else if(is.ns4) return objLayer.clip.width
		else if(is.w3c){
			var style=getComputedStyle(objLayer,null);
			return parseInt(style.getPropertyValue('width'));
		}
	}
}


function ff_getH(strLayer) {
	var h
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if (is.ie || is.w3c) {
			var c = objLayer.style.clip
			if (c.length > 0) {
				var arC = c.substr(c.indexOf("(") + 1).split(" ")
				h = parseInt(arC[2])
			} 
			else
				h = null
		} 
		else if(is.ns4) h = objLayer.clip.height
	}

	return h
}


function ff_getScrollH(strLayer) {
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if (is.ie) return (is.mac) ? objLayer.offsetHeight : objLayer.scrollHeight
		else if(is.ns4) return objLayer.document.height
		else if(is.w3c) {
			style=getComputedStyle(objLayer,null);
			return parseInt(style.getPropertyValue('height'));
		}
	}
}


function ff_moveBy(strLayer, dx, dy) {
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if (is.ie) {
			if (dx) objLayer.style.pixelLeft += dx;
			if (dy) objLayer.style.pixelTop += dy;
		} 
		else if (is.ns4) {
			if (dx) objLayer.left += dx;
			if (dy) objLayer.top += dy;
		} 
		else if (is.w3c) {
			if (dx) objLayer.style.left = (parseInt(objLayer.style.left) + dx) + "px";
			if (dy) objLayer.style.top = (parseInt(objLayer.style.top) + dy) + "px";
		}
	}
}


function ff_clip(strLayer,t,r,b,l) {
	var objLayer=ff_getObj(strLayer)
	if(objLayer){
		if (is.ie||is.w3c) objLayer.style.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)";
		else if (is.ns4) {
			objLayer.clip.top = t;
			objLayer.clip.right = r;
			objLayer.clip.bottom = b;
			objLayer.clip.left = l;
		}
	}
}


scrOrigY = new Array()
scrOrigH = new Array()
var scrollTimer;
function ff_scrollLayer(strLayer, direction, speed) {
	if(ff_getObj(strLayer)){
		scrollTimer = null
		var y = ff_getY(strLayer)

		if (typeof(scrOrigY[strLayer]) == 'undefined') {
			scrOrigY[strLayer] = y
			scrOrigH[strLayer] = ff_getH(strLayer)
		}
		var offset = y - scrOrigY[strLayer]
		speed = (speed) ? speed : 3
		if ( (direction == -1 && y+ff_getScrollH(strLayer) >= scrOrigY[strLayer]+scrOrigH[strLayer]) || (direction == 1 && y < scrOrigY[strLayer]) ) {
			offset += direction*speed
			ff_moveBy(strLayer, null, direction*speed)
			ff_clip(strLayer, 0-offset, ff_getW(strLayer), (0-offset) + scrOrigH[strLayer], 0)
			scrollTimer = setTimeout("ff_scrollLayer('" + strLayer + "', " + direction + ", " + speed + ")", 70)
		}
	}
}

