Widgets.OnChange.Swap = function( name, params, opts )
{
    this.name = name;
    this.params = params;
    this.opts = opts;
}

{
    new Widgets.OnChange.Swap(); /* JS 1.1 does not create prototype, until function is used once as constructor */
    var p = Widgets.OnChange.Swap.prototype;

    p.process = function ( elem, evt ) {
	if( evt.type == 'load' ) {
	    var elem = DHTML.getFormElement( this.name ) || DHTML.getElement( this.name );
	    if( elem ) {
		var eventType = this.opts['event'] || 'change';
		if( eventType == 'change' ) {
		    DHTML.createListener( elem, 'change' );
		    elem.addOnChangeListener( this );
		}
		else if( eventType == 'click' ) {
		    var elems = $A( elem );
		    for(var i =0; i < elems.length; i++ ) {
			var e = elems[i];
			DHTML.createListener( e, 'click' );			
			e.addOnClickListener( this );
		    }
		}
	    }
	}
	else {
	    var val = elem.value;
	    var found = false;

	    var blockStyle = this.opts['block'] || '';

	    for (var i in this.params ) {
		if( i == val ) {
		    DHTML.changeDisplay( this.params[i], blockStyle );
		    found = true;
		}
		else {
		    DHTML.changeDisplay( this.params[i], 'none' );
		}
	    }

	    if( this.opts['default'] ) {
		var newDefaultStyle = null;
		if( !found ) {
		    newDefaultStyle = blockStyle;
		}
		else {
		    newDefaultStyle = 'none';
		}

		if( newDefaultStyle != null ) {
		    var defaultIds = this.opts['default'].split( ',' );
		    for (idx in defaultIds) {
			DHTML.changeDisplay( defaultIds[idx], newDefaultStyle );
		    }
		}
	    } // if default element(s) supplied
	    
	} // else
    } // changed 
}
	
Widgets.OnChange.Swap.AddListener = function( name, params, opts )
{
    var swap = new Widgets.OnChange.Swap(name, params, opts);
    window.addOnLoadListener( swap );
} // AddListener



