/*****************************************/
/** Usable Forms 2.0, November 2005     **/
/** Written by ppk, www.quirksmode.org  **/
/** Instructions for use on my site     **/
/**                                     **/
/** You may use or change this script   **/
/** only when this copyright notice     **/
/** is intact.                          **/
/**                                     **/
/** If you extend the script, please    **/
/** add a short description and your    **/
/** name below.                         **/
/*****************************************/

var containerTag = 'TR';

var compatible = (
   document.getElementById && document.getElementsByTagName && document.createElement
   &&
   !(navigator.userAgent.indexOf('MSIE 5') != -1 && navigator.userAgent.indexOf('Mac') != -1)
   );

if (compatible)
{
   document.write('<style>.accessibility{display: none}</style>');
   var waitingRoom = document.createElement('div');
}

var hiddenFormFieldsPointers = new Object();

function prepareForm()
{
   if (!compatible) return;
   var marker = document.createElement(containerTag);
   marker.style.display = 'none';

   var x = document.getElementsByTagName('select');
   for (var i=0;i<x.length;i++)
      addEvent(x[i],'change',showHideFields)

   var x = document.getElementsByTagName(containerTag);
   var hiddenFields = new Array;
   for (var i=0;i<x.length;i++)
   {
      if (x[i].getAttribute('rel'))
      {
         var y = getAllFormFields(x[i]);
         x[i].nestedRels = new Array();
         for (var j=0;j<y.length;j++)
         {
            var rel = y[j].getAttribute('rel');
            if (!rel || rel == 'none') continue;
            x[i].nestedRels.push(rel);
         }
         if (!x[i].nestedRels.length) x[i].nestedRels = null;
         hiddenFields.push(x[i]);
      }
   }

   while (hiddenFields.length)
   {
      var rel = hiddenFields[0].getAttribute('rel');
      if (!hiddenFormFieldsPointers[rel])
         hiddenFormFieldsPointers[rel] = new Array();
      var relIndex = hiddenFormFieldsPointers[rel].length;
      hiddenFormFieldsPointers[rel][relIndex] = hiddenFields[0];
      var newMarker = marker.cloneNode(true);
      newMarker.id = rel + relIndex;
      hiddenFields[0].parentNode.replaceChild(newMarker,hiddenFields[0]);
      waitingRoom.appendChild(hiddenFields.shift());
   }
   
   setDefaults();
   addEvent(document,'click',showHideFields);
}

function setDefaults()
{
   var y = document.getElementsByTagName('input');
   for (var i=0;i<y.length;i++)
   {
      if (y[i].checked && y[i].getAttribute('rel'))
         intoMainForm(y[i].getAttribute('rel'))
   }

   var z = document.getElementsByTagName('select');
   for (var i=0;i<z.length;i++)
   {
      if (z[i].options[z[i].selectedIndex].getAttribute('rel'))
         intoMainForm(z[i].options[z[i].selectedIndex].getAttribute('rel'))
   }

}

function showHideFields(e)
{
   if (!e) var e = window.event;
   var tg = e.target || e.srcElement;

   if (tg.nodeName == 'LABEL')
   {
      var relatedFieldName = tg.getAttribute('for') || tg.getAttribute('htmlFor');
      tg = document.getElementById(relatedFieldName);
   }
      
   if (
      !(tg.nodeName == 'SELECT' && e.type == 'change') && !(tg.nodeName == 'INPUT' && tg.getAttribute('rel')) && !(tg.nodeName == 'IMG' && tg.getAttribute('rel'))
      ) return;

   var fieldsToBeInserted = tg.getAttribute('rel');

   if (tg.nodeName == 'IMG')
   {
         intoWaitingRoom("catagory01_clients");
         intoWaitingRoom("catagory02_clients");
         intoWaitingRoom("catagory03_clients");
         intoWaitingRoom("catagory04_clients");
         intoWaitingRoom("catagory05_clients");
         intoWaitingRoom("catagory06_clients");
         intoWaitingRoom("catagory07_clients");
         intoWaitingRoom("catagory08_clients");
         intoWaitingRoom("catagory09_clients");
         intoWaitingRoom("catagory10_clients");
         intoMainForm(fieldsToBeInserted);
        }
   else if (tg.type == 'checkbox')
   {
      if (tg.checked)
         intoMainForm(fieldsToBeInserted);
      else
         intoWaitingRoom(fieldsToBeInserted);
   }
   else if (tg.type == 'radio')
   {
      removeOthers(tg.form[tg.name],fieldsToBeInserted)
      intoMainForm(fieldsToBeInserted);
   }
   else if (tg.type == 'select-one')
   {
      fieldsToBeInserted = tg.options[tg.selectedIndex].getAttribute('rel');
      removeOthers(tg.options,fieldsToBeInserted);
      intoMainForm(fieldsToBeInserted);
   }
}

function removeOthers(others,fieldsToBeInserted)
{
   for (var i=0;i<others.length;i++)
   {
      var show = others[i].getAttribute('rel');
      if (show == fieldsToBeInserted) continue;
      intoWaitingRoom(show);
   }
}

function intoWaitingRoom(relation)
{
   if (relation == 'none') return;
   var Elements = hiddenFormFieldsPointers[relation];
        if (Elements)
        {
   for (var i=0;i<Elements.length;i++)
   {
      waitingRoom.appendChild(Elements[i]);
      if (Elements[i].nestedRels)
         for (var j=0;j<Elements[i].nestedRels.length;j++)
            intoWaitingRoom(Elements[i].nestedRels[j]);
   }
   }
}

function intoMainForm(relation)
{
   if (relation == 'none') return;
   var Elements = hiddenFormFieldsPointers[relation];
        
        if (Elements)
        {
   for (var i=0;i<Elements.length;i++)
   {
      var insertPoint = document.getElementById(relation+i);
      insertPoint.parentNode.insertBefore(Elements[i],insertPoint);
      if (Elements[i].nestedRels)
      {
         var fields = getAllFormFields(Elements[i]);
         for (var j=0;j<fields.length;j++)
         {
            if (!fields[j].getAttribute('rel')) continue;
            if (fields[j].checked || fields[j].selected) 
               intoMainForm(fields[j].getAttribute('rel'));
         }
      }
   }
   }
}

function getAllFormFields(node)
{
   var allFormFields = new Array;
   var x = node.getElementsByTagName('input');
   for (var i=0;i<x.length;i++)
      allFormFields.push(x[i]);
   var y = node.getElementsByTagName('option');
   for (var i=0;i<y.length;i++)
      allFormFields.push(y[i]);
   return allFormFields;
}

/** ULTRA-SIMPLE EVENT ADDING **/

function addEvent(obj,type,fn)
{
   if (obj.addEventListener)
      obj.addEventListener(type,fn,false);
   else if (obj.attachEvent)
      obj.attachEvent("on"+type,fn);
}
/*
addEvent(window,"load",prepareForm);
*/

/** PUSH AND SHIFT FOR IE5 **/

function Array_push() {
   var A_p = 0
   for (A_p = 0; A_p < arguments.length; A_p++) {
      this[this.length] = arguments[A_p]
   }
   return this.length
}

if (typeof Array.prototype.push == "undefined") {
   Array.prototype.push = Array_push
}

function Array_shift() {
   var A_s = 0
   var response = this[0]
   for (A_s = 0; A_s < this.length-1; A_s++) {
      this[A_s] = this[A_s + 1]
   }
   this.length--
   return response
}

if (typeof Array.prototype.shift == "undefined") {
   Array.prototype.shift = Array_shift
}

