// Copyright 2001 Macromedia, Inc. All rights reserved.
// v1.0

//----RANDOMIZE PAGE ARRAY IF NEEDED-----//
if (randPages) {
  var newLoc = 0;
  var currPage = 0;
  var currTitle = "";
  var numPage = pageURLs.length;
  for(i=0; i<numPage; i++) {
    newLoc = Math.round((Math.random()*(numPage -1)));
    currPage = pageURLs[i];
    currTitle = pageTitles[i];
    pageURLs[i] = pageURLs[newLoc];
    pageTitles[i] = pageTitles[newLoc];
    pageURLs[newLoc] = currPage;
    pageTitles[newLoc] = currTitle;
  }
}

//----REDUCE ARRAY TO NUMBER IN POOL-----//
if ((!quizPool) || (quizPool > pageURLs.length) || (quizPool < 0)){
    quizPool = pageURLs.length;
}
pageURLs = pageURLs.slice(0, quizPool);
var scoreArray = new Array(pageURLs.length);
var weightArray = new Array(pageURLs.length);
var possibleCorrectArray = new Array(pageURLs.length);

//----GET THE SESSION ID OR JUMP TO LOGIN PAGE--------//
if (loginFile && parent.location.href.indexOf("?")) {
  MM_CMISetParms(parent.location + "");
}

if ((!MM_SID) && (loginFile)){
  parent.location = loginFile + "?ActivityID=" + escape(activityID) + "&ActivityName=" + escape(activityName) + "&ReferringPage=" + escape(parent.location);
}

//----INITIALIZE THE SESSION IF NEEDED--------//
var lessonStatus = "i";
var startTime = null;

if (MM_TURL != ""){
  // MM_SVal("command","lmsinitialize",1);
  CMIGetParam();
  var startDate = new Date();
  startTime = startDate.getTime();
  if (MM_TURL.substring(MM_TURL.lastIndexOf('/'), MM_TURL.length) != "/initializing") { 
    trackingURL = aurl;
  }
}

//----ADDITIONAL CMI FUNCTIONS--------//
function CMIFinish(){
  MM_SVal("command","lmsfinish",1);
}

 function CMIExitAU(){
  MM_SVal("command","exitau",1);
 }

function exitActivity(){
  var theScore = calculateScore();
  var theTime = calculateTime();
  CMISetCore(lessonStatus, pageURLs[currentPageNumber - 1], theScore, theTime); 
  CMIExitAU();
}

function getPossibleScore(theObj) {
  var theScore = 0;
  with (theObj) {
    for (var i in e) if (i != 'length') {
      for (var j in e[i].c) if (j != 'length')
        theScore += e[i].c[j].score;
    }
  }
  return theScore;
}

function countScore(){
  if (parent.frames.length){
    var frameNum = -1;
    for (var i=0; i < parent.frames.length; i++){
      if (parent.frames[i].G01) frameNum = i;
    }
      if (frameNum > -1){
        if ((scoreArray[currentPageNumber-1] <= parent.frames[frameNum].G01.score) || (!scoreArray[currentPageNumber-1])){
            scoreArray[currentPageNumber-1] = parent.frames[frameNum].G01.score;
            weightArray[currentPageNumber-1] = parent.frames[frameNum].G01.trackWeight;
            if (parent.frames[frameNum].G01.name){
               possibleCorrectArray[currentPageNumber-1] = parent.frames[frameNum].G01.possibleCorrect;
            }
            else {
               possibleCorrectArray[currentPageNumber-1] = getPossibleScore(parent.frames[frameNum].G01);
            } // else
         } // if 
      } // if
      else if (frameNum == -1){
         scoreArray[currentPageNumber-1] = 0;
         possibleCorrectArray[currentPageNumber-1] = 0;
         weightArray[currentPageNumber-1] = 0;
      }  // else
  }  // if parent
} // function

function calculateScore(){
  var totalScore = 0;
  var possibleScore = 0;
  lessonStatus = "c";
  for (var i=0; i < scoreArray.length; i++){
     if (scoreArray[i]==null){
       lessonStatus = "i";
     }
     else {
       totalScore += (scoreArray[i]) * (weightArray[i]);
       possibleScore += (possibleCorrectArray[i]) * (weightArray[i]);
  }}
  return Math.round((totalScore/possibleScore)*100);
}

function calculateTime(){
  var endDate = new Date();
  var endTime = endDate.getTime();
  var deltaDate = new Date(endTime - startTime);
  var deltaTime = deltaDate.getTime();
  var deltaSec = (deltaTime/1000);
  startTime = endTime;
  return deltaSec;
}

//----PAGING FUNCTIONS--------//
var intervalId
var currentPageNumber = 0

function turnPage(targetFrame) {
  if (!targetFrame) targetFrame = parent.mainFrame;
  if ((MM_SID) && (loginFile)) {
    var theTime = calculateTime();
    CMISetCore(lessonStatus, pageURLs[currentPageNumber - 1], 0, theTime);
  }
  targetFrame.location = pageURLs[currentPageNumber - 1] + "?aicc_sid=" + MM_SID + "&aicc_url=" + trackingURL;
  window.status = "Page " + currentPageNumber + " of " + pageURLs.length;    
}

function nextPage() {
  if (cmdQueue.qLen == 0) {
    if (currentPageNumber < pageURLs.length) {
      countScore();
      currentPageNumber = currentPageNumber + 1;
      turnPage();
    }
    else {
      if (nextAlert)
        alert(nextAlert);
      else
        exitConfirm(0, resultsFile);          
    }
  }
}

function prevPage() {
  if (cmdQueue.qLen == 0) {
    if (currentPageNumber > 1) {
      countScore();
      currentPageNumber = currentPageNumber - 1;
      turnPage();
    }
    else {
      if (previousAlert)
        alert(previousAlert);
      else
        exitConfirm(0, framesetFile);
    }
  }
}

function doPage(pageNumber, targetFrame) {
  if (!targetFrame) targetFrame = parent.mainFrame;
  if ((pageNumber <= (pageURLs.length + 1)) & (pageNumber >= 0)) {
    countScore();
    currentPageNumber = pageNumber;
    turnPage(targetFrame);
  }
  else alert(pageNumber + " is an invalid page number.");
}

function showWaitMessage(targetFrame) {
  if (!targetFrame) targetFrame = parent.mainFrame;
  targetFrame.document.write('<html><body>');
  targetFrame.document.write('<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">');
  targetFrame.document.write('<tr align="center"><td>');
  targetFrame.document.write('<p>writing out student data...</p>');
  targetFrame.document.write('<p>please wait <b>' + cmdQueue.qLen + '</b> seconds.<p>');
  targetFrame.document.write('</td></tr>');
  targetFrame.document.write('</table></body></html>');
  targetFrame.document.close();
}

function waitForCmdQueue(doClose, doPage) {
  showWaitMessage();
  if (cmdQueue.qLen == 0) {
    clearInterval(intervalId);
    if (doClose)
      setTimeout('parent.close()', cmdQueue.latency);
    else if (doPage) {
      if (doPage == framesetFile)
        setTimeout('parent.location = "' + doPage + '"', cmdQueue.latency);
      else
        setTimeout('parent.location = "' + doPage + '" + "?aicc_sid=" + "' + MM_SID + '" + "&aicc_url=" + "' + trackingURL + '"', cmdQueue.latency);
    }
  }
}

function exitConfirm(doClose, doPage) {
  if (cmdQueue.qLen == 0) {
    countScore();
    killOptionWindow();
    if ((MM_SID) && (loginFile)) { // data tracking
      exitActivity();
      intervalId = setInterval('waitForCmdQueue(' + doClose + ', "' + doPage + '")', cmdQueue.latency); 
      showWaitMessage();
    }
    else { // no tracking
      if (doClose)
        parent.close();
      else
        if (doPage) parent.location = doPage;
    }
  }
}

function doFinish() {
  if (cmdQueue.qLen == 0) {
    if (resultsOnFinish) {
      if (resultsFile)
        exitConfirm(0, resultsFile);
      else
        exitConfirm(1);
    }
    else {
      if (currentPageNumber < pageURLs.length)
        doPage(pageURLs.length);
      else {
        if (nextAlert)
          alert(nextAlert);
        else
          exitConfirm(0, resultsFile);
      }
    }
  }
}

function doRestart() {
  if (cmdQueue.qLen == 0) {
    if (loginOnRestart)
      exitConfirm(0, framesetFile);
    else {
      if (currentPageNumber > 1)
        doPage(1);
      else {
        if (previousAlert)
          alert(previousAlert);
        else
          exitConfirm(0, framesetFile);
      }
    }
  }
}

//----FUNCTIONS FOR HANDLING OPTION WINDOWS--------//
var optionWindow = null;

function killOptionWindow() {
   if (optionWindow != null && !optionWindow.closed) {
     optionWindow.close();
   }
}

function openOptionWindow(URL, windowName, features) {
  if (cmdQueue.qLen == 0) {
    if (!optionWindow || optionWindow.closed) {
      optionWindow = window.open(URL, windowName, features);
      optionWindow.opener = self;
    }
    else if (optionWindow.name == windowName) {
      optionWindow.focus();
    }
    else {
      killOptionWindow();
      optionWindow = window.open(URL, windowName, features);
      optionWindow.opener = self;
    }
  }
}

function openMenu() {
    var URL = "./menu.htm";
    var windowName = "Menu";
    var xLoc = (screen.width - 300) / 2;
    var yLoc = (screen.height - 400) / 2;
    var features =
        'width='         + 306 +
        ',height='       + 520 +
        ',directories='  + 0 +
        ',location='     + 0 +
        ',menubar='      + 0 +
        ',status='       + 0 +
        ',toolbar='      + 0 +
        ',Resizable='    + 0 +
        ',left='         + xLoc +
        ',top='          + yLoc +
        ',alwaysRaised=' + 1 
        ',titlebar='     + 0 ;
    openOptionWindow(URL, windowName, features);
}