function DefaultNotationSelectionControllerDefn()
{
    /** 
     * set the delegate that will be the selection controller
     * @param {NotationSelectionController}	delegate	the selection controller
     */
    this.setDelegate = function(delegate) {
	this.fDelegate = delegate;
    }

    /**
     * implementation of {@link NotationSelectionController#preSelectionChange}, which
     * passes control to delegate, if there is one
     */
    this.preSelectionChange = function(songView, curSelection, newSelection) {
	if( this.fDelegate ) {
	    return this.fDelegate.preSelectionChange(songView, curSelection, newSelection)
	}
	return newSelection;
    }

    /**
     * add a selection listener
     * @param {NotationSelectionListener} listener	listener
     */
    this.addListener = function(listener) {
	if( listener.onSelectionChange ) {
	    this.fListeners[this.fListeners.length]  = listener;
	    return true;
	}
	return false;
    }

    /**
     * called when the selection changes in the song view, which is informed to all
     * listeners
     * @param {SongView} songView	the song view
     * @param {object}	 curSelection	current selection (a selectable part in song-view)
     * @param {object}	 oldSelection	previous selection (a selectable part in song-view)
     * 
     */
    this.onSelectionChange = function(songView, curSel, oldSel) 
    {
	var nListeners = this.fListeners.length;
	for( var i = 0; i < nListeners; i++ )
	    this.fListeners[i].onSelectionChange(songView, curSel, oldSel);
    }

    /**
     * called when the an already selected object is selected again (e.g. click on 
     * the already selected object), which is informed to all listeners
     *
     * @param {SongView} songView	the song view
     * @param {object}	 curSelection	current selection (a selectable part in song-view)
     * 
     */
    this.onReselect = function(songView, curSel) 
    {
	var nListeners = this.fListeners.length;
	for( var i = 0; i < nListeners; i++ )
	    this.fListeners[i].onReselect(songView, curSel);
    }
    /**
     * selection listener list
     * @type NotationSelectionListener[]
     */
    this.fListeners = new Array();

    /**
     * the delegate that will be the actual selection controller
     * @type {NotationSelectionController}
     * @private
     */
    this.fDelegate = null;
}
/**
 * @class
 * default global notation selection controller - it does nothing except pass on
 * control to a delegate controller, registered via 
 * {@link DefaultNotationSelectionControllerDefn#setDelegate}
 */
@class
default global notation selection controller - it does nothing except pass on
control to a delegate controller, registered via
DefaultNotationSelectionControllerDefn#setDelegate
@class default global notation selection controller - it does nothing except pass on control to a delegate controller registered via DefaultNotationSelectionControllerDefn#setDelegate
function DefaultNotationSelectionControllerDefn()
{
    this.setDelegate = function(delegate) {
	this.fDelegate = delegate;
    }
    this.preSelectionChange = function(songView, curSelection, newSelection) {
	if( this.fDelegate ) {
	    return this.fDelegate.preSelectionChange(songView, curSelection, newSelection)
	}
	return newSelection;
    }
    this.addListener = function(listener) {
	if( listener.onSelectionChange ) {
	    this.fListeners[this.fListeners.length]  = listener;
	    return true;
	}
	return false;
    }
    this.onSelectionChange = function(songView, curSel, oldSel) 
    {
	var nListeners = this.fListeners.length;
	for( var i = 0; i < nListeners; i++ )
	    this.fListeners[i].onSelectionChange(songView, curSel, oldSel);
    }
    this.onReselect = function(songView, curSel) 
    {
	var nListeners = this.fListeners.length;
	for( var i = 0; i < nListeners; i++ )
	    this.fListeners[i].onReselect(songView, curSel);
    }
    this.fListeners = new Array();
    this.fDelegate = null;
}
function DefaultNotationSelectionControllerDefn ( ) { this . setDelegate = function ( delegate ) { this . fDelegate = delegate ; } this . preSelectionChange = function ( songView , curSelection , newSelection ) { if ( this . fDelegate ) { return this . fDelegate . preSelectionChange ( songView , curSelection , newSelection ) } return newSelection ; } this . addListener = function ( listener ) { if ( listener . onSelectionChange ) { this . fListeners [ this . fListeners . length ] = listener ; return true ; } return false ; } this . onSelectionChange = function ( songView , curSel , oldSel ) { var nListeners = this . fListeners . length ; for ( var i = 0 ; i < nListeners ; i ++ ) this . fListeners [ i ] . onSelectionChange ( songView , curSel , oldSel ) ; } this . onReselect = function ( songView , curSel ) { var nListeners = this . fListeners . length ; for ( var i = 0 ; i < nListeners ; i ++ ) this . fListeners [ i ] . onReselect ( songView , curSel ) ; } this . fListeners = new Array ( ) ; this . fDelegate = null ; }
@class
 default global notation selection controller - it does nothing except pass on
 control to a delegate controller, registered via
 {@link DefaultNotationSelectionControllerDefn#setDelegate}
@class default global notation selection controller - it does nothing except pass on control to a delegate controller registered via { @link DefaultNotationSelectionControllerDefn#setDelegate }
/** 
     * set the delegate that will be the selection controller
     * @param {NotationSelectionController}	delegate	the selection controller
     */ /**
     * implementation of {@link NotationSelectionController#preSelectionChange}, which
     * passes control to delegate, if there is one
     */ /**
     * add a selection listener
     * @param {NotationSelectionListener} listener	listener
     */ /**
     * called when the selection changes in the song view, which is informed to all
     * listeners
     * @param {SongView} songView	the song view
     * @param {object}	 curSelection	current selection (a selectable part in song-view)
     * @param {object}	 oldSelection	previous selection (a selectable part in song-view)
     * 
     */ /**
     * called when the an already selected object is selected again (e.g. click on 
     * the already selected object), which is informed to all listeners
     *
     * @param {SongView} songView	the song view
     * @param {object}	 curSelection	current selection (a selectable part in song-view)
     * 
     */ /**
     * selection listener list
     * @type NotationSelectionListener[]
     */ /**
     * the delegate that will be the actual selection controller
     * @type {NotationSelectionController}
     * @private
     */