
/* MP3 Homepage - Lab Box Score */
var LabBoxScore = new Object();

LabBoxScore.switchSection = function (evt) {
    if( !evt ) evt = event;
    log( "switchSection: START (" + evt.type + ")" );

    var section = Event.element(evt).parentNode;
    if( Element.hasClassName( section, 'active' ) ) return false;

    // Deactivate current section
    LabBoxScore.deactivateCurrentSection();

    // Activate clicked target
    LabBoxScore.activateSection( section );

    return false;
} // switchSection

LabBoxScore.deactivateCurrentSection = function () {
    // Get current section
    var currentSection = LabBoxScore.getCurrentSection();

    // Deactivate section
    LabBoxScore.deactivateSection( currentSection );
} // deactivateCurrentSection

LabBoxScore.getCurrentSection = function () {
    var hdrRow = $( 'lab-box-score-hdr' );
    if( !hdrRow ) return;

    // Get the current active cell
    var cells      = $A( hdrRow.cells );
    var activeCell = cells.find( function (cell) { return Element.hasClassName( cell, 'active' ) } );

    return activeCell;
} // getCurrentSection

LabBoxScore.deactivateSection = function (section) {
    log( "deactivateSection: START" );
    if( !section ) return;
    
    // Remove active class
    Element.removeClassName( section, 'active' );
    
    // Deactivate current subsection
    LabBoxScore.deactivateCurrentSubsection( section, 1 );

    // Hide subsection menu
    LabBoxScore.hideSubsectionMenu( section );

    // Hide "see more" link
    LabBoxScore.hideSeeMoreLink( section );
} // deactivateSection

LabBoxScore.activateSection = function (section) {
    if( !section ) return;

    // Add active class
    Element.addClassName( section, 'active' );

    // Show subsection menu
    LabBoxScore.showSubsectionMenu( section );

    // Show see more link
    LabBoxScore.showSeeMoreLink( section );

    // Activate first item in subsection
    var subsection = LabBoxScore.getSubsection( section, -1 );
    LabBoxScore.activateSubsection( subsection );
} // activateSection

LabBoxScore.getCurrentSubsection = function (section) {
    return LabBoxScore.getSubsection( section, null );
} // getCurrentSubsection

LabBoxScore.getSubsection = function (section, idx) {
    if( !section ) return null;

    var subsections     = document.getElementsByClassName( 'lab-box-score-subhdr' );
    var currSubsectMenu = subsections[section.cellIndex];
    if( !currSubsectMenu ) return null;
    
    var rows  = currSubsectMenu.rows;
    var cells = $A( rows[0].cells );
    
    var subsection = idx == -1   ? cells.find( function (cell) { return cell.prevActiveFlag; } )
                   : idx != null ? cells[idx] 
                   :               cells.find( function (cell) { return Element.hasClassName( cell, 'active' ); } )
                   ;

    if( !subsection && idx == -1 ) subsection = cells[0];

    if( subsection ) subsection.prevActiveFlag = false;

    return subsection;
} // getSubsection

LabBoxScore.switchSubsection = function (evt) {
    if( !evt ) evt = event;
    log( 'switchSubsection: START (' + evt.type + ')' );

    var subsection = Event.element(evt).parentNode;
    var scoreData  = $( 'lab-box-data' );
    if( Element.hasClassName( subsection, 'active' ) && !scoreData.errorSetFlag ) return false;

    // Deactivate current subsection
    LabBoxScore.deactivateCurrentSubsection(LabBoxScore.getCurrentSection());
    
    // Activate clicked subsection
    LabBoxScore.activateSubsection( subsection );

    return false;
} // switchSubsection

LabBoxScore.deactivateCurrentSubsection = function (section, setPrevFlag) {
    if( !section ) return;

    // Get current subsection
    var currSubsection = LabBoxScore.getCurrentSubsection( section );

    // Deactivate subsection
    LabBoxScore.deactivateSubsection( currSubsection, setPrevFlag );
} // deactivateCurrentSubsection

LabBoxScore.deactivateSubsection = function (subsection, setPrevFlag) {
    if( !subsection ) return;

    if( setPrevFlag ) {
	subsection.prevActiveFlag = true;
    }

    // Remove active class
    Element.removeClassName( subsection, 'active' );
    
    // Save data
    var score            = $( 'lab-box-data' );
    if( !score.errorSetFlag ) {
	subsection.scoreData = score.innerHTML;
    }

    // Clear data
    score.innerHTML = '';
} // deactivateSubsection

LabBoxScore.hideSubsectionMenu = function (section) {
    if( !section ) return;

    var subsections     = document.getElementsByClassName( 'lab-box-score-subhdr' );
    var currSubsectMenu = subsections[section.cellIndex];
    if( !currSubsectMenu ) return;
    
    Element.hide( currSubsectMenu );
} // hideSubsectionMenu

LabBoxScore.showSubsectionMenu = function (section) {
    if( !section ) return;
    
    var subsections     = document.getElementsByClassName( 'lab-box-score-subhdr' );
    var currSubsectMenu = subsections[section.cellIndex];
    if( !currSubsectMenu ) return;
    
    Element.show( currSubsectMenu );
} // showSubsectionMenu

LabBoxScore.hideSeeMoreLink = function (section) {
    if( !section ) return;
    
    var seeMoreLinks     = document.getElementsByClassName( 'lab-more' );
    var currSeeMoreLink  = seeMoreLinks[section.cellIndex];
    if( !currSeeMoreLink ) return;
    
    Element.hide( currSeeMoreLink );
} // hideSeeMoreLink

LabBoxScore.showSeeMoreLink = function (section) {
    if( !section ) return;
    
    var seeMoreLinks     = document.getElementsByClassName( 'lab-more' );
    var currSeeMoreLink  = seeMoreLinks[section.cellIndex];
    if( !currSeeMoreLink ) return;
    
    Element.show( currSeeMoreLink );
} // showSeeMoreLink

LabBoxScore.activateSubsection = function (subsection) {
    if( !subsection ) return;

    // Add active class
    Element.addClassName( subsection, 'active' );

    // Get/set data
    var scoreData = null;
    if( subsection.scoreData ) {
	scoreData = subsection.scoreData;
	var dataDiv = $( 'lab-box-data' );
	dataDiv.innerHTML = scoreData;
	dataDiv.errorSetFlag = false;
    }
    else {
	LabBoxScore.requestAndSetData( subsection );
    }
} // activateSubsection

LabBoxScore.requestAndSetData = function (subsection, myJax, jaxStatus) {
    if( !subsection ) return;
    var func = "LabBoxScore.requestAndSetData: ";

    if( !myJax ) {
	$( 'lab-box-data' ).innerHTML 
	    = '<div class="processing"><img name="proc_img" id="proc_img" '
	    + 'src="/images/cart/cart-processing.gif" width="75" '
	    + 'height="75" /></div>';
	
	var currSection = LabBoxScore.getCurrentSection();
	var params      = 'sect=' + currSection.cellIndex + '&subsect=' + subsection.cellIndex;
	var myJax = new Ajax.Request( 
	    "/services/digital-lab-box-score.xml",
	    {
		method      : 'get',
		parameters  : params,
		onSuccess   : function (req) { LabBoxScore.requestAndSetData( subsection, req, true ) },
		onFailure   : function (req) { LabBoxScore.requestAndSetData( subsection, req, false ) },
		onException : function (req) { LabBoxScore.requestAndSetData( subsection, req, false ) }
	 });
    }
    else {
	var failed = false;

	if( jaxStatus ) {
	    log( func + "Response: " + myJax.responseText.escapeHTML() );
	    var resp = myJax.responseXML.documentElement;
	    
	    var err = resp.getAttribute( 'code' );
	    log( func + "Response CODE: " + err );
	
	    // If there was no error
	    if( err == 0 ) {
		// Get HTML response
		var scoreNode = resp.getElementsByTagName( 'score' )[0].firstChild;
		var score = '';
		while( scoreNode ) {
		    score += scoreNode.data;
		    scoreNode = scoreNode.nextSibling;
		}

		var dataDiv = $( 'lab-box-data' );
		dataDiv.innerHTML = score;
		dataDiv.errorSetFlag = false;
	    }
	    else {
		failed = true;
	    }
	}
	else { 
	    failed = true;
	}

	if( failed ) {
	    var score = $( 'lab-box-data' );
	    score.innerHTML 
	           = '<div class="lab-error"><span>There was a problem loading '
	           + 'the requested data. Please try again in a few minutes.'
	           + '</span></div>';
	    score.errorSetFlag = true;
	    
	}
    }
    
} // subsection

var preload = new Image();
preload.src = '/images/cart/cart-processing.gif';
