function checkButton(){
 return("<input type=\"button\" value=\"Check Form\" onClick=\"validate(form1)&&alert('Form checked and No Errors Found')\">"); 
}
function getElement(name){
 return(document.getElementById?document.getElementById(name):
 document.layers?document.layers[name]:
 document.all?document.all[name]:
 false);
}
function getType(obj){
 return(obj.type?obj.type:
 (obj[0]&&obj[0].type)?obj[0].type:
 (obj.options&&obj.options.type)?obj.options.type:
 false);
}
function changed(obj,desc,arg){
 var res=false;
 var type=getType(obj);
 if(type){
  if((type=='select-one')&&obj[obj.selectedIndex].defaultSelected){
   res='Please make your selection for "'+desc+'"';
  }
  else if(((type=='text')||(type=='textarea')||('password'))&&(obj.value==obj.defaultValue)){
   res='Please change the entry for "'+desc+'"';
  }
 }
 return(res);
}
function required(obj,desc,arg){
 var res=false;
 var min=arg[0];
 var max=arg[1];
 var type=getType(obj);
 if(type){
  var tot=0;
  var smin=(min&&(min>1))?'s':'';
  var smax=(max&&(max>1))?'s':'';
  if((type=='text')||(type=='textarea')||(type=='password')){
   tot=obj.value.length;
   if(min&&(tot<min)){
    res=(tot==0)?'Please make an entry in "'+desc+'".':
	'The minimum entry in "'+desc+'" is '+min+' character'+smin;
   }
   else if(max&&(tot>max)){
    res='The maximum entry in "'+desc+'" is '+max+' character'+smax;
   }
  }
  else{
   for(var i=0;i<obj.length;i++){
    tot+=((type=='select-multiple')&&obj.options[i].selected)?1:
    ((type=='select-one')&&obj[i].selected)?1:
    ((type=='checkbox')&&obj[i].checked)?1:
    ((type=='radio')&&obj[i].checked)?1:
    0;
   }
   if(((type=='radio')||(type=='select-one'))&&(min&&(tot==0))){
    res='Please make a selection for "'+desc+'"';
   }
   else if((type=='select-multiple')||(type=='checkbox')){
    res=(min&&(tot<min))?'Please make at least '+min+' selection'+smin+' for "'+desc+'"':
    (max&&(tot>max))?'Please make at most '+max+' selection'+smax+' for "'+desc+'"':
    false;
   }
  }
 }
 return(res);
}
function email(obj,desc,arg){
 var type=getType(obj);
 var res=false;
 if(type&&((type=='text')||(type=='textarea'))){
  var rec=new String(obj.value);
  if(rec&&rec.length){
   res='Please enter an email address in the form: name@domain.com';
   var index=rec.indexOf('@');
   if((index>0)&&index==rec.lastIndexOf('@')){
    var pindex=rec.indexOf('.',index);
    if((pindex>index+1)&&(rec.length>pindex+1)){
     res=false;
    }
   }
  }
 }  
 return(res);
}
function confirm(obj,desc,arg){
 var res=false;
 var params=arg[0];
 var compTo=arg[1];
 var formName=arg[2];
 var form=getElement(formName);
 var field=form[compTo];
 var type1=getType(obj);
 var type2=getType(field);
 if(type1&&type2&&(type1==type2)&&((type1=='text')||(type1=='textarea')||(type1='password'))){
  if(obj.value!=field.value){
   res='"'+desc+'" does not match "'+params[compTo].describe+'". Please re-enter these fields';
  }  
 }
 return(res);
}
function range(obj,desc,arg){
 var res=false;
 var type=getType(obj);
 if(type&&((type=='text')||(type=='textarea'))){
  var min=(arg[0]);
  var max=(arg[1]);
  var grp=obj.value.split(',');
  var str=grp.join('');
  if(str.length>0){
   if(str!=(str*1)){
    res='Please enter a proper number in "'+desc+'"';
   }
   else{
    str=parseFloat(str);
    if(min!='false'){
     min=parseFloat(min);
   	 if(str<min){
      res='The minimum value for "'+desc+'" is '+min; 
     }
    }  
    if(max!='false'){
     max=parseFloat(max);
     if(str>max){
      res='The maximum value for "'+desc+'" is '+max;
     }
    }
   }
  }
 }
 return(res);
}
function allow(obj,desc,allow){
 var bad='';
 var type=getType(obj);
 if(type&&((type=='text')||(type=='textarea')||(type=='password'))){
  for(var i=0;i<obj.value.length;i++){
   var chr=obj.value.charAt(i);
   if((allow.indexOf(chr)<0)&&(bad.indexOf(chr)<0)&&(bad.length<11)){
    bad+=bad.length<10?chr:'...';
   }
  }
 }
 return(bad?'"'+desc+'" cannot contain the character'+((bad.length>1)?'s':'')+': "'+bad+'"':false);
}
function resetErrors(form){
 var params=new parameters(form.name);
 for(i in params){
  var objS=getElement(params[i].errorDiv);
  if(objS&&objS.innerHTML){
   objS.innerHTML='';
  }
 }
return true;
}
function validate(form){
 var res=true;
 var msg='';
 var foc='';
 var num=0;
 var params=new parameters(form.name);
 var ord=new String();
 for(var i=0;i<form.length;i++){
  if(params[form.elements[i].name]){
   ord[form.elements[i].name]=1;
  }
 }
 for(var i in ord){
  var objF=form[i];
  var objS=getElement(params[i].errorDiv);
  if(objS&&objS.innerHTML){
   objS.innerHTML='';
  }
  for(var test in params[i]){
   if((test=='describe')||(test=='errorDiv')){
    continue;
   }
   var arg=params[i][test];
   var cnt=false;
   if(arg){
    cnt=eval(test+'(objF,params[i].describe,arg)');
   }
   if(cnt){
    num++;
    res=false;
    if(!msg){
     msg=cnt;
     foc=objF;
    }
    if(objS){
     if(document.layers){
      objS.document.open();
      objS.document.write(cnt);
      objS.document.close();
     }
     else{
      objS.innerHTML=cnt;
     }
    }
    break;
   }
  } 
 }
 if(num>0){
  alert(num+" error"+((num>1)?'s':'')+" must be corrected. The "+((num>1)?'first ':'')+"error is:\n" + msg);
  var type=getType(foc);
  ((type=='select-one')||(type=='select-multiple'))?foc.focus():
  ((type=='text')||(type=='textarea'))?foc.focus():
  (type=='radio')?foc[0].focus():
  !(foc[0])?foc.focus():
  foc[0].focus();
 }
 return(res);
}
function field(array){
 for(var i=0;i<array.length;i=i+2){
  this[array[i]]=array[i+1];
 }
 return(this);
}
