<!--

 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 charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, target-densityDpi=device-dpi">
    <meta name="description" content="Cordova Tizen basic template generated by Tizen Web IDE"/>

    <title>Tizen Web IDE - Tizen - Tizen basic Application</title>

    <script type="text/javascript" src="cordova-2.0.0.js"></script>

    <link rel="stylesheet" type="text/css" href="css/style.css"/>
    <script src="js/main.js"></script>
</head>

<body>
  <header>
    <hgroup>
      <h1>Tizen Cordova Application</h1>
      <h2>An empty template of a Cordova Tizen application</h2>
    </hgroup>
  </header>

  <nav>
    <ul>
       <li><a href="#">Home</a></li>
       <li><a href="#">About Us</a></li>
       <li><a href="#">Contact Us</a></li>
    </ul>
  </nav>

  <article>
    <header>
      <h1>
        <img src="images/ic_cordova_32.png" /> Application Name
      </h1>
    </header>
    <p>This is an empty template of a Cordova Tizen Web Application. Tizen will support multiple device categories:
      <ul>
        <li>smartphones, tablets and smart TVs
        <li>netbooks, in-vehicle infotainment devices
      </ul>
    </p>
    <section>
      <p>This is a basic section of a document.</p>
      <p>The following button displays live battery info by using the Cordova JavaScript API.</p>
      <div id="divbutton1">
        <button onclick="startBatteryInfoMonitoring();">Battery Info</button>
      </div>
    </section>
  </article>

  <footer>
    <p>&copy; 2012 Company Name. All rights reserved.</p>
  </footer>    
</body>
</html>
