<!DOCTYPE html>
<!--

 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.

-->


<html>
  <head>
    <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
    <title>IAB test page</title>
    <script type="text/javascript" charset="utf-8" src="../cordova-incl.js"></script>
    <script type="text/javascript" charset="utf-8">
      function onDeviceReady() {
          document.getElementById("hint").textContent = "Running CordovaWebView, deviceVersion=" + device.version + ", no toolbar should be present, Back link should work, logcat should NOT have failed 'gap:' calls.";
      }
      document.addEventListener("deviceready", onDeviceReady, false);
    </script>
  </head>
  <body id="stage" class="theme">
    <h1>Local URL</h1>
    <div id="info">
        You have successfully loaded a local URL:
        <script>document.write(location.href)</script>
    </div>
    <hr />
    <div>User-Agent = <span id="u-a"></span></div>
    <hr />
    <div id="hint">Likely running inAppBrowser: Device version from Cordova=not found, Back link should not work, toolbar may be present, logcat should show failed 'gap:' calls.</div>
    <hr />
    <div><a href="http://www.google.com">Visit Google</a> (whitelisted)</div>
    <div><a href="http://www.yahoo.com">Visit Yahoo</a> (not whitelisted)</div>
    <div><a href="http://www.stluciadance.com/prospectus_file/sample.pdf">Check out my remote PDF</a></div>
    <div><a href="local.pdf">Check out my local PDF</a></div>
    <p /><a href="javascript:;" onclick="history.back();">Back</a>
    <p />
    <a name="anchor2"></a>
    <div style="height: 1000px;border:1px solid red;">tall div with border</div>
  </body>
  <script>
      function updateUserAgent() {
          document.getElementById("u-a").textContent = navigator.userAgent;
      }
      updateUserAgent();
      window.setInterval(updateUserAgent, 1500);
  </script>
</html>
