YAHOO.namespace("Core.form.DynamicToggleGenerator");

YAHOO.Core.form.DynamicToggleGenerator = function (cfg){
	this.targetFieldName = cfg.fieldName;
	this.containerId = cfg.containerId;
	this.toggleDependencyRules = cfg.toggleDependencyRules;
	
	if(this.toggleDependencyRules.length > 0){
		for(i = 0;i<this.toggleDependencyRules.length;i++){
			eachRule = this.toggleDependencyRules [i];
			for(j = 0;j<eachRule.length;j++){
			    var toggleField = eachRule [j];
			    for(k = 0;k<document.getElementsByName(toggleField.fieldName).length;k++){
			    if(document.getElementsByName(toggleField.fieldName)[k].type == "select-one"){
			    	YAHOO.util.Event.addListener(document.getElementsByName(toggleField.fieldName)[k], "change", this.toggle, this, true);
			    }
			    else{
			    	YAHOO.util.Event.addListener(document.getElementsByName(toggleField.fieldName)[k], "click", this.toggle, this, true);
			    }
			}
		  }	
		}
	}
	this.toggle(null);
};

YAHOO.Core.form.DynamicToggleGenerator.prototype = {
	
	toggle: function(e){
	 if(this.toggleDecider()){
	 	YAHOO.util.Dom.removeClass(document.getElementById(this.containerId), "none");
	 	for(i=0;i<document.getElementsByName(this.targetFieldName).length;i++){
	 	document.getElementsByName(this.targetFieldName)[i].disabled = false;
	 	}
	 }
	 else{
	 	YAHOO.util.Dom.addClass(document.getElementById(this.containerId), "none");	 	
	 	for(i=0;i<document.getElementsByName(this.targetFieldName).length;i++){
	 	document.getElementsByName(this.targetFieldName)[i].disabled = true;
	 	}
	 }
	},

	toggleDecider: function(e){
		for(k = 0;k<this.toggleDependencyRules.length;k++){
			if(this.evaluate(this.toggleDependencyRules [k])){
				return true;
			}
		}
		return false;
	},
	
	evaluate: function(rule){
		for(l = 0;l<rule.length;l++){
			toggleFieldInRule = rule [l];
			if(toggleFieldInRule.toggleValue.toUpperCase() != this.getSelectedValue(toggleFieldInRule.fieldName).toUpperCase())
			{
				return false;
			}
		}
	 return true;
	},
	
	getSelectedValue: function(fieldName){
		if(document.getElementsByName(fieldName).length >1){
		 for(m=0;m<document.getElementsByName(fieldName).length;m++){
			if(document.getElementsByName(fieldName)[m].checked ==true){
				return document.getElementsByName(fieldName)[m].value;
			}
		 }
		}
		else{
			return document.getElementsByName(fieldName)[0].value;
		}
	}
};

