/*******************************************************************************

FILE: mud_TextFlow.js
REQUIRES: prototype.js
AUTHOR: Takashi Okamoto mud(tm) - http://www.mudcorp.com/
VERSION: 1.1
DATE: 10/09/2005

--------------------------------------------------------------------------------

This file is part of MudTextFlow.

	MudTextFlow is free for anyone to use, but this header MUST be
	included, and may not be modified.

*******************************************************************************/

var MudTextFlow = Class.create();

MudTextFlow.prototype = {
	
	initialize: function(content, containers) {
		this.content = content.replace("\n", "");
		this.containers = containers;
	},

	update: function() {
		// clear all columns
		this.clear();
		var _containerNum = 0;
		var _content = this.content;
		while (_content) {
			_content = this.flow(this.containers[_containerNum], _content);
			_containerNum++;
			if (_containerNum >= this.containers.length) {
				break;
			}
		}
	},

	clear: function() {
		for (var i = 0; i < this.containers.length; i++) {
			this.containers[i].innerHTML = "";
		}
	},

	flow: function(container, content) {
		// insert content into container
		$(container).innerHTML = content;
		// height of content
		var contentH = Element.getDimensions(container).height;
		// get height of container
		var containerH = Element.getDimensions(container+"-wrapper").height - 3; // a little 3px hack for the bottom margin...not very elegant!!!
		if (contentH > containerH) {
			var _textArray = content.split(".");
			var _tmpText = "";
			var _linecount = 0;
			// insert content line per line
			do {
				_tmpText += _textArray[_linecount] + ".";
				$(container).innerHTML = _tmpText;
				contentH = Element.getDimensions(container).height;
				_linecount++;
				if (_linecount >= _textArray.length) break;
			} while (contentH < containerH);
		
			// if there is overflow text
			if (_linecount < _textArray.length) {
				// take out last line and add word by word
				_tmpText = _tmpText.substring(0, _tmpText.length - _textArray[_linecount-1].length-1);
				var _last = _textArray[_linecount-1] + ".";
				var _lastArray = _last.split(" ");
				var _lastLinecount = 0;
				var _tmpLastText = "";
				do {
					_tmpLastText += _lastArray[_lastLinecount] + " ";
					$(container).innerHTML = _tmpText + _tmpLastText;
					contentH = Element.getDimensions(container).height;
					_lastLinecount++;
				} while (contentH < containerH);
				
				// take out last word
				_tmpLastText = _tmpLastText.substring(0, _tmpLastText.length - _lastArray[_lastLinecount-1].length-1);
				$(container).innerHTML = _tmpText + _tmpLastText;
			
				// overflow text
				var overflow = _last.substring(_tmpLastText.length);
				for (var i = _linecount; i < _textArray.length; i++) {
					if (_textArray[i].match(/[\S]./g)) {
						overflow += _textArray[i] + ".";
					}
				}
				return overflow;
			}
		}
		return false;
	}
};