/* 
 * Copyright MacaulayLibrary 2008
 *
 *
 *  RavenViewer javascript controls
 *
 *  problems:
 *
 *  1. current tick doesn't always round to integer.
 *
 *  2. when javascript updates data, 
 *     causing a table to be redrawn differenly,
 *     the sliders get messed up.
 *
 */

var player = function()
{
    var A_BALANCE         = 814;
    var A_BASS            = 816;
    var A_LEFT            = 847;
    var A_RIGHT           = 848;
    var A_TREBLE          = 815;
    var A_VOLUME          = 813;

    var C_RECORDIST       = 826; 
    var C_LOCATION        = 826; 

    var D_AXIS_ENABLE     = 844; 
    var D_PLAYHEAD_ENABLE = 846; 
    var D_PLAYHEAD_COLOR  = 846; 

    // MAIN page.
    var M_LOOP            = 826; 
    var M_MOUSE           = 857;
    var M_SCRUB           = 856;
    var M_SCRUB_CURRENT   = 820;
    var M_SCRUB_TOTAL     = 823;
    var M_SPEED           = 817; 
    var M_TIMELINE_ZOOM   = 812; 

    // MEDIA
    var M_CHANNELS           = 0; 
    var M_AUDIO_CODEC        = 850; 
    var M_AUDIO_DATA_RATE    = 852; 
    var M_AUDIO_SAMPLE_RATE  = 851; 
    var M_VIDEO_ASPECT_RATIO = 854; 
    var M_VIDEO_CODEC        = 853; 
    var M_VIDEO_FPS          = 819; 

    var P_AVERAGE         = 833;
    var P_COLOR           = 836;
    var P_ENABLE          = 811;
    var P_FILL            = 834;
    var P_SCALE           = 835;
    var P_XOFFSET         = 810;
    var P_XSCALE          = 809;
    var P_YOFFSET         = 808;
    var P_YSCALE          = 807;

    var S_BRIGHTNESS      = 801;
    var S_CONTRAST        = 802;
    var S_COLOR           = 830;
    var S_ENABLE          = 800;
    var S_FFT_SIZE        = 831;
    var S_UPPER_FREQUENCY = 832;
    var S_YOFFSET         = 804;
    var S_YSCALE          = 803;

    var TRACK             = 12; 

    var V_ENABLE          = 818;

    var W_AMPLITUDE       = 806;
    var W_AVERAGING       = 828;
    var W_COLOR           = 829;
    var W_ENABLE          = 805;

    var SCRUB_INTERVAL    = 600;

    var a_balanceSlider;
    var a_bassSlider;
    var a_trebleSlider;
    var a_volumeSlider;

    var d_playheadColorSlider;

    var m_scrubSlider;
    var m_speedSlider;
    var m_loopSlider;
    var m_timelineZoomSlider;

    var p_averageSlider;
    var p_colorSlider;
    var p_fillSlider;
    var p_scaleSlider;
    var p_xOffsetSlider;
    var p_xScaleSlider;
    var p_yOffsetSlider;
    var p_yScaleSlider;

    var s_brightnessSlider;
    var s_contrastSlider;
    var s_colorSlider;
    var s_fftSizeSlider;
    var s_upperFreqencySlider;
    var s_yOffsetSlider;
    var s_yScaleSlider;

    var w_amplitudeSlider;
    var w_averagingSlider;
    var w_colorSlider;

    var isInitSpectrogram   = false;
    var isInitWaveform      = false;
    var isInitPowerSpectrum = false;
    var isInitAudio         = false;
    var isInitVideo         = false;
    var isInitCatalog       = false;
    var isInitMedia         = false;
    var isInitMainControls  = false;
    var isInitNotes         = false;
    var isInitDisplay       = false;

    var s_fftSizeValue;
    var s_upperFrequencyValue;

    var mouseOn          = true;
    var playerThreadPointer;
    var playerThreadOn   = false;
    var scrubOn          = false;
    var ignoreScrubEvent = false;
    var scrubTotal       = 0;

    function playerThread()
    {
        if (scrubOn) {
            if (scrubTotal == 0)
                scrubTotal   = Math.round(document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_SCRUB_TOTAL));
            var scrubCurrent = Math.round(document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_SCRUB_CURRENT));
            var increment    = Math.round(scrubTotal / 400.0);
            var val          = Math.round( (scrubCurrent * 1.0) / increment);

            listenerUpdate("m_scrubSlider", val, scrubCurrent);

                             /**
                              *  when m_scrubSlider is called, 
                              *  the slider value gets set, 
                              *  and a message is sent to the player.
                              * 
                              *  this loop is reading the player value and setting the slider position.
                              *  dont want to set the player back in time to the value just read.
                              */
            ignoreScrubEvent = true;
            m_scrubSlider.setValue(val, true);

            if (scrubTotal > 0 && scrubTotal - 1 <= scrubCurrent)
                player.stopScrub();
        }

        if (mouseOn) {
            //debug2('0.' + document.ravenviewerLite.GetQSSPTrackMouseInfo());

            var v = document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_MOUSE);
            debug('v:' + v);
            if (v && v.indexOf('Running slow') == -1) {
                //if (v.indexOf('Mouse Time: ') == 0)
                //    v = v.substr(12);
                document.getElementById('m_mouseValue').firstChild.nodeValue = '' + v;
            }
        }
    }

    /** 
     *  val1 displayed in debug.
     *  val2 displayed in debug, and in text next to slider.
     */
    function listenerUpdate(whichSlider, val1, val2)
    {
        var s = whichSlider + "Value";
        if (document.getElementById(s) != null) {
            if (document.getElementById(s).firstChild == null)
                document.getElementById(s).appendChild(document.createTextNode(val2));
            else
                document.getElementById(s).firstChild.nodeValue = val2;
        }

        debug(whichSlider + '(' + val1 + ',' + val2 + ')'); 
    }

    function debug(newVal)
    {
        //document.getElementById("debug").firstChild.nodeValue = newVal;

        //document.getElementById("debug").firstChild.nodeValue = 
        //document.getElementById("debug").firstChild.nodeValue + ' \n' + newVal;
    }


    function debug2(newVal)
    {
        //document.getElementById("debug").firstChild.nodeValue = newVal;

        //document.getElementById("debug").firstChild.nodeValue = 
        //document.getElementById("debug").firstChild.nodeValue + ' \n' + newVal;
    }


    function initMainControls()
    {
       if (! isInitMainControls) {
            isInitMainControls = true;

            m_speedSlider = YAHOO.widget.Slider.getHorizSlider("m_speedSlider", "m_speedThumb", 0, 100); //, 9.09);
            m_speedSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal < 9)
                    val = 0.25;
                else if (newVal >=  9 && newVal < 18)
                    val = 0.4;
                else if (newVal >= 18 && newVal < 27)
                    val = 0.5;
                else if (newVal >= 27 && newVal < 36)
                    val = 0.6;
                else if (newVal >= 36 && newVal < 45)
                    val = 0.75;
                else if (newVal >= 45 && newVal < 54)
                    val = 1;
                else if (newVal >= 54 && newVal < 63)
                    val = 1.5;
                else if (newVal >= 63 && newVal < 72)
                    val = 2;
                else if (newVal >= 72 && newVal < 81)
                    val = 4;
                else if (newVal >= 81 && newVal < 90)
                    val = 6;
                else
                    val = 8;
                listenerUpdate("m_speedSlider", newVal, val + 'x'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, M_SPEED, val + '');
            });
            m_speedSlider.setValue(50);

            m_loopSlider = YAHOO.widget.Slider.getHorizSlider("m_loopSlider", "m_loopThumb", 0, 100);
            m_loopSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("m_loopSlider", newVal, val==0 ? 'Off' : 'On'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, M_LOOP, val + '');
;
            });
            m_loopSlider.setValue(0);

            m_timelineZoomSlider = YAHOO.widget.Slider.getHorizSlider("m_timelineZoomSlider", "m_timelineZoomThumb", 0, 100);
            m_timelineZoomSlider.subscribe("change", function(newVal) { 
                listenerUpdate("m_timelineZoomSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, M_TIMELINE_ZOOM, newVal + '');
            });
            m_timelineZoomSlider.setValue(40);


            m_scrubSlider = YAHOO.widget.Slider.getHorizSlider("m_scrubSlider", "m_scrubThumb", 0, 400);
            m_scrubSlider.subscribe("change", function(newVal) {
                var scrubTotal = Math.round(document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_SCRUB_TOTAL));
                var val        = Math.round((scrubTotal / 400.0) * newVal);
                listenerUpdate("m_scrubSlider", newVal, val);

                if (ignoreScrubEvent == true)
                    ignoreScrubEvent = false;
                else
                    document.ravenviewerLite.SetSpriteTrackVariable(TRACK, M_SCRUB, val + '');

            });
            m_scrubSlider.setValue(0);
        }
    }

    function initSpectrogramTab()
    {
        if (! isInitSpectrogram) {
            isInitSpectrogram = true;

            YAHOO.util.Event.onContentReady("s_enableGroup", function () {
                s_enableGroup = new YAHOO.widget.ButtonGroup("s_enableGroup");
                s_enableGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 's_enableShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_ENABLE, '1');
                        else if (event.newValue.get('name') == 's_enableHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_ENABLE, '3');
                    }
                });
            });

            s_fftSizeSlider = YAHOO.widget.Slider.getHorizSlider("s_fftSizeSlider", "s_fftSizeThumb", 0, 100); //, 12.5);
            s_fftSizeSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal < 11)
                    val = 16;
                else if (newVal >= 11 && newVal < 22)
                    val = 32;
                else if (newVal >= 22 && newVal < 33)
                    val = 64;
                else if (newVal >= 33 && newVal < 44)
                    val = 128;
                else if (newVal >= 44 && newVal < 55)
                    val = 256;
                else if (newVal >= 55 && newVal < 66)
                    val = 512;
                else if (newVal >= 66 && newVal < 77)
                    val = 1024;
                else if (newVal >= 77 && newVal < 88)
                    val = 2048;
                else
                    val = 4096;

                s_fftSizeValue = val;
                listenerUpdate("s_fftSizeSlider", newVal, s_fftSizeValue); 
            });

            s_fftSizeSlider.subscribe("slideEnd", function() { 
                debug("s_fftSizeSlider, slideEnd: " + s_fftSizeValue); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_FFT_SIZE, '' + s_fftSizeValue);
            });
            s_fftSizeSlider.setValue(56);

            s_upperFrequencySlider = YAHOO.widget.Slider.getHorizSlider("s_upperFrequencySlider", "s_upperFrequencyThumb", 0, 100); //, 14.28);
            s_upperFrequencySlider.subscribe("change", function(newVal) { 
                var val;
                var valText;
                if (newVal < 12) {
                    val = 8;
                    valText = 60;
                } else if (newVal >= 12 && newVal < 25) {
                    val = 7;
                    valText = 200;
                } else if (newVal >= 25 && newVal < 37) {
                    val = 6;
                    valText = 500;
                } else if (newVal >= 37 && newVal < 50) {
                    val = 5;
                    valText = 1000;
                } else if (newVal >= 50 && newVal < 62) {
                    val = 4;
                    valText = 2500;
                } else if (newVal >= 62 && newVal < 75) {
                    val = 3;
                    valText = 5000;
                } else if (newVal >= 75 && newVal < 87) {
                    val = 2;
                    valText = 10000;
                } else {
                    val = 1;
                    valText = 22050;
                }

                s_upperFrequencyValue = val;
                listenerUpdate("s_upperFrequencySlider", newVal, valText + ' Hz'); 
            });

            s_upperFrequencySlider.subscribe("slideEnd", function() { 
                debug("s_upperFrequencySlider, slideEnd: " + s_upperFrequencyValue); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_UPPER_FREQUENCY, '' + s_upperFrequencyValue);
            });
            s_upperFrequencySlider.setValue(100);

            s_contrastSlider = YAHOO.widget.Slider.getHorizSlider("s_contrastSlider", "s_contrastThumb", 0, 100);
            s_contrastSlider.subscribe("change", function(newVal) { 
                var val = Math.round((newVal / 3) + 30);
                listenerUpdate("s_contrastSlider", val, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_CONTRAST, '' + val);
            });
            s_contrastSlider.setValue(30);

            s_brightnessSlider = YAHOO.widget.Slider.getHorizSlider("s_brightnessSlider", "s_brightnessThumb", 0, 100);
            s_brightnessSlider.subscribe("change", function(newVal) { 
                listenerUpdate("s_brightnessSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_BRIGHTNESS, '' + newVal);
            });
            s_brightnessSlider.setValue(60);

            s_colorSlider = YAHOO.widget.Slider.getHorizSlider("s_colorSlider", "s_colorThumb", 0, 100); //, 20);
            s_colorSlider.subscribe("change", function(newVal) { 
                var val;
                var valText;
                if (newVal < 16) {
                    val = 1;
                    valText = "Black on White";
                } else if (newVal >= 16 && newVal < 33) {
                    val = 2;
                    valText = "White on Black";
                } else if (newVal >= 33 && newVal < 49) {
                    val = 3;
                    valText = "Blue on Black";
                } else if (newVal >= 49 && newVal < 66) {
                    val = 4;
                    valText = "Red on Black";
                } else if (newVal >= 66 && newVal < 83) {
                    val = 5;
                    valText = "Orange on Black";
                } else {
                    val = 6;
                    valText = "Purple on Black";
                }

                listenerUpdate("s_colorSlider", newVal, valText); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_COLOR, '' + val);
            });
            s_colorSlider.setValue(40);

            s_yScaleSlider = YAHOO.widget.Slider.getHorizSlider("s_yScaleSlider", "s_yScaleThumb", 0, 100);
            s_yScaleSlider.subscribe("change", function(newVal) { 
                listenerUpdate("s_yScaleSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_YSCALE, '' + newVal);
            });
            s_yScaleSlider.setValue(0);

            s_yOffsetSlider = YAHOO.widget.Slider.getHorizSlider("s_yOffsetSlider", "s_yOffsetThumb", 0, 100);
            s_yOffsetSlider.subscribe("change", function(newVal) { 
                listenerUpdate("s_yOffsetSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, S_YOFFSET, '' + newVal);
            });
            s_yOffsetSlider.setValue(0);
        }
    }

    function initWaveformTab()
    {
        if (! isInitWaveform) {
            isInitWaveform = true;

            YAHOO.util.Event.onContentReady("w_enableGroup", function () {
                w_enableGroup = new YAHOO.widget.ButtonGroup("w_enableGroup");
                w_enableGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 'w_enableShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, W_ENABLE, '1');
                        else if (event.newValue.get('name') == 'w_enableHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, W_ENABLE, '3');
                    }
                });
            });

            w_amplitudeSlider = YAHOO.widget.Slider.getHorizSlider("w_amplitudeSlider", "w_amplitudeThumb", 0, 100);
            w_amplitudeSlider.subscribe("change", function(newVal) { 
                listenerUpdate("w_amplitudeSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, W_AMPLITUDE, '' + newVal);
            });
            w_amplitudeSlider.setValue(60);

            w_averagingSlider = YAHOO.widget.Slider.getHorizSlider("w_averagingSlider", "w_averagingThumb", 0, 100); //, 100);
            w_averagingSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("w_averagingSlider", newVal, val==0 ? 'Off' : 'On'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, W_AVERAGING, '' + val);
            });
            w_averagingSlider.setValue(0);

            w_colorSlider = YAHOO.widget.Slider.getHorizSlider("w_colorSlider", "w_colorThumb", 0, 100); //, 20);
            w_colorSlider.subscribe("change", function(newVal) { 
                var val;
                var valText;
                if (newVal < 16) {
                    val = 1;
                    valText = "Black on White";
                } else if (newVal >= 16 && newVal < 33) {
                    val = 2;
                    valText = "Bhite on Black";
                } else if (newVal >= 33 && newVal < 49) {
                    val = 3;
                    valText = "White on Blue";
                } else if (newVal >= 49 && newVal < 66) {
                    val = 4;
                    valText = "Red on Black";
                } else if (newVal >= 66 && newVal < 83) {
                    val = 5;
                    valText = "Yellow on Black";
                } else {
                    val = 6;
                    valText = "White on Purple";
                }

                listenerUpdate("w_colorSlider", newVal, valText); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, W_COLOR, '' + val);
            });
            w_colorSlider.setValue(40);
        }
    }

    function initPowerSpectrumTab()
    {
        if (! isInitPowerSpectrum) {
            isInitPowerSpectrum = true;

            YAHOO.util.Event.onContentReady("p_enableGroup", function () {
                p_enableGroup = new YAHOO.widget.ButtonGroup("p_enableGroup");
                p_enableGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 'p_enableShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_ENABLE, '1');
                        else if (event.newValue.get('name') == 'p_enableHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_ENABLE, '3');
                    }
                });
            });

            p_averageSlider = YAHOO.widget.Slider.getHorizSlider("p_averageSlider", "p_averageThumb", 0, 100); //, 100);
            p_averageSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("p_averageSlider", newVal, val==0 ? 'Off' : 'On'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_AVERAGE, '' + val);
            });
            p_averageSlider.setValue(100);


                              /**
                               *  To setup slider tick marks:
                               * 
                               *  #Values  Slider      Ranges for 
                               *           Increment   if-else tests
                               *  -------  ----------  -------------
                               *  2        100         0, 50
                               *  3        50          0, 33, 66
                               *  4        33.3        0, 25, 50, 75
                               *  5        25          0, 20, 40, 60, 80
                               *  6        20          0, 16, 33, 49, 66, 83
                               *  7        16.6        0, 14, 28, 42, 56, 71, 85
                               *  8        12.5        0, 12, 25, 37, 50, 62, 75, 87
                               *  9        11.1        0, 11, 22, 33, 44, 55, 66, 77, 88
                               * 10        10          0, 10, 20, 30, 40, 50, 60, 70, 80, 90
                               * 11        9           0,  9, 18, 27, 36, 45, 54, 63, 72, 81, 90
                               */


            p_colorSlider = YAHOO.widget.Slider.getHorizSlider("p_colorSlider", "p_colorThumb", 0, 100); //, 16.6);
            p_colorSlider.subscribe("change", function(newVal) { 
                var val;
                var valText;
                if (newVal < 14) {
                    val = 7;
                    valText = "Black on White";
                } else if (newVal >= 14 && newVal < 28) {
                    val = 1;
                    valText = "Grey on Green";
                } else if (newVal >= 28 && newVal < 42) {
                    val = 2;
                    valText = "White on Black";
                } else if (newVal >= 42 && newVal < 56) {
                    val = 3;
                    valText = "White on Blue";
                } else if (newVal >= 56 && newVal < 71) {
                    val = 4;
                    valText = "Red on Black";
                } else if (newVal >= 71 && newVal < 85) {
                    val = 5;
                    valText = "Yellow on Black";
                } else {
                    val = 6;
                    valText = "White on Purple";
                }
                listenerUpdate("p_colorSlider", newVal, valText); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_COLOR, '' + val);
            });
            p_colorSlider.setValue(42);


            p_fillSlider = YAHOO.widget.Slider.getHorizSlider("p_fillSlider", "p_fillThumb", 0, 100); //, 100);
            p_fillSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("p_fillSlider", newVal, val==0 ? 'Off' : 'On'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_FILL, '' + val);
            });
            p_fillSlider.setValue(0);


            p_scaleSlider = YAHOO.widget.Slider.getHorizSlider("p_scaleSlider", "p_scaleThumb", 0, 100); //, 100);
            p_scaleSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("p_scaleSlider", newVal, val==0 ? 'Linear' : 'Logarithm'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_SCALE, '' + val);
            });
            p_scaleSlider.setValue(0);


            p_yScaleSlider = YAHOO.widget.Slider.getHorizSlider("p_yScaleSlider", "p_yScaleThumb", 0, 100);
            p_yScaleSlider.subscribe("change", function(newVal) { 
                listenerUpdate("p_yScaleSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_YSCALE, '' + newVal);
            });
            p_yScaleSlider.setValue(0);


            p_yOffsetSlider = YAHOO.widget.Slider.getHorizSlider("p_yOffsetSlider", "p_yOffsetThumb", 0, 100);
            p_yOffsetSlider.subscribe("change", function(newVal) { 
                listenerUpdate("p_yOffsetSlider", newVal, "-" + newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_YOFFSET, '' + newVal);
            });
            p_yOffsetSlider.setValue(0);


            p_xScaleSlider = YAHOO.widget.Slider.getHorizSlider("p_xScaleSlider", "p_xScaleThumb", 0, 100);
            p_xScaleSlider.subscribe("change", function(newVal) { 
                listenerUpdate("p_xScaleSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_XSCALE, '' + newVal);
            });
            p_xScaleSlider.setValue(0);


            p_xOffsetSlider = YAHOO.widget.Slider.getHorizSlider("p_xOffsetSlider", "p_xOffsetThumb", 0, 100);
            p_xOffsetSlider.subscribe("change", function(newVal) { 
                listenerUpdate("p_xOffsetSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_XOFFSET, '' + newVal);
            });
            p_xOffsetSlider.setValue(0);
        }
    }

    function initAudioTab() 
    {
        if (! isInitAudio) {
            isInitAudio = true;


            a_balanceSlider = YAHOO.widget.Slider.getHorizSlider("a_balanceSlider", "a_balanceThumb", 0, 100);
            a_balanceSlider.subscribe("change", function(newVal) { 
                var val = newVal - 50;
                listenerUpdate("a_balanceSlider", newVal, val); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_BALANCE, '' + val);
            });
            a_balanceSlider.setValue(50);

            a_bassSlider = YAHOO.widget.Slider.getHorizSlider("a_bassSlider", "a_bassThumb", 0, 100);
            a_bassSlider.subscribe("change", function(newVal) { 
                listenerUpdate("a_bassSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_BASS, '' + newVal);
            });
            a_bassSlider.setValue(100);


            a_channelsSlider = YAHOO.widget.Slider.getHorizSlider("a_channelsSlider", "a_channelsThumb", 0, 100); //, 50);
            a_channelsSlider.subscribe("change", function(newVal) { 
                var vall;
                var valr;
                var valText;
                if (newVal <= 33) {
                    vall = 1;
                    valr = 0;
                    valText = 'Left';
                } else if (newVal >= 33 && newVal < 66) {
                    vall = 1;
                    valr = 1;
                    valText = 'Center';
                } else {
                    vall = 0;
                    valr = 1;
                    valText = 'Right';
                }

                listenerUpdate("a_channelsSlider", vall + '|' + valr, valText); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_LEFT, '' + vall);
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_RIGHT, '' + valr);
            });
            a_channelsSlider.setValue(50);

            a_trebleSlider = YAHOO.widget.Slider.getHorizSlider("a_trebleSlider", "a_trebleThumb", 0, 100);
            a_trebleSlider.subscribe("change", function(newVal) { 
                listenerUpdate("a_trebleSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_TREBLE, '' + newVal);
            });
            a_trebleSlider.setValue(100);

            a_volumeSlider = YAHOO.widget.Slider.getHorizSlider("a_volumeSlider", "a_volumeThumb", 0, 100);
            a_volumeSlider.subscribe("change", function(newVal) { 
                listenerUpdate("a_volumeSlider", newVal, newVal); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, A_VOLUME, '' + newVal);
            });
            a_volumeSlider.setValue(100);
        }
    }

    function initVideoTab()
    {
        if (! isInitVideo) {
            isInitVideo = true;

            YAHOO.util.Event.onContentReady("v_enableGroup", function () {
                v_enableGroup = new YAHOO.widget.ButtonGroup("v_enableGroup");
                v_enableGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 'v_enableShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, V_ENABLE, '1');
                        else if (event.newValue.get('name') == 'v_enableHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, V_ENABLE, '3');
                    }
                });
            });
/*
            v_scaleSlider = YAHOO.widget.Slider.getHorizSlider("v_scaleSlider", "v_scaleThumb", 0, 100); //, 100);
            v_scaleSlider.subscribe("change", function(newVal) { 
                var val;
                if (newVal <= 50)
                    val = 0;
                else
                    val = 1;

                listenerUpdate("v_scaleSlider", newVal, val==0 ? 'Linear' : 'Logarithm'); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, P_SCALE, '' + val);
            });
            v_scaleSlider.setValue(100);
*/
        }
    }

    function initCatalogTab()
    {
        if (! isInitCatalog) {
            isInitCatalog = true;
        }
    }

    function initMediaTab()
    {
        if (! isInitMedia) {
            isInitMedia = true;
        }

        listenerUpdate("m_audioCodec", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_AUDIO_CODEC)); 
        listenerUpdate("m_audioDataRate", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_AUDIO_DATA_RATE)); 
        listenerUpdate("m_audioSampleRate", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_AUDIO_SAMPLE_RATE)); 
        listenerUpdate("m_channels", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_CHANNELS)); 
        listenerUpdate("m_videoAspectRatio", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_VIDEO_ASPECT_RATIO)); 
        listenerUpdate("m_videoCodec", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_VIDEO_CODEC)); 
        listenerUpdate("m_videoFps", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, M_VIDEO_FPS)); 
        listenerUpdate("m_mouse", "", document.ravenviewerLite.GetSpriteTrackVariable(TRACK, MOUSE)); 
    }

    function initNotesTab()
    {
        if (! isInitNotes) {
            isInitNotes = true;
        }
    }

    function initDisplayTab()
    {
        if (! isInitDisplay) {
            isInitDisplay = true;
/*
            YAHOO.util.Event.onContentReady("d_playheadGroup", function () {
                d_playheadGroup = new YAHOO.widget.ButtonGroup("d_playheadGroup");
                d_playheadGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 'd_playheadShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, D_PLAYHEAD_ENABLE, '1');
                        else if (event.newValue.get('name') == 'd_playheadHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, D_PLAYHEAD_ENABLE, '3');
                    }
                });
            });
*/
            YAHOO.util.Event.onContentReady("d_axisGroup", function () {
                d_axisGroup = new YAHOO.widget.ButtonGroup("d_axisGroup");
                d_axisGroup.on("checkedButtonChange", function(event) {
                    if (event.newValue) {
                        if (event.newValue.get('name') == 'd_axisShow')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, D_AXIS_ENABLE, '1');
                        else if (event.newValue.get('name') == 'd_axisHide')
                            document.ravenviewerLite.SetSpriteTrackVariable(TRACK, D_AXIS_ENABLE, '0');
                    }
                });
            });

            d_playheadColorSlider = YAHOO.widget.Slider.getHorizSlider("d_playheadColorSlider", "d_playheadColorThumb", 0, 100); //, 20);
            d_playheadColorSlider.subscribe("change", function(newVal) { 
                var val;
                var valText;
                if (newVal < 16) {
                    val = 1;
                    valText = "Brown";
                } else if (newVal >= 16 && newVal < 33) {
                    val = 2;
                    valText = "White";
                } else if (newVal >= 33 && newVal < 49) {
                    val = 3;
                    valText = "Black";
                } else if (newVal >= 49 && newVal < 66) {
                    val = 4;
                    valText = "Blue Dots";
                } else if (newVal >= 66 && newVal < 83) {
                    val = 5;
                    valText = "Red Dashes";
                } else {
                    val = 6;
                    valText = "Black Dashes";
                }
                listenerUpdate("d_playheadColorSlider", newVal, valText); 
                document.ravenviewerLite.SetSpriteTrackVariable(TRACK, D_PLAYHEAD_COLOR, '' + val);
            });
            d_playheadColorSlider.setValue(20);

        }
    }


    return {
        init: function()
        {
            var tabView = new YAHOO.widget.TabView('demo');

                             /**
                              * Sliders need to be visible before a listener can be attached, 
                              *     or can be initialized. 
                              * 
                              * The event object gives the nav list element.
                              * An id is set in the list element.
                              * When a tab is selected, convert the object into a string,
                              *     which gives the value of the id, and test.
                              * On a match, initialize the sliders on that page.
                              */
            var handleActiveTabChange = function(e)
            {
                var s = '' + e.newValue;

                if (s == 'Tab liSpectrogram')
                    initSpectrogramTab();
                else if (s == 'Tab liWaveform')
                    initWaveformTab();
                else if (s == 'Tab liPowerSpectrum')
                    initPowerSpectrumTab();
                else if (s == 'Tab liAudio')
                    initAudioTab();
                else if (s == 'Tab liVideo')
                    initVideoTab();
                else if (s == 'Tab liCatalog')
                    initCatalogTab();
                else if (s == 'Tab liMedia')
                    initMediaTab();
                else if (s == 'Tab liNotes')
                    initNotesTab();
                else if (s == 'Tab liSave')
                    initSaveTab();
                else if (s == 'Tab liDisplay')
                    initDisplayTab();
            }

            tabView.addListener('activeTabChange', handleActiveTabChange);
            initMainControls();
            //initWaveformTab();
            initSpectrogramTab();

            var playerButton1 = new YAHOO.widget.Button("playerButton1");
            var playerButton2 = new YAHOO.widget.Button("playerButton2");
            var playerButton3 = new YAHOO.widget.Button("playerButton3");
            var playerButton4 = new YAHOO.widget.Button("playerButton4");
            var playerButton5 = new YAHOO.widget.Button("playerButton5");
            var playerButton6 = new YAHOO.widget.Button("playerButton6");

            player.startPlayerThread();
            player.startScrub();
        },

        startPlayerThread : function()
        {
            if (!playerThreadOn) {
                playerThreadPointer = setInterval(playerThread, SCRUB_INTERVAL);
                playerThreadOn = true;
            }
        },

        stopPlayerThread : function()
        {
            if (playerThreadOn) {
                clearInterval(playerThreadPointer);
                playerThreadOn = false;
            }
        },

        startScrub : function()
        {
            scrubOn = true;
        },

        stopScrub : function()
        {
            scrubOn = false;
        }



    };

}();

