YAHOO.namespace("BASE.util.ToggleDependent");

YAHOO.BASE.util.ToggleDependent = function(cfg){
	
	this.fields = document.getElementsByName(cfg.fieldName);
	this.onValues = cfg.onValues;
	this.toggleContainers = [];
	this.initialValue = null;
	this.disable = (null != cfg.disable) ? cfg.disable : false;
	this.hide = (null != cfg.hide) ? cfg.hide : true;
    this.isTextField = false;
	
	this.toggleContainersAnimations = [];
	
	for(i=0;i<cfg.toggleContainers.length;i++){
		this.toggleContainers[i] = {
			container: YAHOO.util.Dom.get(cfg.toggleContainers[i])
		};
		this.toggleContainers[i].animate = (cfg.animate) ? true : false;
		if(this.toggleContainers[i].animate){
			this.toggleContainers[i].animation = new YAHOO.util.Anim(cfg.toggleContainers[i], { opacity: { from: 0, to: 1 } }, 1, YAHOO.util.Easing.easeOut);
		}
	}
	if("radio" == this.fields[0].type){
		for(i=0;i<this.fields.length;i++){
			YAHOO.util.Event.addListener(this.fields[i], "click", this.toggle, this, true);
			this.initialValue = (this.fields[i].checked) ? this.fields[i].value : this.initialValue;
		}
	}else if(("select-one" == this.fields[0].type) && (1 == this.fields.length)){
		YAHOO.util.Event.addListener(this.fields[0], "change", this.toggle, this, true);
		this.initialValue = this.fields[0].options[this.fields[0].selectedIndex].value;
	} else if(("text" == this.fields[0].type) && (1 == this.fields.length)){
        YAHOO.util.Event.addListener(this.fields[0], "keyup", this.toggle, this, true);
        this.initialValue = (this.fields[0].value != null) ? this.fields[0].value : this.initialValue;
        this.isTextField = true;
    }
	
	this.toggle(null);
};

YAHOO.BASE.util.ToggleDependent.prototype = {

	toggle : function(e){
		var clickValue = (null != e) ? YAHOO.util.Event.getTarget(e).value : this.initialValue;
		var show = false;
        
        for(i=0;i<this.onValues.length && !show;i++){   
            if(this.isTextField) {
                show = (show) ? show : (clickValue != null && clickValue.search(this.onValues[i]) != -1);
            } else {
                show = (show) ? show : this.onValues[i] == clickValue;
            }
		}
        
        
		if(show){//show if not already shown
			for(i=0;i<this.toggleContainers.length;i++){
				if(this.hide && YAHOO.util.Dom.hasClass(this.toggleContainers[i].container, "none")){
					if(this.toggleContainers[i].animate && this.toggleContainers[i].animation){
						YAHOO.util.Dom.setStyle(this.toggleContainers[i].container, "opacity", "0");
						YAHOO.util.Dom.removeClass(this.toggleContainers[i].container, "none");
						this.toggleContainers[i].animation.animate();
					}else{
						YAHOO.util.Dom.removeClass(this.toggleContainers[i].container, "none");
					}
				}
				if(this.disable && YAHOO.util.Dom.hasClass(this.toggleContainers[i].container, "disabled")){
					YAHOO.util.Dom.removeClass(this.toggleContainers[i].container, "disabled");
					YAHOO.BASE.util.Fields.enableChildFields(this.toggleContainers[i].container);
				}
			}
		}	
		else{//hide
			for(i=0;i<this.toggleContainers.length;i++){
				if(this.hide){
					YAHOO.util.Dom.addClass(this.toggleContainers[i].container, "none");
				}
				if(this.disable){
					YAHOO.util.Dom.addClass(this.toggleContainers[i].container, "disabled");
					YAHOO.BASE.util.Fields.disableChildFields(this.toggleContainers[i].container);
				}
			}
		}
	}
};