﻿//var g_TimeGetTimeInit = 0;
//function TimeGetTime() {
//   // Returns the current time in milliseconds since first called.
//   var InitialTimeStart = 86400000; // ONE_DAY in milliseconds.
//   var dt = new Date();
//   var timeDiff = 0;

//   dt = new Date();

//   if ( g_TimeGetTimeInit == 0 )
//      g_TimeGetTimeInit = dt.getTime();

//   timeDiff = dt.getTime() - g_TimeGetTimeInit;

//   return ( timeDiff + InitialTimeStart );
//  
//} // end TimeGetTime()

function TimeGetTime() {
   // Returns the current time in milliseconds since first called.
   var dt = new Date();
   var timems = dt.getTime();
   delete dt;
   return ( timems );  
} // end TimeGetTime

function Wait(ms) {
	var dwStartTime = TimeGetTime();
	if ( dwStartTime > 0 ) {
		while ( TimeGetTime() - dwStartTime < ms ) ;
	} // end if
} // end Wait

var g_PrevUniqueNum = 0;
function GetUniqueNum() {
   // Returns a 9-digit number that is gauranteed to have not been returned before.
   // The uniqueness works even if the page is refreshed.

   // Initialize the first unique number if this is the first call.
   if ( g_PrevUniqueNum == 0 ) {
      var dt = null;
      var timems = 0;
      dt = new Date();
      if ( dt == null ) {
         // Just in case Date() fails.  This should never happen.
         g_PrevUniqueNum = (Math.random() * 1000000000) + 1000000000;
      } else {
         g_PrevUniqueNum = dt.getTime();
         delete dt;
      } // end else
      // Remove all upper digits past digit 9.
      g_PrevUniqueNum -= Math.floor(g_PrevUniqueNum / 1000000000, 10) * 1000000000;
   } // end if

   return ( ++g_PrevUniqueNum );
} // end GetUniqueNum()

var g_iPrevPos = 0;
function TimedMovement(iStart, iDest, iInTimeMs, iTimeElapsed) {
   return ( TimedMovementMaxInc(iStart, iDest, iInTimeMs, iTimeElapsed, 0, 0) );
} // end TimedMovement()
function TimedMovementMaxInc(iStart, iDest, iInTimeMs, iTimeElapsed, iMaxInc, iPrevPos) {
   // Returns the current linear position between 'iStart' and 'iDest'
   // assuming the position must move from start to dest in 'iInTimeMs' milliseconds
   // and 'iTimeElapsed' is the number of milliseconds elapsed since start.
   // If 'iMaxInc' >0, 'iPrevPos' must also be provided.  The returned value will never
   // be incremented more than 'iMaxInc' past 'iPrevPos'.  This prevents large jumps during stalls.
   var iCurPos = 0;
   if ( iStart <= iDest ) {
      iCurPos = parseInt(iStart + (((iDest-iStart) / iInTimeMs) * iTimeElapsed));
      if ( iCurPos > iDest )
         iCurPos = iDest;
      else if ( iCurPos < iStart )
         iCurPos = iStart;
      if ( iMaxInc > 0 ) {
         if ( iCurPos - iPrevPos > iMaxInc )
            iCurPos = iPrevPos + iMaxInc;
      } // end if
   } else {
      iCurPos = parseInt(iStart - (((iStart-iDest) / iInTimeMs) * iTimeElapsed));
      if ( iCurPos > iStart )
         iCurPos = iStart;
      else if ( iCurPos < iDest )
         iCurPos = iDest;
      if ( iMaxInc > 0 ) {
         if ( iPrevPos - iCurPos > iMaxInc )
            iCurPos = iPrevPos - iMaxInc;
      } // end if
   } // end else
   g_iPrevPos = iCurPos;
   return ( iCurPos );
} // end TimedMovement()

