optsClass=function(validator){this.validator=validator;this.options=new Array();}
optsClass.prototype.add_option=function(option){this.options.push(option);}
optsClass.prototype.update=function(triggerName){var i,j,isSelected,selectedOpt,selectedField,foundTrigger;var optionValue,triggerValue;var triggers=$$('INPUT[name="'+triggerName+'"]','SELECT[name="'+triggerName+'"]');if(triggers.length>0){triggers.each(function(el){el.setStyle('background-color','');});for(j=0;j<this.options.length;j++){foundTrigger=false;optionValue=this.options[j].value.toString();for(i=0;i<triggers.length;i++){triggerValue=triggers[i].value.toString();if(optionValue==triggerValue){foundTrigger=true;isSelected=this.validator.checkSelector(triggers[i],triggerValue);if(isSelected){selectedOpt=this.options[j];triggers[i].setStyle('background-color','#FFDD77');}else{triggers[i].setStyle('background-color','');this.options[j].update(this.validator,isSelected);}
break;}}
if(!foundTrigger){this.options[j].update(this.validator,false);}}}
if(selectedOpt!=undefined){selectedOpt.update(this.validator,true);}}
optClass=function(){this.value=arguments[0];this.hide=arguments[1];this.fields=new Array();for(var i=2;i<arguments.length;i++){this.add_field(arguments[i]);}}
optClass.prototype.add_field=function(field_name){this.fields.push(field_name);}
optClass.prototype.update=function(validator,isSelected){var fieldName,fields,i,j;var display=isSelected?'':'none';var disable=isSelected?false:true;var color=disable?'#D4D0C8':'';var selectors=new Array();for(i=0;i<this.fields.length;i++){fieldName=this.fields[i];if(!this.hide){if(fields=validator.findFields(fieldName)){for(j=0;j<fields.length;j++){if(fields[j]&&fields[j].form){if(!disable&&fields[j].optsObj)selectors.push(fields[j]);fields[j].disabled=disable;if(fields[j].type.indexOf('text')>=0||fields[j].type.indexOf('select')>=0){fields[j].style.backgroundColor=color;}}}}}else if(this.hide==1){this.display(fieldName+'_hold',display);}else{this.display(fieldName+'_header',display);this.display(fieldName+'_field',display);}}
for(var i=0;i<selectors.length;i++){selectors[i].optsObj.update(selectors[i]);}}
optClass.prototype.display=function(name,state){var obj;if(obj=document.getElementById(name)){obj.style.display=state;return true;}else{return false;}}
FormValidator.setSelector=function(triggerName){var handler;var i,j;var triggers=$$('INPUT[name="'+triggerName+'"]','SELECT[name="'+triggerName+'"]');if(triggers.length>0){for(i=0;i<triggers.length;i++){if(!triggers[i].optsObj){triggers[i].optsObj=new optsClass(this);triggers[i].oldColor=triggers[i].style.backgroundColor;}
for(j=1;j<arguments.length;j++){triggers[i].optsObj.add_option(arguments[j]);}
handler=(triggers[i].type=='radio'||triggers[i].type=='checkbox')?'click':'change';triggers[i].addEvent(handler,function(){this.optsObj.update(triggerName);});}
triggers[0].optsObj.update(triggerName);}else{}}
FormValidator.checkTriggers=function(triggers,value){if(triggers=this.findFields(triggers)){for(i=0;i<triggers.length;i++){if(this.checkSelector(triggers[i],value))return true;}}}
FormValidator.checkSelector=function(sender,value){if(sender.type=='radio'||sender.type=='checkbox'){return sender.checked&&(sender.value==value);}else{return sender.value==value;}};
