// scrollObj v1.0 (ÀÚ¹Ù½ºÅ©¸³Æ® ½ºÅ©·Ñ·¯ ¿ÀºêÁ§Æ®) 2007³â 9¿ù 16ÀÏ
// ÀÛ¼ºÀÚ: À§½ºÅÏ(lordwystan@gmail.com)
// ¶óÀÌ¼¾½º: CCL(Creative Commons License)ÀÇ "ÀúÀÛÀÚÇ¥½Ã 3.0" ¶óÀÌ¼¾½º Àû¿ë
// (http://creativecommons.org/licenses/by/3.0/deed.ko)

var scrollObj = function(targetEle, isVertical, sumMargin, movePx, startNum, interval, isInverse, stopDuration) {
// ±âº» ¿À·ù Ã³¸®
	if (!document.getElementById) { return false; }
	if (!document.getElementsByTagName) { return false; }
	if (!document.getElementById(targetEle)) { return false; }
	
// Private º¯¼ö: ¿ÀºêÁ§Æ® ¼±¾ð ÈÄ º¯°æÇÒ ¼ö ¾øÀ½ 
	// ½ºÅ©·ÑÇÒ ¿ä¼Ò(ul, ol µî)
	var targetEle = document.getElementById(targetEle);
	// ½ºÅ©·Ñ ¹æÇâ ¼³Á¤: false->°¡·Î, true->¼¼·Î
	var isVertical = (typeof isVertical != "undefined")? isVertical : false;
	// ¸®½ºÆ® ¿ä¼Ò(li)ÀÇ ¸¶Áø°ª
	var sumMargin = (typeof sumMargin != "undefined")? sumMargin : 0;
	// ÀÌµ¿ÇÒ °Å¸®(´ÜÀ§: px)
	var movePx = (typeof movePx != "undefined")? movePx : 1;
	// 
	var startNum = (typeof startNum != "undefined")? startNum : 2;

// Public º¯¼ö
	// ½ºÅ©·Ñ ½Ã°£ °£°Ý(´ÜÀ§: ms)
	this.interval = (typeof interval != "undefined")? interval : 25;
	// ½ºÅ©·Ñ ¹æÇâ ¼³Á¤: false->left or top, true->right or bottom
	this.isInverse = (typeof isInverse != "undefined")? isInverse : false;
	// ½ºÅ©·Ñ µµÁß Á¤Áö ½Ã°£(´ÜÀ§: ms)
	this.stopDuration = (typeof stopDuration != "undefined")? stopDuration : 0;
	// ½ºÅ©·Ñ Á¤Áö ¿©ºÎ: false->½ºÅ©·Ñ, true->Á¤Áö
	this.isStop = false;
	
	if(!targetEle.getElementsByTagName("li")) { return false; }
	
	var liArray = targetEle.getElementsByTagName("li");
	// ¸®½ºÆ® Ç×¸ñ(li)Àº ÃÖ¼Ò 2°³ ÀÌ»óÀÌ¾î¾ß ÇÔ
	if (liArray.length < startNum || startNum < 2) { return false; }

	// Ã¹ ¹øÂ° ¸®½ºÆ® Ç×¸ñÀÌ startNum ¹øÂ° ¿Àµµ·Ï ¼ø¼­ º¯°æ
	for (var i = 0; i < startNum - 1; i++)
	{
		targetEle.insertBefore(liArray[liArray.length - 1], liArray[0]);
	}
	// startNum ¹øÂ° Ç×¸ñ ¿ÞÂÊ °Å¸® °è»êÇØ¼­ ÇöÀç À§Ä¡·Î ¼³Á¤(absolue positioning)
	var currentPos = 0;
	for (var j = 0; j < startNum - 1; j++)
	{
		currentPos -= (isVertical)? (liArray[j].offsetHeight + sumMargin) : (liArray[j].offsetWidth + sumMargin);
	}
	// setTimeoutÀ» È£ÃâÇÏ´Â Private ÇÔ¼ö(http://www.faqts.com/knowledge_base/view.phtml/aid/2311 Âü°í)
	var scrollOn = function (sender, timerInterval) {
		var newThis = sender;
		window.setTimeout(function () { newThis.scrollStart() }, timerInterval);
	}
	
	// ÀÌµ¿ °Å¸® ÃÊ±âÈ­
	var stopDistance = 0;

	var flag = false;

	// ½ÇÁ¦ ½ºÅ©·Ñ½ÃÅ°´Â Public method
	this.scrollStart = function () {
		if (!this.isStop) { 
			var moveDistance = (this.isInverse)? movePx : -movePx;
			// ÇöÀç À§Ä¡ º¯°æ
			currentPos = parseInt(currentPos) + moveDistance;
			// ÀÌµ¿ °Å¸® º¯°æ
			stopDistance += moveDistance;
			// ±âÁØ ¿ä¼Ò
			var indexEle = (this.isInverse)? liArray[startNum - 2] : liArray[startNum - 1];
			var stopEleDim = (isVertical)? indexEle.offsetHeight + sumMargin : indexEle.offsetWidth + sumMargin;
			// ´ÙÀ½ ÇÔ¼ö È£Ãâ ½Ã°£(stopDuration Àû¿ë À§ÇÔ)
			var moveInterval = this.interval;
			// ÀÌµ¿ÇÑ °Å¸®°¡ ±âÁØ ¿ä¼ÒÀÇ ³Êºñ(¶Ç´Â ³ôÀÌ)¿Í ÀÏÄ¡ÇÒ °æ¿ì
			if (Math.abs(stopDistance) >= stopEleDim)
			{
				var lastEleDim = (isVertical)? liArray[liArray.length - 1].offsetHeight + sumMargin : liArray[liArray.length - 1].offsetWidth + sumMargin;
				var firstEleDim = (isVertical)? liArray[0].offsetHeight + sumMargin : liArray[0].offsetWidth + sumMargin;
				// ¹Ý´ë ¹æÇâ(right, bottom)ÀÌ°í ÀÌµ¿°Å¸®°¡ ¾ç¼öÀÏ ¶§(¹Ý´ë ¹æÇâ ÀÌµ¿)
				if (this.isInverse && stopDistance > 0)
				{
					// ¸¶Áö¸· ¿ä¼Ò°¡ ¸Ç ¾ÕÀ¸·Î ¿À¹Ç·Î ¸¶Áö¸· ¿ä¼ÒÀÇ ³Êºñ(¶Ç´Â ³ôÀÌ)¸¦ »©ÁÜ
					currentPos  -= lastEleDim;
					// ÀÌµ¿ °Å¸®°¡ 1º¸´Ù Å¬ °æ¿ì ¿ÀÂ÷ º¸Á¤
					currentPos -= (stopDistance - stopEleDim)
					// ¸¶Áö¸· ¿ä¼Ò¸¦ ¸Ç ¾ÕÀ¸·Î º¸³¿
					targetEle.insertBefore(liArray[liArray.length - 1], liArray[0]);
					// ÀÌµ¿ °Å¸® ÃÊ±âÈ­
					stopDistance = 0;
					// ´ÙÀ½ ½ÇÇà ½Ã°£À» stopDurationÀ¸·Î ¼³Á¤(Àá½Ã Á¤Áö½ÃÅ´)
					moveInterval = this.stopDuration;
				// ¹Ý´ëÀÇ °æ¿ì
				} else if (!this.isInverse && stopDistance < 0) 
				{
					currentPos += firstEleDim;
					currentPos -= (stopDistance + stopEleDim)
					targetEle.appendChild(liArray[0]);
					stopDistance = 0;
					moveInterval = this.stopDuration;
				}
			}
			currentPos += "px";
			// ¸®½ºÆ®ÀÇ Àý´ë ÁÂÇ¥ º¯°æÀ¸·Î ½ºÅ©·Ñ È¿°ú ¹ß»ý
			if (isVertical)
			{
				targetEle.style.top = currentPos;
			} else {
				targetEle.style.left = currentPos;
			}
		}
		// setTimeoutÀ» È£ÃâÇÏ´Â scrollOn ÇÔ¼ö ½ÇÇà
		scrollOn(this, moveInterval);
	}
	// ¿ÀºêÁ§½º ¼±¾ð°ú ÇÔ²² ½ºÅ©·Ñ ÀÚµ¿ ½ÃÀÛ
	this.scrollStart();
}