

      function getEventTarget(e)
      {
        return e.target || e.srcElement;
      }
      
      function getElementsByClassName(oElm, strTagName, strClassName)
      {
        var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        strClassName = strClassName.replace(/\-/g, "\\-");
        var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
        var oElement;
        for(var i=0; i<arrElements.length; i++)
        {
          oElement = arrElements[i];
          if(oRegExp.test(oElement.className))
          {
            arrReturnElements.push(oElement);
          }
        }
        return (arrReturnElements)
      }

      function divHover(element)
	  {
	    if(element.className != "optionSelectedClass")
	    {
	      element.className = "optionHoverClass";
	    }
	  }

	  function divLeave(element)
	  {
	    if(element.className != "optionSelectedClass")
	    {
	      element.className = "optionClass";
	    }
      }

      function registerSelectEvents()
      {
        selects = getElementsByClassName(document, "div", "selectClass");
        for(i = 0; i < selects.length; i++)
        {
          select = selects[i];
          for(j = 0; j < select.childNodes.length; j++)
          {
            node =  select.childNodes[j];
            if(node.nodeName == "DIV")
            {
              if(node.addEventListener)
              {
                node.addEventListener("click", highlight, false);
              }
              else if (node.attachEvent)
              {
                node.attachEvent("onclick", highlight);
              }
            }
          }
        }
      }

      var clickIndex = -1;
      var oldClickIndex = -1;
      function highlight(e)
      {
        if(!e) var e = window.event;
        me = getEventTarget(e);
        select = me.parentNode;
        for(i = 0; i < select.childNodes.length; i++)
        {
          node = select.childNodes[i];
          if(node.nodeName == "DIV")
          {
            if(me == node)
            {
              clickIndex = i;
            }
            if(!(e.ctrlKey || e.metaKey))
            {
              if(node.className != "optionHiddenClass")
              {
                node.className = "optionClass";
              }
            }
          }
        }

        if(e.shiftKey && oldClickIndex != -1)
        {
          if(clickIndex > oldClickIndex)
          {
            diff = -1;
          }
          else
          {
            diff = 1;
          }
          for(i = clickIndex; i != oldClickIndex; i+= diff)
          {
            node = select.childNodes[i];
            {
              if(node.nodeName == "DIV" && node.className != "optionHiddenClass")
              {
                node.className = "optionSelectedClass";
              }
            }
          }
          node = select.childNodes[i];
          {
            if(node.nodeName == "DIV" && node.className != "optionHiddenClass")
            {
              node.className = "optionSelectedClass";
            }
          }
        }
        else
        {
          oldClickIndex = clickIndex;
          if(me.className == "optionClass" || me.className == "optionHoverClass")
          {
            me.className = "optionSelectedClass";
          }
          else
          {
            me.className = "optionClass";
          }
        }
      }

      var intervalIds = new Array();

      function findInterval()
      {
        for(x = 1; x < 1000; x++)
        {
          if(intervalIds[x] == null)
          {
            return x;
          }
        }
      }

      function findLink(element)
      {
        for(a = 0; a < element.childNodes.length; a++)
        {
          node = element.childNodes[a];
          if(node.nodeName == "P")
          {
            var toParse = node.innerHTML;
            var tokens = new Array();
            tokens = toParse.split(";");
            return document.getElementById(tokens[1]);
          }
        }
      }

      function findValue(element)
      {        
        for(a = 0; a < element.childNodes.length; a++)
        {
          node = element.childNodes[a];
          if(node.nodeName == "P")
          {            
            var toParse = node.innerHTML;
            var tokens = new Array();
            tokens = toParse.split(";");
            return tokens[0];
          }
        }
      }

      function move(from, to)
      {
        var select = document.getElementById(from);
        for(i = 0; i < select.childNodes.length; i++)
        {
          node = select.childNodes[i];
          if(node.nodeName == "DIV")
          {
            if(node.className == "optionSelectedClass")
            {
              node.className = "optionClass";

              height = node.offsetHeight;

              myId = findInterval();

              var temp = new Array();
              temp[0] = setInterval("fader(" + myId + ", 'out')", 20);
              temp[1] = node;
              temp[2] = 10;
              temp[3] = node.offsetHeight;

              node.style.overflow = "hidden";

              intervalIds[myId] = temp;

              myId1 = findInterval();

              otherNode = findLink(node);
              otherNode.style.height = "1px";
              otherNode.className = "optionClass";
              otherNode.style.overflow = "hidden";

              var temp1 = new Array()
              temp1[0] = setInterval("fader(" + myId1 + ", 'in')", 20);
              temp1[1] = otherNode;
              temp1[2] = 10;
              temp1[3] = height;

              intervalIds[myId1] = temp1;
            }
          }
        }
      }

      function fader(intervalID, direction)
      {
        var temp = intervalIds[intervalID];
        element = temp[1];
        percent = temp[2]/10;

        if(direction == "out")
        {
          element.style.height = (temp[3] * percent) + "px";
          element.style.opacity = percent;
          element.style.filter = "alpha(opacity=" + (percent*100) + ")";
        }
        else
        {
          element.style.height = (temp[3] * (1 - percent)) + "px";
          element.style.opacity = (1 - percent);
          element.style.filter = "alpha(opacity=" + (100-(percent*100)) + ")";
        }

        temp[2]--;
        if(temp[2] == 0)
        {
          clearInterval(temp[0]);
          intervalIds[intervalID] = null;
          element.style.overflow = "visible";
          element.style.opacity = 1;
          element.style.filter = "alpha(opacity=100)";
          element.style.height = (temp[3] - 4) + "px";
          if(direction == "out")
          {
            element.className = "optionHiddenClass";
          }
        }
      }

      function testFormAction(form, selectId)
      {
        var select = document.getElementById(selectId);
        for(i = 0; i < select.childNodes.length; i++)
        {
          node = select.childNodes[i];
          if(node.nodeName == "DIV")
          {
            if(node.className != "optionHiddenClass")
            {
              var value = findValue(node);
              var myInput = document.createElement("input");
              myInput.setAttribute("type", "hidden");
              myInput.setAttribute("name", select.getAttribute("name"));
              myInput.setAttribute("value", value);

              form.appendChild(myInput);
            }
          }
        }
        form.submit();
      }