// for debug
var G_DEBUG_ON = true;

function $d(txt) {
	if (!G_DEBUG_ON) return;
	if (!txt) txt = 'null';
	txt = txt.toString();
	var el = document.getElementById('debug_div');
	if (el) el.innerHTML = '<div style="margin-bottom:5px">&gt;&gt; '+txt.replace('<','&lt;')+'</div>'+el.innerHTML;
}

// StringBuffer
function StringBuffer() {
	this.clear();
	if (arguments.length > 0) {
		arguments.join = this.buffer.join;
		this.buffer[this.buffer.length] = arguments.join("");
	}
}
StringBuffer.prototype = {	
	toString: function () {
		return this.buffer.join("");
	},
	
	join: function (delim) {
		if (delim == null) delim = "";
		return this.buffer.join(delim);
	},
	
	/*
	join: function (str) {
		return this.buffer.join(str);
	},
	*/
	
	append: function () {
		arguments.join = this.buffer.join;
		this.buffer[this.buffer.length] = arguments.join("");
		return this;
	},
	
	set: function(str) {
		this.buffer = [str];
	},
	
	clear: function() {
		this.buffer = [];
	}
}
StringBuffer.concat = function() {
	arguments.join = Array.prototype.join;
	return arguments.join("");
}
StringBuffer.append = StringBuffer.concat;

// methods delegates
function delegate(obj, func) {
	if (Function.prototype.bind) {
		return func.bind(obj);
	}
	var __method = func;
	return function() {
		return __method.apply(obj, arguments);
	}
}

function delegateAsEventListener(obj, func) {
	if (Function.prototype.bindAsEventListener) {
		return func.bindAsEventListener(obj);
	}
	var __method = func;
	return function(event) {
		return __method.call(obj, event || window.event);
  	}
}

String.prototype.nl2br = function() {
	return this.split('\n').join('<br \/>\n');
}

function hyperlink(txt) {
	if (txt.indexOf('http://') > -1) {
		var txtA = txt.split('\n');
		for (var y=0; y<txtA.length; y++) {
			var subtxtA = txtA[y].split(' ');
			for (var t=0; t<subtxtA.length; t++) {
				var openParen = '';
				if (subtxtA[t].substr(0,1) == '(') {
					// remove open Paren
					subtxtA[t] = subtxtA[t].replace('(', '')
					openParen = '(';
				}
				if (subtxtA[t].substr(0,7) == 'http://') {
					var url = subtxtA[t];
					var paren = '';
					if (url.substr(url.length-1, 1) == ')') {
						url = url.substr(0,url.length-1);
						paren = ')';
					}
					var period = '';
					if (url.substr(url.length-1, 1) == '.') {
						url = url.substr(0,url.length-1);
						period = '.';
					}
					subtxtA[t] = '<a href="'+url+'" onclick="">' + url + '<\/a>'+paren+period;
					
				}
				// add open Paren back in
				subtxtA[t] = openParen+subtxtA[t]
			}
			txtA[y] = subtxtA.join(' ');
			//txtA[y] = txtA[y].replace('> <', '>&nbsp;<');
		}
		txt = txtA.join('<br \/>');
	}

	return txt;
}