<!--
  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>
      <title></title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <link rel="stylesheet" href="examples/resources/css/bootstrap-combined.min.css" />
      <link rel="stylesheet" href="examples/resources/css/styles.css" />
   </head>
   <body>
      <div class="header">
         <img src="examples/resources/images/apigee.png"> Usergrid Javascript SDK
      </div>
      <div id="main" class="main">
         <br/>
         <h2>Javascript SDK</h2>
         This SDK is designed to enable you to connect your apps to the Usergrid API.
         <br/>
         <br/>
         <h2>Read me</h2>
         View the read me file for the SDK:
         <a href="https://github.com/usergrid/usergrid/blob/master/sdks/html5-javascript/README.md">https://github.com/usergrid/usergrid/blob/master/sdks/html5-javascript/README.md</a>.
         <br/>
         <br/>
         <h2>API documentation</h2>
         For more information on Usergrid, see the Apache docs:
         <a href="http://usergrid.incubator.apache.org/">http://usergrid.incubator.apache.org/</a>
         <br/>
         <br/>

         <h2>Example Apps:</h2>
         <br/>
         <a href="examples/all-calls/all-calls.html" style="font-size: 20px;">All Calls example app</a>
         <br/>
         This app shows the basic method for making all call types against the API.  It also shows how to log in an app user.
         <br/>
         <br/>
         <a href="examples/dogs/dogs.html" style="font-size: 20px;">Dogs example app</a>
         <br/>
         This app shows you how to use the Entity and Collection objects
         <br/>
         <br/>
         <a href="examples/facebook/facebook.html" style="font-size: 20px;">Facebook Login Example</a>
         <br/>
         This app shows you how to use Facebook to log into Usergrid.
         <br/>
         <br/>
         <a href="examples/test/test.html" style="font-size: 20px;">Tests for examples in readme file</a>
         <br/>
         This is a test script that runs all the sample code shown in the readme file.  See the samples in action!
      </div>

    </body>
</html>
