function cf_check_form(fields,error_box,error_text){if(error_box){$(error_box).style.display='none';}
if(!error_text&&error_text!=0){error_text='Some required fields were not completed. Please check the fields highlighted.';}
var e_count=0;var fe_fail=false;fields.each(function(item){if(fe_fail){return;}
item.result=cf_check_line(item);if(!item.result){if(item.override){fe_fail=item.override}else{e_count++;}}});if(fe_fail){cf_error_message(fe_fail,error_box);return false;}
if(e_count){if(error_text){cf_error_message(error_text,error_box);}
return false;}
return true;}
function cf_check_line(check){cf_showhide_block(check.fields,0);var s_count=0;var follow_flag=0;var deviation_flag=0;var failed_fields=new Array();var deviation_base=$(check.fields[0]).value;var i=0;check.fields.each(function(item){if(cf_check_field(item,check)){s_count++;if(i==0){follow_flag=1;}
if($(item).value!=deviation_base){deviation_flag=1;}}else{failed_fields.push(item);}
i++;});switch(check.type){case'==':if(deviation_flag){cf_showhide_block(check.fields,1);return false;}
else{return true;}
break;case'!=':return(deviation_flag?true:false);break;case'and':cf_showhide_blanks(check.fields);return(s_count==check.fields.length?true:false);break;case'regex':cf_showhide_block(failed_fields,1);return(!failed_fields.length?true:false);break;case'or':if(s_count){return true;}else{cf_showhide_block(check.fields,1);return false;}
break;case'nxor':if((s_count==check.fields.length)||!s_count){return true;}else{cf_showhide_blanks(check.fields);return false;}
break;case'follow':if((follow_flag&&check.fields.length==s_count)||!follow_flag){return true;}else{cf_showhide_blanks(check.fields);return false;}
break;case'fn':var ok=(failed_fields.length==0);cf_showhide_block(check.fields,!ok);return ok;break;}}
function cf_check_field(field,check){if(check==undefined){check={};}
var dom_field=$(field);var regex=check.regex;var fn=check.fn;var r=false;if(fn){r=(fn(dom_field.id,dom_field.value,dom_field.type)?true:false);}else{switch(dom_field.type.toLowerCase()){case'select':if(regex){r=(dom_field.value.match(regex)?true:false);}else{r=(dom_field.value.replace(' ','')?true:false);}
break;case'checkbox':r=(dom_field.checked?true:false);break;case'radio':r=(dom_field.checked?true:false);break;default:r=(dom_field.value.match(regex||/\S/)?true:false);break;}}
return r;}
function cf_showhide_error(field,state){if(field.type.toLowerCase()=='checkbox'||field.type.toLowerCase()=='radio'){if(state){field.addClassName('cf_error_highlight_checkbox');field.removeClassName('cf_error_clear');}else{field.addClassName('cf_error_clear');field.removeClassName('cf_error_highlight_checkbox');}}else{if(state){field.addClassName('cf_error_highlight');field.removeClassName('cf_error_clear');}else{field.addClassName('cf_error_clear');field.removeClassName('cf_error_highlight');}}}
function cf_showhide_block(fields,state){fields.each(function(item){cf_showhide_error($(item),state);});}
function cf_showhide_blanks(fields){fields.each(function(item){var dom_field=$(item);cf_showhide_error(dom_field,!cf_check_field(item));})}
function cf_error_message(error_text,error_box){if(error_box){var eb=$(error_box);eb.style.display='block';eb.innerHTML=error_text;}else{alert(error_text);}}