function Scrollx(targetId) {
	if (!document.getElementById || document.getElementById(targetId) == null || !document.createElement) return;
	var dDiv = document.getElementById(targetId);
	var cDiv = createDiv('contentwrapper',true)
	var mDiv = createDiv('mcontentwrapper',true)
	var tDiv = createDiv('scrollwrapper',true)
	var pDiv = createDiv('copyholder',true)
	
	pDiv.style.border = '1px solid transparent';
	pDiv.style.visibility = 'hidden';
	copyStyles(
	'dDiv','pDiv',false,true,'0px',
	['border-left-width','border-right-width','border-top-width','border-bottom-width'],
	['borderLeftWidth','borderRightWidth','borderTopWidth','borderBottomWidth']
	);
	var intlHeight = dDiv.offsetHeight, intlWidth = dDiv.offsetWidth;
	
	copyStyles(
	'dDiv','mDiv',false,true,'0px',
	['padding-left','padding-right','padding-top','padding-bottom'],
	['paddingLeft','paddingRight','paddingTop','paddingBottom']
	);
	
	var postWidth = dDiv.offsetWidth, postHeight = dDiv.offsetHeight, heightLoss = intlHeight - postHeight, widthLoss = intlWidth - postWidth;
	dDiv.style.width = intlWidth + 'px'; dDiv.style.height = intlHeight + 'px';
	tDiv.style.width = dDiv.offsetWidth+'px'; tDiv.style.height = dDiv.offsetHeight+'px';
	mDiv.style.width = postWidth+'px';	mDiv.style.height = postHeight+'px';
	tDiv.style.position = 'absolute'; tDiv.style.top = '0px'; tDiv.style.left = '0px';
	cDiv.innerHTML = dDiv.innerHTML; dDiv.innerHTML = '';
	dDiv.appendChild(tDiv); dDiv.appendChild(mDiv); dDiv.appendChild(pDiv); mDiv.appendChild(cDiv)
	cDiv.style.position = 'relative'; mDiv.style.position = 'relative'; cDiv.style.padding = '1px';

	dDiv.style.overflow = 'hidden'; mDiv.style.overflow = 'hidden';
	mDiv.style.top = "0"; cDiv.style.top = "0";
	tDiv.hVspace = 0, tDiv.vHspace = 0

	cDiv.getContentWidth = function() {
		var cChilds = cDiv.childNodes, maxCWidth = 0, compPad = 0;
		for (var i=0;i<cChilds.length;i++) {
			if (cChilds[i].offsetWidth) {maxCWidth = Math.max(cChilds[i].offsetWidth,maxCWidth)}
			}
		cDiv.contentWidth = maxCWidth+widthLoss;
		return cDiv.contentWidth;
		}
	
	cDiv.getContentHeight = function () {
		cDiv.contentHeight = cDiv.offsetHeight + heightLoss;
		return cDiv.contentHeight;
		}
	
	tDiv.createVScroll = function() {
	if (cDiv.getContentHeight() > dDiv.offsetHeight && !dDiv.vScroll) {
		vrt = new Array();
		createScrollBars(vrt,'vscroller');
		tDiv.barPadding = parseInt(getActiveStyle(vrt.sBar,'padding-top','paddingTop'));
		vrt.sBar.style.padding = '0px';
		vrt.sBar.vertical = true;
		
		prepareScroll(vrt.sDiv,vrt.sBar,vrt.sFDiv,vrt.sFBar,vrt.sSDiv,vrt.sSBar, tDiv.vHspace)
		tDiv.hVspace = vrt.sDiv.offsetWidth;
		mDiv.style.width = postWidth - tDiv.hVspace + 'px'
		cDiv.getContentWidth();
		cDiv.getContentHeight();
		prepareScroll(vrt.sDiv,vrt.sBar,vrt.sFDiv,vrt.sFBar,vrt.sSDiv,vrt.sSBar, tDiv.vHspace)
		dDiv.vScroll = true;
		return true;
		} else {return false;}
		
	}
	
	tDiv.createHScroll = function() {
	if (cDiv.getContentWidth() > dDiv.offsetWidth && !dDiv.hScroll) {
		var hrz = new Array();
		createScrollBars(hrz,'hscroller');
		tDiv.barPadding = parseInt(getActiveStyle(hrz.sBar,'padding-left','paddingLeft'));
		hrz.sBar.style.padding = '0px';

		if (window.opera) hrz.sBar.style.position = 'relative';

		hrz.sBar.vertical = false;
		prepareScroll(hrz.sDiv,hrz.sBar,hrz.sFDiv,hrz.sFBar,hrz.sSDiv,hrz.sSBar,tDiv.hVspace)
		tDiv.vHspace = hrz.sDiv.offsetHeight;
		mDiv.style.height = postHeight - tDiv.vHspace + 'px';
		dDiv.hScroll = true;
		if (dDiv.vScroll) {
			cDiv.getContentWidth();
			cDiv.getContentHeight();
			prepareScroll(vrt.sDiv,vrt.sBar,vrt.sFDiv,vrt.sFBar,vrt.sSDiv,vrt.sSBar,tDiv.vHspace)
			hrz.jBox = createDiv('scrollerjogbox');
			hrz.jBox.prnt = tDiv;
			tDiv.appendChild(hrz.jBox);
			hrz.jBox.onmousedown = function() {
					hrz.sBar.scrollBoth = true; document.goScroll = hrz.sBar; hrz.sBar.clicked = true;
					hrz.sBar.moved = false; hrz.sBar.scrlTrgt.vBar.moved = false;
					addTrigger(document,'selectstart', CSBpreventTselect);
					addTrigger(document,'mousemove',CSBMoveBar);
					addTrigger(document,'mouseup',CSBMouseUp);
					return false;
				}
		}
		if (!dDiv.vScroll && cDiv.offsetHeight > dDiv.offsetHeight) {
			tDiv.createVScroll();
			cDiv.getContentWidth();
			prepareScroll(hrz.sDiv,hrz.sBar,hrz.sFDiv,hrz.sFBar,hrz.sSDiv,hrz.sSBar,tDiv.hVspace)
			}
		return true;
		} else {return false;}
	}
	
	document.goScroll = null;
	var vscroll = tDiv.createVScroll();
	var hscroll = tDiv.createHScroll();
	if (!hscroll && !vscroll) {tDiv.style.zIndex='-1'; return false;};
	
	
	copyStyles(
	'pDiv','dDiv',false,true,'0px',
	['border-left-width','border-right-width','border-top-width','border-bottom-width'],
	['borderLeftWidth','borderRightWidth','borderTopWidth','borderBottomWidth']
	);
	cDiv.style.padding = '0px';
	
	dDiv.removeChild(pDiv);
	
	function getActiveStyle(elem,style,stylecc) {
	if (window.getComputedStyle) return window.getComputedStyle(elem,null).getPropertyValue(style);
	if (elem.currentStyle) return eval("elem.currentStyle."+stylecc);
	return '';
	}
	
	function copyStyles(src,dest,store,replace,replaceStr,sList,camelList) {
		for (var i=0;i<sList.length;i++) {
			eval(dest+'.style.'+camelList[i]+' = getActiveStyle('+src+',"'+sList[i]+'","'+camelList[i]+'")');
			if (replace) eval(src+'.style.'+camelList[i]+' = "'+replaceStr+'"');
		}
	}
	
	function createDiv(typeName,noGenericClass) {
	var newDiv = document.createElement('div');
	newDiv.id = targetId+'_'+typeName;
	newDiv.className = (noGenericClass) ? typeName : typeName+' scrollgeneric';
	return newDiv;
	}
	
		function createScrollBars(ary,bse) {
	ary.sDiv = createDiv(bse+'base');
	ary.sFDiv = createDiv(bse+'basebeg')
	ary.sSDiv = createDiv(bse+'baseend')
	ary.sBar = createDiv(bse+'bar');
	ary.sFBar = createDiv(bse+'barbeg')
	ary.sSBar = createDiv(bse+'barend')
	tDiv.appendChild(ary.sDiv); ary.sDiv.appendChild(ary.sBar);
	ary.sDiv.appendChild(ary.sFDiv); ary.sDiv.appendChild(ary.sSDiv);
	ary.sBar.appendChild(ary.sFBar); ary.sBar.appendChild(ary.sSBar);
	}
	
	function prepareScroll(sDiv,sBar,sFDiv,sFBar,sSDiv,sSBar, reqSpace) {
	sBar.minPos = tDiv.barPadding;
	sBar.curPos = 0;
	sBar.ofstParent = sDiv;
	sBar.mDiv = mDiv;
	sBar.scrlTrgt = cDiv;

	if (sBar.vertical) {
		sDiv.style.height = (tDiv.offsetHeight-reqSpace)+'px';
		sDiv.style.left = tDiv.offsetWidth-sDiv.offsetWidth+'px';
		sBar.style.height = parseInt(dDiv.offsetHeight / cDiv.contentHeight * sDiv.offsetHeight)+'px';
		sBar.style.top = sBar.minPos+'px';
		sBar.maxPos = sDiv.offsetHeight - sBar.offsetHeight - tDiv.barPadding-20;
		sBar.mxScroll = mDiv.offsetHeight - cDiv.contentHeight;
		sBar.pageScroll = parseInt(sBar.offsetHeight * 0.96);

		cDiv.vBar = sBar;
		sFDiv.style.height = sDiv.offsetHeight-sSDiv.offsetHeight+'px';
		sFBar.style.height = sBar.offsetHeight-sSBar.offsetHeight+'px';
		sSBar.style.top = sFBar.offsetHeight+'px';
		sSDiv.style.top = sFDiv.offsetHeight+'px';
		} else {
		sDiv.style.width = (tDiv.offsetWidth - reqSpace)+'px';
		sDiv.style.top = tDiv.offsetHeight-sDiv.offsetHeight+'px';
		sBar.style.width = parseInt(dDiv.offsetWidth / cDiv.contentWidth * sDiv.offsetWidth)+'px';
		sBar.style.left = sBar.minPos+'px';
		sBar.maxPos = sDiv.offsetWidth - sBar.offsetWidth - tDiv.barPadding;
		sBar.mxScroll = mDiv.offsetWidth - cDiv.contentWidth;
		sBar.pageScroll = parseInt(sBar.offsetWidth * 0.96);
		
		cDiv.hBar = sBar;
		sFDiv.style.width = sDiv.offsetWidth-sSDiv.offsetWidth+'px';
		sFBar.style.width = sBar.offsetWidth-sSBar.offsetWidth+'px';
		sSBar.style.left = sFBar.offsetWidth+'px';
		sSDiv.style.left = sFDiv.offsetWidth+'px';
		
		}

	mDiv.style.zIndex = getActiveStyle(sBar,'z-index','zIndex');
	sBar.sRange = sBar.maxPos - sBar.minPos;
	sBar.onmousedown = function() {
		this.clicked = true; document.goScroll = this; this.scrollBoth = false; this.moved = false;
		addTrigger(document,'selectstart', CSBpreventTselect);
		addTrigger(document,'mousemove',CSBMoveBar);
		addTrigger(document,'mouseup',CSBMouseUp);
		return false;
		}

	if (window.addEventListener)
		window.addEventListener('DOMMouseScroll', mouseWheel, false);

	window.onmousewheel = document.onmousewheel = mouseWheel;
	function mouseWheel(event) {
		if (!event)
			event = window.event;

		if (!event) {
			return true;
		}

		if (!event.target) {
			r = dDiv.getBoundingClientRect();
			if (event.clientX > r.right || event.clientX < r.left) return true;
			if (event.clientY > r.bottom || event.clientY < r.top) return true;
		} else {
			var item = event.target;
			while (item != cDiv) {
				if (!item.parentNode) return true;
				item = item.parentNode;
			}
		}

		if (event.preventDefault) {
			event.preventDefault();
		}
		if (event.stopPropagation) {
			event.stopPropagation();
		}
		event.cancelBubble = true;

		var delta = 0;

		if (event.wheelDelta) {
			delta = event.wheelDelta/120;
		
//			if (window.opera)
//				delta = -delta;
		} else if (event.detail) { 
			delta = -event.detail/3;
		}
		
		if (delta) {
			var newCurPos = sBar.curPos - delta * 15;
			sBar.curPos = (Math.min(Math.max(newCurPos,sBar.minPos),sBar.maxPos));
			sBar.style.top = sBar.curPos + "px";
			sBar.targetScroll = parseInt(((sBar.curPos - sBar.minPos) / sBar.sRange) * sBar.mxScroll);
			if (sBar.vertical) {
				sBar.style.top = sBar.curPos + "px";
				sBar.scrlTrgt.style.top = sBar.targetScroll + 'px';
			} else {
				sBar.style.left = sBar.curPos + "px";
				sBar.scrlTrgt.style.left = sBar.targetScroll + 'px';
			}
		}

		return false;
		}
		
	sDiv.onmousedown = function(e)  {
		if (!e) {var e = window.event;}
		if (e.target && (e.target == sFBar || e.target == sSBar )) return;
		if (e.srcElement && (e.srcElement == sFBar || e.srcElement == sSBar)) return;
		var newCurPos, relPos;
		var xScrolled = (window.pageXOffset) ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : 0;	
		var yScrolled = (window.pageYOffset) ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : 0;	
		sBar.mDiv.scrollTop = 0; sBar.mDiv.scrollLeft = 0;
		CSBFindPos(sBar);
		relPos = (sBar.vertical) ? e.clientY + yScrolled - sBar.yPos : e.clientX + xScrolled - sBar.xPos;
		newCurPos = (relPos>0) ? sBar.curPos+sBar.pageScroll : sBar.curPos-sBar.pageScroll;
		sBar.curPos = (Math.min(Math.max(newCurPos,sBar.minPos),sBar.maxPos))
		sBar.targetScroll = parseInt(((sBar.curPos - sBar.minPos) / sBar.sRange) * sBar.mxScroll);
		if (sBar.vertical) {
			sBar.style.top = sBar.curPos + "px";
			sBar.scrlTrgt.style.top = sBar.targetScroll + 'px';
			} else {
			sBar.style.left = sBar.curPos + "px";
			sBar.scrlTrgt.style.left = sBar.targetScroll + 'px';
			}
		return false;
		}

	}

}

function UpdateScroll(targetId) {
	vrt = new Array();

	var dDiv = document.getElementById(targetId);
	var cDiv = findDiv('contentwrapper')
	var mDiv = findDiv('mcontentwrapper')
	var tDiv = findDiv('scrollwrapper')
	var pDiv = findDiv('copyholder')

	var intlHeight = dDiv.offsetHeight, intlWidth = dDiv.offsetWidth;
	var postWidth = dDiv.offsetWidth, postHeight = dDiv.offsetHeight, heightLoss = intlHeight - postHeight, widthLoss = intlWidth - postWidth;
	dDiv.style.width = intlWidth + 'px'; dDiv.style.height = intlHeight + 'px';
	tDiv.style.width = dDiv.offsetWidth+'px'; tDiv.style.height = dDiv.offsetHeight+'px';
	mDiv.style.width = postWidth+'px';	mDiv.style.height = postHeight+'px';

	findScrollBars(vrt, 'vscroller');
	tDiv.barPadding = parseInt(getActiveStyle(vrt.sBar,'padding-top','paddingTop'));
	vrt.sBar.style.padding = '0px';
	vrt.sBar.vertical = true;
	
//	prepareScroll(vrt.sDiv,vrt.sBar,vrt.sFDiv,vrt.sFBar,vrt.sSDiv,vrt.sSBar, tDiv.vHspace)
	tDiv.hVspace = vrt.sDiv.offsetWidth;
	mDiv.style.width = postWidth - tDiv.hVspace + 'px'
	cDiv.getContentWidth();
	cDiv.getContentHeight();
	prepareScroll(vrt.sDiv,vrt.sBar,vrt.sFDiv,vrt.sFBar,vrt.sSDiv,vrt.sSBar, tDiv.vHspace)
	dDiv.vScroll = true;
	return true;



	function findScrollBars(ary,bse) {
	ary.sDiv = findDiv(bse+'base');
	ary.sFDiv = findDiv(bse+'basebeg')
	ary.sSDiv = findDiv(bse+'baseend')
	ary.sBar = findDiv(bse+'bar');
	ary.sFBar = findDiv(bse+'barbeg')
	ary.sSBar = findDiv(bse+'barend')
	}
	function findDiv(typeName) {
	return document.getElementById(targetId+'_'+typeName);
	}

	function getActiveStyle(elem,style,stylecc) {
	if (window.getComputedStyle) return window.getComputedStyle(elem,null).getPropertyValue(style);
	if (elem.currentStyle) return eval("elem.currentStyle."+stylecc);
	return '';
	}

	function prepareScroll(sDiv,sBar,sFDiv,sFBar,sSDiv,sSBar, reqSpace) {
		sBar.minPos = tDiv.barPadding;
//		sBar.curPos = 0;
		sBar.ofstParent = sDiv;
		sBar.mDiv = mDiv;
		sBar.scrlTrgt = cDiv;

		if (sBar.vertical) {
			sDiv.style.height = (tDiv.offsetHeight-reqSpace)+'px';
			sDiv.style.left = tDiv.offsetWidth-sDiv.offsetWidth+'px';
			sBar.style.height = parseInt(dDiv.offsetHeight / cDiv.contentHeight * sDiv.offsetHeight)+'px';
			sBar.style.top = sBar.minPos+'px';
			sBar.maxPos = sDiv.offsetHeight - sBar.offsetHeight - tDiv.barPadding-20;
			sBar.mxScroll = mDiv.offsetHeight - cDiv.contentHeight;
			sBar.pageScroll = parseInt(sBar.offsetHeight * 0.96);
	
			cDiv.vBar = sBar;
			sFDiv.style.height = sDiv.offsetHeight-sSDiv.offsetHeight+'px';
			sFBar.style.height = sBar.offsetHeight-sSBar.offsetHeight+'px';
			sSBar.style.top = sFBar.offsetHeight+'px';
			sSDiv.style.top = sFDiv.offsetHeight+'px';
		} else {
			sDiv.style.width = (tDiv.offsetWidth - reqSpace)+'px';
			sDiv.style.top = tDiv.offsetHeight-sDiv.offsetHeight+'px';
			sBar.style.width = parseInt(dDiv.offsetWidth / cDiv.contentWidth * sDiv.offsetWidth)+'px';
			sBar.style.left = sBar.minPos+'px';
			sBar.maxPos = sDiv.offsetWidth - sBar.offsetWidth - tDiv.barPadding;
			sBar.mxScroll = mDiv.offsetWidth - cDiv.contentWidth;
			sBar.pageScroll = parseInt(sBar.offsetWidth * 0.96);
			
			cDiv.hBar = sBar;
			sFDiv.style.width = sDiv.offsetWidth-sSDiv.offsetWidth+'px';
			sFBar.style.width = sBar.offsetWidth-sSBar.offsetWidth+'px';
			sSBar.style.left = sFBar.offsetWidth+'px';
			sSDiv.style.left = sFDiv.offsetWidth+'px';
			
		}
	
		mDiv.style.zIndex = getActiveStyle(sBar,'z-index','zIndex');
		sBar.sRange = sBar.maxPos - sBar.minPos;

		if (sBar.vertical) {
			sBar.curPos = (cDiv.offsetTop * sBar.sRange / sBar.mxScroll) + sBar.minPos;
			if (sBar.curPos > sBar.maxPos) {
				sBar.curPos = sBar.maxPos;
				sBar.targetScroll = parseInt(((sBar.curPos - sBar.minPos) / sBar.sRange) * sBar.mxScroll);
				cDiv.style.top = sBar.targetScroll + 'px';
			}
			sBar.style.top = sBar.curPos+'px';
		} else {
			sBar.curPos = (cDiv.offsetLeft * sBar.sRange / sBar.mxScroll) + sBar.minPos;
			if (sBar.curPos > sBar.maxPos) {
				sBar.curPos = sBar.maxPos;
				sBar.targetScroll = parseInt(((sBar.curPos - sBar.minPos) / sBar.sRange) * sBar.mxScroll);
				cDiv.style.left = sBar.targetScroll + 'px';
			}
			sBar.style.left = sBar.curPos+'px';
		}
	}

}

function CSBpreventTselect() {
		return false;
}

function CSBMoveBar(e) {

if (!e) {var e = window.event;}
var FCBar = document.goScroll, moveBar, maxx;
if (FCBar == null) return;
maxx = (FCBar.scrollBoth) ? 2 : 1;
for (var i=0; i<maxx; i++) {
	moveBar = (i == 1) ? FCBar.scrlTrgt.vBar : FCBar;
	if (FCBar.clicked) {
		if (!moveBar.moved) {
			moveBar.mDiv.scrollTop = 0;	
			moveBar.mDiv.scrollLeft = 0;
			CSBFindPos(moveBar);
			CSBFindPos(moveBar.ofstParent);
			moveBar.pointerOffsetY= e.clientY - moveBar.yPos;
			moveBar.pointerOffsetX= e.clientX - moveBar.xPos;
			moveBar.inCurPos = moveBar.curPos;
			moveBar.moved = true;
		}
		
		moveBar.curPos = (moveBar.vertical) ? e.clientY-moveBar.pointerOffsetY-moveBar.ofstParent.yPos : e.clientX-moveBar.pointerOffsetX-moveBar.ofstParent.xPos;
		if (FCBar.scrollBoth) moveBar.curPos = moveBar.curPos + (moveBar.curPos - moveBar.inCurPos) ;
		moveBar.curPos = (Math.min(Math.max(moveBar.curPos,moveBar.minPos),moveBar.maxPos))

		if (moveBar.vertical) {
			moveBar.style.top = moveBar.curPos + "px";
			moveBar.targetScroll = parseInt(((moveBar.curPos - moveBar.minPos) / moveBar.sRange) * moveBar.mxScroll);
			moveBar.scrlTrgt.style.top = moveBar.targetScroll + 'px';
			} else {
			moveBar.style.left = moveBar.curPos + "px";
			moveBar.targetScroll = parseInt(((moveBar.curPos - moveBar.minPos) / moveBar.sRange) * moveBar.mxScroll);
			moveBar.scrlTrgt.style.left = moveBar.targetScroll + 'px';
			}
		} else moveBar.moved = false;
	}
}

function CSBMouseUp() {
	if (document.goScroll != null) {document.goScroll.clicked = false;}
	document.goScroll = null;
	removeTrigger(document,'selectstart', CSBpreventTselect);
	removeTrigger(document,'mousemove',CSBMoveBar)
	removeTrigger(document,'mouseup',CSBMouseUp)
	}

function addTrigger(elm,eventname,func) {
if (!addCheckTrigger(elm,eventname,func) && elm.attachEvent) elm.attachEvent('on'+eventname, func);
}
function addCheckTrigger(elm,eventname,func) {
if (elm.addEventListener) {elm.addEventListener(eventname, func, false); return true;}
else return false;
}
function removeTrigger(elm,eventname,func) {
if (!removeCheckTrigger(elm,eventname,func) && elm.detachEvent) elm.detachEvent('on'+eventname, func);
}
function removeCheckTrigger(elm,eventname,func) {
if (elm.removeEventListener) {elm.removeEventListener(eventname, func, false); return true;}
else return false;
}


function CSBFindPos(elem) {
var obj = elem;
var curleft = 0;
var curtop = 0;
if (obj.offsetParent) {
	while (obj.offsetParent){
		curleft += obj.offsetLeft
		curtop += obj.offsetTop
		obj = obj.offsetParent;
	}
} else if (obj.x && obj.y) {curleft += obj.x; curtop += obj.y;}
elem.xPos = curleft; elem.yPos = curtop;
}

