function Klo(cwsObj)  {
  var pThis = this;
  var page = null
  var displayTypes = new Array();
  var defaultDt = cwsObj.defaultDt;
  var displayType = 0;
  var timerIntervalId = null;
  var timerInterval = 1000;
  var cwsWin = cwsObj.getCwsWin();
  this.kloId = "";
  this.kloNum = 0;
  this.captionsEnabled = false;
  this.exitOnNext = cwsObj.exitOnNext;
  this.kloStatus = "n";
  this.autoComplete = cwsObj.autoComplete;
  this.selectDisplayType = cwsObj.selectDisplayType;
  this.askBookmark = cwsObj.askBookmark;
  this.currentKloLocation = 0;
  this.singleContentSwf = cwsObj.singleContentSwf;
  this.autoFlashNext = cwsObj.autoFlashNext;
  this.description = "";
  this.reloadRefs = cwsObj.reloadRefs;
  this.assessment = null;
  this.useVolumeControl = cwsObj.useVolumeControl;
  this.volumeControl = null;
  this.developmentMode = cwsObj.developmentMode;
  this.audioServers = cwsObj.audioServers;
  this.currentAudioServer = 0;
  this.flashMediaPlayerMenu = cwsObj.flashMediaPlayerMenu;
  this.pageLoaded = false;
  this.flashMediaAutoStart = cwsObj.flashMediaAutoStart;
  this.useBookmark = cwsObj.useBookmark;
  this.useFlashAudioShell = cwsObj.useFlashAudioShell;
  this.useFlashAudioTimer = cwsObj.useFlashAudioTimer;
  this.confirmExitMethod = cwsObj.confirmExitMethod;
  this.pageLoadedMethod = cwsObj.pageLoadedMethod;
  this.contentScroll = cwsObj.contentScroll;
  this.includeAllParamsInFlashVars = cwsObj.includeAllParamsInFlashVars;
  this.kloOnNext = cwsObj.kloOnNext;
  this.isAssessment = false;
  this.runIfCompleted = true;
  this.failIsComplete = false;
  this.qaMode = cwsObj.qaMode;
  this.reuseFlashMediaPlayer = cwsObj.reuseFlashMediaPlayer;
  this.cacheFlashMedia = cwsObj.cacheFlashMedia;
  this.flashMediaShell = cwsObj.flashMediaShell;
  this.useFlashMediaShell = cwsObj.useFlashMediaShell;
  this.monitorCaptionsWindow = cwsObj.monitorCaptionsWindow;
  this.useNavDelay = cwsObj.useNavDelay;
  this.navDelayTimerInterval = cwsObj.navDelayTimerInterval;
  this.contentWindowTop = cwsObj.contentWindowTop;
  this.contentWindowLeft = cwsObj.contentWindowLeft;
  this.useFlashCaptions = cwsObj.useFlashCaptions;
  this.mediaUserInterfaceName = cwsObj.mediaUserInterfaceName;
  this.usePopupBookmark = cwsObj.usePopupBookmark;

  var flashMediaPlayer = null;
  var flashAudioPlayer = null;
  var wmAudioPlayer = null;
  var flashListener = null;
  var flashMediaListener = null;
  var flashMediaCachePlayer = null;
  var captionsTimerIntervalId = null;
  var navDelayTimerIntervalId = null;
  var kloCaptions = null;
  var flashMediaShellLoaded = false;

  var keyTrap = null;

  this.contentWinObj = cwsObj.contentWinObj;

  var glossaryTerm = "";

  loadCaptions();

  this.getCwsObj = function() {
    return cwsObj;
  }

  //intial functions (must be run upon initialization)
  this.setKloNum = function(num)  {
    if (!isNaN(num))  {
      this.kloNum = parseInt(num,10);
    }
    else  {
      //error
    }
  }
  this.getCurrentPages = function() {
    return displayTypes[displayType].getPages();
  }
  this.setDisplayTypes = function(dt,def)  {
    displayTypes = dt;
    if (defaultDt == -1)  {
      defaultDt = def;
    }
    if (defaultDt > -1) {
      displayType = defaultDt;
      this.setDisplayType(displayType);
    }
  }
  this.setDisplayType = function(dt)  {
    if (!isNaN(dt)) {
      if (displayType < displayTypes.length)  {
        cwsObj.lcmsDisplayType = dt;
        displayType = parseInt(dt,10);
        //load all interfaces images
        displayTypes[displayType].loadUserInterfaces();
        //displayTypes[displayType].loadUserInterface(displayTypes[displayType].userInterface);
      }
    }
  }
  this.initializeKlo = function() {
    cwsObj.user.kloNum = this.kloNum;
    if (this.selectDisplayType) {
      if ((cwsObj.useDefaultDisplayType) && (cwsObj.displayTypeIndex > -1)) {
        this.setDisplayTypeByUser(cwsObj.displayTypeIndex);
      }
      else  {
        cwsObj.contentFrameObj.location.href = cwsObj.rootPath + "data/" + cwsObj.lang + "/selectdisplaytype.htm";
      }
    }
    else  {
      if (displayTypes[displayType].get508())  {
        this.contentScroll = true;
      }
      else  {
        this.contentScroll = false;
      }
      if ((cwsObj.runInNewWindow) && (this.contentScroll != cwsObj.contentScroll) && (this.contentWinObj != null)){
        this.contentWinObj.closeWin();
        cwsObj.contentScroll = this.contentScroll;
      }
      if ((cwsObj.startKloPageNum > 0) && (cwsObj.startKloPageNum <= displayTypes[displayType].getNumPages())) {
        this.currentKloLocation = cwsObj.startKloPageNum;
        cwsObj.startKloPageNum = 0;
        this.askBookmark = false;
      }
      if (this.currentKloLocation == 0) {
        if (this.useBookmark) {
          this.currentKloLocation = cwsObj.getKloLocation(displayType,this.kloNum);
        }
        else  {
          this.currentKloLocation = 1;
        }
      }
      if (!isNaN(this.currentKloLocation)) {
        if ((this.askBookmark) && (this.currentKloLocation > 1) && (this.kloNum != cwsObj.menuKloNum))  {
          var bookmarkPath = cwsObj.rootPath + "data/" + cwsObj.lang + "/askbookmark.htm";
          if (this.usePopupBookmark)  {
            var bUi = displayTypes[displayType].getUserInterface("askBookmark");
            var winWidth = bUi.width;
            var winHeight = bUi.height;
            var winTop = 0;
            var winLeft = 0;
            var contentWinTop = cwsObj.contentFrameObj.screenTop;
            var contentWinLeft = cwsObj.contentFrameObj.screenLeft;
            if (this.contentWinObj.win != null) {
              contentWinTop = this.contentWinObj.win.screenTop;
              contentWinLeft = this.contentWinObj.win.screenLeft;
            }
            if ((parseInt(contentWinTop) != "NaN") && (parseInt(contentWinTop) != "NaN")) {
              winTop = Math.round(((displayTypes[displayType].userInterface.height - winHeight) / 2) + parseInt(contentWinTop));
              winLeft = Math.round(((displayTypes[displayType].userInterface.width - winWidth) / 2) + parseInt(contentWinLeft));
            }
            this.openPopup(bookmarkPath,winTop,winLeft,winWidth,winHeight,false,false,false);
          }
          else  {
            cwsObj.contentFrameObj.location.href = cwsObj.rootPath + "data/" + cwsObj.lang + "/askbookmark.htm";
          }
        }
        else  {
          this.runKlo();
        }
      }
    }
  }

  this.runKlo = function()  {
    //initialize assessment
    if (displayTypes[displayType].assessment != null)  {
      this.assessment = displayTypes[displayType].assessment;
      this.assessment.initialize(this.getCurrentPages());
    }

    //open persistent windows
    for (w in cwsObj.childWindows)  {
      if (displayTypes[displayType].getUserInterface(w) != null)  {
        if ((displayTypes[displayType].getUserInterface(w).persistentWindow) && (cwsObj.childWindows[w].opened) && (this.kloNum != cwsObj.menuKloNum)) {
          this.openWindow(w);
          if (w == "captions")  {
            this.captionsEnabled = true;
            if ((this.monitorCaptionsWindow) && (!captionsTimerIntervalId)) {
              captionsTimerIntervalId = setInterval(checkCaptionsWindow, 500);
            }
          }
        }
      }
    }

    //reset toggle images
    for (q=0;q<displayTypes[displayType].userInterface.images.length;q++) {
      var img = displayTypes[displayType].userInterface.images[q];
      if ((img.hasOn) && (img.on) && (img.resetOnRun)) {
        img.on = false;
      }
    }

    //get & set kloStatus
    var status = cwsObj.getKloStatus(this.kloNum);
    if (this.kloNum == cwsObj.menuKloNum) {
      cwsObj.setKloStatus(this.kloNum,"c");
      this.kloStatus = "c";
    }
    else  {
      if (status == "n")  {
        this.kloStatus = "i";
        cwsObj.setKloStatus(this.kloNum,"i");
      }
      else  {
        this.kloStatus = status;
      }
    }
    if ((!this.runIfCompleted) && ((this.kloStatus == "c") || (this.kloStatus == "p") || ((this.failIsComplete) && (this.kloStatus == "f")))) {
      alert("You have already completed this learning object.\nYou can not re-launch it.");
      this.exitKlo();
    }
    else  {
      var pNumber = this.currentKloLocation;
      if ((!isNaN(pNumber)) && (pNumber <= displayTypes[displayType].getNumPages())) {
        pPage = displayTypes[displayType].getPage(pNumber);
        this.gotoPage(pPage);
        cwsObj.setSessionState(1);
      }
      else  {
        cwsObj.setSessionState(3);
      }
    }
  }
  this.writeDisplayTypeSelect = function()  {
    var dt = displayTypes[displayType]
    var ui = dt.getUserInterface("selectDt");
    //dt.loadUserInterface(ui);
    var html = eval(ui.topHtml);
    html += "<BR><form name=f>";
    for (i=0;i<displayTypes.length;i++) {
      html += "<BR><BR><input class=reg_text type=button value='" + displayTypes[i].getDescription() + "' onClick='kloObj.setDisplayTypeByUser(" + i + ");'>";
    }
    html += "</form>";
    html += eval(ui.bottomHtml);
    this.writeHtml(cwsObj.contentFrameObj,html);
    cwsObj.contentFrameObj.focus();
  }
  this.setDisplayTypeByUser = function(pDisplayType) {
    this.setDisplayType(pDisplayType);
    this.selectDisplayType = false;
    if (cwsObj.useDefaultDisplayType) {
      cwsObj.displayTypeIndex = pDisplayType;
    }
    this.initializeKlo();
  }
  this.writeAskBookmark = function()  {
    var dt = displayTypes[displayType]
    var ui = dt.getUserInterface("askBookmark");
    //dt.loadUserInterface(ui);
    var html = eval(ui.topHtml);
    html += eval(ui.bottomHtml);
    var bookmarkWin = cwsObj.contentFrameObj;
    if (this.usePopupBookmark)  {
      bookmarkWin = cwsObj.childWindows["popup"].win;
    }
    this.writeHtml(bookmarkWin,html);
    bookmarkWin.focus();
  }
  this.setBookmark = function(gotoBookmark) {
    if (this.usePopupBookmark)  {
      cwsObj.childWindows["popup"].win.close();
    }
    if (!gotoBookmark)  {
     this.currentKloLocation = 1;
    }
    this.askBookmark = false;
    this.initializeKlo();
  }
  this.gotoPageNum = function(pPageNum) {
    var pPage = displayTypes[displayType].getPage(pPageNum);
    if (pPage != null)  {
      this.gotoPage(pPage);
    }
  }
  this.gotoPage = function(pPage) {
    if (pPage != null) {
      var flashReLoad = false;
      if ((pPage.pageType == FLASH_PAGE_TYPE) && (flashMediaPlayer != null) && (this.reuseFlashMediaPlayer)) {
        flashReLoad = true;
      }

      if (!flashReLoad) {
        //reset flash media player
        flashMediaPlayer = null;
      }

      //reset audio stuff
      flashAudioPlayer = null;
      if (flashListener != null)  {
        flashListener.stop();
        flashListener = null;
      }
      wmAudioPlayer = null;
      this.currentAudioServer = 0;

      //reset flash next
      var image = displayTypes[displayType].userInterface.getImage("NEXT");
      if (image != null)  {
        image.flash = false;
      }

      //set current branch in display type
      displayTypes[displayType].currentBranch = pPage.branchName;

      //update cws with current page number
      if (this.useBookmark) {
        cwsObj.setKloLocation(displayType,this.kloNum,pPage.pageNumber);
      }

      //set completion if auto-complete is turned on.
      if ((this.autoComplete) && (displayTypes[displayType].currentBranch == "main") && (pPage.branchPageNumber == displayTypes[displayType].getBranchNumPages()))  {
        var status = cwsObj.getKloStatus(this.kloNum);
        if ((status == "i") || (status == "n")) {
          cwsObj.setKloStatus(this.kloNum,"c");
        }
      }

      //get page type
      var type = pPage.getPageType();
      if (type != null)  {
        if (displayTypes[displayType].getBranchPage(pPage.branchPageNumber-1) == null) {
          displayTypes[displayType].userInterface.getImage("PREVIOUS").setEnabled(false);
        }
        else  {
          displayTypes[displayType].userInterface.getImage("PREVIOUS").setEnabled(true);
        }
        if ((displayTypes[displayType].getBranchPage(pPage.branchPageNumber+1) == null) && (!this.exitOnNext) && (displayTypes[displayType].currentBranch == "main")) {
          displayTypes[displayType].userInterface.getImage("NEXT").setEnabled(false);
        }
        else  {
          displayTypes[displayType].userInterface.getImage("NEXT").setEnabled(true);
        }
        if (displayTypes[displayType].userInterface.getImage("BRANCH_MENU") != null)  {
          branchMenuPage = displayTypes[displayType].branchMenuPage;
          if (branchMenuPage == null) {
            branchMenuPage = pPage;
          }
          if ((cwsObj.browse) || (cwsObj.getKloStatus(this.kloNum) == "c") || (cwsObj.getKloStatus(this.kloNum) == "p") || (cwsObj.getKloLocation(displayType,this.kloNum) >= branchMenuPage.pageNumber))  {
            displayTypes[displayType].userInterface.getImage("BRANCH_MENU").setEnabled(true);
          }
          else  {
            displayTypes[displayType].userInterface.getImage("BRANCH_MENU").setEnabled(false);
          }
        }
        page = pPage;

        if (flashReLoad)  {
          var image = displayTypes[displayType].userInterface.getImage("PREVIOUS");
          if (image != null)  {
            this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src);
          }
          image = displayTypes[displayType].userInterface.getImage("NEXT");
          if (image != null)  {
            this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src);
          }
          image = displayTypes[displayType].userInterface.getImage("BRANCH_MENU");
          if (image != null)  {
            this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src);
          }
          if (!this.useFlashMediaShell) {
            var fileName = pPage.singleContentSwf;
            if (fileName == null)  {
              fileName = this.singleContentSwf;
            }
            if (fileName == "") {
              fileName = pPage.pageId;
            }
            movieUrl = this.getMediaUrl(fileName,FLASH_PAGE_TYPE);
            if ((flashMediaPlayer != null) && (flashMediaListener != null)) {
              flashMediaPlayer.loadMovie(movieUrl);
              if (this.flashMediaAutoStart) {
                flashMediaPlayer.play();
              }
            }
          }
          else  {
            if (flashMediaPlayer != null) {
              initializeFlashMediaShellVars();
              flashMediaPlayer.obj.TGotoLabel("_root","playMovie");
              //flashMediaPlayer.play();
            }
          }
          if (isValidFunction(cwsWin.resetPageElements)) {
            cwsWin.resetPageElements();
          }
          this.handlePageLoad();
        }
        else  {
          var url = cwsObj.rootPath + this.kloId + "/" + pPage.getPageUrl();
          this.contentWinObj.setWidth(displayTypes[displayType].userInterface.width);
          this.contentWinObj.setHeight(displayTypes[displayType].userInterface.height);
          this.contentWinObj.setTop(this.contentWindowTop);
          this.contentWinObj.setLeft(this.contentWindowLeft);
          this.contentWinObj.setScroll(this.contentScroll);
          if (this.contentWinObj.win == null) {
            this.openContentWin(url);
            if (timerIntervalId != null)  {
              clearInterval(timerIntervalId);
              timerIntervalId = null;
            }
            timerIntervalId = setInterval(this.checkContentWin,timerInterval);
          }
          else  {
            this.contentWinObj.gotoUrl(url);
          }
        }
        //for the lcms
        cwsObj.getCwsWin().CONTENT_WIN = this.contentWinObj.win;
        this.contentWinObj.win.focus();
        if ((this.reloadRefs) && (cwsObj.childWindows["refs"].win != null) && (!cwsObj.childWindows["refs"].win.closed))  {
          this.openRefs();
        }
        if (this.developmentMode) {
          var devPath = cwsObj.rootPath + "data/" + this.getLang() + "/dev.htm";
          cwsObj.childWindows["dev"].gotoUrl(devPath);
          this.contentWinObj.win.focus();
        }
      }
    }
  }
  this.gotoKlo = function(kloNum) {
    if (!isNaN(kloNum)) {
      if (flashMediaPlayer != null) {
        if (flashMediaPlayer.obj != null) {
          if (this.useFlashMediaShell)  {
            flashMediaPlayer.obj.TGotoLabel("_root","pauseMovie");
          }
          else  {
            flashMediaPlayer.stop();
          }
        }
      }
      cwsObj.launchKlo(kloNum);
    }
  }
  this.gotoKloPage = function(kloNum,kloPageNum)  {
    if ((!isNaN(kloNum)) && (!isNaN(kloPageNum))) {
      cwsObj.startKloPageNum = parseInt(kloPageNum);
      cwsObj.launchKlo(parseInt(kloNum));
    }
  }
  this.openContentWin = function(url)  {
    this.contentWinObj.gotoUrl(url);
  }
  this.checkContentWin = function() {
    var win = pThis.contentWinObj.win;
    if (win != null)  {
      if ((win.closed) && (timerIntervalId != null)) {
        clearInterval(timerIntervalId);
        timerIntervalId = null;
        cwsObj.finished();
      }
    }
  }
  this.writeHeader = function()  {
    var dt =  displayTypes[displayType];
    var ui = dt.userInterface;
    var html = eval(ui.topHtml);
    flashMediaPlayer = null;
    flashAudioPlayer = null;
    wmAudioPlayer = null;

    var fsCommand = false;
    var fileName = "";

    if (navigator.userAgent.indexOf("Windows") != -1) {
      if (window.ActiveXObject && (navigator.userAgent.indexOf("MSIE")!= -1) && (navigator.userAgent.indexOf("Windows") != -1)) {
        fsCommand = true;
      }
    }

    if ((page.getPageType() == HTML_PAGE_TYPE) && (this.kloNum != cwsObj.menuKloNum)) {
      mediaSpacer = dt.getUserInterface(this.mediaUserInterfaceName).height;
       if (dt.get508()) {
        mediaSpacer = dt.getUserInterface("508media").height;
      }
      html += "<table cellspacing=0 cellpadding=0 width=100%><tr><td width=2 height=" + mediaSpacer + ">&nbsp;</td><td valign=top>";
    }
    if (page.getPageType() == FLASH_PAGE_TYPE) {
      //add flash movie
      var movieUrl = this.flashMediaShell;
      if (!this.useFlashMediaShell) {
        var filename = "";
        if (page.singleContentSwf == null)  {
          fileName = this.singleContentSwf;
        }
        else  {
          fileName = page.singleContentSwf;
        }
        if (fileName == "") {
          fileName = page.pageId;
        }
        movieUrl = this.getMediaUrl(fileName,FLASH_PAGE_TYPE);
      }
      flashMediaPlayer = new FlashMovie(movieUrl);
      flashMediaPlayer.id = "flashMediaPlayer";
      flashMediaPlayer.version = cwsObj.flashPlayerVersion;
      flashMediaPlayer.bgColor = displayTypes[displayType].getUserInterface(this.mediaUserInterfaceName).bkColor;
      flashMediaPlayer.width = displayTypes[displayType].getUserInterface(this.mediaUserInterfaceName).width;
      flashMediaPlayer.height = displayTypes[displayType].getUserInterface(this.mediaUserInterfaceName).height;
      flashMediaPlayer.autoStart = this.flashMediaAutoStart;
      flashMediaPlayer.params = getFlashMediaParamList();
      flashMediaPlayer.urlPrefix = cwsObj.urlPrefix;
      flashMediaPlayer.menu = this.flashMediaPlayerMenu;
      if (this.useFlashMediaShell)  {
        flashMediaPlayer.align = "top";
        flashMediaPlayer.sAlign = "lt";
        flashMediaPlayer.scale = "noscale";
      }
      html += flashMediaPlayer.getHtml();
      html += "<SCRIPT FOR=\"flashMediaPlayer\" EVENT=\"FSCommand(cmd, param)\" LANGUAGE=\"javascript\"> if (kloObj != null)  { kloObj.handleFsCommand(cmd, param); }</SCRIPT>";
    }
    if ((page.hasAudio) && (cwsObj.audioEnabled))  {
      var pageAudioClip = page.getPageAudioClip();
      if (pageAudioClip != null)  {
        if (pageAudioClip.audioType == FLASH_AUDIO_TYPE) {
          if (this.useFlashAudioShell)  {
            fileName = cwsObj.rootPath + "data/audioPlayer.swf";
          }
          else  {
            fileName = this.getMediaUrl(pageAudioClip.fileName,FLASH_AUDIO_TYPE);
          }
          flashAudioPlayer = new FlashMovie(fileName);
          flashAudioPlayer.id = "flashAudioPlayer";
          flashAudioPlayer.version = cwsObj.flashPlayerVersion;
          flashAudioPlayer.width = 1;
          flashAudioPlayer.height = 1;
          flashAudioPlayer.autoStart = true;
          flashAudioPlayer.urlPrefix = cwsObj.urlPrefix;
          flashAudioPlayer.params = "fsCommand=" + fsCommand;
          html += flashAudioPlayer.getHtml();
          html += "<SCRIPT FOR=\"flashAudioPlayer\" EVENT=\"FSCommand(cmd, param)\" LANGUAGE=\"javascript\"> if (kloObj != null)  { kloObj.handleFsCommand(cmd, param); }</SCRIPT>";
        }
        if (pageAudioClip.audioType == WMA_AUDIO_TYPE) {
          //fileName = page.pageId;
          wmAudioPlayer = new WmpAudioClip("",this);
          wmAudioPlayer.id = "wmAudioPlayer";
          wmAudioPlayer.autoStart = false;
          wmAudioPlayer.width = 1;
          wmAudioPlayer.height = 1;
          wmAudioPlayer.urlPrefix = cwsObj.urlPrefix;
          wmAudioPlayer.audioClip = pageAudioClip;
          html += wmAudioPlayer.getHtml();
        }
        if (pageAudioClip.audioType == WMA_STREAM_AUDIO_TYPE) {
          //fileName = page.pageId;
          wmAudioPlayer = new WmpAudioClip("",this);
          wmAudioPlayer.id = "wmAudioPlayer";
          wmAudioPlayer.autoStart = false;
          wmAudioPlayer.width = 1;
          wmAudioPlayer.height = 1;
          wmAudioPlayer.urlPrefix = cwsObj.urlPrefix;
          wmAudioPlayer.audioClip = pageAudioClip;
          html += wmAudioPlayer.getHtml();
        }
      }
    }
    if ((page.hasAudioClips()) && (cwsObj.audioEnabled)) {
      var audioClips = page.getAudioClips();
      for (a=0;a<audioClips.length;a++) {
        var audioType = audioClips[a].audioType;
        if (((audioType == WMA_AUDIO_TYPE) || (audioType == WMA_STREAM_AUDIO_TYPE)) && (wmAudioPlayer == null)) {
          wmAudioPlayer = new WmpAudioClip("",this);
          wmAudioPlayer.id = "wmAudioPlayer";
          wmAudioPlayer.width = 1;
          wmAudioPlayer.height = 1;
          wmAudioPlayer.urlPrefix = cwsObj.urlPrefix;
          html += wmAudioPlayer.getHtml();
        }
        if ((audioType == FLASH_AUDIO_TYPE) && (flashAudioPlayer == null)) {
          flashAudioPlayer = new FlashMovie("");
          flashAudioPlayer.id = "flashAudioPlayer";
          flashAudioPlayer.version = cwsObj.flashPlayerVersion;
          flashAudioPlayer.width = 1;
          flashAudioPlayer.height = 1;
          flashAudioPlayer.urlPrefix = cwsObj.urlPrefix;
          html += flashAudioPlayer.getHtml();
        }
      }
    }
    if (wmAudioPlayer != null)  {
      html += "<SCRIPT FOR=\"wmAudioPlayer\" EVENT=\"ScriptCommand(type, param)\" LANGUAGE=\"javascript\"> if (kloObj != null)  { kloObj.handleWmAudioScriptEvent(type,param);}</SCRIPT><SCRIPT FOR=\"wmAudioPlayer\" EVENT=\"playStateChange(newState)\" LANGUAGE=\"javascript\">if (kloObj != null){ kloObj.handleWmAudioPlayStateChange(newState);}</SCRIPT><SCRIPT FOR=\"wmAudioPlayer\" EVENT=\"openStateChange(newState)\" LANGUAGE=\"javascript\">if (kloObj != null){ kloObj.handleWmAudioOpenStateChange(newState);}</SCRIPT><SCRIPT FOR=\"wmAudioPlayer\" EVENT=\"error()\" LANGUAGE=\"javascript\">if (kloObj != null){ kloObj.handleWmAudioError();}</SCRIPT>";
    }
    this.contentWinObj.win.writeHtml(html);
    if (flashMediaPlayer != null) {
      flashMediaPlayer.obj = eval("this.contentWinObj.win." + CwsUtil.getHtmlObjText(flashMediaPlayer.id));
    }
    if (flashAudioPlayer != null) {
      flashAudioPlayer.obj = eval("this.contentWinObj.win." + CwsUtil.getHtmlObjText(flashAudioPlayer.id));
    }
    if (wmAudioPlayer != null) {
      wmAudioPlayer.obj = eval("this.contentWinObj.win." + CwsUtil.getHtmlObjText(wmAudioPlayer.id));
    }
    if ((this.assessment != null) && (page.question != null))  {
      this.assessment.showQuestion(page);
    }
  }
  this.writeFooter = function() {
    var dt =  displayTypes[displayType];
    var ui = dt.userInterface;
    var html = "";
    if ((page.getPageType() == HTML_PAGE_TYPE) && (this.kloNum != cwsObj.menuKloNum)) {
      html += "</td></tr></table>";
    }
    html += eval(ui.bottomHtml);
    html += '<div style="position: absolute; top: 9px; left: 595px; width: 300px; text-align: right; color: white; font-family: \'Tahoma\'; font-size: 9px;">';
    html += ui.getHtmlObjHtml("pageTitle",cwsObj.description + ': ');
    html += ui.getHtmlObjHtml("kloTitle",cwsObj.kloDescriptions[this.kloNum] + ': ');
    html += ui.getPageNumberDisplayHtml(page.branchPageNumber,displayTypes[displayType].getBranchNumPages());
    html += '</div>';
    html += '<select style="position: absolute; top: 6px; left: 250px;" onchange="cwsWin.loadPage(this)"><option value=0>Topic menu</option><option value=1>Course Overview</option><option value=3>Course Objectives</option><option value=4>Before You Begin</option></select>';
    html += '<p style="margin: 0; position: absolute; top: 6px; left: 6px; color: white; font-size: 16px; font-family: Verdana; font-weight: bold;">' + cwsObj.description + '</p>';
    if (this.qaMode)  {
      html += ui.getHtmlObjHtml("pageId",page.pageId);
    }
    if (this.cacheFlashMedia) {
      //write cache movie
      flashMediaCachePlayer = new FlashMovie(this.flashMediaShell);
      flashMediaCachePlayer.id = "flashMediaCachePlayer";
      flashMediaCachePlayer.version = cwsObj.flashPlayerVersion;
      flashMediaCachePlayer.bgColor = displayTypes[displayType].getUserInterface(this.mediaUserInterfaceName).bkColor;
      flashMediaCachePlayer.width = 1;
      flashMediaCachePlayer.height = 1;
      flashMediaCachePlayer.autoStart = false;
      flashMediaCachePlayer.urlPrefix = cwsObj.urlPrefix;
      flashMediaCachePlayer.menu = false;
      html += flashMediaCachePlayer.getHtml();
    }
    if ((this.useFlashCaptions) && (kloCaptions != null))    {
      var captionText = "";
      if (kloCaptions[displayType][page.pageNumber-1] != null)  {
        captionText = kloCaptions[displayType][page.pageNumber-1];
      }
      var caption = CwsUtil.replaceChars("\n","",captionText);
      var captionsInterface = displayTypes[displayType].getUserInterface("captions");
      flashCaptionsPlayer = new FlashMovie(eval(captionsInterface.path));
      flashCaptionsPlayer.id = "flashCaptionsPlayer";
      flashCaptionsPlayer.bgColor = captionsInterface.bkColor;
      flashCaptionsPlayer.width = captionsInterface.width;
      flashCaptionsPlayer.height = captionsInterface.height;
      flashCaptionsPlayer.params = "fsCommand=" + this.fsCommand + "&captionHtml=" + escape(caption);
      flashCaptionsPlayer.urlPrefix = this.urlPrefix;
      flashCaptionsPlayer.menu = false;
      flashCaptionsPlayer.autoStart = true;
      html += ui.getHtmlObjHtml("flashCaptions",flashCaptionsPlayer.getHtml());
    }
    this.contentWinObj.win.writeHtml(html);
    if (flashMediaCachePlayer != null) {
      flashMediaCachePlayer.obj = eval("this.contentWinObj.win." + CwsUtil.getHtmlObjText(flashMediaCachePlayer.id));
    }
    if ((this.useFlashCaptions) && (kloCaptions != null))    {
      flashCaptionsPlayer.obj = eval("this.contentWinObj.win." + CwsUtil.getHtmlObjText(flashCaptionsPlayer.id));
    }
  }
  this.writeCaption = function(captions)  {
    var ui = displayTypes[displayType].getUserInterface("captions");
    var html = ui.getTopHtml() + captions[displayType][page.pageNumber-1] + ui.getBottomHtml();
    this.writeHtml(cwsObj.childWindows["captions"].win,html);
  }
  this.writeGlossary = function() {
    if (glossaryTerm == "")  {
      //write terms - no term selected
      var terms = displayTypes[displayType].glossary.getTerms();
      var html = eval(displayTypes[displayType].getUserInterface("glossary").topHtml);
      for (t=0;t<terms.length;t++)  {
        html += "<A href=\"javascript:kloObj.gotoGlossaryTerm('" + escape(terms[t]) + "');\">" + terms[t] + "</a><P>";
      }
      html += eval(displayTypes[displayType].getUserInterface("glossary").bottomHtml);
    }
    else  {
      //term selected - so write out it's definition
      var definition = displayTypes[displayType].glossary.getDefinition(glossaryTerm);
      var html = eval(displayTypes[displayType].getUserInterface("glossaryTerm").topHtml) + definition + eval(displayTypes[displayType].getUserInterface("glossaryTerm").bottomHtml);
      glossaryTerm = "";
    }
    this.writeHtml(cwsObj.childWindows["glossary"].win,html);
  }
  this.writeRefs = function(refs)  {
    var html = eval(displayTypes[displayType].getUserInterface("refs").topHtml);
    if (refs != "") {
      html += refs;
    }
    html += eval(displayTypes[displayType].getUserInterface("refs").bottomHtml);
    this.writeHtml(cwsObj.childWindows["refs"].win,html);
  }
  this.writeHtml = function(win,html)  {
    if (win != null)  {
      if (!win.closed)  {
        win.document.write(html);
      }
    }
  }
  this.gotoGlossaryTerm = function(term)  {
    glossaryTerm = term;
    this.openWindow("glossary");
  }

  this.handlePageLoad = function()  {
    if (this.captionsEnabled) {
      if (this.useFlashCaptions)    {
        if (this.useFlashMediaShell)  {
          this.updateFlashCaptions();
        }
        var flashCaptionsObj = eval("this.contentWinObj.win." + CwsUtil.getObjStyle("flashCaptions"));
        flashCaptionsObj.visibility = "visible";
      }
      else  {
        this.openWindow("captions");
      }
    }
    var playPauseImg = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
    if (playPauseImg != null) {
      if (page.enablePlayPause) {
        if (!playPauseImg.getEnabled()) {
          this.enableImage("PLAY_PAUSE",true);
        }
      }
      else  {
        if (playPauseImg.getEnabled()) {
          this.enableImage("PLAY_PAUSE",false);
        }
      }
      if (playPauseImg.on)  {
        playPauseImg.on = false;
        this.changeImage(this.contentWinObj.win,playPauseImg,playPauseImg.getCurrentImg().src);
      }
    }
    var audioImage = displayTypes[displayType].userInterface.getImage("AUDIO");
    if (audioImage != null)  {
      if (audioImage.hasOn)  {
        audioImage.on = !cwsObj.audioEnabled;
        this.changeImage(this.contentWinObj.win,audioImage,audioImage.getCurrentImg().src);
      }
    }

    //cache next flash movie
    nextPage = displayTypes[displayType].getBranchPage(page.branchPageNumber+1);
    if ((nextPage != null)) {
      if ((nextPage.pageType == FLASH_PAGE_TYPE) && (flashMediaCachePlayer != null) && (this.cacheFlashMedia)) {
        var movieUrl = this.flashMediaShell;
        if (!this.useFlashMediaShell) {
          var filename = "";
          if (page.singleContentSwf == null)  {
            fileName = this.singleContentSwf;
          }
          else  {
            fileName = page.singleContentSwf;
          }
          if (fileName == "") {
            fileName = page.pageId;
          }
          movieUrl = this.getMediaUrl(fileName,FLASH_PAGE_TYPE);
        }
        flashMediaCachePlayer.loadMovie(movieUrl);
        flashMediaCachePlayer.stop();
      }
    }

    if (this.assessment != null)  {
      if (page.question != null)  {
        if (this.assessment.getNextDisabled())  {
          this.enableNext(false);
        }
        if (page.pageType == HTML_PAGE_TYPE) {
          var answerLetters = new Array("A","B","C","D","E","F");
          var answers = page.question.answers;
          var formObj = this.contentWinObj.win.document.questForm;
          for (i=0;i<answers.length;i++)  {
            var ansFormObj = eval("formObj." + answerLetters[i]);
            ansFormObj.checked = answers[i].selected;
          }
        }
      }
    }
    if (!page.enableNext) {
      this.enableNext(false);
    }
    if (!page.enablePrevious) {
      this.enablePrevious(false);
    }
    if (page.flashNext) {
      this.flashNext(true);
    }
    if (cwsObj.lcmsReviewMode)  {
      var url = cwsObj.lcmsReviewPath + cwsObj.lcmsReviewPage + "&pageNumber=" + parseInt(page.pageNumber) + "&displayTypeIndex=" + displayType;
      this.openLcmsReview(url);
    }
    if (this.useVolumeControl) {
      var contentWin = this.contentWinObj.win;
      var mediaPlayer = null;
      var currentVolume = 0;
      if (wmAudioPlayer != null)  {
        if (wmAudioPlayer.enabled)  {
          if (cwsObj.masterVolume == null)  {
            cwsObj.masterVolume = wmAudioPlayer.getVolume();
          }
          currentVolume = cwsObj.masterVolume;
          mediaPlayer = wmAudioPlayer;
        }
      }
      else  {
        if (cwsObj.masterVolume != null)  {
          currentVolume = cwsObj.masterVolume;
        }
      }
      var sliderSpanObj =  displayTypes[displayType].userInterface.getHtmlObj("volumeSelectorSpan");
      this.volumeControl = new WmpVolumeControl(cwsObj,this.contentWinObj.win,sliderSpanObj,mediaPlayer);
      this.volumeControl.initialize(currentVolume);
    }
    flashListener = null;
    if (page.hasAudio)  {
      var pageAudioClip = page.getPageAudioClip();
      if (wmAudioPlayer != null)  {
        var audioLoadingSpan = this.contentWinObj.win.document.getElementById("kloPleaseWaitAudioLoading");
        if (audioLoadingSpan != null)  {
          audioLoadingSpan.style.display = "inline";
        }
        wmAudioPlayer.audioClip = pageAudioClip;
        var url = "";
        if (wmAudioPlayer.audioClip.audioType == WMA_AUDIO_TYPE)  {
          url = this.getMediaUrl(wmAudioPlayer.audioClip.fileName,wmAudioPlayer.audioClip.audioType);
        }
        if (wmAudioPlayer.audioClip.audioType == WMA_STREAM_AUDIO_TYPE)  {
          url = this.getAudioStreamUrl(wmAudioPlayer.audioClip);
        }
        if (url != "")  {
          wmAudioPlayer.playUrl(url);
        }
      }
      if (flashAudioPlayer != null) {
        flashAudioPlayer.audioClip = pageAudioClip;
        if (this.useFlashAudioTimer)  {
          if (flashListener) {
            flashListener.setFlashObject(flashAudioPlayer.obj);
          }
          else {
            flashListener = new FlashListener(this,flashAudioPlayer.obj);
          }
          flashListener.start();
        }
      }
    }
    if ((page.getPageType() == FLASH_PAGE_TYPE) && (flashMediaPlayer != null)) {
      if (isValidFunction(flashMediaPlayer.obj.focus)) {
        flashMediaPlayer.obj.focus();
      }
      if (!this.useFlashMediaShell)  {
        if (!this.includeAllParamsInFlashVars)  {
          setFlashVariables();
        }
        flashMediaPlayer.obj.SetVariable("varsLoaded", "true");
      }
      if ((!this.flashMediaAutoStart) && (wmAudioPlayer == null)) {
        flashMediaPlayer.play();
      }
      if (displayTypes[displayType].userInterface.getImage("PLAY_PAUSE") != null) {
        if (flashMediaListener) {
          flashMediaListener.setFlashObject(flashMediaPlayer.obj);
        }
        else {
          flashMediaListener = new FlashListener(this,flashMediaPlayer.obj);
        }
        flashMediaListener.start();
      }
    }
    if (isValidFunction(cwsWin.handleInterfaceLoad))  {
      cwsWin.handleInterfaceLoad(this);
    }
    if (this.pageLoadedMethod != "") {
      eval(this.pageLoadedMethod + "()");
    }
    if ((isValidFunction(this.contentWinObj.win.handleContentStart)) && (flashListener == null)){
      this.contentWinObj.win.handleContentStart();
    }
    cwsObj.session.saveUserData(cwsObj.user);
    this.pageLoaded = true;
  }
  this.autoNext = function(userInitiated)  {
    if ((!cwsObj.lcmsReview) || (userInitiated)) {
      this.enableNext(true);
      this.goNext();
    }
  }
  this.autoPrevious = function(userInitiated)  {
    if ((!cwsObj.lcmsReview) || (userInitiated)) {
      this.enablePrevious(true);
      this.goPrevious();
    }
  }
  this.goNext = function()  {
	this.enablePractice(false);
    if ((!this.useNavDelay) || ((this.useNavDelay) && (!navDelayTimerIntervalId)))  {
      navDelayTimerIntervalId = setInterval(terminateNavDelay, this.navDelayTimerInterval);
      var image = displayTypes[displayType].userInterface.getImage("NEXT");
      if (image.getEnabled()) {
        nextPage = displayTypes[displayType].getBranchPage(page.branchPageNumber+1);
        if (nextPage != null) {
          this.gotoPage(nextPage);
          if (this.captionsEnabled) this.childWindows['captions'].focus();
        }
        else {
          if (page.branchName != "main")  {
            this.gotoPage(displayTypes[displayType].branchMenuPage);
          }
          else  {
            if ((this.kloOnNext) && (this.kloNum < (cwsObj.kloIds.length - 1))) {
              this.gotoKlo(this.kloNum + 1);
            }
            else  {
              if (this.exitOnNext)  {
                this.gotoMenu();
              }
            }
          }
        }
      }
    }
  }
  this.goPrevious = function()  {
	this.enablePractice(false);
    if ((!this.useNavDelay) || ((this.useNavDelay) && (!navDelayTimerIntervalId)))  {
      navDelayTimerIntervalId = setInterval(terminateNavDelay, this.navDelayTimerInterval);
      var image = displayTypes[displayType].userInterface.getImage("PREVIOUS");
      if (image.getEnabled()) {
        prevPage = displayTypes[displayType].getBranchPage(page.branchPageNumber-1);
        if (prevPage != null) {
          this.gotoPage(prevPage);
        }
      }
    }
  }
  this.gotoMenu = function()  {
    if (cwsObj.menuKloNum > -1) {
      cwsObj.launchKlo(cwsObj.menuKloNum);
    }
    else  {
      this.exitKlo();
    }
  }
  this.gotoBranchMenu = function()  {
    var enabled = true;
    if (displayTypes[displayType].userInterface.getImage("BRANCH_MENU") != null)  {
      enabled = displayTypes[displayType].userInterface.getImage("BRANCH_MENU").getEnabled();
    }
    if ((displayTypes[displayType].branchMenuPage != null) && (enabled)) {
      this.gotoPage(displayTypes[displayType].branchMenuPage);
    }
  }
  this.gotoBranch = function(branchName)  {
    if (displayTypes[displayType].currentBranch != branchName)  {
      var branchPages = displayTypes[displayType].getBranchPages(branchName);
      if (branchPages != null)  {
        this.gotoPage(branchPages[0]);
      }
      else  {
        this.contentWinObj.win.alert("That link is not valid. Please select a different link.");
      }
    }
  }
  this.exitKlo = function() {
    if (cwsObj.runInNewWindow)  {
      var win = this.contentWinObj.win;
      win.close();
    }
    else  {
      parent.window.close();
    }
  }
  this.confirmExitKlo = function()  {
    if (this.confirmExitMethod == "") {
      confirmation = this.contentWinObj.win.confirm("Click 'OK' to exit the course. Click 'Cancel' to return."," ");
      if (confirmation) {
        this.exitKlo();
      }
    }
    else  {
      eval(this.confirmExitMethod + "()");
    }
  }
  this.pause = function() {
    var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
    var imgOnPause = true;
    if (imgOnPause) {
      if (this.useFlashMediaShell)  {
        flashMediaPlayer.obj.TGotoLabel("_root","pauseMovie");
      }
      else  {
        flashMediaPlayer.stop();
      }
      img.on = true;
      var currentImg = img.getCurrentImg();
      if (img.hasOver)  {
        currentImg = img.getOverImg();
      }
      this.changeImage(this.contentWinObj.win,img,currentImg.src);
    }
  }
  this.playPause = function() {
    var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
    if (img != null) {
      if (img.getEnabled()) {
        var imgOnPause = !img.on;
        if (wmAudioPlayer != null) {
          if (imgOnPause) {
            wmAudioPlayer.pause();
            //if ((flashMediaPlayer != null) && (flashMediaListener != null)) {
              //flashMediaPlayer.stop();
            //}
            img.on = true;
            this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
          }
          else {
            var playFlashMedia = false;
            var playWmMedia = false;
            if ((flashMediaPlayer != null) && (flashMediaListener != null)) {
              if ((flashMediaListener.isDone()) && (wmAudioPlayer.isDone())) {
                playFlashMedia = true;
              }
              if (((!flashMediaListener.isDone()) && (!wmAudioPlayer.isDone())) || (flashMediaListener.isDone())) {
                playWmMedia = true;
              }
            }
            else  {
              playWmMedia = true;
            }
            if (playFlashMedia) {
              if (this.useFlashMediaShell)  {
                flashMediaPlayer.obj.TGotoLabel("_root","unpauseMovie");
              }
              else  {
                flashMediaPlayer.play();
              }
            }
            if (playWmMedia)  {
              if (wmAudioPlayer.isDone()) {
                var pageAudioClip = page.getPageAudioClip();
                var audioLoadingSpan = this.contentWinObj.win.document.getElementById("kloPleaseWaitAudioLoading");
                if (audioLoadingSpan != null)  {
                  audioLoadingSpan.style.display = "inline";
                }
                wmAudioPlayer.audioClip = pageAudioClip;
                var url = "";
                if (wmAudioPlayer.audioClip.audioType == WMA_AUDIO_TYPE)  {
                  url = this.getMediaUrl(wmAudioPlayer.audioClip.fileName,wmAudioPlayer.audioClip.audioType);
                }
                if (wmAudioPlayer.audioClip.audioType == WMA_STREAM_AUDIO_TYPE)  {
                  url = this.getAudioStreamUrl(wmAudioPlayer.audioClip);
                }
                if (url != "")  {
                  wmAudioPlayer.playUrl(url);
                }
              }
              else  {
                wmAudioPlayer.play();
              }
            }
            img.on = false;
            this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
            this.flashNext(false);
          }
        }
        else  {
          if ((flashAudioPlayer != null) && (cwsObj.useFlashAudioTimer))  {
            if (imgOnPause) {
              flashAudioPlayer.stop();
              img.on = true;
              this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
            }
            else {
              flashAudioPlayer.play();
              if (flashListener) {
                flashListener.setFlashObject(flashAudioPlayer.obj);
              }
              else {
                flashListener = new FlashListener(this,flashAudioPlayer.obj);
              }
              flashListener.start();
              img.on = false;
              this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
              this.flashNext(false);
            }
          }
          else  {
            if ((flashMediaPlayer != null) && (flashMediaListener != null)) {
              if (imgOnPause) {
                if (this.useFlashMediaShell)  {
                  flashMediaPlayer.obj.TGotoLabel("_root","pauseMovie");
                }
                else  {
                  flashMediaPlayer.stop();
                }
                img.on = true;
                var currentImg = img.getCurrentImg();
                if (img.hasOver)  {
                  currentImg = img.getOverImg();
                }
                this.changeImage(this.contentWinObj.win,img,currentImg.src);
              }
              else {
                if (this.useFlashMediaShell)  {
                  flashMediaPlayer.obj.TGotoLabel("_root","unpauseMovie");
                }
                else  {
                  flashMediaPlayer.play();
                }
                if (flashMediaListener) {
                  flashMediaListener.setFlashObject(flashMediaPlayer.obj);
                }
                else {
                  flashMediaListener = new FlashListener(this,flashMediaPlayer.obj);
                }
                flashMediaListener.start();
                img.on = false;
                var currentImg = img.getCurrentImg();
                if (img.hasOver)  {
                  currentImg = img.getOverImg();
                }
                this.changeImage(this.contentWinObj.win,img,currentImg.src);
                this.flashNext(false);
              }
            }
          }
        }
      }
    }
  }
  this.toggleGlossary = function()  {
    this.toggleWindow("glossary");
  }
  this.toggleRefs = function()  {
    this.toggleWindow("refs");
  }
  this.toggleHelp = function()  {
    this.toggleWindow("help");
  }
  this.toggleMap = function()  {
    this.toggleWindow("map");
  }
  this.showCaptions = function(b) {
    if (b != this.captionsEnabled)  {
      this.toggleCaptions();
    }
  }
  this.toggleCaptions = function()  {
    this.captionsEnabled = !this.captionsEnabled;
    if (this.useFlashCaptions)  {
      var flashCaptionsObj = eval("this.contentWinObj.win." + CwsUtil.getObjStyle("flashCaptions"));
      if (this.captionsEnabled)  {
        if (this.useFlashMediaShell)  {
          this.updateFlashCaptions();
        }
        flashCaptionsObj.visibility = "visible";
      }
      else  {
        flashCaptionsObj.visibility = "hidden";
      }
    }
    else  {
      if ((this.monitorCaptionsWindow) && (!captionsTimerIntervalId) && (!this.captionsEnabled)) {
        captionsTimerIntervalId = setInterval(checkCaptionsWindow, 500);
      }
      //if ((cwsObj.childWindows["captions"].win == null) || (cwsObj.childWindows["captions"].win.closed))  {
      //  this.captionsEnabled = true;
      //}
      if (this.captionsEnabled) {
        this.openWindow("captions");
      }
      else  {
        cwsObj.childWindows["captions"].closeWin();
      }
    }
    var captionsImage = displayTypes[displayType].userInterface.getImage("CAPTIONS");
    if (captionsImage != null)  {
      if (captionsImage.hasOn)  {
        captionsImage.on = this.captionsEnabled;
        this.changeImage(this.contentWinObj.win,captionsImage,captionsImage.getOverImg().src);
      }
    }
  }
  this.toggleWindow = function(w)  {
    if ((cwsObj.childWindows[w].win != null) && (!cwsObj.childWindows[w].win.closed))  {
      cwsObj.childWindows[w].opened = false;
      cwsObj.childWindows[w].closeWin();
    }
    else  {
      this.openWindow(w);
    }
  }
  this.openWindow = function(w)  {
    var openWin = true;
    var winImage = displayTypes[displayType].userInterface.getImage(w.toUpperCase());
    if (winImage != null) {
      openWin = winImage.getEnabled();
    }
    if (openWin)  {
      cwsObj.childWindows[w].opened = true;
      cwsObj.childWindows[w].setWidth(displayTypes[displayType].getUserInterface(w).width);
      cwsObj.childWindows[w].setHeight(displayTypes[displayType].getUserInterface(w).height);
      cwsObj.childWindows[w].gotoUrl(displayTypes[displayType].getUserInterfacePath(w));
      cwsObj.childWindows[w].win.focus();
    }
  }
  this.openLcmsReview = function(url) {
    cwsObj.childWindows["lcmsReview"].gotoUrl(url);
    //cwsObj.childWindows["lcmsReview"].win.focus();
    this.contentWinObj.win.focus();
  }
  this.showCertificate = function() {
    if (cwsObj.getCourseCompleted())  {
      this.openWindow("certificate");
    }
  }
  this.replayPage = function()  {
	this.enablePractice(false);
    var image = displayTypes[displayType].userInterface.getImage("NEXT");
    if (image != null)  {
      image.flash = false;
    }
    image = null;
    image = displayTypes[displayType].userInterface.getImage("AUDIO");
    if (image) image.on = true;
    this.captionsEnabled = false;
    cwsObj.captionsEnabled = false;
    this.audioEnabled = true;
    cwsObj.audioEnabled = true;
    this.contentWinObj.win.location.reload();
  }
  this.openPopup = function(url,top,left,width,height,scrollbars,resize,menubar)  {
    cwsObj.childWindows["popup"].closeWin();
    cwsObj.childWindows["popup"] = new BrowserWindow();
    cwsObj.childWindows["popup"].name = "POPUP_WINDOW";

    if ((top != "") && (top != null))  {
      cwsObj.childWindows["popup"].setTop(top);
    }
    if ((left != "") && (left != null))  {
      cwsObj.childWindows["popup"].setLeft(left);
    }
    if ((width != "") && (width != null))  {
      cwsObj.childWindows["popup"].setWidth(width);
    }
    if ((height != "") && (height != null))  {
      cwsObj.childWindows["popup"].setHeight(height);
    }
    if ((scrollbars != "") && (scrollbars != null)) {
      cwsObj.childWindows["popup"].setScroll(scrollbars);
    }
    if ((resize != "") && (resize != null))  {
      cwsObj.childWindows["popup"].setResizable(resize);
    }
    if ((menubar != "") && (menubar != null))  {
      cwsObj.childWindows["popup"].setMenuBar(menubar);
    }
    if ((url != "") && (url != null)) {
      cwsObj.childWindows["popup"].gotoUrl(url);
      cwsObj.childWindows["popup"].win.focus();
    }
  }
  this.flashNext = function(bool) {
    var image = displayTypes[displayType].userInterface.getImage("NEXT");
    if (image != null)  {
      if (image.flash != bool)  {
        image.flash = bool;
        if (image.getEnabled()) {
          this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src.replace(/jpg$/, 'gif'));
        }
      }
    }
  }
  this.forceFlashNext = function(bool) {
    this.enableImage("NEXT",true);
    this.flashNext(bool);
  }
  this.enablePractice = function(bool) {
    this.enableImage("PRACTICE", bool);
    var image = displayTypes[displayType].userInterface.getImage('PRACTICE');
    image.setAltText(bool ? 'Practice Task' : '');
  }
  this.enableNext = function(bool) {
    if (((bool) && (cwsObj.browse)) || (!cwsObj.browse)) {
      this.enableImage("NEXT",bool);
    }
  }
  this.enablePrevious = function(bool) {
    if (((bool) && (cwsObj.browse)) || (!cwsObj.browse)) {
      this.enableImage("PREVIOUS",bool);
    }
  }
  this.enablePlayPause = function(bool) {
    this.enableImage("PLAY_PAUSE",bool);
  }
  this.enableImage = function(imgName,bool) {
    var image = displayTypes[displayType].userInterface.getImage(imgName);
    if (image != null)  {
      if (image.hasDisabled)  {
        image.setEnabled(bool);
        this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src);
      }
    }
  }
  this.mouseOv = function(name) {
    var image = displayTypes[displayType].userInterface.getImage(name);
    this.changeImage(this.contentWinObj.win,image,image.getOverImg().src);
  }
  this.mouseOut = function(name)  {
    var image = displayTypes[displayType].userInterface.getImage(name);
    this.changeImage(this.contentWinObj.win,image,image.getCurrentImg().src);
  }
  this.changeImage = function(win,image,imgSrc) {
    if ((win != null) && (image != null))  {
      if ((!win.closed) && (image.getFileName() != "") && (typeof win.document[image.getName()] != "undefined")){
        //eval("win.document." + image.getName() + ".src = \"" + imgSrc + "\";");
        win.document[image.getName()].src = imgSrc;
      }
    }
  }
  this.getCurrentDisplayType = function() {
    return displayTypes[displayType];
  }
  this.getCurrentDisplayTypeIndex = function() {
    return displayType;
  }
  this.getCurrentPage = function()  {
    return page;
  }
  this.getCurrentPageNumber = function()  {
    if (page != null) {
      return page.pageNumber;
    }
    return 0;
  }
  this.getDisplayType = function(index)  {
    return displayTypes[index];
  }
  this.getDisplayTypes = function() {
    return displayTypes;
  }
  this.getLang = function() {
    return displayTypes[displayType].getLang();
  }
  this.getImage = function(name)  {
    return displayTypes[displayType].getImage(name);
  }
  this.setKloLocation = function(location)  {
    if (!isNaN(location)) {
      cwsObj.setKloLocation(displayType,this.kloNum,parseInt(location,10));
    }
  }
  this.setKloStatus = function(status)  {
    cwsObj.setKloStatus(this.kloNum,status);
  }
  this.setCourseSuspendData = function(data)  {
    if ((data == null) || (data == "undefined")) {
      data = "";
      if ((page.getPageType() == FLASH_PAGE_TYPE) && (flashMediaPlayer != null)) {
        if (isValidFunction(flashMediaPlayer.obj))  {
          data = flashMediaPlayer.obj.GetVariable("courseSuspendData");
        }
      }
    }
    cwsObj.setCourseSuspendData(data);
  }
  this.setKloSuspendData = function(data)  {
    if ((data == null) || (data == "undefined")) {
      data = "";
      if ((page.getPageType() == FLASH_PAGE_TYPE) && (flashMediaPlayer != null)) {
        if (isValidFunction(flashMediaPlayer.obj))  {
          data = flashMediaPlayer.obj.GetVariable("kloSuspendData");
        }
      }
    }
    cwsObj.setKloSuspendData(displayType,this.kloNum,data);
  }
  this.setSubKloStatus = function(subKloNum,status) {
    if (!isNaN(subKloNum)) {
      cwsObj.setSubKloStatus(displayType,this.kloNum,subKloNum,status);
    }
  }
  this.setSubKloLocation = function(subKloNum,location) {
    if ((!isNaN(subKloNum)) && (!isNaN(location))) {
      cwsObj.setSubKloLocation(displayType,this.kloNum,subKloNum,location);
    }
  }
  this.updateSubKloStatus = function(statusList)  {
    var statusArray = statusList.split(",");
    for (i=0;i<statusArray.length;i++)  {
      if (i < cwsObj.maxSubKloNum)  {
        cwsObj.user.subKloStatus[displayType][this.kloNum][i] = statusArray[i];
      }
    }
  }
  this.setCourseParam = function(key,value) {
    cwsObj.user.courseParams[displayType][key] = value;
    if (!CwsUtil.itemInArray(key,cwsObj.user.courseParamKeys[displayType])) {
      cwsObj.user.courseParamKeys[displayType][cwsObj.user.courseParamKeys[displayType].length] = key;
    }
  }
  this.getCourseParam = function(key) {
    if (CwsUtil.itemInArray(key,cwsObj.user.courseParamKeys[displayType])) {
      return cwsObj.user.courseParams[displayType][key];
    }
    return "";
  }
  this.updateCourseParams = function(keyList) {
    if ((page.getPageType() == FLASH_PAGE_TYPE) && (flashMediaPlayer != null)) {
      if (isValidFunction(flashMediaPlayer.obj))  {
        var keys = keyList.split("|");
        for (var i=0;i<keys.length;i++) {
          var key = keys[i];
          var value = flashMediaPlayer.obj.GetVariable(key);
          this.setCourseParam(key,value);
        }
      }
    }
  }
  this.getCourseParams = function() {
    return cwsObj.user.courseParams[displayType];
  }
  this.getCourseParamKeys = function()  {
    return cwsObj.user.courseParamKeys[displayType];
  }
  this.setCourseScore = function(score) {
    if (!isNaN(score))  {
      cwsObj.setCourseScore(score);
    }
  }
  this.getBookmarkCode = function() {
    return cwsObj.getBookmarkCode(displayType);
  }
  this.submitBookmarkCode = function(inputBox)  {
    var bookmarkCode = inputBox.value;
    cwsObj.setBookmarkCode(bookmarkCode,displayType,this.kloNum);
  }
  this.getMediaUrl = function(fileName,type) {
    var url = "";
    var singleContentSwf = this.singleContentSwf;
    if (page.singleContentSwf != null)  {
      singleContentSwf = page.singleContentSwf;
    }
    var ext = "swf";
    if (type != FLASH_PAGE_TYPE)  {
      ext = type.ext;
    }
    if ((singleContentSwf != "") && (type == FLASH_PAGE_TYPE))  {
      url = cwsObj.rootPath + "data/" + cwsObj.lang + "/" + fileName + "." + ext;
    }
    else  {
      url = cwsObj.rootPath + this.kloId + "/media/" + cwsObj.lang + "/" + fileName + "." + ext;
    }
    return url;
  }
  this.getAudioStreamUrl = function(audioClip) {
    var url = "";
    if ((this.audioServers.length > this.currentAudioServer) && (audioClip != null)) {
      if ((audioClip.fileName != "") && (audioClip.fileName != null)) {
        url = this.audioServers[this.currentAudioServer] + audioClip.fileName + "." + audioClip.audioType.ext;
      }
    }
    return url;
  }
  this.playAudioClip = function(index)  {
    var audioClip = page.getAudioClip(index);
    var url = "";
    if (audioClip != null)  {
      var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
      if (img != null) {
        if (img.on)  {
          img.on = false;
        }
        this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
      }
      if (audioClip.audioType == FLASH_AUDIO_TYPE)  {
        url = this.getMediaUrl(audioClip.fileName,audioClip.audioType);
        flashAudioPlayer.playUrl(url);
      }
      if (audioClip.audioType == WMA_AUDIO_TYPE)  {
        url = this.getMediaUrl(audioClip.fileName,audioClip.audioType);
        wmAudioPlayer.audioClip = audioClip;
        wmAudioPlayer.playUrl(url);
      }
      if (audioClip.audioType == WMA_STREAM_AUDIO_TYPE)  {
        url = this.getAudioStreamUrl(audioClip);
        wmAudioPlayer.audioClip = audioClip;
        wmAudioPlayer.playUrl(url);
      }
    }
  }
  this.handleWmAudioScriptEvent = function(type,param)  {
    if (flashMediaPlayer != null) {
      if (type.toLowerCase() == "playflash")  {
        flashMediaPlayer.obj.TGotoLabel("_root",param);
        flashMediaPlayer.obj.Play();
      }
    }
    //window.status = "Media Player Event Command - Type: " + type + "  Param: " + param;
  }
  this.handleWmAudioPlayStateChange = function(newState)  {
    if (wmAudioPlayer != null) {
      if (newState == wmAudioPlayer.getPlayStateValue("stopped")) {
        if (wmAudioPlayer.isOpen()) {
          //ended
          if ((this.autoFlashNext) && (page.flashNext)) {
            this.flashNext(true);
          }
          var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
          if (img != null)  {
            img.on = true;
            this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
          }
          if (isValidFunction(this.contentWinObj.win.handleAudioDone)) {
            this.contentWinObj.win.handleAudioDone();
          }
          //window.status = "Media Player Closed";
        }
      }
      else  {
        //window.status = "Media Player Started";
      }
    }
  }
  this.handleWmAudioOpenStateChange = function(newState)  {
    if ((wmAudioPlayer != null) && (typeof wmAudioPlayer != "undefine"))  {
      if (wmAudioPlayer.isOpenState(newState))  {
        //media open
        var audioLoadingSpan = this.contentWinObj.win.document.getElementById("kloPleaseWaitAudioLoading");
        if (audioLoadingSpan != null)  {
          audioLoadingSpan.style.display = "none";
        }
        if ((page.getPageType() == FLASH_PAGE_TYPE) && (flashMediaPlayer != null) && (!this.flashMediaAutoStart)) {
          if (flashMediaPlayer.getCurrentFrame() == 0)  {
            flashMediaPlayer.obj.Play();
          }
        }
      }
    }
  }
  this.handleWmAudioError = function()  {
    if (wmAudioPlayer != null) {
      var obj = wmAudioPlayer.obj;
      var errorCode = wmAudioPlayer.getErrorCode();
      var errorDesc = wmAudioPlayer.getErrorDescription();
      wmAudioPlayer.clearErrorQueue();
      window.status = "Media Player Error: " + errorDesc;
      if (wmAudioPlayer.audioClip.audioType == WMA_STREAM_AUDIO_TYPE)  {
        this.currentAudioServer++;
        if (this.currentAudioServer < this.audioServers.length) {
          url = this.getAudioStreamUrl(wmAudioPlayer.audioClip);
          //wmAudioPlayer.playUrl(url);
          setTimeout("cwsObj.getCurrentKloObj().playAudioClipUrl('" + url + "')",500);
        }
        else  {
          alert("An error has occurred with the Windows Media Player.\rError Code: " + errorCode + "\rError Description: " + errorDesc);
        }
      }
    }
  }
  this.handleFsCommand = function(cmd, param) {
    if (isNaN(param)) {
      if ((param != "true") && (param != "false"))  {
        param = "\"" + param + "\"";
      }
    }
    eval("this.contentWinObj.win." + cmd + "(" + param + ");");
  }
  this.handleFlashShellLoaded = function()  {
    var fileName = this.getMediaUrl(flashAudioPlayer.audioClip.fileName,FLASH_AUDIO_TYPE);
    flashAudioPlayer.obj.SetVariable("command", "play");
    flashAudioPlayer.obj.SetVariable("arg1", fileName);
    flashAudioPlayer.obj.SetVariable("arg2", 200);
    flashAudioPlayer.obj.Play();
  }
  this.handleFlashShellLoadStart = function() {
    //alert("loadStart");
  }
  this.handleFlashShellLoadInit = function() {
    //alert("loadInit");
  }
  this.handleFlashShellLoadComplete = function() {
    //alert("loadComplete");
  }
  this.handleFlashShellPlaying = function() {
    //window.status = "Audio Playing.";
    if (isValidFunction(this.contentWinObj.win.handleContentStart)) {
      this.contentWinObj.win.handleContentStart();
    }
  }
  this.handleFlashShellFrame = function(frame) {
    //window.status = "Audio Frame: " + frame;
    if (isValidFunction(this.contentWinObj.win.handleAudioFrame)) {
      this.contentWinObj.win.handleAudioFrame(frame);
    }
  }
  this.handleFlashShellDone = function() {
    //window.status = "Audio Done.";
    if (!this.useFlashMediaShell) {
      if (((wmAudioPlayer != null) && (wmAudioPlayer.isDone())) || (wmAudioPlayer == null)) {
        var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
        if (img != null)  {
          img.on = true;
          this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
        }
      }
      if (isValidFunction(this.contentWinObj.win.handleAudioDone)) {
        this.contentWinObj.win.handleAudioDone();
      }
    }
  }
  this.handleManualFlashShellDone = function() {
    //window.status = "Audio Done.";
    var img = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
    if (img != null)  {
      img.on = true;
      this.changeImage(this.contentWinObj.win,img,img.getCurrentImg().src);
    }
    if (isValidFunction(this.contentWinObj.win.handleAudioDone)) {
      this.contentWinObj.win.handleAudioDone();
    }
  }
  this.handleFlashMediaShellReady = function()  {
    if (this.pageLoaded)  {
      initiateFlashMediaShell();
    }
  }
  this.enableKeyTrap = function(b) {
    if (b)  {
      keyTrap = new cwsWin.KeyTrap(flashMediaPlayer.obj,this.contentWinObj.win,this);
      this.contentWinObj.win.document.onkeydown = keyTrap.trapKey;
      keyTrap.start();
    }
    else  {
      keyTrap.stop();
      keyTrap = null;
    }
  }
  this.playAudioClipUrl = function(url) {
    if ((wmAudioPlayer != null) && (url != "")) {
      wmAudioPlayer.playUrl(url);
    }
  }
  this.replayPageAudioClip = function() {
    if (wmAudioPlayer != null) {
      var url = "";
      if (wmAudioPlayer.audioClip.audioType == WMA_STREAM_AUDIO_TYPE)  {
        url = pThis.getAudioStreamUrl(wmAudioPlayer.audioClip);
      }
      if (wmAudioPlayer.audioClip.audioType == WMA_AUDIO_TYPE)  {
        url = pThis.getMediaUrl(audioClip.fileName,audioClip.ext);
      }
      if (url != "")  {
        wmAudioPlayer.playUrl(url);
      }
    }
  }
  this.enableFlashMediaPlayerMenu = function(b) {
    this.flashMediaPlayerMenu = b;
  }
  this.toggleAudio = function() {
    var audioImage = displayTypes[displayType].userInterface.getImage("AUDIO");
    if (audioImage != null)  {
      if (audioImage.hasOn)  {
        audioImage.on = cwsObj.audioEnabled;
        var changeImage = audioImage.getCurrentImg();
        if (audioImage.hasOver) {
          changeImage = audioImage.getOverImg();
        }
        this.changeImage(this.contentWinObj.win,audioImage,changeImage.src);
      }
    }
    this.enableAudio(!cwsObj.audioEnabled);
  }
  this.enableAudio = function(b)  {
    /* - old code that doesn't work too well for our purposes
    if (!b) {
      if (wmAudioPlayer != null)  {
        wmAudioPlayer.stop();
      }
      if (flashAudioPlayer != null)  {
        flashAudioPlayer.stop();
      }
    }
    else  {
      this.replayPage();
    }
    */
    if (!flashMediaPlayer || flashMediaPlayer.getPercentLoaded() < 100 || flashMediaPlayer.getRootFrame() <= 0) {
		setTimeout('window.cwsObj.getCurrentKloObj().enableAudio(' + b + ');', 100);
    } else {
		flashMediaPlayer.obj.toggleFlashAudio(b);
		cwsObj.audioEnabled = b;
	}
  }
  this.resetPlayPause = function()  {
    var playPauseImg = displayTypes[displayType].userInterface.getImage("PLAY_PAUSE");
    if (playPauseImg != null) {
      if (!playPauseImg.getEnabled()) {
        this.enableImage("PLAY_PAUSE",true);
      }
      if (playPauseImg.on)  {
        playPauseImg.on = false;
        this.changeImage(this.contentWinObj.win,playPauseImg,playPauseImg.getCurrentImg().src);
      }
    }
  }
  this.getFlashMediaPlayer = function() {
    return flashMediaPlayer;
  }

  this.updateFlashCaptions = function(captionText) {
    if ((this.useFlashMediaShell) && (this.useFlashCaptions))  {
      if ((captionText == null) && (kloCaptions != null))  {
        if (kloCaptions[displayType][page.pageNumber-1] != null)  {
          captionText = kloCaptions[displayType][page.pageNumber-1];
        }
      }
      var caption = "";
      if (captionText != null)  {
        caption = CwsUtil.replaceChars("\n","",captionText);
      }
      if (flashCaptionsPlayer != null)  {
        flashCaptionsPlayer.obj.SetVariable("captionHtml",caption);
        flashCaptionsPlayer.play();
      }
    }
  }

  function checkCaptionsWindow() {
    var winOpen = true;
    if ((cwsObj.childWindows["captions"].win == null) || (cwsObj.childWindows["captions"].win.closed))  {
      winOpen = false;
      cwsObj.childWindows["captions"].opened = false;
    }
    if (pThis.captionsEnabled != winOpen) {
      if ((captionsTimerIntervalId) && (pThis.captionsEnabled)) {
        captionsTimerIntervalId = clearInterval(captionsTimerIntervalId);
      }
      pThis.captionsEnabled = !pThis.captionsEnabled;
      if (pThis.captionsEnabled) {
        this.openWindow("captions");
      }
      else  {
        cwsObj.childWindows["captions"].closeWin();
      }
      var captionsImage = displayTypes[displayType].userInterface.getImage("CAPTIONS");
      if (captionsImage != null)  {
        if (captionsImage.hasOn)  {
          captionsImage.on = pThis.captionsEnabled;
          pThis.changeImage(pThis.contentWinObj.win,captionsImage,captionsImage.getCurrentImg().src);
        }
      }
    }
  }

  function terminateNavDelay()  {
    if (navDelayTimerIntervalId) {
      navDelayTimerIntervalId = clearInterval(navDelayTimerIntervalId);
    }
  }

  function getFlashMediaParamList() {
    var fsCommand = false;
    if (navigator.userAgent.indexOf("Windows") != -1) {
      if (window.ActiveXObject && (navigator.userAgent.indexOf("MSIE")!= -1) && (navigator.userAgent.indexOf("Windows") != -1)) {
        fsCommand = true;
      }
    }
    var paramList = "browse=" + cwsObj.browse + "&fsCommand=" + fsCommand + "&kloNum=" + pThis.kloNum + "&kloId=" + pThis.kloId + "&kloStatus=" + cwsObj.getKloStatus(pThis.kloNum) + "&kloMaxPages=" + displayTypes[displayType].getNumPages() + "&maxPages=" + displayTypes[displayType].getBranchNumPages()
+ "&kloLocation=" + cwsObj.getKloLocation(displayType,pThis.kloNum) + "&kloPageId=" + page.pageId + "&kloPageNum=" + page.pageNumber + "&rootPath=" + escape(cwsObj.rootPath) + "&lang=" + cwsObj.lang;
    if (pThis.includeAllParamsInFlashVars) {
      courseSuspendData = CwsUtil.convertStringToHex(cwsObj.getCourseSuspendData());
      kloSuspendData = CwsUtil.convertStringToHex(cwsObj.getKloSuspendData(displayType,pThis.kloNum));
      subKloStatusList = cwsObj.getSubKloStatusList(displayType,pThis.kloNum);
      subKloLocationList = cwsObj.getSubKloLocationList(displayType,pThis.kloNum);
      paramList += "&subKloStatusList=" + subKloStatusList + "&subKloLocationList=" + subKloLocationList + "&courseSuspendData=" + courseSuspendData + "&kloSuspendData=" + kloSuspendData;
      var courseParamKeys = pThis.getCourseParamKeys();
      for (q=0;q<courseParamKeys.length;q++)  {
        var courseParams = pThis.getCourseParams();
        paramList += "&" + courseParamKeys[q] + "=" + courseParams[courseParamKeys[q]];
      }
      paramList += "&varsLoaded=true";
    }
    else  {
      paramList += "&varsLoaded=false";
    }
    return paramList;
  }

  function loadCaptions() {
    //load klo captions if using flash captions
    try {
      var xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
      var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (typeof xmlHttp != "undefined")  {
      try {
        xmlHttp.open("GET",cwsObj.rootPath + this.kloId + "/captions/" + cwsObj.lang + "/captions.js", false);
        xmlHttp.setRequestHeader("Content-Type", "text/plain");
        xmlHttp.send('');
        if (xmlHttp.responseText != "") {
          eval(xmlHttp.responseText);
        }
        kloCaptions = captions;
      }
      catch (e) {
        //no captions file
        //alert("Error: Unable to Load the Captions File for this KLO");
      }
    }
  }

  function initiateFlashMediaShell() {
    if ((pThis.useFlashMediaShell) && (flashMediaPlayer != null)) {
      initializeFlashMediaShellVars();
      flashMediaPlayer.play();
    }
  }

  function initializeFlashMediaShellVars()  {
    if ((pThis.useFlashMediaShell) && (flashMediaPlayer != null)) {
      flashMediaPlayer.obj.SetVariable("varsLoaded", "false");
      flashMediaPlayer.obj.SetVariable("currentMovie",pThis.getMediaUrl(page.pageId,FLASH_PAGE_TYPE));
      flashMediaPlayer.obj.SetVariable("movieWidth",displayTypes[displayType].getUserInterface(pThis.mediaUserInterfaceName).width);
      flashMediaPlayer.obj.SetVariable("movieHeight",displayTypes[displayType].getUserInterface(pThis.mediaUserInterfaceName).height);
      flashMediaPlayer.obj.SetVariable("maxPages",displayTypes[displayType].getBranchNumPages());
      flashMediaPlayer.obj.SetVariable("kloPageId",page.pageId);
      flashMediaPlayer.obj.SetVariable("kloPageNum",page.pageNumber);

      var movieList = "";
      var pageIdList = "";
      var stopOnLoadMovieList = "";
      var pages = displayTypes[displayType].getPages();

      //need to get the start of the flash pages
      var firstFlashPageIndex = 0;
      for (var i=(page.pageNumber-1);i>-1;i--)  {
        if (pages[i].pageType != FLASH_PAGE_TYPE) {
          firstFlashPageIndex = (i+1);
          i = -1;
        }
      }

      for (var i=firstFlashPageIndex;i<pages.length;i++)  {
        if (pages[i].pageType == FLASH_PAGE_TYPE) {
          movieList += pThis.getMediaUrl(pages[i].pageId,FLASH_PAGE_TYPE) + ",";
          stopOnLoadMovieList += pages[i].stopFlashMovieOnLoad + ",";
          pageIdList += pages[i].pageId + ",";
        }
        else  {
          i = pages.length;
        }
      }
      flashMediaPlayer.obj.SetVariable("movieList",movieList);
      flashMediaPlayer.obj.SetVariable("stopOnLoadMovieList",stopOnLoadMovieList);
      flashMediaPlayer.obj.SetVariable("pageIdList",pageIdList);
      if (!pThis.includeAllParamsInFlashVars)  {
        setFlashVariables();
      }
      flashMediaPlayer.obj.SetVariable("varsLoaded", "true");
    }
  }
  function setFlashVariables()	{
    flashMediaPlayer.obj.SetVariable("courseScore", cwsObj.getCourseScore());
    flashMediaPlayer.obj.SetVariable("courseMasteryScore", cwsObj.user.courseMasteryScore);
    flashMediaPlayer.obj.SetVariable("subKloStatusList", cwsObj.getSubKloStatusList(displayType,pThis.kloNum));
    flashMediaPlayer.obj.SetVariable("subKloLocationList", cwsObj.getSubKloLocationList(displayType,pThis.kloNum));
    flashMediaPlayer.obj.SetVariable("courseSuspendData", cwsObj.getCourseSuspendData());
    flashMediaPlayer.obj.SetVariable("kloSuspendData", cwsObj.getKloSuspendData(displayType,pThis.kloNum));
    var courseParamKeys = pThis.getCourseParamKeys();
    for (q=0;q<courseParamKeys.length;q++)  {
      var courseParams = pThis.getCourseParams();
      flashMediaPlayer.obj.SetVariable(courseParamKeys[q], courseParams[courseParamKeys[q]]);
    }
    if ((page.question != null) && (pThis.assessment != null)) {
      flashMediaPlayer.obj.SetVariable("questionText", page.question.question);
      flashMediaPlayer.obj.SetVariable("questionType", page.question.questionType);
      flashMediaPlayer.obj.SetVariable("mustGetCorrect", page.question.mustGetCorrect);
      flashMediaPlayer.obj.SetVariable("answered", page.question.answered);
      flashMediaPlayer.obj.SetVariable("inAssessment", page.inAssessment);
      flashMediaPlayer.obj.SetVariable("lockAssessment", pThis.assessment.lockAssessment);
      flashMediaPlayer.obj.SetVariable("correct", page.question.answered);
      flashMediaPlayer.obj.SetVariable("showFeedback", pThis.assessment.showFeedback);
      flashMediaPlayer.obj.SetVariable("useDefaultFeedback", pThis.assessment.useDefaultFeedback);
      flashMediaPlayer.obj.SetVariable("correctFeedback", pThis.assessment.getCorrectFeedback(page.question));
      flashMediaPlayer.obj.SetVariable("incorrectFeedback", pThis.assessment.getIncorrectFeedback(page.question));
      flashMediaPlayer.obj.SetVariable("numAnswers", page.question.answers.length);
      for (i=0;i<page.question.answers.length;i++) {
        var answer = page.question.answers[i];
        flashMediaPlayer.obj.SetVariable("answerText_" + i, answer.answer);
        flashMediaPlayer.obj.SetVariable("answerFeedback_" + i, answer.feedback);
        flashMediaPlayer.obj.SetVariable("answerSelected_" + i, answer.selected);
        flashMediaPlayer.obj.SetVariable("answerCorrect_" + i, answer.correct);
      }
    }
  }
  this.getFlashMediaPlayerVolume = function() {
    return flashMediaPlayerVolume;
  }
  this.setFlashMediaPlayerVolume = function(vol) {
    flashMediaPlayerVolume = vol;
  }

}
