// JS Version 5.0+ (IE 5.0+, Opera 7+, Mozilla 1+)
// partially JS 3.0 compatible
Object.createPackage = function(path) {
	var root = window, parts = path.split('.'), part;

	for (var i = 0; i < parts.length; i++) {
		part = parts[i];
		if (!root[part]) {
			root[part] = {};
		}
		root = root[part];
	}
	
	root.getInstance = function() {
		return this;
	}

	return root;
}

String.prototype.endsWith = function(suffix) {
	return (this.substr(this.length - suffix.length) == suffix);
}
String.prototype.startsWith = function(prefix) {
	return (this.substr(0, prefix.length) == prefix);
}
String.prototype.trimLeft = function() {
	return this.replace(/^\s*/, '');
}
String.prototype.trimRight = function() {
	return this.replace(/\s*$/, '');
}
String.prototype.trim = function() {
	return this.trimRight().trimLeft();
}

if (!Array.prototype.push) {
	Array.prototype.push = function() {
		var numargs = arguments.length;
		for (var i=0; i<numargs; i++) {
			this[this.length] = arguments[i];
		}
		return this.length;
	}
}

document.setCookie = function(name, value) {
	document.cookie = name + '=' + escape(value) + '; expires=Mon, 31 Dec 2010 23:59:59 UTC';
}

document.getCookie = function(name) {
	var cookies = document.cookie.split('; ');
	for (var i = 0; i < cookies.length; i++) {
		var pair = cookies[i].split('=');
		if (name == pair[0]) {
			return unescape(cookies[1]);
		}
	}

	return null;
}

document.deleteCookie = function(name) {
	document.cookie = name + '=' + escape(' ') + '; expires=Fri, 31 Dec 1999 23:59:59 GMT;';
}

with (Object.createPackage('js')) {
	getInstance().EventContext = function (src, args) {
		this.src = src;
		this.args = args;		
	}
}

Object.createPackage('js.vars');

Object.createUniqueId = function() {
	return Math.random().toString().substring(2,12);
}

if (!Function.prototype.apply) {
	Function.prototype.apply = function(instance, argArray) {
		if (instance) {
			var id = Object.createUniqueId();
			eval('instance.' + id + ' = this;');
			eval('instance.' + id + '(' + argArray.join(',') + ');');
			eval('delete instance.' + id + ';');
		}
	}
}

Number.parse = function(value) {
		if (!value || (value.length == 0)) {
			return 0;
		}
		return parseFloat(value);
}

js.vars.ua = navigator.userAgent.toLowerCase();

Object.createPackage('js.ui.BrowserCaps');
js.ui.BrowserCaps.isIE = (js.vars.ua.indexOf('msie') != -1);
js.ui.BrowserCaps.isOpera = (js.vars.ua.indexOf('opera') != -1);
js.ui.BrowserCaps.isIE = js.ui.BrowserCaps.isIE && !js.ui.BrowserCaps.isOpera;
js.ui.BrowserCaps.isGecko = (js.vars.ua.indexOf('gecko') != -1);

js.ui.Image = new function() {
	this.create = function() {
		var res = [];
		for (var i = 0; i < arguments.length; i++) {
			var img = new Image();
			img.src = arguments[i];
			res[res.length] = img;
		}
		return res;
	}
}

js.Url = new function() {
	this.combine = function(u1, u2) {
		if (u1.indexOf('?') != -1) {
			return u1 + '&' + u2;
		} else {
			return u1 + '?' + u2;
		}
	}
}