function checkform(of)

{

  if(!document.getElementById || !document.createTextNode){return;}

  if(!document.getElementById('required')){return;}

  var errorID='errormsg';

  var errorClass='error'

  var errorMsg='Please enter or change the fields marked with a ';

  var errorImg='images/alert.gif';

  var errorAlt='Error';

  var errorTitle='This field has an error!';

  var reqfields=document.getElementById('required').value.split(',');

  // Cleanup old mess

  // if there is an old errormessage field, delete it

  if(document.getElementById(errorID))

  {

    var em=document.getElementById(errorID);

    em.parentNode.removeChild(em);

  }

  // remove old images and classes from the required fields

  for(var i=0;i<reqfields.length;i++)

  {

    var f=document.getElementById(reqfields[i]);

    if(!f){continue;}

    if(f.previousSibling && /img/i.test(f.previousSibling.nodeName))

    {

      f.parentNode.removeChild(f.previousSibling);

    }

    f.className='';

  }

  // loop over required fields

  for(var i=0;i<reqfields.length;i++)

  {

// check if required field is there

    var f=document.getElementById(reqfields[i]);

    if(!f){continue;}

	// test if the required field has an error, 

// according to its type

    switch(f.type.toLowerCase())

    {

      case 'text':

        if(f.value=='' && f.id!='email'){cf_adderr(f)}              

// email is a special field and needs checking

        if(f.id=='email' && 

        !cf_isEmailAddr(f.value)){cf_adderr(f)}              

      break;

      case 'textarea':

        if(f.value==''){cf_adderr(f)}              

      break;

      case 'checkbox':

        if(!f.checked){cf_adderr(f)}              

      break;

      case 'select-one':

        if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f)}              

      break;

    }

  }

   return !document.getElementById(errorID);

     /* Tool methods */

  function cf_adderr(o)

  {

     // create image, add to and colourise the error fields

    var errorIndicator=document.createElement('img');

    errorIndicator.alt=errorAlt;

    errorIndicator.src=errorImg;

    errorIndicator.title=errorTitle;

    o.className=errorClass;

    o.parentNode.insertBefore(errorIndicator,o);

	 // Check if there is no error message

    if(!document.getElementById(errorID))

    {

    // create errormessage and insert before submit button

      var em=document.createElement('div');

      em.id=errorID;

      var newp=document.createElement('p');

      newp.appendChild(document.createTextNode(errorMsg))

      // clone and insert the error image

      newp.appendChild(errorIndicator.cloneNode(true));

      em.appendChild(newp);

	      // find the submit button 

      for(var i=0;i<of.getElementsByTagName('input').length;i++)

      {

        if(/submit/i.test(of.getElementsByTagName('input')[i].type))

        {

          var sb=of.getElementsByTagName('input')[i];

          break;

        }

      }

      if(sb)

      {

        sb.parentNode.insertBefore(em,sb);

      }  

    } 

  }

   function cf_isEmailAddr(str) 

  {

      return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);

  }

}// JavaScript Document
