 function getGetArguments(keys) {

    var arguments;   // arguments
    var tokens;     // tokens
    var tokenIndex; // token index
    var token;      // token

    arguments = new Object();
    tokens = location.search.substring(1).split("&");
    for (tokenIndex = 0; tokenIndex < tokens.length; ++tokenIndex) {
       token = tokens[tokenIndex].split("=");
       if (token.length >= 2) {       
          keys[keys.length] = token[0];
     arguments[token[0]] = unescape(token[1]);
       }
    }
    return(arguments);
  }

  var HTML_OKPREFIX    = '<span class="body"><font color="green">';  // ok prefix
  var HTML_OKSUFFIX    = '</font></span>';            // ok suffix
  var HTML_NOTOKPREFIX = '<span class="body"><font color="red">'; // not ok prefix
  var HTML_NOTOKSUFFIX = '</font></span>';            // not ok suffix

  var HTML_ENABLED   = HTML_OKPREFIX + 'Enabled' + HTML_OKSUFFIX;                                          // enabled HTML
  var HTML_DISABLED  = HTML_NOTOKPREFIX + 'Disabled' + HTML_NOTOKSUFFIX;                                 // disabled HTML
  var HTML_UNBLOCKED = HTML_OKPREFIX + 'Unblocked' + HTML_OKSUFFIX;                                           // unblocked HTML
  var HTML_BLOCKED   = HTML_NOTOKPREFIX + 'Blocked' + HTML_NOTOKSUFFIX;                                       // blocked HTML
  var HTML_OK        = HTML_OKPREFIX + '<img src="./images/check.gif" border="0">' + HTML_OKSUFFIX;           // ok HTML
  var HTML_NOTOK     = HTML_NOTOKPREFIX + '<img src="./images/x.gif" border="0">' + HTML_NOTOKSUFFIX;         // not ok HTML
  var HTML_UNSURE    = HTML_OKPREFIX + '<img src="./images/question.gif" border="0">' + HTML_OKSUFFIX;           // unsure HTML
  
  // Mac info url
  var HTML_MACINFO   = '<A HREF="../popups/MacOSXa.html" target="_blank">More Info</A>';

  var sniffer;                              // sniffer

  var getKeys = new Array();                       // get keys
  var getArguments = getGetArguments(getKeys);     // get arguments
  var property;                        // general property
  var property2;                    // 2nd general property

  var debug;               // debug
  var js;               // javascript
  var isJsOk;           // true if so
  var isJsOkHtml;          // html
  var os;               // operating system
  var isOsOk;           // true if so
  var isOsOkHtml;          // html
  var cpu;              // cpu
  var isCpuOk;          // true if so
  var isCpuOkHtml;         // html
  var isVisagraphCpuOk;    // true if so
  var ram;              // ram
  var isRamOk;          // true if so
  var isRamOkHtml;         // html
  var isVisagraphRamOk;    // true if so
  var screenSize;       // screen size
  var isScreenSizeOk;      // true if so
  var isScreenSizeOkHtml;  //html
  var browser;          // browser
  var isBrowserOk;         // true if so
  var isBrowserOkHtml;     // html
  var plugIn;           // plug in
  var isPlugInOk;          // true if so
  var isPlugInOkHtml;      // html
  var isPlugInWarnable;    // true if so
  var isPlugInWarnableHtml;// html
  var connection;       // connection
  var connectionKbps;           // connection number
  var isConnectionOk;      // true if so
  var isConnectionOkHtml;  //html
  var visagraph;        // visagraph
  var isVisagraphCpuSpeedOk;  // true if so
  var isVisagraphRamOk;    // true if so
  var isQuickUsbVersionOk; // true if so
  var isVisagraphOk;       // true if so
  var isVisagraphOkHtml;   // html
  var cookies;          // cookies
  var isCookiesOk;         // true if so
  var isCookiesOkHmtl;     // html
  var popups;           // popups
  var isPopupsOk;          // true if so
  var isPopupsOkHtml;      // html
  var isActiveXOk;              // true if so
  
  var summary;             // summary text

  var jvm;

  sniffer = new Is();
    
  debug = (getArguments["debug"] == "1");
  
  isActiveXOk = (getArguments["isActiveXOk"] == "1");
  
  isJsOk = (getArguments["isJsOk"] == "1");
  js = (isJsOk)? HTML_ENABLED : HTML_DISABLED;
  isJsOkHtml = (isJsOk)? HTML_OK : HTML_NOTOK;
  
  isOsOk = (getArguments["isOsOk"] == "1");
  os = "";
  if ((property = getArguments["osName"]) != null) {
     os = property;
     if ((property = getArguments["osVersion"])) {
       os += " " + property;
     }
	 if (sniffer.mac) {
	   property = "<br>" + HTML_MACINFO;
	   os += property;
	 }
  }
  os = (isOsOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + os + (isOsOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  if (sniffer.mac) {
    isOsOkHtml = HTML_UNSURE;
  }
  else {
    isOsOkHtml = (isOsOk)? HTML_OK : HTML_NOTOK;
  }

  isCpuOk = (getArguments["isCpuSpeedOk"] == "1");
  cpu = "";
  if (((property = getArguments["cpuSpeed"]) != null) && (property > 0)) {
     cpu = property;
     if ((property = getArguments["cpuSpeedUnits"])) {
   cpu += " " + property;
     }
  } else if (sniffer.win && !isActiveXOk) {
     if (sniffer.ie) {
        cpu = "?";
     } else {
        cpu = "Please ensure that your computer<br>";
        cpu += "meets the minimum CPU requirements<br>";
        cpu += "to run Reading Plus&reg;.";
     }
  } else if (sniffer.mac) {
	 cpu = HTML_MACINFO;
  }
  cpu = (isCpuOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + cpu + (isCpuOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  if (sniffer.mac) {
    isCpuOkHtml = HTML_UNSURE;
  }
  else {
    isCpuOkHtml = (isCpuOk)? HTML_OK : HTML_NOTOK;
  }

  isRamOk = (getArguments["isRamOk"] == "1");
  ram = "";
  if (((property = getArguments["ram"]) != null) && (property > 0)) {
     ram = property;
     if ((property = getArguments["ramUnits"])) {
   ram += " " + property;
     }
  } else if (sniffer.win && !isActiveXOk) {
     if (sniffer.ie) {
        ram = "?";
     } else {
        ram = "Please ensure that your computer<br>";
        ram += "meets the minimum RAM requirements<br>";
        ram += "to run Reading Plus&reg;.";
     }
  } else if (sniffer.mac) {
	 ram = HTML_MACINFO;
  }
  ram = (isRamOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + ram + (isRamOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  if (sniffer.mac) {
    isRamOkHtml = HTML_UNSURE;
  }
  else {
    isRamOkHtml = (isRamOk)? HTML_OK : HTML_NOTOK;
  }

  isScreenSizeOk = (getArguments["isScreenOk"] == "1");
  screenSize = "";
  if (((property = getArguments["screenWidth"]) != null) && ((property2 = getArguments["screenHeight"]) != null)) {
     screenSize = property + " x " + property2;
  }
  screenSize = (isScreenSizeOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + screenSize + (isScreenSizeOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  isScreenSizeOkHtml = (isScreenSizeOk)? HTML_OK : HTML_NOTOK;

  isBrowserOk = (getArguments["isBrowserOk"] == "1");
  browser = "";
  if ((property = getArguments["browserName"]) != null) {
     browser = property;
	 if (sniffer.mac) {
	   if (sniffer.safari) {
  	     property = "<br>" + HTML_MACINFO;
	   }
	   else {
         property = getArguments["browserVersion"];
  	     property += "<br>" + HTML_MACINFO;
	   }
	   browser += " " + property;
	 }
     else if ((property = getArguments["browserVersion"])) {
       browser += " " + property;
     }
  }
  browser = (isBrowserOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + browser + (isBrowserOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  if (sniffer.mac) {
    isBrowserOkHtml = HTML_UNSURE;
  }
  else {
    isBrowserOkHtml = (isBrowserOk)? HTML_OK : HTML_NOTOK;
  }

  isPlugInOk = (getArguments["isJavaOk"] == "1");
  plugIn = "";
  if ((property = getArguments["javaVendor"]) != null) {
     plugIn = property;
     if ((property = getArguments["javaVersion"])) {
        plugIn += " " + property;
		jvm = property;
     }
  }
  isPlugInWarnable = (getArguments["isJavaWarnable"] == "1");
  if (isPlugInWarnable) {
     isPlugInOk = false;
  }
  plugIn = (isPlugInOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + plugIn + (isPlugInOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  isPlugInOkHtml = (isPlugInOk)? HTML_OK : HTML_NOTOK;

  isConnectionOk = (getArguments["isNetKbpsOk"] == "1");
  connection = "";
  if ((property = getArguments["netKbps"]) != null) {
     connectionKbps = property;
     if (connectionKbps > 0) {
        connection = property;
        if ((property = getArguments["netKbpsUnits"]) != null) {
         connection = connection + " " + property;
         if (property == "Mbps") {
            connectionKbps = 1024*connectionKbps;
         } else if (property == "Gbps") {
            connectionKbps = 1024*1024*connectionKbps;
         }
        }
     }
	 else if (connectionKbps == -100) {
		 isConnectionOk = 0;
		 connection = "Test Not Supported by Browser";
	 }
  }
  connection = (isConnectionOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + connection + (isConnectionOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  isConnectionOkHtml = (isConnectionOk)? HTML_OK : HTML_NOTOK;

  isVisagraphCpuSpeedOk = (getArguments["isVisagraphCpuSpeedOk"] == "1");
  isVisagraphRamOk = (getArguments["isVisagraphRamOk"] == "1");
  //isQuickUsbVersionOk = (getArguments["isQuickUsbVersionOk"] == "1");
  isQuickUsbVersionOk = 1;
  isVisagraphOk = isVisagraphCpuSpeedOk &&
                  isVisagraphRamOk &&
                  isQuickUsbVersionOk;
  visagraph = "";
  if (((property = getArguments["quickUsbVersion"]) != null) && (property.length > 0)) {
     visagraph = "v " + property;
  } else if (sniffer.win && !isActiveXOk) {
     if (sniffer.ie) {
        visagraph = "?";
     } else {
        visagraph = "Please ensure that your computer<br>";
        visagraph += "meets the minimum requirements<br>";
        visagraph += "to run Visagraph&trade;.";
     }
  } else if (sniffer.mac) {
     visagraph = "N/A";
  }
  //visagraph = (isVisagraphOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + visagraph + (isVisagraphOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  //isVisagraphOkHtml = ((isVisagraphOk)? HTML_OK : HTML_NOTOK);
  
  isCookiesOk = (getArguments["isCookiesOk"] == "1");
  cookies = (isCookiesOk)? HTML_ENABLED : HTML_DISABLED;
  cookies = (isCookiesOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + cookies + (isCookiesOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  isCookiesOkHtml = (isCookiesOk)? HTML_OK : HTML_NOTOK;
  
  isPopupsOk = (getArguments["isPopupsOk"] == "1");
  popups = (isPopupsOk)? HTML_UNBLOCKED : HTML_BLOCKED;
  popups = (isPopupsOk? HTML_OKPREFIX : HTML_NOTOKPREFIX) + popups + (isPopupsOk? HTML_OKSUFFIX : HTML_NOTOKSUFFIX);
  isPopupsOkHtml = (isPopupsOk)? HTML_OK : HTML_NOTOK;



  if (!isJsOk) {
    alert("HERE1!");

     summary = "You will need to enable Javascript in order to run this requirements check.<br>";
     if (sniffer.win) {
        summary += "You can enable javascript by going to the <i>Security</i> tab in the <i>Internet Options</i><br>";
        summary += "control panel; After clicking the <i>Custom Level...</i> button, make sure <i>Scripting</i>:<br>";
        summary += "<i>Active Scripting</i> is enabled.";
     } else if (sniffer.mac) {
        if (sniffer.ie) {
           summary += "You can enable javascript by going to the <i>Security</i> tab in the <i>Safari</i>: <i>Preferences...</i><br>";
           summary += "menu panel; make sure <i>Enable Javascript</i> is checked.";
        } else if (sniffer.safari) {
           summary += "You can enable javascript by going to the <i>Web Content</i> tab in the <i>Explorer</i>: <i>Preferences...</i><br>";
           summary += "menu panel; make sure <i>Enable scripting</i> is checked.";
        }
     }
  } else if (!isActiveXOk) {
    alert("HERE2!");

     summary = "We were unable to install and/or run an ActiveX component in order to determine your<br>";
     summary += "computer's <i>CPU</i>, <i>RAM</i>, and whether <i>Visagraph Ready</i>.<br>";
     if (sniffer.ie) {
        summary += "<br>";
        summary += "<font color='red'>If a Security Warning asks if you want to install and run <i>Reading Plus Requirements Check</i>,<br>please answer <i>Yes</i>.</font> <a href='index.html'>Retry</a><br>";
        summary += "<br>";
        summary += "If the Information Bar alerts about the site requiring an ActiveX component, please click on it<br>";
        summary += "and choose <i>Install ActiveX Control</i>.<br>";
        summary += "<br>";
     } else {
        summary += "<br>";
        summary += "<font color='red'>Please use Internet Explorer to run <i>Reading Plus Requirements Check</i>.</font><br><br>";
     }
  } else {
     summary = "";
     if (
        isOsOk && (
           !isBrowserOk ||
           !isPlugInOk ||
           !isConnectionOk ||
           !isCookiesOk ||
           !isPopupsOk
        )
     ) {

        summary = "Check the following items identified below that need to be addressed before you can access<br>Reading Plus&reg; successfully. <a href=\"";
        summary += "./results-detail.html?"
        for (var i = 0; i < getKeys.length; ++i) {
           if (i > 0) {
              summary += "&";
           }
           summary += getKeys[i] + "=" + getArguments[getKeys[i]];
        }
        summary += "\">View Details</a>.";
     } else if (
        (
           !isOsOk
        ) && (
           !isOsOk
        )
     ) {
        summary = "Your System does not meet the minimum requirements to run Reading Plus&reg; or the<br>Visagraph&trade; III successfully.";
     } else if (
        (
           isCpuOk &&
           isRamOk &&
           isOsOk
        ) && (
           !isVisagraphCpuSpeedOk ||
           !isVisagraphRamOk
        )
     ) {
        if (!sniffer.mac) {
           summary = "Your System is ready for Reading Plus&reg; but not the Visagraph&trade; III.";
        } else {
           summary = "Your System is ready for Reading Plus&reg;. The Visagraph&trade; III does not support the Macintosh OS.";
        }
     } else if (
        (
           isCpuOk &&
           isRamOk &&
           isOsOk
        ) && (
           isVisagraphCpuSpeedOk &&
           isVisagraphRamOk &&
           !isQuickUsbVersionOk
        )
     ) {
        summary = "Your System is ready for Reading Plus&reg;. You will need to install the Visagraph&trade; III driver<br>if you plan to generate eye-movement recordings from this workstation. Contact<br><a href='mailto:support@readingplus.com'>support@readingplus.com</a> if you need assistance.";
     } else if (
        (
      isOsOk
   ) && (
      isQuickUsbVersionOk
   ) && (
      isJsOk &&
           isBrowserOk &&
           isPlugInOk &&
           isConnectionOk &&
           isCookiesOk &&
           isPopupsOk &&
           isScreenSizeOk
   )
     ) {
        summary = "Your System is ready for both Reading Plus&reg; and the Visagraph&trade; III.";
     }
  }
