/**
 * Javascript FX-Functions
 */
 
 /***************************************
 * Visibility Toggler 
 * handles the showing and hiding of elements
 *
 * Usage:
 *    new VisToggler(showHideDiv, inputElm, showHideFunction );
 *
 * Examples:
 *    new VisToggler("myradio_opt_y", "myradioY", VisTogglerFactory.showOnChecked(true) );
 *    new VisToggler("myradio_opt_y", "myradioN", VisTogglerFactory.showOnChecked(false) );
 *
 *    new VisToggler("mysel_opt_A", "mysel", VisTogglerFactory.showOnSelectedVal('A') );
 *    new VisToggler("mysel_opt_B", "mysel", VisTogglerFactory.showOnSelectedVal('B') );
 *
 *    new VisToggler("mysel_opt_B", "mysel", function(elm) { return $(elm).value == 'A' ? true : false } );
 * 
 * Notes:
 *    click and keypress events on radios (for the whole radio group)
 *    change events on selects
 * 
 * Author: Wischin
 * Date: 2008-06-30
 * Version: 1.1
 ***************************************/
var VisToggler = new Class({

	initialize: function(elmToggle, elmTrigger, showCheckFn) {
		this.showCheckFn = showCheckFn;
		this.elmTrigger = elmTrigger;
		
		window.addEvent('domready', function() {
			this.slide = new Fx.Slide(elmToggle, {mode: 'vertical', transition: 'quad:out', duration: '400'});
			
			var elmTrig = $(elmTrigger);
			
			if (elmTrig.tagName == "INPUT") {
				var memberRadios = $$('INPUT[name='+elmTrig.name+'][type='+elmTrig.type+']');
				memberRadios.each(function(el) { 
						el.addEvent("click", this.eventHandler.bind(this));	
						el.addEvent("keyup", this.eventHandler.bind(this));	
					}, this);				
			}
			if (elmTrig.tagName == "SELECT") {
				elmTrig.addEvent("change", this.eventHandler.bind(this));
			}
			
			if (showCheckFn(elmTrigger) == true) {
				this.slide.show();
			} else {
				this.slide.hide();
			}
			
		}.bind(this));
	},
	
	eventHandler: function() {
		if (this.showCheckFn(this.elmTrigger)) this.slide.slideIn();
		else this.slide.slideOut();
	}
});

/***************************************
 * Visibility Toggler Factory Class
 * produces functions that test if an element shopuld be visible
 * 
 * showOnChecked		return true if elmId.checked was true
 * showOnSelectedVal	return true if elmId.value was value
 * showOnRadioVal		return true if any radio element with name = elmId.name and radio value ist requested value was checked
 *                      (true if one radio with value val was checked)
 *
 * Author: Wischin
 * Date: 2008-06-30
 * Version: 1.1
 ***************************************/
var VisTogglerFactory = {
	showOnChecked: function(val) { return function(elm) { return ($(elm).checked == true) ? true : false; }},
	showOnSelectedVal: function(val) { return function(elm) { return ($(elm).value == val) ? true : false; }},
	showOnRadioVal: function(val) { return function(elmId) { 
		var elm = $(elmId);
		var memberRadios = ($$('INPUT[name='+elm.name+'][type='+elm.type+']')).filter(function(elm) {return elm.checked;});
		if (memberRadios.length > 0)
			return memberRadios[0].value == val ? true : false; 
		else 
			return (val == "") ? true : false;
	}}
}
