// Originally From http://www.onlinetools.org/articles/unobtrusivejavascript/chapter5.html
// Major modifications by Fisch2, 7-18-2007

function checkform(of) {
   // Test if DOM is available and there is an element called required
   if(!document.getElementById || !document.createTextNode){return true;}
   if(!document.getElementById('required')){return true;}

   // Define error messages and split the required fields
   var errorID='errormsg';
   var errorClass='error';
   /* changes for named list */
   var errorMsg='Errors located in fields marked.';
   /* end changes for named list */
//   var errorImg='Images/alert.gif';
//   var errorAlt='Error';
   var errorTitle='This field contains an error.';
   var reqfields=document.getElementById('required').value.split(',');
   var clean=true;

   // 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.className==errorClass) {
         var label=getLabel(f);
         if (label)
            label.style.fontWeight="normal";
         f.className='';
      }
/*      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);
               f.title="Invalid email address!";
            }
            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;
      }
   }
   //alert(clean);
   return clean;
   
   function getLabel(o) {
      var tags=of.getElementsByTagName('label');
      var _name=o.getAttribute('name');
      var label=null;

      for(var i=0;i<tags.length;i++) {
         var attr=tags[i].getAttribute('for');
         if (attr && attr==_name) {
            label=tags[i];
            break;
         }
      }

      return label;
   }

   /* Tool methods */
   function cf_adderr(o)
   {
      var label=getLabel(o);

      if (label) {
         //label.style.color="#ff0000";
         label.style.fontWeight="bold";
      }
      
      clean=false;
      o.className=errorClass;
      o.title=errorTitle;
      // create image, add to and colourise the error fields
      /*var errorIndicator=document.createElement('img');
      errorIndicator.alt=errorAlt;
      errorIndicator.src=errorImg;
      errorIndicator.title=errorTitle;
      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);*/
         //         alert("Adding error: " + document.getElementById();
         /* added for named list 
            var newul=document.createElement('ul');		
            em.appendChild(newul);
            end added for named list */
         // find the submit button
         /*var tags=of.getElementsByTagName('input');
         for(var i=0;i<tags.length;i++)
         {
            //alert(tags[i].className);
            if(/submit/i.test(tags[i].className))
            {
               var sb=tags[i];
               break;
            }
         }
         if(sb)
         {
            sb.parentNode.insertBefore(em,sb);
            //alert("found: " + sb.id + ", " + document.getElementById(errorID));
         } else alert("not found: " + document.getElementById(errorID));
      }*/
      /* added for named list 
         var em=document.getElementById(errorID).getElementsByTagName('ul')[0];
         var newli=document.createElement('li');
         for(var i=0;i<of.getElementsByTagName('label').length;i++)
         {
         if(of.getElementsByTagName('label')[i].htmlFor==o.id)
         {
         var txt=of.getElementsByTagName('label')[i].firstChild.nodeValue;
         break;
         }
         }
         newli.appendChild(document.createTextNode(txt));
         em.appendChild(newli);
         end added for named list */
   }

   function cf_isEmailAddr(str) 
   {
      return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
   }
}

