<!--
/* **********************************************************************************************************
Module Name  : au_requirements.js
Date Written : 12/21/2000
Company      : CRKInteractive
Copyright    : (c) 2000, 2001 CRKInteractive All Rights Reserved
Purpose      : To provide a set of functions that can check requirements for a CRKI produced training AU
Revisions    :
************************************************************************************************************/
/* **********************************************************************************************************
Constants
************************************************************************************************************/
var AuRequirementsApiVersion = 1.0

/* **********************************************************************************************************
Variables
************************************************************************************************************/

/* **********************************************************************************************************
Startup Code
************************************************************************************************************/

/* **********************************************************************************************************
Functions
************************************************************************************************************/
/* ----------------------------------------------------------------------------------------------------------
Routine Name : DisplayRequirementIssuesBLN
Date Written : 02/12/1999
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To display a popup window with any requirement issues found during the requirement check
Parameters   : none
Returns      : true or false
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function DisplayRequirementIssuesBLN()
{ //Open the popup window
  var objDisplayWindow = window.open("", "RequirementIssues", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=550,height=400,screenx=30,screeny=30,left=30,top=30");
  if(objDisplayWindow != null)
  { while(objDisplayWindow.document == null || ("" + objDisplayWindow.document) == "undefined") { var x = 1; }
    //Write out all the requirnement issues found during the requirement check
    with(objDisplayWindow.document)
    { var intI = 0;
      var intJ = 0;
      //Check to see if the screen resolution has passed the requirements
      var blnResolutionPassed = true;
      for(intI = 0; intI < mAuReqArray.length; intI++)
      { var objReq = mAuReqArray[intI];
        if(objReq.Type == "Screen Resolution")
        { blnResolutionPassed = blnResolutionPassed || objReq.Pass;
        }
      }
      //Check to see if a browser has passed the requirements
      var blnBrowserPassed = false;
      var blnBrowserChecked = false;
      for(intI = 0; intI < mAuReqArray.length; intI++)
      { var objReq = mAuReqArray[intI];
        if(objReq.Type == "Browser")
        { blnBrowserChecked = true;
          blnBrowserPassed = blnBrowserPassed || objReq.Pass;
        }
      }
      //Check to see if any plug-ins have failed the requirement checks
      var blnPlugInsPassed = true;
      for(intI = 0; intI < mAuReqArray.length; intI++)
      { var objReq = mAuReqArray[intI];
        if(objReq.Type == "PlugIn")
        { blnPlugInsPassed = blnPlugInsPassed && objReq.Pass;
        }
      }
      writeln("<HTML>");
      writeln("<HEAD>");
      writeln("<TITLE>Browser Configuration Check</TITLE>");
      writeln("<META http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>");
      writeln("</HEAD>");
      writeln("<BODY bgcolor='#FFFFFF'>");
      writeln("<TABLE width='100%' border='0' cellpadding='0' cellspacing='0'>");
      writeln("  <TR valign='top'>");
      writeln("    <TD bgcolor='#0A1766' valign='top'><FONT face='Verdana' size='2'><IMG border='0' src='/images/theme/buycrki/roundedge-topleft-blue-white.gif' width='15' height='25'></FONT></TD>");
      writeln("    <TD bgcolor='#0A1766' valign='middle' width='100%'><B><FONT size='2' color='#FFFFFF' face='Verdana'>Browser Configuration Check</FONT></B></TD>");
      writeln("    <TD bgcolor='#0A1766' valign='top' align='right'><FONT face='Verdana' size='2'><IMG border='0' src='/images/theme/buycrki/roundedge-topright-blue-white.gif' width='15' height='25'></FONT></TD>");
      writeln("  </TR>");
      writeln("  <TR valign='top'>");
      writeln("    <TD bgcolor='#E7DAA6' colspan='3'>");
      writeln("      <TABLE width='100%' border='0' cellpadding='5' cellspacing='0'>");
      writeln("        <TR>");
      writeln("          <TD bgcolor='0A1766' valign='top'><B><FONT color='#C0C0C0' size='2' face='Verdana'>Item Checked</FONT></B>");
      writeln("          </TD>");
      writeln("          <TD bgcolor='0A1766' valign='top'><B><FONT color='#C0C0C0' size='2' face='Verdana'>Status</FONT></B>");
      writeln("          </TD>");
      writeln("          <TD bgcolor='0A1766' valign='top'><B><FONT color='#C0C0C0' size='2' face='Verdana'>Required Action</FONT></B>");
      writeln("          </TD>");
      writeln("        </TR>");

      //Display any screen resolution issues
      for(intI = 0; intI < mAuReqArray.length; intI++)
      { var objReq = mAuReqArray[intI];
        if(objReq.Type == "Screen Resolution")
        { writeln("        <TR>");
          writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'><B>Current Screen Resolution :</B> " + mobjCurrentBrowser.MaxWidth + " by " + mobjCurrentBrowser.MaxHeight + " pixels</FONT></TD>");
          if(!objReq.Pass)
          { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#FF0000' size='2' face='Verdana'>Failed</FONT></B></TD>");
            writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'>" + objReq.UserText + "<BR>" + objReq.Hyperlink + "</FONT></TD>");
          }
          else
          { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#008000' size='2' face='Verdana'>Passed</FONT></B></TD>");
            writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'>No Action Required</FONT></TD>");
          }
          writeln("        </TR>");
        }
      }
      
      //Display any browser issues
      writeln("        <TR valign='top'>");
      writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'><B>Current Browser :</B> " + mobjCurrentBrowser.Application + " " + mobjCurrentBrowser.Version + "</FONT></TD>");
      write("          ");
      if(blnBrowserChecked && !blnBrowserPassed)
      { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#FF0000' size='2' face='Verdana'>Failed</FONT></B></TD>");
        writeln("          <TD bgcolor='#E7DAA6' valign='top'>");
        writeln("            <FONT face='Verdana' size='2'>Download and install one of the following browsers:<BR>");
        for(intI = 0; intI < mAuReqArray.length; intI++)
        { var objReq = mAuReqArray[intI];
          if(objReq.Type == "Browser")
          { intJ++;
            writeln("            " + intJ + ". <A href='" + objReq.Hyperlink + "' target='_blank'>" + objReq.UserText + "</A><BR>");
          }
        }
        writeln("          </TD>");
      }
      else
      { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#008000' size='2' face='Verdana'>Passed</FONT></B></TD>");
        writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'>No Action Required</FONT></TD>");
      }
      writeln("        </TR>");
      
      //Display any plug-in issues
      for(intI = 0; intI < mAuReqArray.length; intI++)
      { var objReq = mAuReqArray[intI];
        if(objReq.Type == "PlugIn")
        { writeln("        <TR>");
          writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'><B>Plug-in :</B> " + objReq.UserText + "</FONT></TD>");
          if(!objReq.Pass)
          { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#FF0000' size='2' face='Verdana'>Failed</FONT></B></TD>");
            writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'>Download and install " + objReq.UserText + " - <A href='" + objReq.Hyperlink + "' target='_blank'>Download</A></FONT></TD>");
          }
          else
          { writeln("          <TD bgcolor='#E7DAA6' valign='top'><B><FONT color='#008000' size='2' face='Verdana'>Passed</FONT></B></TD>");
            writeln("          <TD bgcolor='#E7DAA6' valign='top'><FONT face='Verdana' size='2'>No Action Required</FONT></TD>");
          }
          writeln("        </TR>");
        }
      }
      writeln("          <TD bgcolor='#E7DAA6' colspan='3' valign='top'>&nbsp;</TD>");
      writeln("        </TR>");
      writeln("        <TR>");
      writeln("          <TD bgcolor='#E7DAA6' colspan='3' valign='top'>");
      writeln("            <FONT face='Verdana' size='2'>");
      if((blnBrowserChecked && !blnBrowserPassed) || (!blnPlugInsPassed))
      { writeln("The browser configuration check has determined that you may need some additional software to view this item properly. Follow the <B>Required Action</B> directions for each <B><FONT color='#FF0000'>Failed</FONT></B> status item to to get more information and download the needed software. Click the Close Window button below to return to the main screen once you are finished.");
      }
      else
      { writeln("The browser configuration check has determined that you have everything needed to view this item properly. Click the Close Window button below to return to the main screen.");
      }
      writeln("            </FONT>");
      writeln("          </TD>");
      writeln("        </TR>");
      writeln("        <TR valign='top'>");
      writeln("          <TD bgcolor='#E7DAA6' align='center' colspan='3' valign='bottom'><FORM><FONT face='Verdana' size='2'><INPUT type='button' value='Close Window' name='CloseWindow' onclick='window.close();'></FONT></FORM></TD>");
      writeln("        </TR>");
      writeln("      </TABLE>");
      writeln("    </TD>");
      writeln("  </TR>");
      writeln("  <TR>");
      writeln("    <TD bgcolor='#E7DAA6' valign='bottom'><FONT face='Verdana' size='2'><IMG border='0' src='/images/theme/buycrki/roundedge-bottomleft-tan-white.gif' width='15' height='22'></FONT></TD>");
      writeln("    <TD bgcolor='#E7DAA6'>&nbsp;</TD>");
      writeln("    <TD align='right' bgcolor='#E7DAA6' valign='bottom'><FONT face='Verdana' size='2'><IMG border='0' src='/images/theme/buycrki/roundedge-bottomright-tan-white.gif' width='15' height='22'></FONT></TD>");
      writeln("  </TR>");
      writeln("  <TR valign='top'>");
      writeln("    <TD colspan='3' align='center'><FONT face='Verdana' size='2'>&nbsp;</FONT></TD>");
      writeln("  </TR>");
      writeln("</TABLE>");
      writeln("</BODY>");
      writeln("</HTML>");
      //close(); //Close the window document
    }
    objDisplayWindow.document.ParentWindow = window;
    objDisplayWindow.focus(); //Bring the window into focus
    return true;
  }
  return false;
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : HasPluginBLN
Date Written : 12/22/2000
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To check to see if the current browser conforms to a plugin requirement
               For non Microsoft browsers
Parameters   : objReq - Requirement object that holds the req properties
Returns      : true if plugin is found, false if not
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function HasPluginBLN(objReq)
{ if((mobjCurrentBrowser.UserAgent.indexOf("MSIE") == -1) || (mobjCurrentBrowser.OS == "Macintosh"))
  { with(navigator)
    { if(plugins && plugins[objReq.Application])
      { var strInstalledVersion = plugins[objReq.Application].description.substring(plugins[objReq.Application].description.indexOf(".") - 1, plugins[objReq.Application].description.indexOf(".") + 2);
        objReq.Pass = eval(parseFloat(strInstalledVersion) + objReq.RelOp + objReq.Version);
      }
    }
  }
  else
  { objReq.Pass = HasActiveXBLN(objReq.Application, objReq.Version);
  }
  return objReq.Pass;
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : HasResolutionBLN
Date Written : 12/22/2000
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To check to see if the current browser conforms to a Resolution requirement
Parameters   : objReq - Requirement object that holds the req properties
Returns      : true if Resolution is found, false if not
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function HasResolutionBLN(objReq)
{ if(objReq.Application == "Width")
  { objReq.Pass = eval(mobjCurrentBrowser.MaxWidth + objReq.RelOp + objReq.Version);
  }
  if(objReq.Application == "Height")
  { objReq.Pass = eval(mobjCurrentBrowser.MaxHeight + objReq.RelOp + objReq.Version);
  }
  return objReq.Pass;
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : IsBrowserBLN
Date Written : 12/22/2000
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To check to see if the current browser conforms to a browser requirement
Parameters   : objReq - requirement object to compare the current browser against
Returns      : true if browser is found, false if not
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function IsBrowserBLN(objReq)
{ if(mobjCurrentBrowser.Application.indexOf(objReq.Application) != -1)
  { objReq.Pass = eval(mobjCurrentBrowser.Version + objReq.RelOp + objReq.Version);
  }
  else
  { objReq.Pass = false;
  }
  return objReq.Pass;
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : CheckAuRequirementsBLN
Date Written : 12/22/2000
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To check to see if the current browser conforms to AU requirements
Parameters   : none
Returns      : true or false
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function CheckAuRequirementsBLN()
{ var intI;
  var blnMeetsRequirements = true;
  var strBrowserResults = "";
  //Check each requirement in the requirement array
  for(intI = 0; intI < mAuReqArray.length; intI++)
  { var objReq = mAuReqArray[intI];
    if(objReq.Type == "Screen Resolution")
    { strBrowserResults += (HasResolutionBLN(objReq)) ? "1" : "0";
    }
    if(objReq.Type == "Browser")
    { strBrowserResults += (IsBrowserBLN(objReq)) ? "1" : "0";
    }
    var blnPlugIns = true;
    if(objReq.Type == "PlugIn")
    { blnPlugIns = blnPlugIns && HasPluginBLN(objReq);
    }
  }
  //check to see if the requirement checks have been passed
  if(strBrowserResults.length > 0) blnMeetsRequirements = blnMeetsRequirements && (strBrowserResults.indexOf('1') != -1) ? true : false;
  blnMeetsRequirements = blnMeetsRequirements && blnPlugIns;
  return blnMeetsRequirements;
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : ReqOBJ
Date Written : 02/12/1999
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To make a requirements object based on the number of parameters passed in
Parameters   : Variable arguments accessed through argv and argc
Returns      : Requirement object created
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function ReqOBJ()
{ var argv = ReqOBJ.arguments;
  var argc = ReqOBJ.arguments.length;
  this.Type        = null;
  this.Application = null;
  this.RelOp       = null;
  this.Version     = null;
  this.UserText    = null;
  this.Hyperlink   = null;
  this.Pass        = false;
  var intI;
  for(intI = 0; intI <= argc; intI++)
  { switch (intI)
    { case 0: 
        this.Type = argv[intI];
        break;
      case 1:
        this.Application = argv[intI];
        break;
      case 2:
        this.RelOp = argv[intI];
        break;
      case 3:
        this.Version = argv[intI];
        break;
      case 4:
        this.UserText = argv[intI];
        break;
      case 5:
        this.Hyperlink = argv[intI];
        break;
      case 6:
        this.Pass = argv[intI];
        break;
    }
  }
  return(this);
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : SetShowRequirementsBLN
Date Written : 02/12/1999
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To set the show requirements cookie either true or false
Parameters   : [IN] blnShowRequirements - Whether to show missing requirements or not
Returns      : true or false
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function SetShowRequirementsBLN(blnHideRequirements)
{ if(blnHideRequirements)
  { //Set the expiration date of the cookie
    var dteCookieExpiration = new Date();
    dteCookieExpiration.setDate(dteCookieExpiration.getDate() + mintAuReqLife);
    dteCookieExpiration.setHours(0);
    dteCookieExpiration.setMinutes(0);
    dteCookieExpiration.setSeconds(0);
    return SetCookieBLN(mstrAuReqName, "true", dteCookieExpiration, mstrAuReqPath);
  }
  else
  { return DeleteCookieBLN(mstrAuReqName);
  }
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : ShowBrowserResults()
Date Written : 03/09/01
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To show the user any browser related requirnment issues
Parameters   : none
Returns      : none
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function ShowBrowserResults()
{ CheckAuRequirementsBLN();
  DisplayRequirementIssuesBLN();
}
/* ----------------------------------------------------------------------------------------------------------
Routine Name : ShowRequirementsBLN
Date Written : 02/12/1999
Author       : Peter R Lynch (plynch@crkinteractive.com)
Purpose      : To determine whether to show requirements
Parameters   : none
Returns      : true or false
Revisions    :
-----------------------------------------------------------------------------------------------------------*/
function ShowRequirementsBLN()
{ var strCookieVal = GetCookieSTR(mstrAuReqName);
  return (strCookieVal == "true") ? false : true;
}

var mblnRequirementsApiLoaded = true; //Flag variable to determine if this js file has been fully loaded
// -->
