<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- The HTML 4.01 Transitional DOCTYPE declaration-->
<!-- above set at the top of the file will set     -->
<!-- the browser's rendering engine into           -->
<!-- "Quirks Mode". Replacing this declaration     -->
<!-- with a "Standards Mode" doctype is supported, -->
<!-- but may lead to some differences in layout.   -->

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Google Web Toolkit Developer Plugin Not Installed</title>
    <style>
      body {
        margin: 0;
        padding: 0;
      }
    </style>

    <script>
      var troubleshootingUrl = "http://groups.google.com/group/google-web-toolkit";

      // The missing plugin module expects downloadInfo.inferredDownloadId to contain the key to use
      // in allDownloads field.
      var downloadInfo = {
        "inferredDownloadId" : null,
        "troubleshootingUrl" : troubleshootingUrl,
        "allDownloads" : {
          "unknown" :
          {
            "caption" : "Regrettably, this browser is currently unsupported :-(",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "firefox-old" :
          {
            "caption" : "Sorry, the GWT Developer Plugin only supports Firefox 3.0 and 3.5 at present",
            "url" : "http://www.getfirefox.com",
            "supported" : false
          },

          "opera" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for Opera",
            // TODO(you): If you are reading this, maybe you would be interested in contributing an Opera version?
            "url" : "http://code.google.com/webtoolkit/makinggwtbetter.html#contributingcode",
            "supported" : false
          },

          "safari-iphone" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for mobile Safari",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "webkit-android" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for mobile WebKit",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "chrome-lin" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for Chrome on Linux",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "chrome-mac" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for Chrome on OS X",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "chrome-win" :
          {
            "caption" : "The GWT Developer Plugin requires Chrome 4 or later,<br>so click here to learn about switching to the Chrome DevChannel to get early access",
            "url" : "http://dev.chromium.org/getting-involved/dev-channel",
            "supported" : false
          },

          "safari-win" :
          {
            "caption" : "Sorry, there is currently no GWT Developer Plugin for Safari on Windows",
            "url" : troubleshootingUrl,
            "supported" : false
          },

          "firefox" :
          {
            "caption" : "Download the GWT Developer Plugin<br>For Firefox",
            "url" : "https://dl-ssl.google.com/gwt/plugins/firefox/gwt-dev-plugin.xpi",
            "platforms" : "Win x86, Linux x86/x86_64, Mac x86/PPC",
            "supported" : true
          },

          "ie" :
          {
            "caption" : "Download the GWT Developer Plugin<br>For Internet Explorer",
            "url" : "https://dl-ssl.google.com/tag/s/appguid%3D%7B9a5e649a-ec63-4c7d-99bf-75adb345e7e5%7D%26lang%3Den%26appname%3DGWT%2520Developer%2520Plugin%2520for%2520IE%26needsadmin%3Dfalse/gwt/plugins/ie/GwtDevPluginSetup.exe",
            "platforms" : "Win x86",
            "supported" : true
          },

          "chrome4-win" :
          {
            "caption" : "Download the GWT Developer Plugin<br>For Chrome",
            "url" : "https://dl-ssl.google.com/gwt/plugins/chrome/gwt-dev-plugin.crx",
            "platforms" : "Win x86",
            "supported" : true
          },

          "safari-mac" :
          {
            "caption" : "Download the GWT Developer Plugin<br>For Safari",
            "url" : "https://dl-ssl.google.com/gwt/plugins/safari/gwt-dev-plugin.dmg",
            "platforms" : "Mac x86/x86_64/PPC",
            "supported" : true
          }
        }
      };

      var ua = navigator.userAgent.toLowerCase();

      var id = 'unknown';
      if (ua.indexOf("webkit") != -1) {
        if ( (ua.indexOf("iphone") != -1) || (ua.indexOf("ipod") != -1) ) {
          id = 'safari-iphone';
        } else if (ua.indexOf("android") != -1) {
          id = 'webkit-android';
        } else if (ua.indexOf("chrome") != -1) {
          if (ua.indexOf("windows") != -1) {
            var ver = /chrome\/(\d+)(\.\d+)*/.exec(ua);
            if (ver && ver.length > 1 && ver[1] >= 4) {
              id = 'chrome4-win';
            } else {
              id = 'chrome-win';
            }
          } else if (ua.indexOf("linux") != -1) {
            id = 'chrome-lin';
          } else if (ua.indexOf("macintosh") != -1) {
            id = 'chrome-mac';
          } else {
            // unknown Chrome platform
          }
        } else if (ua.indexOf("macintosh") != -1) {
          id = 'safari-mac';
        } else if (ua.indexOf("windows") != -1) {
          id = 'safari-win';
        }
      } else if (ua.indexOf("msie") != -1) {
        id = 'ie';
      } else if (ua.indexOf("opera") != -1) {
        id = 'opera';
      } else if (ua.indexOf("gecko") != -1) {
        if (ua.indexOf("rv:1.9") != -1) {
          id = 'firefox';
        } else {
          id = 'firefox-old';
        }
      }
      downloadInfo.inferredDownloadId = id;
    </script>

    <script type="text/javascript" language="javascript" src="missingplugin/missingplugin.nocache.js"></script>
  </head>

  <noscript>
    <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
      The Google Web Toolkit Developer Plugin does not appear to be installed.
      However, you also don't seem to have a browser that is willing to run JavaScript.
      Please enable JavaScript or switch to a browser that supports JavaScript and try again.
    </div>
  </noscript>
  </body>
</html>

