var constructors = new Array();
var params = new Array();
  	
function addConstructor(handler, params) {
	this.constructors[this.constructors.length] = handler;
	this.params[this.params.length] = params;
}

function parseParams(paramSet) {
	var result = '';
	var paramType = (typeof paramSet).toLowerCase();
	//debugger;
	switch (paramType) {
		case 'undefined':
			break;
		case 'number':
		case 'boolean':
			result = paramSet;
			break;
		case 'string':
			result = '"'+paramSet+'"';
			break;
		case 'object':
			if (typeof paramSet.length == 'number' && typeof paramSet.slice=='function' && typeof paramSet.join=='function') {
				for (var i=0; i<paramSet.length; i++) {
					var param = paramSet[i];
					result += parseParams(param);
					if (i<paramSet.length-1) {
						result += ', ';
					}
				}
			} else {
				result = paramSet.toString();
			}
			break;
	}
	return result;
}

function initLoad() {
	// quit if this function has already been called
	if (arguments.callee.done) return;

	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;

	// kill the timer
	if (_timer) clearInterval(_timer);

	// do stuff
	bodyInit();
};

	
function bodyInit() {
	//alert('bodyInit!');
	for (var i in constructors) { 
		var handler = constructors[i];
		var paramSet = params[i];
		var paramsLine = parseParams(paramSet);
		var callCmd = '';
		callCmd += 'try{\n';
		callCmd += '	'+handler+'('+paramsLine+');\n';
		callCmd += '} catch (e) {\n';
		//callCmd += '	alert(e.name+\'\\n\'+e.message+\'\\n\'+e.number+\'\\n\'+e.description);\n';
		callCmd += '}\n';
		//alert('cal cntr!'+handler);
		eval(callCmd);
	} 
}

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

var baseUrl = location.href.split('#')[0];

function getSourceUrl(url) {
	var result = url;
	if (url.indexOf(baseUrl)!=-1 && url.indexOf('#')!=-1) {
		result = '#'+url.split('#')[1];
	}
	return result;
}

function isLocalAnchor(url) {
	var result = false;
	if (url.indexOf('#')!=-1) {
		var srcUrl = getSourceUrl(url);
		if (srcUrl.indexOf('#')==0) {
			result = true;
		}
	}
	return result;
}
