function refreshAbs()
{
 if( document.all ) return true;
 for( i in popname )
 {
  movelayer(popname[i]+"_ghost", getlayerleft(popname[i]+"_avail"), getlayertop(popname[i]+"_avail"));
 }
 return true;
}

function elementActive(element,state)
{
 df = document.f

 if(state)
 {
  setSelectedIndex = 0
  setChecked = false
  setDisable = false
  setVisibility = false
  setColor = "#de0000"
 }
 else
 {
  setSelectedIndex = -1
  setChecked = false
  setDisable = true
  setVisibility = true
  setColor = "#cccccc"
 }

 elementType = elemtype[element]

 if(elementType == "text" && typeof(df[popname[element]]) != "undefined" )
 {
  df[popname[element]].value = "";
 }
 if( (elementType == "select-one" || elementType == "select-multiple") && typeof(df[popname[element]]) != "undefined" )
 {
  df[popname[element]].selectedIndex = setSelectedIndex;
 }
 if( (elementType == "radio" || elementType == "checkbox") && typeof(df[popname[element]]) != "undefined" )
 {
  df[popname[element]].disabled = setDisable;
  for( l=0; l < document.f.elements[popname[element]].length; l++)
  {
   df[popname[element]][l].checked = setChecked;
   df[popname[element]][l].disabled = setDisable;
  }
 }
 else
 {
   if ( typeof(df[popname[element]]) != "undefined" )
   {
     df[popname[element]].disabled = setDisable;
   }
 }

 if( document.all && typeof(df[popname[element]]) != "undefined" )
 {
  document.all[popname[element]+"_avail"].style.color = setColor;
 }
 else
 {
   if( setVisibility )
     showlayer( popname[element]+"_ghost" );
   else
     hidelayer( popname[element]+"_ghost" );
 }

}


function subClassSet(classid,state)
{
  df = document.f
  if( typeof(subClass[classid]) != "undefined" ) // no need to check sub classes if non exists
  {
    // check/uncheck sub classes
    multisub = subClass[classid].split("|")
    for( j in multisub )
    {
      elementHandle( multisub[j] ).checked = state;
    }
  }

  // check/uncheck super classes
  for( l in subClass )
  {
    if( l != classid ) // no need to check own sub classes
    {
      multisub = subClass[l].split("|")
      inMultiSub = false;
      for( m in multisub )
      {
        if( multisub[m] == classid )
        {
          inMultiSub = true;
          break;
        }
      }

      // if the un/selected items is a sub class iteself, start checking
      //   the state of the other sub classes of this super class
      if( inMultiSub )
      {
        multiState = true;
        // go through each item in the sub class list and check if they are all set
        for( m in multisub )
        {
          elementArray = elementHandleArray( multisub[m] );
          for( n in elementArray )
          {
            multiState = ( !elementArray[n].checked ) ? false : multiState;
          }
        }
        superClassElement = elementHandle( l );
        if( !superClassElement.checked && multiState )
        {
          superClassElement.click()
        }
        else
        {
          superClassElement.checked = false;
        }
      }
    }
  }
}

function elementHandle( idsValue )
{
  elementList = df[ popname[ ids[ idsValue ] ] ];
  for( elementListCount = 0; elementListCount < elementList.length; elementListCount++ )
  {
    if( elementList[elementListCount].value == idsValue )
    {
      return elementList[elementListCount]
    }
  }
}

function elementHandleArray( idsValue )
{
  elementArray = new Array();
  elementList = df[ popname[ ids[ idsValue ] ] ];
  elementArrayCount = 0;
  for( elementListCount = 0; elementListCount < elementList.length; elementListCount++ )
  {
    if( elementList[elementListCount].value == idsValue )
    {
      elementArray[ elementArrayCount++ ] = elementList[elementListCount];
    }
  }
  return elementArray;
}

var msub = new Array;

function lockType(typeid,level)
{
  for( i in ids )
  {
   if( ids[i] == typeid && typeof(subType[i]) != "undefined" )
   {
    msub[level] = subType[i].split("|")
    for( j in msub[level] )
    {
     tloc[msub[level][j]] = true;
     elementActive(msub[level][j],false);
     lockType(msub[level][j],level+1);
    }
   }
  }
}


function setLock(classid)
{
 var h, typeid ;

 if( typeof(subType[classid]) == "undefined" )
 {
  typeid = ids[classid];
  lockType(typeid,0)
 }
 else
 {
  typeid = ids[classid];
  lockType(typeid,0)
  multisub = subType[classid].split("|")
  for( h in multisub )
  {
   tloc[multisub[h]] = false;
   elementActive(multisub[h],true);
  }
 }
}

function startLocks()
{
 if( typeof( document.f.countryOther ) != "undefined" ) document.f.countryOther.disabled=true;
 for( h in tloc )
 {
  if( typeof( prepop[h] ) == "undefined" )
  {
    elementActive(h,false);
  }
 }
}


function checkForm()
{
 err = new String;
 cma = new String;
 with (document.f)
 {
  if ( !email.value) {err=err+cma+"Email";cma="\n";}
   else { if (isEmailValid(email) == false) return false; }
  if ( password.value.length < 4 || password.value.length > 20 ) {err=err+cma+"Password (must be between 4 and 20 characters)";cma="\n";}
  if ( password.value != password2.value) {err=err+cma+"Passwords do not match";cma="\n";}

  if( typeof( fullName ) != "undefined" &&
      typeof( firstname ) != "undefined" && firstname.value != "" &&
      typeof( surname )   != "undefined" && surname.value != "" )
  {

    var titleStr = "";

    if( typeof( title ) != "undefined" )
    {
      if( typeof( title.selectedIndex ) != "undefined" )
      {
        titleStr = ( ( title.options[title.selectedIndex].value != "" ) ? title.options[title.selectedIndex].text + " " : "" );
      }
      else
      {
        titleStr = ( ( title.value != "" ) ? title.value + " " : "" );
      }
    }

    fullName.value = titleStr + firstname.value + " " +
                     ( ( typeof( initials ) != "undefined" && initials.value != "n/a" ) ? initials.value + " " : "" ) + surname.value;

  }

  for( i in mand )
  {
   errextopts = false
   if( popname[i] == "" ) continue;
   if( !(document.f.elements[popname[i]].disabled) )
   {
    if( elemtype[i] == "text" )
    {
     if( !document.f.elements[popname[i]].value ) {errextopts = true}
    }
    if( elemtype[i] == "text-area" )
    {
     if( !document.f.elements[popname[i]].value ) {errextopts = true}
    }
    if( elemtype[i] == "select-one" || elemtype[i] == "select-multiple" )
    {
     if( document.f.elements[popname[i]].selectedIndex < 1 ) {errextopts = true}
    }
    if( (elemtype[i] == "radio" || elemtype[i] == "checkbox") && !tloc[i] )
    {
     chk = false;
     for(j=0; j < document.f.elements[popname[i]].length; j++)
     {
      if( document.f.elements[popname[i]][j].checked ) { chk = true; break; }
     }
     if( !chk ) {errextopts = true}
    }
    if(errextopts){err=err+cma+fieldName[i];cma="\n";}
   }
  }

 }
 if (err != "")
 {
  alert("Please correctly complete all of the fields:\n\n" + err );
  return false;
 }
 else
 {
  return true;
 }
}
