/*
******************************************************************
http://www.superui.net
滚动函数--上下左右，想怎么动就怎么动
obj:滚动对象
oWidth：宽度
oHeight：高度
direction：方向(left,right,up,down,left_up,left_down,right_up,right_down)
drag：是否可以拖动
zoom：是否缩放
speed：滚动速度
******************************************************************
<div id="scrollDiv" style="width:400px;height:200px;overflow:hidden;border:0px;">
</div>
<script language="javascript">
window.onload = new Function("scroll(document.all['scrollDiv'],385)")
</script>
******************************************************************
function scroll(obj, oWidth, oHeight, direction, drag, zoom, speed)
*/
function scroll(obj, oWidth, oHeight, direction, zoom, speed)
{
	var scrollDiv		= obj
	var scrollContent	= document.createElement("span")
	scrollContent.style.position = "absolute"
	scrollDiv.applyElement(scrollContent, "inside")
	var displayWidth	= (oWidth  != "auto" && oWidth ) ? oWidth  : scrollContent.offsetWidth  + parseInt(scrollDiv.currentStyle.borderRightWidth)
	var displayHeight	= (oHeight != "auto" && oHeight) ? oHeight : scrollContent.offsetHeight + parseInt(scrollDiv.currentStyle.borderBottomWidth)
	var contentWidth	= scrollContent.offsetWidth
	var contentHeight	= scrollContent.offsetHeight
	var scrollXItems	= Math.ceil(displayWidth  / contentWidth)  + 1
	var scrollYItems	= Math.ceil(displayHeight / contentHeight) + 1

	scrollDiv.style.width	 = displayWidth
	scrollDiv.style.height	 = displayHeight
	scrollDiv.style.overflow = "hidden"
	scrollDiv.setAttribute("state", "stop")
	//scrollDiv.setAttribute("drag", drag ? drag : "horizontal")
	scrollDiv.setAttribute("direction", direction ? direction : "left")
	scrollDiv.setAttribute("zoom", zoom ? zoom : 1)
	scrollContent.style.zoom = scrollDiv.zoom
	
	var scroll_script =	"var scrollDiv = " + scrollDiv.uniqueID										+"\n"+
				"var scrollObj = " + scrollContent.uniqueID									+"\n"+
				"var contentWidth = " + contentWidth + " * (scrollObj.runtimeStyle.zoom ? scrollObj.runtimeStyle.zoom : 1)"	+"\n"+
				"var contentHeight = " + contentHeight + " * (scrollObj.runtimeStyle.zoom ? scrollObj.runtimeStyle.zoom : 1)"	+"\n"+
				"var scrollx = scrollObj.runtimeStyle.pixelLeft"								+"\n"+
				"var scrolly = scrollObj.runtimeStyle.pixelTop"									+"\n"+

				"switch (scrollDiv.state.toLowerCase())"								+"\n"+
				"{"													+"\n"+
					"case ('scroll')	:"									+"\n"+
						"switch (scrollDiv.direction)"								+"\n"+
						"{"											+"\n"+
							"case ('left')		:"							+"\n"+
								"scrollx = (--scrollx) % contentWidth"					+"\n"+
								"break"									+"\n"+
							"case ('right')	:"								+"\n"+
								"scrollx = -contentWidth + (++scrollx) % contentWidth"			+"\n"+
								"break"									+"\n"+
							"case ('up')	:"								+"\n"+
								"scrolly = (--scrolly) % contentHeight"					+"\n"+
								"break"									+"\n"+
							"case ('down')	:"								+"\n"+
								"scrolly = -contentHeight + (++scrolly) % contentHeight"		+"\n"+
								"break"									+"\n"+
							"case ('left_up')	:"							+"\n"+
								"scrollx = (--scrollx) % contentWidth"					+"\n"+
								"scrolly = (--scrolly) % contentHeight"					+"\n"+
								"break"									+"\n"+
							"case ('left_down')	:"							+"\n"+
								"scrollx = (--scrollx) % contentWidth"					+"\n"+
								"scrolly = -contentHeight + (++scrolly) % contentHeight"		+"\n"+
								"break"									+"\n"+
							"case ('right_up')	:"							+"\n"+
								"scrollx = -contentWidth + (++scrollx) % contentWidth"			+"\n"+
								"scrolly = (--scrolly) % contentHeight"					+"\n"+
								"break"									+"\n"+
							"case ('right_down')	:"							+"\n"+
								"scrollx = -contentWidth + (++scrollx) % contentWidth"			+"\n"+
								"scrolly = -contentHeight + (++scrolly) % contentHeight"		+"\n"+
								"break"									+"\n"+
							"default		:"							+"\n"+
								"return"								+"\n"+
						"}"											+"\n"+
						"scrollObj.runtimeStyle.left = scrollx"							+"\n"+
						"scrollObj.runtimeStyle.top = scrolly"							+"\n"+
						"break"											+"\n"+
	
					"case ('stop')	:"										+"\n"+
					"case ('drag')	:"										+"\n"+
					"default	:"										+"\n"+
						"return"										+"\n"+
				"}"


	
	var contentNode = document.createElement("span")
	contentNode.runtimeStyle.position = "absolute"
	contentNode.runtimeStyle.width = contentWidth
	scrollContent.applyElement(contentNode, "inside")
	for (var i=0; i <= scrollXItems; i++)
	{
		for (var j=0; j <= 0 ; j++)
		{
			if (i+j == 0)	continue
			var tempNode = contentNode.cloneNode(true)
			var contentLeft, contentTop
			scrollContent.insertBefore(tempNode)
			contentLeft = contentWidth * i
			contentTop = contentHeight * j
			tempNode.runtimeStyle.left = contentLeft
			tempNode.runtimeStyle.top  = contentTop
		}
	}

	scrollDiv.onpropertychange = function()
	{
		var propertyName = window.event.propertyName
		var propertyValue = eval("this." + propertyName)
		
		switch(propertyName)
		{
			case "zoom"		:
				var scrollObj = this.children[0]
				scrollObj.runtimeStyle.zoom = propertyValue
				var content_width  = scrollObj.children[0].offsetWidth  * propertyValue
				var content_height = scrollObj.children[0].offsetHeight * propertyValue
				scrollObj.runtimeStyle.left = -content_width  + (scrollObj.runtimeStyle.pixelLeft % content_width)
				scrollObj.runtimeStyle.top  = -content_height + (scrollObj.runtimeStyle.pixelTop  % content_height)
				break
		}
	}
	
	scrollDiv.onlosecapture = function()
	{
		this.state = this.tempState ? this.tempState : this.state
		this.runtimeStyle.cursor = ""
		this.removeAttribute("tempState")
		this.removeAttribute("start_x")
		this.removeAttribute("start_y")
		this.removeAttribute("default_left")
		this.removeAttribute("default_top")
	}
	
	scrollDiv.onmousedown = function()
	{
		if (this.state != "drag")	this.setAttribute("tempState", this.state)
		this.state = "drag"
		this.runtimeStyle.cursor = "default"
		this.setAttribute("start_x", event.clientX)
		this.setAttribute("start_y", event.clientY)
		this.setAttribute("default_left", this.children[0].style.pixelLeft)
		this.setAttribute("default_top", this.children[0].style.pixelTop)
		this.setCapture()
	}
	
	scrollDiv.onmousemove = function()
	{
		if (this.state != "drag")	return
		var scrollx = scrolly = 0
		var zoomValue = this.children[0].style.zoom ? this.children[0].style.zoom : 1
		var content_width = this.children[0].children[0].offsetWidth * zoomValue
		var content_Height = this.children[0].children[0].offsetHeight * zoomValue
		if (this.drag == "horizontal" || this.drag == "both")
		{
			scrollx = this.default_left + event.clientX - this.start_x
			scrollx = -content_width + scrollx % content_width
			this.children[0].runtimeStyle.left = scrollx
		}
		if (this.drag == "vertical" || this.drag == "both")
		{
			scrolly = this.default_top + event.clientY - this.start_y
			scrolly = -content_Height + scrolly % content_Height
			this.children[0].runtimeStyle.top = scrolly
		}
	}
	scrollDiv.onmouseover = function()
	{
		this.state="stop"
		this.runtimeStyle.cursor = "hand"
	}
	scrollDiv.onmouseout = function()
	{
		this.state="scroll"
		this.runtimeStyle.cursor = "default"
	}
	scrollDiv.onmouseup = function()
	{
		this.releaseCapture()
	}
	
	scrollDiv.state = "scroll"
	setInterval(scroll_script, speed ? speed : 40)
}
