var Marquee = {
	marquees: {},

	start: function(name, options) {
		if (!$(name))
			return;
		
		var refresh = options && options.refresh; 
		
		if (!this.marquees[name] || refresh) {
			if (!options) {
				options = {};
			}

			this.marquees[name] = {
				'container': $(name),
				'name': name,
				'time': 0,
				'x': (this.marquees[name] && this.marquees[name].x || 0),
				'velocity': options.velocity ? options.velocity : 100,
				'state': 'run'
			};

			var marquee = this.marquees[name];

			if (marquee.container.down()) {
				Marquee.update(name, marquee.container.down().cloneNode(true).childNodes);
			}

			setInterval(function() {
				if (!(marquee.container.offsetWidth && marquee.elements.length))
					return;

				var time = (new Date()).getTime();

				var velocity = marquee.velocity; // Pixel pro Sekunde

				if (marquee.state == 'run' && marquee.elements[0].offsetWidth) {
					marquee.x = (marquee.x + Math.min(time - marquee.time,100) * velocity / 1000) % (marquee.elements[0].offsetWidth*marquee.elements.length);
				}
				marquee.time = time;

				for (var i=0; i<marquee.elements.length; i++) {
					var left = (i * marquee.elements[0].offsetWidth - marquee.x);
					if ((left * -1) > marquee.elements[0].offsetWidth) {
						left += (marquee.elements.length * marquee.elements[0].offsetWidth);
					}
					marquee.elements[i].setStyle({ 'left': left + "px" });
				}
			}, 20);
		}

		if (this.marquees[name]) {
			this.marquees[name].state = 'run';
		}
	},

	stop: function(name) {
		if (this.marquees[name]) {
			this.marquees[name].state = 'sleep';
		}
	},

	update: function(name, text) {
		if (this.marquees[name]) {
			var marquee = this.marquees[name];

			if (!marquee.container.offsetWidth) {
				window.setTimeout(function() {
					Marquee.update(name, text);
				}, 1);
			} else {
				var item = Builder.node(
						'div',
						{
							'class': name + '-item' /*,
							'style': {
								'whiteSpace': 'nowrap',
								'position': 'absolute'
							} */
						},
						$A(text));

				marquee.container.update(item);

				marquee.elements = new Array();
				marquee.elements[0] = item;
				var width = 0;
				for (var i = 0; i < 5 && marquee.container.offsetWidth > width; i++) {
					var dub = marquee.elements[0].cloneNode(true);
					marquee.elements.push(dub);
					marquee.container.insert(dub);
					width += marquee.elements[0].offsetWidth;
				}
			}
		}
	}
};

