// Global SVZLIB Namespace
if (SVZLIB == null || typeof(SVZLIB) != 'object') { 
  var SVZLIB = new Object(); 
}

/*
* Basic classname functions
* These functions are made using the official "class" 
* attribute but also supporting of the IE 7 and lower "className" crap
*/

/*
* Function to check if an element has a certain class / classname
* 
* @param object elem
* @param string className
* @return boolean 
*/
SVZLIB.hasClassName = function(elem, className)
{     
 if (typeof(elem) == 'object')
 {   
   if (elem.hasAttribute)
   {
     var tmpClass     = elem.getAttribute('class');
     
     if (tmpClass && tmpClass.match(className))
       return true;
     
   }
   else
   {
     // hasAttribute is not supported in IE7 or lower so we can abuse it in our advantage :-)
     
     // Start of the IE lower then 7 sucks mode    
     var tmpClassName = elem.getAttribute('className');
     
     if (tmpClassName && tmpClassName.match(className))
       return true;
   }
 }
 
 return false;
}

/*
* Function to add a certain class / classname
*
* @param object elem
* @param string className
* @return boolean 
*/
SVZLIB.addClassName = function(elem, className)
{     
 if (typeof(elem) == 'object' && !SVZLIB.hasClassName(elem, className))
 {       
   if (elem.hasAttribute)
   {
     var tmpClass     = elem.getAttribute('class');
             
     if (!tmpClass)
       tmpClass = className;
     else
       tmpClass += ' ' + className;
    
     elem.setAttribute('class', tmpClass);                    
   }     
   else
   {
     // Start of the IE lower then 7 sucks mode
   
     var tmpClassName = elem.getAttribute('className');

     if (!tmpClassName)
       tmpClassName = className;
     else
       tmpClassName += ' ' + className;
       
     elem.setAttribute('className', tmpClassName);
       
   }
   
   return true;    
 }

 return false;
}

/*
* Function to remove a certain class / classname
*
* @param object elem
* @param string className
* @return boolean 
*/
SVZLIB.removeClassName = function(elem, className)
{     
 if (typeof(elem) == 'object' && SVZLIB.hasClassName(elem, className))
 {               
   if (elem.hasAttribute)
   {
     var tmpClass     = elem.getAttribute('class');
       
     if (tmpClass)
       tmpClass = tmpClass.replace(className, '');
             
     elem.setAttribute('class', tmpClass);                    
   }     
   else
   {
     // Start of the IE lower then 7 sucks mode
   
     var tmpClassName = elem.getAttribute('className');

     if (tmpClassName)
       tmpClassName = tmpClassName.replace(className, '');
       
     elem.setAttribute('className', tmpClassName);
       
   }
   
   return true;    
 }

 return false;
}

/**
* Basic function wich is not available in IE 8 or smaller / FF 2.0 / Safari 3.0 / Konquer 3.5.7
*
* Partly adepted version from http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
*/
SVZLIB.getElementsByClassName = function(elem, className)
{
 if (elem.getElementsByClassName)
 {
   return elem.getElementsByClassName(className);
 }
 else
 {  
   var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
   var elm = elm || document;
   var elements = elm.all;
   var returnElements = [];
   var current;
   if (elements)
   {
     var length = elements.length;
     for(var i=0; i<length; i++){
       current = elements[i];
       if(testClass.test(current.className)){
         returnElements.push(current);
       }
     }
   }
   
   return returnElements;
 }
}

// Sub namespace for Forms
if (SVZLIB.Forms == null || typeof(SVZLIB.Forms) != 'object') { 
  SVZLIB.Forms = new Object(); 
}

/*
 * Function that finds all the input that needs text switching
 *
 * @param void
 * @return void
 */
SVZLIB.Forms.initTextSwitchers = function()
{
  // Init inputTexts
  var inputElems = null;
  
  if (inputElems = SVZLIB.getElementsByClassName(document, 'input-text-switcher'))
  {    
    var i = 0;
  
    for (i = 0; i < inputElems.length; i++)
    {      
      if (inputElems[i])
      {
        var inputElem = inputElems[i];
  
        SVZLIB.Forms.inputTextSwitch(inputElem, false);
  
        // Set the onfocus event
        inputElem.onfocus = function()
        {
          SVZLIB.Forms.inputTextSwitch(this, true);
        }
  
        // Set the onblur event
        inputElem.onblur = function()
        {
          SVZLIB.Forms.inputTextSwitch(this, false);
        }
      }
    }
  }
}
 
/*
 * Function clear al the default values before submitting the form
 *
 * @param void
 * @return void
 */
SVZLIB.Forms.clearTextSwitchers = function()
{
 // Init inputTexts
 var inputElems = null;
 
 if (inputElems = SVZLIB.getElementsByClassName(document, 'input-text-switcher'))
 {    
   var i = 0;
 
   for (i = 0; i < inputElems.length; i++)
   {      
     if (inputElems[i])
     {
       var inputElem = inputElems[i];
 
       SVZLIB.Forms.inputTextSwitch(inputElem, true);              
     }
   }
 }
}

/*
 * Function that switches the text and class when there is no value set to the default value of the field
 *
 * @param object HTMLInputElement elem
 * @param boolean focus
 * @return void
 */
SVZLIB.Forms.inputTextSwitch = function(elem, focus)
{
 if (typeof(elem) != 'object')
   return;

 var defaultValues     = new Array();
 var empty             = false;
 var defaultValue      = elem.getAttribute('alt');
 var defaultClassName  = 'input-text-switcher-default';

 // This in case multiple defaultValues can be set
 if (defaultValue.match(/;/))
 {
   defaultValues = defaultValue.split(/;/);

   for (index in defaultValues)
   {
     if (elem.value == defaultValues[index])
     {
       elem.lastValue = defaultValues[index];
       empty = true;
     }

   }
 }
 else if (elem.value == defaultValue || elem.value == '')
 {
   empty = true;
 }

 if (empty)
 {
   if (focus)
   {
     elem.value = '';
     SVZLIB.removeClassName(elem, defaultClassName);
   }
   else
   {
     elem.value = defaultValue;
     SVZLIB.addClassName(elem, defaultClassName);
   }
 }
 else
 {
   SVZLIB.removeClassName(elem, defaultClassName);
 }
}
