/**
 * Checks if the object has the class name. 
 *  
 * @param objElement  element to manipulate
 * @param strClass    class name to add
 * 
 * @return boolean indicating whether the object has the class name built with
 *         the understanding that there may be multiple classes.
 */
function hasClassName(objElement, strClass)
{
   // if there is a class
   if (objElement.className) {

      // the classes are just a space separated list, so first get the list
      var arrList = objElement.className.split(' ');

      // get uppercase class for comparison purposes
      var strClassUpper = strClass.toUpperCase();

      // find all instances and remove them
      for (var i = 0; i < arrList.length; i++) {
         // if class found
         if (arrList[i].toUpperCase() == strClassUpper) {
            // we found it
            return true;
         }
      }

   }

   // if we got here then the class name is not there
   return false;
}

/**
 * Adds a class to the class attribute of a DOM element built with the
 * understanding that there may be multiple classes.
 *
 * @param objElement  element to manipulate
 * @param strClass    class name to add
 */
function addClassName(objElement, strClass, blnMayAlreadyExist)
{
    // if there is a class
    if (objElement.className) {
        
        // the classes are just a space separated list, so first get the list
        var arrList = objElement.className.split(' ');
        
        // if the new class name may already exist in list
        if (blnMayAlreadyExist) {
        
            // get uppercase class for comparison purposes
            var strClassUpper = strClass.toUpperCase();
            
            // find all instances and remove them
            for (var i = 0; i < arrList.length; i++) {
            
                // if class found
                if (arrList[i].toUpperCase() == strClassUpper) {
                
                    // remove array item
                    arrList.splice(i, 1);
                    
                    // decrement loop counter as we have adjusted the array's contents
                    i--;
                }
            }
        }
        
        // add the new class to end of list
        arrList[arrList.length] = strClass;
        
        // add the new class to beginning of list
        //arrList.splice(0, 0, strClass);
        
        // assign modified class name attribute
        objElement.className = arrList.join(' ');
    
    // if there was no class    
    } else {
        // assign modified class name attribute      
        objElement.className = strClass;
    }
}

/**
 * RemoveClassName
 * 
 * Removes a class from the class attribute of a DOM element built with the
 * understanding that there may be multiple classes.
 * 
 * @param objElement  element to manipulate
 * @param strClass    class name to remove
 */
function removeClassName(objElement, strClass)
{
   // if there is a class
   if (objElement.className) {

      // the classes are just a space separated list, so first get the list
      var arrList = objElement.className.split(' ');

      // get uppercase class for comparison purposes
      var strClassUpper = strClass.toUpperCase();

      // find all instances and remove them
      for (var i = 0; i < arrList.length; i++) {

         // if class found
         if (arrList[i].toUpperCase() == strClassUpper) {

            // remove array item
            arrList.splice(i, 1);

            // decrement loop counter as we have adjusted the array's contents
            i--;

         }

      }

      // assign modified class name attribute
      objElement.className = arrList.join(' ');

   }
   // if there was no class
   // there is nothing to remove
}

/*
 * Handlers for automated loading
 */ 
 _LOADERS = Array();

function callAllLoaders() {
    var i, loaderFunc;
    for(i=0;i<_LOADERS.length;i++) {
        loaderFunc = _LOADERS[i];
        if(loaderFunc != callAllLoaders) loaderFunc();
    }
}

function appendLoader(loaderFunc) {
    if(window.onload && window.onload != callAllLoaders)
        _LOADERS[_LOADERS.length] = window.onload;

    window.onload = callAllLoaders;

    _LOADERS[_LOADERS.length] = loaderFunc;
}


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+";";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}