// ccccccccccccccccccc copyright© 1996-2006 Grevillea Software cccccccccccccccccccccc 
//var AppState = 'ready';
//var gpState = 'Ready';
var oInterval = '';
var CallCounter = 0;
var PendingRequest = '' 
var gpPageNameIntro    = 'gpIntro.php';
var gpPageNameInit     = 'gpInit.php';
var gpPageNameProgress = 'gpProgress.php';
var gpPageNameLatest   = 'gpCurrent.php';
var gpPageNameChart    = 'gpChart.php';
var timer = new Date();
var timeStart = 0;

function gpRequestHandler(Request)  {	
//gpMessageShow('---request calld - ' + Request);
//gpMessageShow('pendingrequest = ' + PendingRequest);
    //if (SubPageCurrent == gpPageNameIntro || SubPageCurrent == gpPageNameInit || SubPageCurrent == gpPageNameProgress || SubPageCurrent == gpPageNameLatest || SubPageCurrent == gpPageNameChart)  {
    var DisplaygpState='';
    if (window.frames[0].document.getElementById('gpState') == null)  { // a gp page is not being displayed
        //alert('request - ' + Request);
        if (Request != 'Do pending request') alert('Select a genetic programming page first.');
        PendingRequest = '';
    } else {

        if (Request == 'Do pending request')  { // called when any sub page loads
            if (PendingRequest == '')   {
                return true; // no pending request >>>>>>>>>>>>>>>>>>>>>
            }  else  {
                Request = PendingRequest;
            }
        }
		gpMessageShow(Request);
        
        PendingRequest = Request;
        var oAppState = window.document.getElementById('AppState');
        var AppState = oAppState.innerHTML;
//gpMessageShow('appstate ' + AppState);            
        //show the request in the DisplayState box even if its not ready        
        if (Request == 'Run')  { // could mean start, do next pop or resume paused
            if (AppState != 'Evolving...') DisplaygpState='Starting...';            
        } else if (Request == 'Continue')  { // do another run - set above
        } else if (Request == 'Finish')  {
            DisplaygpState='Finishing...';
        } else if (Request == 'Pause')  {
            DisplaygpState='Pausing...';
        } else if (Request == 'Step')  {
            DisplaygpState='Doing one step...';
        } else if (Request == 'Clear')  {
            DisplaygpState='Clearing...';
        } else  {

        } 
        if (DisplaygpState == '') DisplaygpState = window.document.getElementById('AppState').innerHTML;
        if (window.frames[0].document.getElementById('DisplayState') != null)  window.frames[0].document.getElementById('DisplayState').innerHTML = DisplaygpState;   
        //exit if the page is still processing        
//gpMessageShow('docstate ' + window.document.getElementById('DocState').innerHTML);
        if (window.document.getElementById('DocState').innerHTML == 'Loading')  return true; //>>>>>>>>>>>>>>>>>>>>
        PendingRequest = '';
        //page is loaded if we get to here
        if (Request == 'Run')  { // could mean start or resume paused
            oAppState.innerHTML = 'Evolving...';
            //PendingRequest = 'Run';
            PendingRequest = 'Continue'; // to ensure that more calls are made - see below
            if (AppState == 'Ready')  {
                gpStart();
            }  else  {
                gpRun();
            }
            
        } else if (Request == 'Continue')  { // do another run - set above
            //window.frames[0].document.getElementById('AppState').innerText = 'running';
            if (AppState == 'Evolving...')  {
                PendingRequest = 'Continue'; // to ensure that more calls are made - see above
                gpRun();
            }
        } else if (Request == 'Finish')  {
            oAppState.innerHTML = 'Finishing...';
            gpFinish();
            CallCounter = 0;
        } else if (Request == 'Pause')  {
            if (AppState != 'Ready')  {
                oAppState.innerHTML = 'Paused';
            }
        } else if (Request == 'Step')  {
            if (AppState != 'Ready')  {
                oAppState.innerHTML = 'Doing one step...';
                gpRun();
            }
        } else if (Request == 'Clear')  {
            if (AppState == 'Evolving...') PendingRequest = 'Continue';
            //gpMessageShow('Clear - prev ' + PendingRequestPrev);
            gpClear();
        } else  {
            alert("Unknown request '" + Request + "'");
        } 
        DisplaygpState = window.document.getElementById('AppState').innerHTML;
        if (window.frames[0].document.getElementById('DisplayState') != null)  window.frames[0].document.getElementById('DisplayState').innerHTML = DisplaygpState;   
    }
   //gpMessageShow('state ' +  window.document.getElementById('AppState').innerHTML + ', ' + window.document.getElementById('DocState').innerHTML);
}//end gpRequestHandler ----------------------------------

function gpRun()   {
    CallCounter += 1;
    //gpMessageShow('CallCounter ' + CallCounter + ' - run');
    window.frames[0].document.location = SubPageCurrent + '?do=run';
    
    window.document.getElementById('DocState').innerHTML = 'Loading';
} //end function gpRun

function gpStart()   {
    window.document.getElementById('DIVdebug').innerHTML ='';
    timer = new Date();
    timeStart = timer.getTime();
    CallCounter += 1;
    gpMessageShow('CallCounter - ' + CallCounter + ' - Starting');

    window.frames[0].document.location = SubPageCurrent + '?do=start';
    
    window.document.getElementById('DocState').innerHTML = 'Loading';
} //end function gpStart

function gpFinish()   {
    CallCounter += 1;
    gpMessageShow('CallCounter - ' + CallCounter + ' - finishing');

    window.frames[0].document.location = SubPageCurrent + '?do=finish';
    
    window.document.getElementById('DocState').innerHTML = 'Loading';
} //end function gpStart
function gpClear()   {
    CallCounter += 1;
    gpMessageShow('CallCounter - ' + CallCounter + ' - clearing');

    window.frames[0].document.location = SubPageCurrent + '?do=clear';
    
    window.document.getElementById('DocState').innerHTML = 'Loading';
} //end function gpStart

function gpMessageShow(msg)   {
    //window.document.getElementById('DIVdebug').innerHTML += msg + '<BR>';
    
    timer = new Date();
    //window.document.getElementById('DIVdebug').innerHTML += (timer.getTime() - timeStart) + ': ' + msg + '<BR>';
//    window.document.getElementById('DIVdebug').innerHTML += (timeStart) + '<BR>';
    //timeStart = timer.getTime();
}
