<!--
         Licensed to the Apache Software Foundation (ASF) under one$
         or more contributor license agreements.  See the NOTICE file$
         distributed with this work for additional information$
         regarding copyright ownership.  The ASF licenses this file$
         to you under the Apache License, Version 2.0 (the$
         "License"); you may not use this file except in compliance$
         with the License.  You may obtain a copy of the License at$
$
           http://www.apache.org/licenses/LICENSE-2.0$
$
         Unless required by applicable law or agreed to in writing,$
         software distributed under the License is distributed on an$
         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY$
         KIND, either express or implied.  See the License for the$
         specific language governing permissions and limitations$
         under the License.$
-->
<!DOCTYPE HTML>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Cordova Tests</title>
      <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title">
      <script type="text/javascript" charset="utf-8" src="../cordova.js"></script>
      <script type="text/javascript" charset="utf-8" src="../main.js"></script>
      <script>
      function XHR(url) {
          var xmlhttp = new XMLHttpRequest();
          xmlhttp.onreadystatechange=function(){
              if(xmlhttp.readyState === 4){
                  // If success
                  if (xmlhttp.status === 200) {
                      alert("XHR success.  Result="+xmlhttp.responseText);
                  }
                  // If error
                  else {
                      alert("XHR error.  Status="+xmlhttp.status);
                  }
              }
          };
          console.log("GET "+url);
          xmlhttp.open("GET", url , true);
          xmlhttp.send();
      }
      </script>
  </head>
  <body onload="init();" id="stage" class="theme">
    <h1>XHR</h1>
    <div id="info">
        <h4>Platform: <span id="platform"> &nbsp;</span>,   Version: <span id="version">&nbsp;</span></h4>
        <h4>UUID: <span id="uuid"> &nbsp;</span>,   Name: <span id="name">&nbsp;</span></h4>
        <h4>Width: <span id="width"> &nbsp;</span>,   Height: <span id="height">&nbsp;
                   </span>, Color Depth: <span id="colorDepth"></span></h4>
     </div>
     <div id="info">
     Press buttons below to test.  You should see an alert with results displayed.
     </div>
    <a href="javascript:" class="btn large" onclick="XHR('file:///android_asset/www/xhr/index.html')">Load file://</a>
    <a href="javascript:" class="btn large" onclick="XHR('http://www.google.com');">Load Google</a>
    <!-- 
    <a href="javascript:" class="btn large" onclick="XHR('content://com.android.contacts/data/1');">Load content://</a>
    -->
  </body>
</html>
