
/* Requires 
	browsers.js
*/

function isArray(obj)
{
	return ((obj.length) && (typeof(obj) == "object")) ? true : false;
};

function objById(sId)
{
	return IsDOM ? document.getElementById(sId) : IsIE ? document.all[sId] : document.layers[sId];;
};

function getSiblingElementsByTagName(oParent, sTag)
{
	var lAll = oParent.getElementsByTagName(sTag);
	var lSiblings = new Array;
	for (var i=0; i < lAll.length; i++)
	{
		if (lAll[i].parentNode == oParent) 
		{
			lSiblings.push(lAll[i]);
		}
	}
	return lSiblings;	
};

function activateObjects(aObjId)
{
	if (aObjId) {
		for (var i=0; i < aObjId.length; i++){
			var obj = objById(aObjId[i]);
			if (obj) {
				obj.innerHTML = obj.innerHTML;
			};
		};
	};
};

function toggleClass(obj, sClass)
{
	var lClassName = obj.className;
	var aClasses = lClassName.split(' ');
	//var iClass = aClasses.indexOf(sClass);
	var iClass = -1;
	for (var i=0; i < aClasses.length; i++)
	{
		if (aClasses[i]==sClass) 
		{
			iClass = i;
			break;
		}
	};
	if (iClass == -1) {
		//Class not found append it
		aClasses.push(sClass);
	} else {
		aClasses.splice(iClass, 1);
	};
	lClassName = aClasses.join(' ');
	obj.className = lClassName;
};

function toggleClassExclusive(obj, sTag, sClass)
{
	var lObj = getObj(obj);
	//Get list of all siblings including self
	var lParentSiblings = getSiblingElementsByTagName(obj.parentNode, sTag);
	for (var i=0; i < lParentSiblings.length; i++)
	{
		var lObj = lParentSiblings[i]
		if (lObj == obj) {
			toggleClass(obj, sClass);
		} else {
			removeClass(lObj, sClass);
		};
	};
};

function getObj(obj)
{
	if (isString(obj)) 
	{
		return objById(obj);
	} else {
		return obj;
	};
};

function addClassExclusive(obj, sTag, sClass)
{
	var lObj = getObj(obj);
	//Get list of all siblings including self
	var lParentSiblings = getSiblingElementsByTagName(lObj.parentNode, sTag);
	for (var i=0; i < lParentSiblings.length; i++)
	{
		var lSib = lParentSiblings[i]
		if (lSib == lObj) {
			addClass(lObj, sClass);
		} else {
			removeClass(lSib, sClass);
		};
	};
};

function removeClass(obj, sClass)
{
	lObj = getObj(obj);
	var lClassName = lObj.className;
	var aClasses = lClassName.split(' ');
	iClass = -1;
	for (var i=0; i < aClasses.length; i++)
	{
		if (aClasses[i]==sClass) 
		{
			iClass = i;
			break;
		};
	};
	if (iClass > -1) {
		aClasses.splice(iClass, 1);
	};
	lClassName = aClasses.join(' ');
	lObj.className = lClassName;
};

function addClass(obj, sClass)
{
	lObj = getObj(obj);
	var lClassName = lObj.className;
	var aClasses = lClassName.split(' ');
	iClass = -1;
	for (var i=0; i < aClasses.length; i++)
	{
		if (aClasses[i]==sClass) 
		{
			iClass = i;
			break;
		};
	};
	if (iClass == -1) {
		aClasses.push(sClass);
	};
	lClassName = aClasses.join(' ');
	lObj.className = lClassName;
};

function isString() 
{	
	if (typeof arguments[0] == 'string') return true;
	if (typeof arguments[0] == 'object') 
	{  
		//return (arguments[0].objectType() == 'String');
		return false;
		// var criterion = arguments[0].constructor.toString().match(/string/i); 
		// return (criterion != null);  
	};
	return false;
};

function isClass(obj, sClass)
{
	var lClassName = obj.className;
	var aClasses = lClassName.split(' ');
	iClass = -1;
	for (var i=0; i < aClasses.length; i++)
	{
		if (aClasses[i]==sClass) 
		{
			return true;
		};
	};
	return false;
};