window.SideScroll = function(parentLayer, fontSize, fontColor, interval) {
	return this.init(parentLayer, fontSize, fontColor, interval);
}

SideScroll.prototype = {
		init: function(parentLayer, fontSize, fontColor, interval) {
			this.parent = parentLayer;
			this.fontSize = fontSize;
			this.fontColor = fontColor;
			this.delay = 200;
			this.interval = interval;
			this.layerArray = new Array();
			this.dummyDelay = 30;
			return this;
		},

		scrolling: function() {
			var isFinish = true;
			
			for(var i=0;i<this.msgLen;i++) {
				var layer = this.layerArray[this.id+"-"+i];
				var pos = new Number(layer.getAttribute("pos"));
				var selfWidth = new Number(layer.style.width.replace(/px/ige,""));
				var width = pos+selfWidth;
				var left = new Number(layer.style.left.replace(/px/ige,""));
				
//				var speed = width/(this.interval/this.delay);
				var parentWidth = new Number(this.parent.style.width.replace(/px/ige,""));
				var speed = parentWidth/(this.interval/this.delay);
				speed = speed < 1 ? 1 : speed;
				left -= Math.round(speed);
				layer.style.left = left+"px";
				if(left + selfWidth > 0) {
					isFinish = false;
				}else{
					try {
						this.parent.removeChild(layer);
					}
					catch(e) {
					}
				}
			}
			if(isFinish) {
				clearInterval(this.hTimer);
			}
		},

		start: function(messages) {
			var now = new Date();
			this.id = new String(now.getMilliseconds());
			this.msgLen = messages.length;
			var delayCount = 0;
			for(var i=0;i<messages.length;i++) {
				var message = messages[i];
				var lineMessage = message.replace(/[\n\\n]/g, "");
				var layer = document.createElement("div");
				this.layerArray[this.id+"-"+i] = layer;
				var styleAttr = document.createAttribute("style");
				var idAttr = document.createAttribute("id");
				var posLeftAttr = document.createAttribute("pos");
				idAttr.value = this.id+"-"+i;

				var styleStr = "position:absolute;";
				styleStr += "color:"+this.fontColor+";";
				styleStr += "font-size:"+this.fontSize+'px;';
				styleStr += "overflow:hidden;";
				styleStr += "overflow-x:hidden;";
				styleStr += "overflow-y:hidden;";

				var parentHeight = new Number(this.parent.style.height.replace(/px/ige,""));
				var parentWidth = new Number(this.parent.style.width.replace(/px/ige,""));
				var topVal = Math.floor(Math.random() * parentHeight);
				if(topVal >= parentHeight-this.fontSize+2) {
					topVal-=this.fontSize+10;
				}
				styleStr += "top:"+topVal+"px;";
				//
				var delay = (this.dummyDelay*(this.fontSize+2))*delayCount;
				if(i % 5 == 0) {
					delayCount++;
				}
				styleStr += "left:"+(parentWidth+delay)+"px;"
				posLeftAttr.value = parentWidth+delay;

				styleStr += "height:"+(this.fontSize+2)+"px;";
				var mySelfWidth = lineMessage.length*this.fontSize > parentWidth ? parentWidth : lineMessage.length*this.fontSize;
				styleStr += "width:"+mySelfWidth+"px;";
				styleAttr.value = styleStr;
				layer.setAttributeNode(styleAttr);
				layer.setAttributeNode(idAttr);
				layer.setAttributeNode(posLeftAttr);
				layer.innerHTML = lineMessage;
				
				this.parent.appendChild(layer);
			}
			var self = this;
			this.hTimer = setInterval(function(){self.scrolling();}, this.delay);
		}
}