String.prototype.normalizeSpace = function () 
{
	return this.replace(/\s+/g, ' ');
};

String.prototype.trim = function () 
{
	return this.replace(/^\s+/, '').replace(/\s+$/, '');
};

if (typeof Common != 'object' || Common == null) 
    var Common = {};

Common.isDOM = (document.createElement && document.createTextNode && document.getElementById && document.getElementsByTagName);


Common.addScript = function (url) 
{
	var nl = document.getElementsByTagName('head');
	if (nl.length < 1) return null;
	var s = document.createElement('script');
	s.id = Common.generateId();
	s.setAttribute('type', 'text/javascript');
	s.setAttribute('src', url);
	nl.item(0).appendChild(s);
	return s.id;
};

Common.classNamesToArray = function (el) 
{
	if (!el) throw 'Invalid argument.';
	if (typeof el.className != 'string') return [];
	return el.className.normalizeSpace().trim().split(' ');
};

Common.deleteClassName = function (el, cn) 
{
	if (!Common.inClass(el, cn)) return;
	var cns = Common.classNamesToArray(el);
	var len = cns.length;
	var ncns = [];
	for (var i = 0; i < len; i++)
		if (cns[i] != cn) ncns[ncns.length] = cns[i];
	el.className = ncns.join(' ');
};

Common.generateId = function () 
{
	var nid;
	do {
		nid = 'gi-' + Math.round(Math.random() * 0xFFFFFFFF).toString(16);
	} while (document.getElementById(nid) != null);
	return nid;
};

Common.getElementsInClass = function (el, cn) 
{
	var nl = [];
	if (typeof el.nodeType == 'undefined') return nl;
	switch (el.nodeType) {
	// ELEMENT_NODE, DOCUMENT_NODE, DOCUMENT_FRAGMENT_NODE
	case 1: case 9: case 11:
		if (Common.inClass(el, cn)) nl[nl.length] = el;
		if (el.hasChildNodes()) {
			var elc = el.childNodes;
			var len = elc.length;
			for (var i = 0; i < len; i++)
				nl = nl.concat(Common.getElementsInClass(elc.item(i), cn));
		}
		break;
	}
	return nl;
};

Common.getEventX = function (ev) 
{
	return (ev.clientX + document.body.scrollLeft -
		document.body.clientLeft) || ev.pageX;
}

Common.getEventY = function (ev) 
{
	return (ev.clientY + document.body.scrollTop -
		document.body.clientTop) || ev.pageY;
}

Common.inClass = function (el, cn) 
{
	if (typeof el.className != 'string') return false;
	var cnst = el.className.trim();
	if (cnst == cn) return true;
	var cns = cnst.normalizeSpace().split(' ');
	var len = cns.length;
	for (var i = 0; i < len; i++) if (cns[i] == cn) return true;
	return false;
};

var Misc = Common;