function SelectableTableRowPageViewPart()
{
    /**
     * is this view part selectable? The  answer is true for a 
     * selectable page view part
     * @return true or false as to whether this page view part is selectable
     * @type boolean
     */
    this.isSelectable = function() { return true; }

    /**
     * select or deselect this part
     * @param {boolean} val	true or false indicating if view should be selected or deselected
     */
    this.select = function(val) {
	if( this.fSelectableElem ) {
	    if( val ) {
		this.fSelectableElem.style.border = "thin solid #0000ff";	// blue border
		this.onselect();
	    }
	    else {
		//this.fSelectableElem.style.background = this.fBackgroundColor;
		//this.fSelectableElem.style.color      = this.fColor;
		this.fSelectableElem.style.border     = "thin solid "+ this.fBackgroundColor;
	    }
	}
	this.fSelected = val;
	return true;
    }

    /**
     * (protected) called when the view is selected - derived classes can override
     * this to implement view specific functionality
     * @private
     */
    this.onselect = function() {
    }

    /**
     * (protected) event handler called when mouse enters this view - derived classes
     * should set this as the hover function for the approp dom elem in the view
     * to provide visual indication that item is selectable
     * @private
     */
    function labelHoverEnter() {
	var view = this;
	if( view && !view.fSelected && view.fSelectableElem )
		view.fSelectableElem.style.border = "thin solid #000000";
    }
    this.labelHoverEnter = labelHoverEnter;

    /**
     * event handler called when mouse leaves this view
     */
    function labelHoverExit() {
	var view = this;
	if( view && !view.fSelected && view.fSelectableElem )
	    view.fSelectableElem.style.border = "thin solid " + view.fBackgroundColor;
    }
    this.labelHoverExit = labelHoverExit;

    /**
     * event handler called when mouse is clicked on this view
     */
    function labelClicked(e) {
	if(!e )
	    e = event;
	var view = this;
	if( view ) {
	    view.clicked();

	    e.cancelBubble = true;
	    if( e.stopProgapation ) e.stopPropagation();
	}

	e.returnValue = false;
	if( e.stop )
	    e.stop();
	if( e.preventDefault )
	    e.preventDefault();
    }
    this.labelClicked = labelClicked;

    /**
     * called when this view is clicked on by the mouse
     */
    this.clicked = function() {
	var songView = this.pageView().songView();
	songView.selectObject(this);
    }


    /**
     * set the background color of this view
     * @param {String} color	the background color as a string one would 
     *				specify in the css style
     */
    this.setBackgroundColor = function(color) { this.fBackgroundColor = color; }

    /**
     * (protected) called when text color is changed - derived classes can override this
     * @private
     */
    this.oncolorChange = function() {
    }

    /**
     * (protected) derived classes must call this on rendering to enable
     * selectability
     * @param {DOMElement} selectableElem  the element that is selectable
     * @param {boolean}	   dontSetStyle	   if true, dont set style elem
     */
    this.initSelectable = function(selectableElem, dontSetStyle) {
	if(!theSongView.isInteractive()) return; // if not interactive, nothing is selectable
	this.fSelectableElem       = selectableElem;
	selectableElem.onclick     = _labelClicked; // (this);
	selectableElem.onmouseover = _labelHoverEnter; // (this);
	selectableElem.onmouseout  = _labelHoverExit; // (this);
	if(!dontSetStyle) {
	    selectableElem.style.cursor = "pointer";
	    selectableElem.style.border = "thin solid " + this.fBackgroundColor;
	}
	selectableElem.id          = Utils.getNewId("tr");
	Utils.addToIdMap(selectableElem, this);
    }

    /**
     * the DOM element of the content that contains the selectable part (derived classes
     * should set this appropriately on rendering)
     * @type DOMElement
     * @private
     */
    this.fSelectableElem= null;

    /**
     * the background color of this view as a string one would specify in css style
     * @type String
     * @private
     */
    this.fBackgroundColor = "#ffffff";
}
/**
 * @class
 * base class represents a selectable page view part, which would be part of a {@link PageView}
 */
@class
base class represents a selectable page view part, which would be part of a  PageView
@class base class represents a selectable page view part which would be part of a PageView
function SelectableTableRowPageViewPart()
{
    this.isSelectable = function() { return true; }
    this.select = function(val) {
	if( this.fSelectableElem ) {
	    if( val ) {
		this.fSelectableElem.style.border = "thin solid #0000ff";	
		this.onselect();
	    }
	    else {
		this.fSelectableElem.style.border     = "thin solid "+ this.fBackgroundColor;
	    }
	}
	this.fSelected = val;
	return true;
    }
    this.onselect = function() {
    }
    function labelHoverEnter() {
	var view = this;
	if( view && !view.fSelected && view.fSelectableElem )
		view.fSelectableElem.style.border = "thin solid #000000";
    }
    this.labelHoverEnter = labelHoverEnter;
    function labelHoverExit() {
	var view = this;
	if( view && !view.fSelected && view.fSelectableElem )
	    view.fSelectableElem.style.border = "thin solid " + view.fBackgroundColor;
    }
    this.labelHoverExit = labelHoverExit;
    function labelClicked(e) {
	if(!e )
	    e = event;
	var view = this;
	if( view ) {
	    view.clicked();
	    e.cancelBubble = true;
	    if( e.stopProgapation ) e.stopPropagation();
	}
	e.returnValue = false;
	if( e.stop )
	    e.stop();
	if( e.preventDefault )
	    e.preventDefault();
    }
    this.labelClicked = labelClicked;
    this.clicked = function() {
	var songView = this.pageView().songView();
	songView.selectObject(this);
    }
    this.setBackgroundColor = function(color) { this.fBackgroundColor = color; }
    this.oncolorChange = function() {
    }
    this.initSelectable = function(selectableElem, dontSetStyle) {
	if(!theSongView.isInteractive()) return; 
	this.fSelectableElem       = selectableElem;
	selectableElem.onclick     = _labelClicked; 
	selectableElem.onmouseover = _labelHoverEnter; 
	selectableElem.onmouseout  = _labelHoverExit; 
	if(!dontSetStyle) {
	    selectableElem.style.cursor = "pointer";
	    selectableElem.style.border = "thin solid " + this.fBackgroundColor;
	}
	selectableElem.id          = Utils.getNewId("tr");
	Utils.addToIdMap(selectableElem, this);
    }
    this.fSelectableElem= null;
    this.fBackgroundColor = "#ffffff";
}
function SelectableTableRowPageViewPart ( ) { this . isSelectable = function ( ) { return true ; } this . select = function ( val ) { if ( this . fSelectableElem ) { if ( val ) { this . fSelectableElem . style . border = "thin solid #0000ff" ; this . onselect ( ) ; } else { this . fSelectableElem . style . border = "thin solid " + this . fBackgroundColor ; } } this . fSelected = val ; return true ; } this . onselect = function ( ) { } function labelHoverEnter ( ) { var view = this ; if ( view && ! view . fSelected && view . fSelectableElem ) view . fSelectableElem . style . border = "thin solid #000000" ; } this . labelHoverEnter = labelHoverEnter ; function labelHoverExit ( ) { var view = this ; if ( view && ! view . fSelected && view . fSelectableElem ) view . fSelectableElem . style . border = "thin solid " + view . fBackgroundColor ; } this . labelHoverExit = labelHoverExit ; function labelClicked ( e ) { if ( ! e ) e = event ; var view = this ; if ( view ) { view . clicked ( ) ; e . cancelBubble = true ; if ( e . stopProgapation ) e . stopPropagation ( ) ; } e . returnValue = false ; if ( e . stop ) e . stop ( ) ; if ( e . preventDefault ) e . preventDefault ( ) ; } this . labelClicked = labelClicked ; this . clicked = function ( ) { var songView = this . pageView ( ) . songView ( ) ; songView . selectObject ( this ) ; } this . setBackgroundColor = function ( color ) { this . fBackgroundColor = color ; } this . oncolorChange = function ( ) { } this . initSelectable = function ( selectableElem , dontSetStyle ) { if ( ! theSongView . isInteractive ( ) ) return ; this . fSelectableElem = selectableElem ; selectableElem . onclick = _labelClicked ; selectableElem . onmouseover = _labelHoverEnter ; selectableElem . onmouseout = _labelHoverExit ; if ( ! dontSetStyle ) { selectableElem . style . cursor = "pointer" ; selectableElem . style . border = "thin solid " + this . fBackgroundColor ; } selectableElem . id = Utils . getNewId ( "tr" ) ; Utils . addToIdMap ( selectableElem , this ) ; } this . fSelectableElem = null ; this . fBackgroundColor = "#ffffff" ; }
@class
 base class represents a selectable page view part, which would be part of a {@link PageView}
@class base class represents a selectable page view part which would be part of a { @link PageView }
/**
     * is this view part selectable? The  answer is true for a 
     * selectable page view part
     * @return true or false as to whether this page view part is selectable
     * @type boolean
     */ /**
     * select or deselect this part
     * @param {boolean} val	true or false indicating if view should be selected or deselected
     */ // blue border
 //this.fSelectableElem.style.background = this.fBackgroundColor;
 //this.fSelectableElem.style.color      = this.fColor;
 /**
     * (protected) called when the view is selected - derived classes can override
     * this to implement view specific functionality
     * @private
     */ /**
     * (protected) event handler called when mouse enters this view - derived classes
     * should set this as the hover function for the approp dom elem in the view
     * to provide visual indication that item is selectable
     * @private
     */ /**
     * event handler called when mouse leaves this view
     */ /**
     * event handler called when mouse is clicked on this view
     */ /**
     * called when this view is clicked on by the mouse
     */ /**
     * set the background color of this view
     * @param {String} color	the background color as a string one would 
     *				specify in the css style
     */ /**
     * (protected) called when text color is changed - derived classes can override this
     * @private
     */ /**
     * (protected) derived classes must call this on rendering to enable
     * selectability
     * @param {DOMElement} selectableElem  the element that is selectable
     * @param {boolean}	   dontSetStyle	   if true, dont set style elem
     */ // if not interactive, nothing is selectable
 // (this);
 // (this);
 // (this);
 /**
     * the DOM element of the content that contains the selectable part (derived classes
     * should set this appropriately on rendering)
     * @type DOMElement
     * @private
     */ /**
     * the background color of this view as a string one would specify in css style
     * @type String
     * @private
     */