﻿var g_arStepsMinute  = new Array( 90, 120, 130, 140, 150, 160, 170, 180, 190 );
var g_arWalkingSpeed = new Array( 2.0, 3.0, 3.5, 4.0, 4.3, 4.6, 5.0, 5.5, 6.0 );
var g_arRunningSpeed = new Array( 0.0, 0.0, 0.0, 0.0, 6.0, 6.7, 7.5, 8.8, 11.0 );
var g_fFactor = 1.0;
var g_strLastId = "";
var g_strSelRow = "#e8fffa";
function displayTable( bFlag )
{
    if ( bFlag == 1 )
    {
        g_fFactor = 1.61;
    }
    else
    {
        g_fFactor = 1.0;
    }
 
    var strHTML = "<TABLE bgcolor='#aaaaaa'><TR bgcolor='white'><TD>Pace <br>(Steps per Minute)</TD><TD COLSPAN=2>Walking</TD><TD COLSPAN=2>Running</TD></TR>";
    var strText;
    
    if ( g_fFactor == 1.61 )
    {
       strText = "<TR bgcolor='white'><TD>&nbsp;</TD> <TD>Km per Hour</TD> <TD>Minutes per Km</TD> <TD>Km per Hour</TD> <TD>Minutes per Km</TD></TR>";
    }
    else
    {
       strText = "<TR bgcolor='white'><TD>&nbsp;</TD> <TD>Miles per Hour</TD> <TD>Minutes per Mile</TD> <TD>Miles per Hour</TD> <TD>Minutes per Mile</TD></TR>";
    }
    
    strHTML += strText;
    
    for (var i=0; i<9; i++)
    {
        var fWalkingSpeed = g_arWalkingSpeed[ i ] * g_fFactor;
        strHTML += "<TR bgcolor='white' id='id_" + i + "' onMouseDown='selectBPM(" + i + ");' onMouseOver='TrowOn(this);' onMouseOut='TrowOff(this);'><TD>" + g_arStepsMinute[ i ] + "</TD><TD>" + fWalkingSpeed.toFixed( 1 ) + "</TD><TD>";
        
        var fWalkingMinutes = 60.0 / fWalkingSpeed;
        strHTML += fWalkingMinutes.toFixed( 1 ) + "</TD><TD>";
        
        if ( g_arRunningSpeed[ i ] == 0.0 )
        {
            strHTML += "&nbsp;</TD><TD>&nbsp;</TD>";
        }
        else
        {
            var fRunningSpeed = g_arRunningSpeed[ i ] * g_fFactor;
            var fRunningMinutes = 60.0 / fRunningSpeed;
            strHTML += fRunningSpeed.toFixed( 1 ) + "</TD><TD>" + fRunningMinutes.toFixed( 1 ) + "</TD>";
        }
        strHTML += "</TR>";
    }
    
    strHTML += "</TABLE>";

    document.getElementById( "pacetable" ).innerHTML = strHTML;
	
	if ( g_strLastId != "" )
	{
		document.getElementById( g_strLastId ).style.backgroundColor = g_strSelRow;
	}
	
}

function selectBPM( nIndex )
{
	fBPM = g_arStepsMinute[ nIndex ];

	selectRow( fBPM );
	setPos( fBPM );
	document.getElementById( "bpm" ).value = fBPM;
	G_nDelay = ( 60000 / (fBPM*1.075) ) / G_nTotalFrames;
	clearTimeout( G_nTimerID );
	go();
}

function TrowOn( src )
{
    src.style.cursor = 'pointer';
} 
    
function TrowOff( src )
{
    src.style.cursor = 'default';
}

function selectRow( fBPM )
{
    fBPM = Math.round(fBPM / 10.0 ) * 10;
    
    var nIndex = 0;
    while ( g_arStepsMinute[ nIndex ] < fBPM && nIndex < 9 )
    {
       nIndex++;
    }
    
    if ( nIndex > 8 )
    {
        nIndex = 8;
    }
    
    var strId = "id_" + nIndex;
    if ( g_strLastId != strId )
    {
        if ( g_strLastId != "" )
        {
            document.getElementById( g_strLastId ).style.backgroundColor = "white";
        }
        g_strLastId = strId;
    }
    
    document.getElementById( strId ).style.backgroundColor = g_strSelRow;
}

////////////////////////////////////////////////////////////////

document.onkeydown = onKeyDown;       

var dwLastTime;
var dfAvgBPM;
var dfTotalBPM;
var m_fBPM = -1.0;
var fMAXTARGETBPM = 400.0;
var nCount = -1;
var G_nDelay = 60000;

var G_arBtnArray = new Array();
var G_nFrame = 0;
var G_nTotalFrames = 7;
var G_nTimerID;

function preFetch( strImage, nWidth, nHeight )
{
	G_arBtnArray[ strImage ] = new Image(nWidth, nHeight);
	G_arBtnArray[ strImage ].src = strImage;
}

for (var i=0; i<G_nTotalFrames; i++)
{
    var strImg = "IMG0000" + i + ".jpg";
    preFetch( strImg, 51, 51 );
}

function onKeyDown(e)
{
		var Key;
		if (document.all)
		{
			var evnt = window.event;
			Key = evnt.keyCode;
		}
		else
		{
			Key = e.keyCode;
		}

		if (Key != 82)
		{
			return;
		}
		
		nCount++;

		if ( nCount == 0 )
		{
			dfTotalBPM = 0.0;
            var now = new Date()
            dwLastTime = now.getTime()
            
			m_fBPM = -1.0;
            setPos( 0.0 );
			return;
		}
        
        var now = new Date()
        var dwCurrTime = now.getTime()

		var fDiff = dwCurrTime - dwLastTime;
		var dfBPM = 60000.0 / fDiff;
        
		dwLastTime = dwCurrTime;

		if ( nCount == 1 )
		{
			dfAvgBPM = dfBPM;
			G_nDelay = ( 60000 / (dfAvgBPM*1.075) ) / G_nTotalFrames;
			clearTimeout( G_nTimerID );
			go();
		}
		else
		{
			var dfRatio;
			if ( dfAvgBPM > dfBPM )
			{
				dfRatio = dfAvgBPM / dfBPM;
			}
			else
			{
				dfRatio = dfBPM / dfAvgBPM;
			}

			if ( dfRatio > 1.3 )
			{
				nCount = 0;
				dfTotalBPM = 0.0;
                var now = new Date()
                dwLastTime = now.getTime()
				m_fBPM = -1.0;
                setPos( 0.0 );                
				return;
			}

			dfTotalBPM += dfBPM;
            dfAvgBPM = dfTotalBPM / (nCount-1);
		}

 		m_fBPM = dfAvgBPM;
		if ( m_fBPM > fMAXTARGETBPM )
		{
			m_fBPM = fMAXTARGETBPM;
		}
        setPos( m_fBPM );
        document.getElementById( "bpm" ).value = m_fBPM.toFixed(1);
		return;
}

function setPos( fPos )
{
    document.getElementById( "pace" ).innerHTML = fPos.toFixed(1);
	selectRow( fPos );
}

function go()
{
    G_nTimerID = setTimeout( "go()" , G_nDelay );
    G_nFrame++;
    G_nFrame %= G_nTotalFrames;
    var strImg = "IMG0000" + G_nFrame + ".jpg";
    document.getElementById("runner").src = G_arBtnArray[strImg].src;
}

function search()
{
	var strTargetBPM = document.getElementById( "pace" ).innerHTML;
	document.location.href="http://127.0.0.1/bwm/search.php?bpm=" + strTargetBPM + "&set=0";
}

function step2()
{
	var strTargetBPM = document.getElementById( "pace" ).innerHTML;
	document.location.href="http://127.0.0.1/bwm/srchprm.php?bpm=" + strTargetBPM + "&set=0";
}
