// $Id$
// Copyright (c) 2006 IBM Corporation
// Owner: Corporate Webmaster (NUS_N_NIWWW)


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

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

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

ibmCommon.isDOM = (document.createElement && document.createTextNode &&
	document.getElementById && document.getElementsByTagName);
ibmCommon.closeBodyFuncs = [];
ibmCommon.hoverImages = [
	'arrow-primary.gif',
	'cancel-primary.gif',
	'add-secondary-over.gif',
	'arrow-primary-over.gif',
	'arrow-secondary-over.gif',
	'back-secondary-over.gif',
	'cancel-primary-over.gif',
	'cancel-secondary-over.gif',
	'cart-primary-over.gif',
	'cart-secondary-over.gif',
	'chat-secondary-over.gif',
	'customize-primary-over.gif',
	'customize-secondary-over.gif',
	'download-primary-over.gif',
	'download-secondary-over.gif',
	'email-secondary-over.gif',
	'go-over.gif',
	'pda-secondary-over.gif',
	'phone-secondary-over.gif',
	'refresh-secondary-over.gif',
	'remove-secondary-over.gif',
	'undo-secondary-over.gif',
	'video-secondary-over.gif',
	'view-primary-over.gif',
	'view-secondary-over.gif',
	'ibm-footer.gif',
	'ibm-footer.png',
	'ibm-masthead.gif',
	'ibm-masthead.png',
	'ibm-middle.gif',
	'ibm-middle.png',
	'geo-gradient-highlight.gif',
	'ibm-tab-hover-background.gif',
	'leftnav-overview-highlight.gif',
	'leftnav-selected.gif',
	'masthead-links-gradient-highlight.gif',
	'masthead-submit-highlight.gif',
	'animation.gif'
];
ibmCommon.onloadFuncs = [];

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

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

ibmCommon.closeBody = function () {
	for (var i = 0; i < ibmCommon.closeBodyFuncs.length; i++)
		if (!ibmCommon.closeBodyFuncs[i].obj)
			ibmCommon.closeBodyFuncs[i].func(ibmCommon.closeBodyFuncs[i].args);
		else
			ibmCommon.closeBodyFuncs[i].func.call(
				ibmCommon.closeBodyFuncs[i].obj,
				ibmCommon.closeBodyFuncs[i].args
			);
};

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

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

ibmCommon.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 (ibmCommon.inClass(el, cn)) nl[nl.length] = el;
		if (el.hasChildNodes())
			for (var i = 0; i < el.childNodes.length; i++)
				nl = nl.concat(ibmCommon.getElementsInClass(
					el.childNodes.item(i), cn));
		break;
	}
	return nl;
};

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

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

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

ibmCommon.onload = function () {
	for (var i = 0; i < ibmCommon.onloadFuncs.length; i++)
		if (!ibmCommon.onloadFuncs[i].obj)
			ibmCommon.onloadFuncs[i].func(ibmCommon.onloadFuncs[i].args);
		else
			ibmCommon.onloadFuncs[i].func.call(
				ibmCommon.onloadFuncs[i].obj,
				ibmCommon.onloadFuncs[i].args
			);
};

ibmCommon.preloadHoverImages = function () {
	ibmCommon._loadImages = [];
	for (var i = 0; i < ibmCommon.hoverImages.length; i++) {
		var img = new Image;
		img.src = ibmCommon.hoverImages[i];
		ibmCommon._loadImages[ibmCommon._loadImages.length] = img;
	}
};

ibmCommon.putCloseBodyFunction = function (obj, func, args) {
	ibmCommon.closeBodyFuncs[ibmCommon.closeBodyFuncs.length] = {
		'obj': obj,
		'func': func,
		'args': args
	};
};

ibmCommon.putOnloadFunction = function (obj, func, args) {
	ibmCommon.onloadFuncs[ibmCommon.onloadFuncs.length] = {
		'obj': obj,
		'func': func,
		'args': args
	};
};

ibmCommon.setOnloadHandler = function () {
	if (typeof window.onload == 'function')
		ibmCommon.putOnloadFunction(null, window.onload, []);
	window.onload = ibmCommon.onload;
};

// back-compat
var IBMCommon = ibmCommon;

// this must always be the last thing in this script
//ibmCommon.setOnloadHandler();
ibmCommon.preloadHoverImages();
