function TTGParseInt(strInt,intDef,intMin,intMax)
{    
    var v=parseInt(strInt);
    if (isNaN(v)) v=intDef;
    if (v<intMin) v=intMin;
    if (v>intMax) v=intMax;
    return v;
}
function TTGInputInit()
{
    var s=(document.location+"").split("#");
    if (s[1])
    {
        var i=s[1].split("_");
        if (i.length==6)
        {
            if (isNaN(parseInt(i[0])) || isNaN(parseInt(i[1])) || isNaN(parseInt(i[2])) || isNaN(parseInt(i[3])) || isNaN(parseInt(i[4])) || (i[5]!="T" && i[5]!="F"))
                return;            
            docEl("ttInputBpm").value=i[0];
            docEl("ttInputMeter").value=i[1];
            docEl("ttInputLoud").value=i[2];
            docEl("ttInputSilent").value=i[3];
            docEl("ttInputStep").value=i[4];
            if (i[5]=="F")
                domClassNameRemove(docEl("ttInputFade"),'checked');
        }
    }
//	if (as2.length==9) //http://localhost/st/#90_4_3_1_0_T
    TTGChangeInput(true);
}

function TTGChangeInput(firstChange)
{
    var ib=docEl("ttInputBpm");
    TTGEngineBPM=TTGParseInt(ib.value+"",TTGEngineBPM,TTGEngineBPMBound[0],TTGEngineBPMBound[1]);
    ib.value=""+TTGEngineBPM;
    var im=docEl("ttInputMeter");
    TTGEngineMeter=TTGParseInt(im.value+"",TTGEngineMeter,1,10000000);
    im.value=""+TTGEngineMeter;
    var il=docEl("ttInputLoud");
    TTGEngineLoud=TTGParseInt(il.value+"",TTGEngineLoud,1,10000000);
    il.value=""+TTGEngineLoud;
    var is=docEl("ttInputSilent");
    TTGEngineSilent=TTGParseInt(is.value+"",TTGEngineSilent,0,10000000);
    is.value=""+TTGEngineSilent;
    var iss=docEl("ttInputStep");
    TTGEngineStep=TTGParseInt(iss.value+"",TTGEngineStep,0,10000000);
    iss.value=""+TTGEngineStep;
    TTGEngineFade=domClassNameTest(docEl("ttInputFade"),"checked");
    
    if (!firstChange)
        GAddressSet(TTGEngineBPM+"_"+TTGEngineMeter+"_"+TTGEngineLoud+"_"+TTGEngineSilent+"_"+TTGEngineStep+"_"+(TTGEngineFade?"T":"F"));
}

var TTGEngineBPM=90;
var TTGEngineBPMBound=[20,200];
var TTGEngineMeter=4;
var TTGEngineLoud=3;
var TTGEngineSilent=1;
var TTGEngineStep=0;
var TTGEngineFade=true;

var TTGPlay=false;

var TTGTimer=0;

var TTGStartStopHandler=null;
function TTGStartStop()
{
    if (TTGStartStopHandler!=null)
    {
        TTGPlay=!TTGPlay;

        if (!TTGPlay)
            TTGConsoleClear();
        else TTGConsoleTO();
        gBodyShadowAllowToggle(TTGPlay);
        
        docEl("startButton").innerHTML=TTGPlay?"STOP":"START";
        docEl("disabledMask1").style.display=TTGPlay?"block":"none";
        docEl("disabledMask2").style.display=TTGPlay?"block":"none";
        if (TTGPlay) 
        {
            docEl("playingLight").style.zIndex="300";
            docEl("playingLight").style.background="#000";
        }            
        
        TTGTimer=new Date().getTime();
        
        TTGStepNum=1;
        TTGStepLoud=false;
        
        TTGStartStopHandler(TTGPlay,TTGEngineBPM,TTGEngineMeter,TTGEngineLoud,TTGEngineSilent,TTGEngineStep,TTGEngineFade);
    }
}

var TTGStartShowButton=false;
function TTGLightMOver()
{
    docEl("playingLight").style.zIndex="100";
}
function TTGLightMOut()
{
    if (TTGPlay)
        docEl("playingLight").style.zIndex="300";
}

var TTGConsoleTOId;
function TTGConsoleTO()
{
    var t=Math.floor((new Date().getTime()-TTGTimer)/1000.0);
    if (TTGStepLoud)
        docEl("playingConsole").innerHTML=TTGEngineBPM+" BPM - "+textAdd0(Math.floor(t/60))+":"+textAdd0(Math.floor(t%60))+" - "+Math.floor(1+TTGStepNum/TTGEngineMeter)+"."+(1+TTGStepNum%TTGEngineMeter);
    TTGConsoleTOId=setTimeout(TTGConsoleTO,20);
}

function TTGConsoleClear()
{
    docEl("playingConsole").innerHTML="";
    clearTimeout(TTGConsoleTOId);
}
var TTGStepNum=1;
var TTGStepLoud=false;
    
function TTGPrintStepNum(stepnum,loud)
{    
    TTGStepNum=1*stepnum;
//    window.status=stepnum;
    TTGStepLoud=(loud=="true");
    if (TTGStepLoud)
        TTGPrintLight();
}
function TTGPrintLight()
{
    if (TTGPrintLightTOId) clearTimeout(TTGPrintLightTOId);
    TTGPrintLightSensitivity=255;
    TTGPrintLightTO();
}
var TTGPrintLightTOId=null;
var TTGPrintLightSensitivity;
function TTGPrintLightTO()
{
    docEl("playingLight").style.background="#"+colorGetHexString(TTGPrintLightSensitivity,TTGPrintLightSensitivity,TTGPrintLightSensitivity);
    TTGPrintLightSensitivity-=17;
    if (TTGPrintLightSensitivity>=0x22)
        TTGPrintLightTOId=setTimeout(TTGPrintLightTO,20*(90.0/TTGEngineBPM));
}

// ----- GUI ------ //
// ----- LOGIC ------ //
function TTLStartStopHandler(start,bpm,meter,loud,silent,step,fade)
{
    if (start)
        docEl("tempoTrainerEngineAS").startEngine(bpm+"",""+(loud*meter),""+(silent*meter),""+(step*meter),fade+"");
    else
        docEl("tempoTrainerEngineAS").stopEngine();
}

function TTLPrintStepNum(stepnum,loud)
{
    TTGPrintStepNum(stepnum,loud)
}

function TTInit()
{
    TTGStartStopHandler=TTLStartStopHandler;
    setTimeout(TTGInputInit,500);
}

TTInit();
