﻿/* copyright(C) 2010 bluemask.net */

var BluemaskMarquee = {
	StepMS: 2500,
	_threadStarted: false,
	_Elements/* {step:INT, rewindStepCount:INT, stepCursor:INT, targetPos:INT, element:HTMLElement} */: [],
	_intervalhandler: null,
	SmoothMove: function(element) {
		var obj = element.element;
		if (obj.scrollTop >= element.targetPos) { return; }
		var root = this;
		var t = null;
		var callback = function() {
			var space = element.targetPos - obj.scrollTop;
			if (space > 0) {
				if (space >= 3) {
					obj.scrollTop += parseInt(space / 3);
				} else {
					obj.scrollTop += space;
				}
			} else {
				if (t) { window.clearInterval(t); }
			}
		}
		t = window.setInterval(callback, 100);
	},
	MakeElementNextStep: function(element) {
		var obj = element.element;
		if (element.stepCursor >= element.rewindStepCount) {
			obj.scrollTop = 0;
			element.stepCursor = 0;
			element.targetPos = 0;
		}
		element.stepCursor++;
		//obj.scrollTop += element.step;
		element.targetPos = obj.scrollTop + element.step;
		this.SmoothMove(element);
	},
	MakeNextStep: function() {
		for (var i = 0; i < this._Elements.length; i++) {
			var element = this._Elements[i];
			this.MakeElementNextStep(element);
		}
	},
	StartThread: function() {
		if (this._intervalhandler || this._threadStarted) { return; }
		var root = this;
		var callback = function() {
			root.MakeNextStep();
		}
		this._intervalhandler = window.setInterval(callback, this.StepMS);
		this._threadStarted = true;
	},
	Create: function(objid, stepsize, rewindstepcount) {
		var obj = document.getElementById(objid);
		if (!obj) { return; }
		obj.innerHTML = obj.innerHTML + obj.innerHTML; // duplicate the content
		var element = { step: stepsize, rewindStepCount: rewindstepcount, stepCursor: 0, targetPos: 0, element: obj };
		this._Elements[this._Elements.length] = element;
		if (this._Elements.length > 0) {
			if (!this._threadStarted) {
				this.StartThread();
			}
		}
	}
};
