Automatic Site Publish by Buildbot
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 0000000..5a2272c
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,15 @@
+pelican:
+  notify: commits@olingo.apache.org
+  autobuild: preview/*
+  target: asf-site
+  theme: theme/apache
+  whoami: main
+
+staging:
+  profile: ~
+  whoami: asf-site
+  autostage: preview/*
+
+publish:
+  profile: ~
+  whoami: asf-site
\ No newline at end of file
diff --git a/output/404.html b/output/404.html
new file mode 100755
index 0000000..b9eaed7
--- /dev/null
+++ b/output/404.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html lang="en">
+
+    <head>
+    
+        <meta charset="utf-8">
+        <title>Page Not Found :(</title>
+        <style>
+            ::-moz-selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+
+            ::selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+			
+            html {
+                padding: 30px 10px;
+                font-size: 20px;
+                line-height: 1.4;
+                color: #737373;
+                background: #f0f0f0;
+                -webkit-text-size-adjust: 100%;
+                -ms-text-size-adjust: 100%;
+            }
+
+            html,
+            input {
+                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+            }
+
+            body {
+                max-width: 500px;
+                _width: 500px;
+                padding: 30px 20px 50px;
+                border: 1px solid #b3b3b3;
+                border-radius: 4px;
+                margin: 0 auto;
+                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
+                background: #fcfcfc;
+            }
+
+            h1 {
+                margin: 0 10px;
+                font-size: 50px;
+                text-align: center;
+            }
+
+            h1 span {
+                color: #bbb;
+            }
+
+            h3 {
+                margin: 1.5em 0 0.5em;
+            }
+
+            p {
+                margin: 1em 0;
+            }
+
+            ul {
+                padding: 0 0 0 40px;
+                margin: 1em 0;
+            }
+
+            .container {
+                max-width: 380px;
+                _width: 380px;
+                margin: 0 auto;
+            }
+
+            /* google search */
+
+            #goog-fixurl ul {
+                list-style: none;
+                padding: 0;
+                margin: 0;
+            }
+
+            #goog-fixurl form {
+                margin: 0;
+            }
+
+            #goog-wm-qt,
+            #goog-wm-sb {
+                border: 1px solid #bbb;
+                font-size: 16px;
+                line-height: normal;
+                vertical-align: top;
+                color: #444;
+                border-radius: 2px;
+            }
+
+            #goog-wm-qt {
+                width: 220px;
+                height: 20px;
+                padding: 5px;
+                margin: 5px 10px 0 0;
+                box-shadow: inset 0 1px 1px #ccc;
+            }
+
+            #goog-wm-sb {
+                display: inline-block;
+                height: 32px;
+                padding: 0 10px;
+                margin: 5px 0 0;
+                white-space: nowrap;
+                cursor: pointer;
+                background-color: #f5f5f5;
+                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                -webkit-appearance: none;
+                -moz-appearance: none;
+                appearance: none;
+                *overflow: visible;
+                *display: inline;
+                *zoom: 1;
+            }
+
+            #goog-wm-sb:hover,
+            #goog-wm-sb:focus {
+                border-color: #aaa;
+                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+                background-color: #f8f8f8;
+            }
+
+            #goog-wm-qt:hover,
+            #goog-wm-qt:focus {
+                border-color: #105cb6;
+                outline: 0;
+                color: #222;
+            }
+
+            input::-moz-focus-inner {
+                padding: 0;
+                border: 0;
+            }
+        </style>
+    </head>
+    <body>
+        <div class="container">
+            <h1>Not found <span>:(</span></h1>
+            <p>Sorry, but the page you were trying to view does not exist.</p>
+            <p>It looks like this was the result of either:</p>
+            <ul>
+                <li>a mistyped address</li>
+                <li>an out-of-date link</li>
+            </ul>
+            <script>
+                var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
+            </script>
+            <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
+        </div>
+    </body>
+</html>
diff --git a/output/contribute.html b/output/contribute.html
new file mode 100644
index 0000000..d377df6
--- /dev/null
+++ b/output/contribute.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<!-- 
+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 lang="en">
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="description" content="Apache Olingo provides libraries which enable developers to implement OData producers and OData consumers. The available OData Java library implements OData version 2.0. In future on goal is to provide an OData 4.0 compliant library once the OData standard is published at OASIS. The focus within the community is currently on the Java technology but it is up to the community to discuss if other environments find interest.">
+    <meta name="author" content="">
+    <link rel="icon" href="/favicon.ico">
+    <title>Apache Olingo Library</title>
+    <!-- Bootstrap core CSS -->
+    <link href="/css/bootstrap.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
+    <link href="/css/navbar.css" rel="stylesheet" type="text/css"><!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
+    <link href="/css/offcanvas.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
+    <link rel="stylesheet" href="/css/main.css">
+    <!--[if lt IE 9]><script src="/js/ie8-responsive-file-warning.js"></script><![endif]-->
+    <style>
+.headerlink {
+  visibility: hidden;
+}
+dt:hover > .headerlink, p:hover > .headerlink, td:hover > .headerlink, h1:hover > .headerlink, h2:hover > .headerlink, h3:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, h6:hover > .headerlink {
+  visibility: visible
+}    </style>
+    <script src="/js/ie-emulation-modes-warning.js" type="text/javascript">
+</script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
+
+    <script src="/js/ie10-viewport-bug-workaround.js" type="text/javascript">
+</script><!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+    <!--[if lt IE 9]>
+      <script src="/js/html5shiv.min.js"></script>
+      <script src="/js/respond.min.js"></script>
+    <![endif]-->
+  </head>
+
+  <body>
+    <div class="container">
+      <!-- Static navbar -->
+      <div class="navbar navbar-default" role="navigation">
+        <div class="container-fluid">
+          <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+              <span class="sr-only">Toggle navigation</span>
+             <span class="icon-bar"></span>
+             <span class="icon-bar"></span>
+             <span class="icon-bar"></span>
+            </button>
+              <img class="navbar-brand" src="/img/OlingoOrangeTM.png" style="width:62px;" >
+              <a class="navbar-brand" href="/">Apache Olingo™</a>
+          </div>
+          <div class="navbar-collapse collapse">
+            <ul class="nav navbar-nav">
+              <li class="dropdown">
+                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
+                  <ul class="dropdown-menu">
+                      <li><a href="http://www.apache.org/foundation/">ASF Home</a></li>
+                      <li><a href="http://projects.apache.org/">Projects</a></li>
+                      <li><a href="http://people.apache.org/">People</a></li>
+                      <li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a></li>
+                      <li><a href="http://www.apache.org/dyn/closer.cgi">Download</a></li>
+                      <li><a href="http://www.apache.org/security/">Security</a></li>
+                      <li><a href="http://www.apache.org/foundation/sponsorship.html">Support Apache</a></li>
+                  </ul>
+              </li>
+
+              <li><a href="http://www.apache.org/licenses/">License</a></li>
+
+              <li class="dropdown">
+                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
+                  <ul class="dropdown-menu">
+                      <li><a href="/doc/odata2/download.html">Download OData 2.0 Java</a></li>
+                      <li><a href="/doc/odata4/download.html">Download OData 4.0 Java</a></li>
+                      <li><a href="/doc/javascript/download.html">Download OData 4.0 JavaScript</a></li>
+                  </ul>
+              </li>
+
+              <li class="dropdown">
+                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
+                  <ul class="dropdown-menu">
+                    <li><a href="/doc/odata2/index.html">Documentation OData 2.0 Java</a></li>
+                    <li><a href="/doc/odata4/index.html">Documentation OData 4.0 Java</a></li>
+                    <li><a href="/doc/javascript/index.html">Documentation OData 4.0 JavaScript</a></li>
+                  </ul>
+              </li>
+              <li><a href="/support.html">Support</a></li>
+              <li><a href="/contribute.html">Contribute</a></li>
+
+            </ul>
+
+			  <a class="navbar-right" href="http://www.apache.org/foundation/" target="_blank">
+          <img class="navbar-right" height="50px" src="/img/asf_logo_url.svg" alt="Apache Software Foundation">
+        </a>
+
+			</div><!--/.nav-collapse -->
+        </div><!--/.container-fluid -->
+      </div><!-- Main component for a primary marketing message or call to action -->
+    <h1 id="apache-olingo-how-to-contribute">Apache Olingo - How To Contribute<a class="headerlink" href="#apache-olingo-how-to-contribute" title="Permalink">&para;</a></h1>
+<p><strong>Content</strong></p>
+<div id="toc"><ul><li><a class="toc-href" href="#overview" title="Overview">Overview</a></li><li><a class="toc-href" href="#contribute-via-git-patchpull-request-and-olingo-jira" title="Contribute via Git-Patch/Pull-Request and Olingo-JIRA">Contribute via Git-Patch/Pull-Request and Olingo-JIRA</a></li><li><a class="toc-href" href="#report-a-bug-or-feature" title="Report a bug or feature">Report a bug or feature</a></li><li><a class="toc-href" href="#develop-the-according-bugfix-feature" title="Develop the according bugfix / feature">Develop the according bugfix / feature</a><ul><li><a class="toc-href" href="#clone-the-olingo-project" title="Clone the Olingo Project">Clone the Olingo Project</a></li><li><a class="toc-href" href="#providing-bugfix-code" title="Providing bugfix / code">Providing bugfix / code</a></li><li><a class="toc-href" href="#prepare-your-code-for-contribution" title="Prepare your code for contribution">Prepare your code for contribution</a></li></ul></li></ul></div>
+<h3 id="overview">Overview<a class="headerlink" href="#overview" title="Permalink">&para;</a></h3>
+<p>If you want to contribute to the Olingo Project, you can submit patches, report bugs or provide documentation and tutorials. Contributions are managed in the project <a href="https://issues.apache.org/jira/browse/OLINGO">JIRA</a>. So if you found a bug or want to provide a contribution please open a new <a href="https://issues.apache.org/jira/browse/OLINGO">JIRA</a> ticket. Detailed information how to contribute can be found in the following chapter.</p>
+<h3 id="contribute-via-git-patchpull-request-and-olingo-jira">Contribute via Git-Patch/Pull-Request and Olingo-JIRA<a class="headerlink" href="#contribute-via-git-patchpull-request-and-olingo-jira" title="Permalink">&para;</a></h3>
+<p>The Olingo uses the following process for contributions:</p>
+<ol>
+<li>Clone the Olingo Project</li>
+<li>Report a bug or feature (you must be <a href="https://issues.apache.org/jira/login.jsp">signed in</a> to open an issue)</li>
+<li>Develop the according bugfix / feature</li>
+<li>Prepare your code for contribution</li>
+<li>Submit your JIRA ticket to receive feedback</li>
+</ol>
+<h3 id="report-a-bug-or-feature">Report a bug or feature<a class="headerlink" href="#report-a-bug-or-feature" title="Permalink">&para;</a></h3>
+<p>If have you found a bug, please provide a detailed explanation how the bug can be reproduced.</p>
+<p>You should mention the following properties:</p>
+<ul>
+<li>Version of the library e.g. <code>(Java) V4 4.0.0</code></li>
+<li>If a part of the implementation is not compliant to the OData protocol, please link the related part of the speciation or provide a link to the related JIRA issue of OData protocol. The official OASIS-OData JIRA can be found <a href="https://issues.oasis-open.org/browse/ODATA/">here</a></li>
+<li>Often bugs are related to the underlying metadata document. Please append the related part of the metadata document to reproduce the bug.</li>
+<li>Provide a code snipped to reproduce the bug.</li>
+<li>If you receive an exception, provide the stack trace of the exception.</li>
+<li>Append further information in which part of the library the bug occurs (if available).</li>
+<li>If you have fixed a bug, you can append the solution to the request. Further information how to append your solution to a ticket are provided in the following chapters.</li>
+</ul>
+<p><strong>Bug/Feature Priorities</strong>
+The Olingo project uses the following definition of priorities:</p>
+<ul>
+<li><em>Blocker</em> - This bug/feature must be fixed/implemented before the next release</li>
+<li><em>Critical</em> - This bug/feature should be resolved/implemented immediately and must be fixed/implemented before the next major release.</li>
+<li><em>Major</em> - This bug/feature should be resolved/implemented as soon as possible in the normal course of development activity, before the software is released.</li>
+<li><em>Minor</em> (<strong>default</strong>) - This bug/feature should be fixed/implemented after serious bugs have been fixed/implemented.</li>
+<li><em>Trivial</em> - This bug/feature can be resolved in a future major system revision or not be resolved/implemented at all.</li>
+</ul>
+<p>The default priority is <strong>Minor</strong>.</p>
+<p><strong>Bug/Feature Types</strong>
+The Olingo project uses the following <em>types</em> for an issue:</p>
+<ul>
+<li><em>Feature</em> - An issue that introduced a new feature (behaviour) to the Olingo library (this could be e.g. an additional not yet implemented part of the OData specification or convenience methods)</li>
+<li><em>Improvement</em> - An issue that improves an existing feature (behaviour) of the Olingo library (this could be e.g. a convenience method or internal improvements which does not change behavior)</li>
+<li><em>Bug</em> - An issue that describes an incorrect behaviour of the Olingo library in relation to the according OData specification.</li>
+<li><em>Test</em> - An issue that only improve or extends tests for the  Olingo library.</li>
+<li><em>Task</em> - An issue that improve or extends basic parts for the Olingo library without changing code (or logic). This could be e.g. improvements or changes necessary for the build infrastructure.</li>
+<li><em>Question</em> - An issue that only is a question related to the Olingo library.</li>
+</ul>
+<h3 id="develop-the-according-bugfix-feature">Develop the according bugfix / feature<a class="headerlink" href="#develop-the-according-bugfix-feature" title="Permalink">&para;</a></h3>
+<h4 id="clone-the-olingo-project">Clone the Olingo Project<a class="headerlink" href="#clone-the-olingo-project" title="Permalink">&para;</a></h4>
+<p>The current development version can be found in the Apache git repository.
+Please note Olingo provides two different libraries. One one hand Olingo V2 which implements the OData V2 specification and Olingo V4, which implements the OData V4 specification.</p>
+<p>To clone the current master branch of the Olingo project please use one of the following commands:</p>
+<p><strong>Olingo V2 Code</strong></p>
+<pre><code>git clone https://gitbox.apache.org/repos/asf/olingo-odata2
+</code></pre>
+<p><strong>Olingo V4 code</strong></p>
+<pre><code>git clone https://gitbox.apache.org/repos/asf/olingo-odata4
+</code></pre>
+<h4 id="providing-bugfix-code">Providing bugfix / code<a class="headerlink" href="#providing-bugfix-code" title="Permalink">&para;</a></h4>
+<p>To provide a bug fix, checkout the current master branch of the project and develop your solution. In Olingo we truly believe in tests, so your contribution should at least contain tests that show that your contribution works as expected and also tests that reproduces the previous reported bug. If you provide a new feature your tests should reach at least 80 percent test-coverage.</p>
+<p>To ensure this we have lots of tests and use <a href="http://cobertura.github.io/cobertura/">Cobertura</a> as <em>code coverage tool</em>. In addition there exists separate build jobs on the Apache Build servers for latest versions of <a href="https://builds.apache.org/job/olingo-odata2-cobertura/">Olingo V2</a> and <a href="https://builds.apache.org/job/olingo-odata4-cobertura/">Olingo V4</a>.</p>
+<p>To append your contribution to a JIRA ticket, please create a patch file as explained in the chapter.</p>
+<p><strong>Providing documentation for the Apache website</strong>
+To provide documentation or tutorials you should write your contribution using <a href="www.apache.org/dev/cmsref#markdown">a Markdown syntax</a>.</p>
+<h4 id="prepare-your-code-for-contribution">Prepare your code for contribution<a class="headerlink" href="#prepare-your-code-for-contribution" title="Permalink">&para;</a></h4>
+<p>To append you contribution to a JIRA issue, please create a <a href="https://git-scm.com/docs/git-format-patch">patch file</a>. The commit message should contain the JIRA request number (e.g.  OLINGO-42) and a short commit message.</p>
+<p><strong>Example - Create a patch file</strong>
+You have done several commits and want to provide a single commit which contains all your changes.</p>
+<pre><code>...
+git commit -m "[OLINGO-42] Start development new feature"
+git commit -m "[OLINGO-42] Added new tests"
+git commit -m "[OLINGO-42] Typo fixed"
+...
+git rebase -i HEAD~3
+git format-patch -1
+</code></pre>
+<p>First rebase your local history to create a single commit. After that create a patch file using <code>git format-patch</code>. Now you can upload and append your created patch file to the JIRA issue.</p>
+<p><strong>Example - Applying a patch file</strong>
+You like to apply a patch file named "OLINGO_42.patch". Use the following commands:</p>
+<pre><code>git am --signoff OLINGO_42.patch
+</code></pre>
+
+      <div align="center">
+	<p>Copyright © 2013-2022, The Apache Software Foundation<br>
+				                Apache Olingo, Olingo, Apache, the Apache feather, and
+				the Apache Olingo project logo are trademarks of the Apache Software
+				Foundation.</p>
+        <small><a href="/doc/odata2/privacy.html">Privacy</a></small>
+      </div>
+    </div><!-- /container -->
+    <!-- Bootstrap core JavaScript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <script src="/js/jquery.js" type="text/javascript">
+    </script>
+    <script src="/js/bootstrap.js" type="text/javascript">
+    </script>
+    <script src="/js/offcanvas.js" type="text/javascript">
+    </script>
+    <link rel="stylesheet" href="/css/docco.css">
+    <script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.0.1/build/highlight.min.js"></script>
+    <script>hljs.highlightAll();</script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/output/css/arduino-light.css b/output/css/arduino-light.css
new file mode 100644
index 0000000..d34c443
--- /dev/null
+++ b/output/css/arduino-light.css
@@ -0,0 +1,89 @@
+/*
+
+Arduino® Light Theme - Stefania Mellai <s.mellai@arduino.cc>
+
+From https://raw.githubusercontent.com/highlightjs/highlight.js/main/src/styles/arduino-light.css
+
+Modified the background to be #f5f5f5
+
+*/
+
+.hljs {
+  background: #f5f5f5;
+  color: #434f54;
+}
+
+.hljs-subst {
+  color: #434f54;
+}
+
+.hljs-keyword,
+.hljs-attribute,
+.hljs-selector-tag,
+.hljs-doctag,
+.hljs-name {
+  color: #00979D;
+}
+
+.hljs-built_in,
+.hljs-literal,
+.hljs-bullet,
+.hljs-code,
+.hljs-addition {
+  color: #D35400;
+}
+
+.hljs-regexp,
+.hljs-symbol,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #00979D;
+}
+
+.hljs-type,
+.hljs-string,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-quote,
+.hljs-template-tag,
+.hljs-deletion {
+  color: #005C5F;
+}
+
+.hljs-comment {
+  color: rgba(149,165,166,.8);
+}
+
+.hljs-meta .hljs-keyword {
+
+  color: #728E00;
+}
+
+.hljs-meta {
+  color: #434f54;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}
+
+.hljs-function {
+  color: #728E00;
+}
+
+.hljs-title,
+.hljs-section {
+  color: #880000;
+  font-weight: bold;
+}
+
+.hljs-number {
+  color: #8A7B52;
+}
diff --git a/output/css/bootstrap.css b/output/css/bootstrap.css
new file mode 100644
index 0000000..a9f35ce
--- /dev/null
+++ b/output/css/bootstrap.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/output/css/docco.css b/output/css/docco.css
new file mode 100644
index 0000000..c1284ae
--- /dev/null
+++ b/output/css/docco.css
@@ -0,0 +1,94 @@
+/*
+Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
+https://raw.githubusercontent.com/highlightjs/highlight.js/main/src/styles/docco.css
+Use whatever background pre or code has
+*/
+
+.hljs {
+  color: #000;
+}
+
+.hljs-comment,
+.hljs-quote {
+  color: #408080;
+  font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-subst {
+  color: #954121;
+}
+
+.hljs-number {
+  color: #40a070;
+}
+
+.hljs-string,
+.hljs-doctag {
+  color: #219161;
+}
+
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-section,
+.hljs-type {
+  color: #19469d;
+}
+
+.hljs-params {
+  color: #00f;
+}
+
+.hljs-title {
+  color: #458;
+  font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+  color: #000080;
+  font-weight: normal;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+  color: #008080;
+}
+
+.hljs-regexp,
+.hljs-link {
+  color: #b68;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+  color: #990073;
+}
+
+.hljs-built_in {
+  color: #0086b3;
+}
+
+.hljs-meta {
+  color: #999;
+  font-weight: bold;
+}
+
+.hljs-deletion {
+  background: #fdd;
+}
+
+.hljs-addition {
+  background: #dfd;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}
diff --git a/output/css/main.css b/output/css/main.css
new file mode 100755
index 0000000..26b4e6d
--- /dev/null
+++ b/output/css/main.css
@@ -0,0 +1,218 @@
+/* ==========================================================================
+   Author's custom styles
+   see also http://pythonhosted.org/Markdown/extensions/code_hilite.html
+   ========================================================================== */
+
+.codehilite .hll { background-color: #ffffcc }
+.codehilite .c { color: #60a0b0; font-style: italic } /* Comment */
+.codehilite .err { border: 1px solid #FF0000 } /* Error */
+.codehilite .k { color: #007020; font-weight: bold } /* Keyword */
+.codehilite .o { color: #666666 } /* Operator */
+.codehilite .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+.codehilite .cp { color: #007020 } /* Comment.Preproc */
+.codehilite .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+.codehilite .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.codehilite .gd { color: #A00000 } /* Generic.Deleted */
+.codehilite .ge { font-style: italic } /* Generic.Emph */
+.codehilite .gr { color: #FF0000 } /* Generic.Error */
+.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.codehilite .gi { color: #00A000 } /* Generic.Inserted */
+.codehilite .go { color: #808080 } /* Generic.Output */
+.codehilite .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.codehilite .gs { font-weight: bold } /* Generic.Strong */
+.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.codehilite .gt { color: #0040D0 } /* Generic.Traceback */
+.codehilite .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.codehilite .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.codehilite .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.codehilite .kp { color: #007020 } /* Keyword.Pseudo */
+.codehilite .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.codehilite .kt { color: #902000 } /* Keyword.Type */
+.codehilite .m { color: #40a070 } /* Literal.Number */
+.codehilite .s { color: #4070a0 } /* Literal.String */
+.codehilite .na { color: #4070a0 } /* Name.Attribute */
+.codehilite .nb { color: #007020 } /* Name.Builtin */
+.codehilite .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.codehilite .no { color: #60add5 } /* Name.Constant */
+.codehilite .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.codehilite .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.codehilite .ne { color: #007020 } /* Name.Exception */
+.codehilite .nf { color: #06287e } /* Name.Function */
+.codehilite .nl { color: #002070; font-weight: bold } /* Name.Label */
+.codehilite .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.codehilite .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.codehilite .nv { color: #bb60d5 } /* Name.Variable */
+.codehilite .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.codehilite .w { color: #bbbbbb } /* Text.Whitespace */
+.codehilite .mf { color: #40a070 } /* Literal.Number.Float */
+.codehilite .mh { color: #40a070 } /* Literal.Number.Hex */
+.codehilite .mi { color: #40a070 } /* Literal.Number.Integer */
+.codehilite .mo { color: #40a070 } /* Literal.Number.Oct */
+.codehilite .sb { color: #4070a0 } /* Literal.String.Backtick */
+.codehilite .sc { color: #4070a0 } /* Literal.String.Char */
+.codehilite .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.codehilite .s2 { color: #4070a0 } /* Literal.String.Double */
+.codehilite .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.codehilite .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.codehilite .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.codehilite .sx { color: #c65d09 } /* Literal.String.Other */
+.codehilite .sr { color: #235388 } /* Literal.String.Regex */
+.codehilite .s1 { color: #4070a0 } /* Literal.String.Single */
+.codehilite .ss { color: #517918 } /* Literal.String.Symbol */
+.codehilite .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.codehilite .vc { color: #bb60d5 } /* Name.Variable.Class */
+.codehilite .vg { color: #bb60d5 } /* Name.Variable.Global */
+.codehilite .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.codehilite .il { color: #40a070 } /* Literal.Number.Integer.Long */
+
+/*
+    Olingos manual style
+*/
+
+.tablehome {
+	border-collapse: collapse;
+	border: 0px;
+    width: 100%
+
+}
+
+.tdhome {
+	border: 0px;
+	padding: 5px;
+}
+
+th {
+    border: 1px solid black;
+    background: lightgrey;
+    padding: 5px;
+}
+
+
+table {
+    border-collapse: collapse;
+    border: 0px solid lightgrey;
+}
+
+td {
+    border: 1px solid lightgrey;
+    padding: 5px;
+}
+
+th {
+    border: 1px solid black;
+    background: lightgrey;
+    padding: 5px;
+}
+
+body > div[class="container"] p,
+body > div[class="container"] li,
+body > div[class="container"] code {
+/*    
+    white-space: pre-wrap; 
+    white-space: -moz-pre-wrap !important; 
+    white-space: -pre-wrap; 
+    white-space: -o-pre-wrap; 
+*/
+    word-wrap: break-word;
+}
+
+.centeredImage {
+    text-align:center;
+    margin-top:0px;
+    margin-bottom:0px;
+    padding:0px;
+}
+
+/*
+    http://onepcssgrid.mattimling.com/
+*/
+
+.onepcssgrid-1000, .onepcssgrid-1200 {
+	margin: 0 auto;
+	padding: 0 0 0 1%; /* THAT'S THE NAME ;) */
+}
+
+.onepcssgrid-1200 {
+	max-width: 1220px;
+}
+
+.onepcssgrid-1000 {
+	max-width: 1020px;
+}
+
+.onerow {
+	clear: both;
+	padding: 0 10px;
+}
+
+.col1, .col2, .col3, .col4, .col5, .col6, .col7, .col8, .col9, .col10, .col11, .col12 {
+	float: left;
+	margin: 0 3% 0 0;
+}
+
+.col1.last, .col2.last, .col3.last, .col4.last, .col5.last, .col6.last, .col7.last, .col8.last, .col9.last, .col10.last, .col11.last, .col12 {
+	margin: 0;
+}
+
+.col1 { width: 5.5%; }
+.col2 { width: 14%; }
+.col3 { width: 22.5%; }
+.col4 { width: 31%; }
+.col5 { width: 39.5%; }
+.col6 { width: 48%; }
+.col7 { width: 56.5%; }
+.col8 { width: 65%; }
+.col9 { width: 73.5%; }
+.col10 { width: 82%; }
+.col11 { width: 90.5%; }
+.col12 { width: 99%; margin: 0; }
+
+.col1 img, .col2 img, .col3 img, .col4 img, .col5 img, .col6 img, .col7 img, .col8 img, .col9 img, .col10 img, .col11 img, .col12 img {
+	width: 100%;
+	height: auto;
+	display: block;
+}
+
+@media all and (min-width: 1024px) {
+	.onepcssgrid-1000 {
+		max-width: 1000px;
+	}
+
+	.onepcssgrid-1000 .onerow {
+		padding: 0;
+	}
+}
+
+@media all and (max-width: 768px) {
+	.onerow {
+	}
+
+	.col1, .col2, .col3, .col4, .col5, .col6, .col7, .col8, .col9, .col10, .col11 {
+		float: none;
+		width: 99%;
+	}
+}
+
+h1 {
+  font-size: 240%;
+}
+
+h2 {
+  font-size: 180%;
+}
+
+h3 {
+  font-size: 140%;
+}
+
+h4 {
+  font-size: 120%;
+}
+
+h5 {
+  font-size: 110%;
+}
+
+h6 {
+  font-size: 100%;
+}
\ No newline at end of file
diff --git a/output/css/navbar.css b/output/css/navbar.css
new file mode 100644
index 0000000..d219524
--- /dev/null
+++ b/output/css/navbar.css
@@ -0,0 +1,8 @@
+body {
+  padding-top: 20px;
+  padding-bottom: 20px;
+}
+
+.navbar {
+  margin-bottom: 20px;
+}
diff --git a/output/css/offcanvas.css b/output/css/offcanvas.css
new file mode 100644
index 0000000..684929a
--- /dev/null
+++ b/output/css/offcanvas.css
@@ -0,0 +1,56 @@
+/*
+ * Style tweaks
+ * --------------------------------------------------
+ */
+html,
+body {
+  overflow-x: hidden; /* Prevent scroll on narrow devices */
+}
+footer {
+  padding: 30px 0;
+}
+
+/*
+ * Off Canvas
+ * --------------------------------------------------
+ */
+@media screen and (max-width: 767px) {
+  .row-offcanvas {
+    position: relative;
+    -webkit-transition: all .25s ease-out;
+         -o-transition: all .25s ease-out;
+            transition: all .25s ease-out;
+  }
+
+  .row-offcanvas-right {
+    right: 0;
+  }
+
+  .row-offcanvas-left {
+    left: 0;
+  }
+
+  .row-offcanvas-right
+  .sidebar-offcanvas {
+    right: -50%; /* 6 columns */
+  }
+
+  .row-offcanvas-left
+  .sidebar-offcanvas {
+    left: -50%; /* 6 columns */
+  }
+
+  .row-offcanvas-right.active {
+    right: 50%; /* 6 columns */
+  }
+
+  .row-offcanvas-left.active {
+    left: 50%; /* 6 columns */
+  }
+
+  .sidebar-offcanvas {
+    position: absolute;
+    top: 0;
+    width: 50%; /* 6 columns */
+  }
+}
diff --git a/output/doap_Olingo.rdf b/output/doap_Olingo.rdf
new file mode 100644
index 0000000..6d3d5c5
--- /dev/null
+++ b/output/doap_Olingo.rdf
@@ -0,0 +1,205 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
+<rdf:RDF xml:lang="en"
+         xmlns="http://usefulinc.com/ns/doap#"
+         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:asfext="http://projects.apache.org/ns/asfext#"
+         xmlns:foaf="http://xmlns.com/foaf/0.1/">
+<!--
+    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.
+-->
+  <Project rdf:about="http://olingo.apache.org">
+    <created>2014-03-28</created>
+    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
+    <name>Apache Olingo</name>
+    <homepage rdf:resource="http://olingo.apache.org" />
+    <asfext:pmc rdf:resource="http://olingo.apache.org" />
+    <shortdesc>Apache Olingo is a Java and JavaScript library that implements the Open Data Protocol (OData). Apache Olingo serves client and server aspects of OData. It currently supports OData 2.0 and OData 4.0 (beta). The latter is the OASIS version of the protocol: OASIS Open Data Protocol (OData) TC.
+    </shortdesc>
+    <description>Apache Olingo is a Java library that implements the Open Data Protocol (OData). Apache Olingo serves client and server aspects of OData. It currently supports OData 2.0 and support OData 4.0 (beta). The latter is the OASIS version of the protocol: OASIS Open Data Protocol (OData) TC.
+
+The extensions part of Olingo for OData 2.0 contains additional features like the support of JPA persistency or annotated bean classes.
+    </description>
+    <bug-database rdf:resource="https://issues.apache.org/jira/browse/OLINGO" />
+    <mailing-list rdf:resource="http://olingo.apache.org/support.html" />
+    <download-page rdf:resource="http://olingo.apache.org/download.html" />
+    <programming-language>Java</programming-language>
+    <programming-language>JavaScript</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/library" />
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2020-12-27</created>
+        <revision>4.8.0</revision>
+      </Version>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2019-12-04</created>
+        <revision>4.7.0</revision>
+      </Version>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2019-12-25</created>
+        <revision>4.7.1</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2019-05-05</created>
+        <revision>4.6.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2018-08-13</created>
+        <revision>4.5.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2015-12-21</created>
+        <revision>4.1.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2015-09-21</created>
+        <revision>4.0.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2015-01-29</created>
+        <revision>4.0.0-beta-02</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 4.0 Library for Java</name>
+        <created>2014-09-23</created>
+        <revision>4.0.0-beta-01</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData Client for JavaScript</name>
+        <created>2014-09-15</created>
+        <revision>4.0.0-beta-01</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2019-02-16</created>
+        <revision>2.0.11</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2017-07-08</created>
+        <revision>2.0.9</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2016-01-29</created>
+        <revision>2.0.6</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2015-10-05</created>
+        <revision>2.0.5</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2015-05-31</created>
+        <revision>2.0.4</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2015-03-05</created>
+        <revision>2.0.3</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2015-01-30</created>
+        <revision>2.0.2</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2014-11-07</created>
+        <revision>2.0.1</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2014-07-11</created>
+        <revision>2.0.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2014-03-24</created>
+        <revision>1.2.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2014-02-10</created>
+        <revision>1.1.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>OData 2.0 Library</name>
+        <created>2013-10-16</created>
+        <revision>1.0.0</revision>
+      </Version>
+    </release>
+    <maintainer>
+      <foaf:Person>
+        <foaf:name>Michael Bolz</foaf:name>
+          <foaf:mbox rdf:resource="mailto:mibo@apache.org"/>
+      </foaf:Person>
+    </maintainer>
+    <asfext:implements><asfext:Standard>
+      <asfext:title>OASIS Open Data Protocol (OData)</asfext:title>
+      <asfext:body>OASIS</asfext:body>
+      <asfext:id>ODATA</asfext:id>
+      <asfext:url rdf:resource="http://www.oasis-open.org/committees/odata"/>
+    </asfext:Standard></asfext:implements>
+  </Project>
+</rdf:RDF>
diff --git a/output/doc/javascript/apidoc/DataCache.html b/output/doc/javascript/apidoc/DataCache.html
new file mode 100644
index 0000000..00b8df3
--- /dev/null
+++ b/output/doc/javascript/apidoc/DataCache.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/DataCacheOperation.html b/output/doc/javascript/apidoc/DataCacheOperation.html
new file mode 100644
index 0000000..84ca998
--- /dev/null
+++ b/output/doc/javascript/apidoc/DataCacheOperation.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/DjsDeferred.html b/output/doc/javascript/apidoc/DjsDeferred.html
new file mode 100644
index 0000000..cdbbefb
--- /dev/null
+++ b/output/doc/javascript/apidoc/DjsDeferred.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/ODataCacheSource.html b/output/doc/javascript/apidoc/ODataCacheSource.html
new file mode 100644
index 0000000..5400077
--- /dev/null
+++ b/output/doc/javascript/apidoc/ODataCacheSource.html
@@ -0,0 +1,589 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Class: ODataCacheSource</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Class: ODataCacheSource</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    ODataCacheSource
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+<dt>
+    <h4 class="name" id="ODataCacheSource"><span class="type-signature"></span>new ODataCacheSource<span class="signature">(options)</span><span class="type-signature"> &rarr; {<a href="ODataCacheSource.html">ODataCacheSource</a>}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a data cache source object for requesting data from an OData service.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>options</code></td>
+            
+            
+            <td class="type">
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Options for the cache data source.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="source.js.html">cache/source.js</a>, <a href="source.js.html#line153">line 153</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    A new data cache source instance.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type"><a href="ODataCacheSource.html">ODataCacheSource</a></span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="count"><span class="type-signature"></span>count<span class="signature">(success, error)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Gets the number of items in the collection.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Success callback with the item count.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Error callback.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="source.js.html">cache/source.js</a>, <a href="source.js.html#line165">line 165</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    Request object with an abort method.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="read"><span class="type-signature"></span>read<span class="signature">(index, count, success, error)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Gets a number of consecutive items from the collection.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>index</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Number</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Zero-based index of the items to retrieve.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>count</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Number</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Number of items to retrieve.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Success callback with the requested items.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Error callback.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="source.js.html">cache/source.js</a>, <a href="source.js.html#line186">line 186</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    Request object with an abort method.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:27 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/batch.html b/output/doc/javascript/apidoc/batch.html
new file mode 100644
index 0000000..0f13b43
--- /dev/null
+++ b/output/doc/javascript/apidoc/batch.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/batch.js.html b/output/doc/javascript/apidoc/batch.js.html
new file mode 100644
index 0000000..5a4c160
--- /dev/null
+++ b/output/doc/javascript/apidoc/batch.js.html
@@ -0,0 +1,426 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata/batch.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata/batch.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module odata/batch */

+

+var utils    = require('./../utils.js');

+var odataUtils    = require('./odatautils.js');

+var odataHandler = require('./handler.js');

+

+var extend = utils.extend;

+var isArray = utils.isArray;

+var trimString = utils.trimString;

+

+var contentType = odataHandler.contentType;

+var handler = odataHandler.handler;

+var isBatch = odataUtils.isBatch;

+var MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;

+var normalizeHeaders = odataUtils.normalizeHeaders;

+//TODO var payloadTypeOf = odata.payloadTypeOf;

+var prepareRequest = odataUtils.prepareRequest;

+

+

+// Imports

+

+// CONTENT START

+var batchMediaType = "multipart/mixed";

+var responseStatusRegex = /^HTTP\/1\.\d (\d{3}) (.*)$/i;

+var responseHeaderRegex = /^([^()&lt;>@,;:\\"\/[\]?={} \t]+)\s?:\s?(.*)/;

+

+/** Calculates a random 16 bit number and returns it in hexadecimal format.

+ * @returns {String} A 16-bit number in hex format.

+ */

+function hex16() {

+

+    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);

+}

+

+/** Creates a string that can be used as a multipart request boundary.

+ * @param {String} [prefix] - 

+ * @returns {String} Boundary string of the format: &lt;prefix>&lt;hex16>-&lt;hex16>-&lt;hex16>

+ */

+function createBoundary(prefix) {

+

+    return prefix + hex16() + "-" + hex16() + "-" + hex16();

+}

+

+/** Gets the handler for data serialization of individual requests / responses in a batch.

+ * @param context - Context used for data serialization.

+ * @returns Handler object

+ */

+function partHandler(context) {

+

+    return context.handler.partHandler;

+}

+

+/** Gets the current boundary used for parsing the body of a multipart response.

+ * @param context - Context used for parsing a multipart response.

+ * @returns {String} Boundary string.

+ */

+function currentBoundary(context) {

+    var boundaries = context.boundaries;

+    return boundaries[boundaries.length - 1];

+}

+

+/** Parses a batch response.

+ * @param handler - This handler.

+ * @param {String} text - Batch text.

+ * @param {Object} context - Object with parsing context.

+ * @return An object representation of the batch.

+ */

+function batchParser(handler, text, context) {

+

+    var boundary = context.contentType.properties["boundary"];

+    return { __batchResponses: readBatch(text, { boundaries: [boundary], handlerContext: context }) };

+}

+

+/** Serializes a batch object representation into text.

+ * @param handler - This handler.

+ * @param {Object} data - Representation of a batch.

+ * @param {Object} context - Object with parsing context.

+ * @return An text representation of the batch object; undefined if not applicable.#

+ */

+function batchSerializer(handler, data, context) {

+

+    var cType = context.contentType = context.contentType || contentType(batchMediaType);

+    if (cType.mediaType === batchMediaType) {

+        return writeBatch(data, context);

+    }

+}

+

+/** Parses a multipart/mixed response body from from the position defined by the context.

+ * @param {String}  text - Body of the multipart/mixed response.

+ * @param context - Context used for parsing.

+ * @return Array of objects representing the individual responses.

+ */

+function readBatch(text, context) {

+    var delimiter = "--" + currentBoundary(context);

+

+    // Move beyond the delimiter and read the complete batch

+    readTo(text, context, delimiter);

+

+    // Ignore the incoming line

+    readLine(text, context);

+

+    // Read the batch parts

+    var responses = [];

+    var partEnd = null;

+

+    while (partEnd !== "--" && context.position &lt; text.length) {

+        var partHeaders = readHeaders(text, context);

+        var partContentType = contentType(partHeaders["Content-Type"]);

+

+        var changeResponses;

+        if (partContentType && partContentType.mediaType === batchMediaType) {

+            context.boundaries.push(partContentType.properties.boundary);

+            try {

+                changeResponses = readBatch(text, context);

+            } catch (e) {

+                e.response = readResponse(text, context, delimiter);

+                changeResponses = [e];

+            }

+            responses.push({ __changeResponses: changeResponses });

+            context.boundaries.pop();

+            readTo(text, context, "--" + currentBoundary(context));

+        } else {

+            if (!partContentType || partContentType.mediaType !== "application/http") {

+                throw { message: "invalid MIME part type " };

+            }

+            // Skip empty line

+            readLine(text, context);

+            // Read the response

+            var response = readResponse(text, context, delimiter);

+            try {

+                if (response.statusCode >= 200 && response.statusCode &lt;= 299) {

+                    partHandler(context.handlerContext).read(response, context.handlerContext);

+                } else {

+                    // Keep track of failed responses and continue processing the batch.

+                    response = { message: "HTTP request failed", response: response };

+                }

+            } catch (e) {

+                response = e;

+            }

+

+            responses.push(response);

+        }

+

+        partEnd = text.substr(context.position, 2);

+

+        // Ignore the incoming line.

+        readLine(text, context);

+    }

+    return responses;

+}

+

+/** Parses the http headers in the text from the position defined by the context.

+ * @param {String} text - Text containing an http response's headers

+ * @param context - Context used for parsing.

+ * @returns Object containing the headers as key value pairs.

+ * This function doesn't support split headers and it will stop reading when it hits two consecutive line breaks.

+*/

+function readHeaders(text, context) {

+    var headers = {};

+    var parts;

+    var line;

+    var pos;

+

+    do {

+        pos = context.position;

+        line = readLine(text, context);

+        parts = responseHeaderRegex.exec(line);

+        if (parts !== null) {

+            headers[parts[1]] = parts[2];

+        } else {

+            // Whatever was found is not a header, so reset the context position.

+            context.position = pos;

+        }

+    } while (line && parts);

+

+    normalizeHeaders(headers);

+

+    return headers;

+}

+

+/** Parses an HTTP response.

+ * @param {String} text -Text representing the http response.

+ * @param context optional - Context used for parsing.

+ * @param {String} delimiter -String used as delimiter of the multipart response parts.

+ * @return Object representing the http response.

+ */

+function readResponse(text, context, delimiter) {

+    // Read the status line.

+    var pos = context.position;

+    var match = responseStatusRegex.exec(readLine(text, context));

+

+    var statusCode;

+    var statusText;

+    var headers;

+

+    if (match) {

+        statusCode = match[1];

+        statusText = match[2];

+        headers = readHeaders(text, context);

+        readLine(text, context);

+    } else {

+        context.position = pos;

+    }

+

+    return {

+        statusCode: statusCode,

+        statusText: statusText,

+        headers: headers,

+        body: readTo(text, context, "\r\n" + delimiter)

+    };

+}

+

+/** Returns a substring from the position defined by the context up to the next line break (CRLF).

+ * @param {String} text - Input string.

+ * @param context - Context used for reading the input string.

+ * @returns {String} Substring to the first ocurrence of a line break or null if none can be found. 

+ */

+function readLine(text, context) {

+

+    return readTo(text, context, "\r\n");

+}

+

+/** Returns a substring from the position given by the context up to value defined by the str parameter and increments the position in the context.

+ * @param {String} text - Input string.

+ * @param context - Context used for reading the input string.

+ * @param {String} [str] - Substring to read up to.

+ * @returns {String} Substring to the first ocurrence of str or the end of the input string if str is not specified. Null if the marker is not found.

+ */

+function readTo(text, context, str) {

+    var start = context.position || 0;

+    var end = text.length;

+    if (str) {

+        end = text.indexOf(str, start);

+        if (end === -1) {

+            return null;

+        }

+        context.position = end + str.length;

+    } else {

+        context.position = end;

+    }

+

+    return text.substring(start, end);

+}

+

+/** Serializes a batch request object to a string.

+ * @param data - Batch request object in payload representation format

+ * @param context - Context used for the serialization

+ * @returns {String} String representing the batch request

+ */

+function writeBatch(data, context) {

+    if (!isBatch(data)) {

+        throw { message: "Data is not a batch object." };

+    }

+

+    var batchBoundary = createBoundary("batch_");

+    var batchParts = data.__batchRequests;

+    var batch = "";

+    var i, len;

+    for (i = 0, len = batchParts.length; i &lt; len; i++) {

+        batch += writeBatchPartDelimiter(batchBoundary, false) +

+                 writeBatchPart(batchParts[i], context);

+    }

+    batch += writeBatchPartDelimiter(batchBoundary, true);

+

+    // Register the boundary with the request content type.

+    var contentTypeProperties = context.contentType.properties;

+    contentTypeProperties.boundary = batchBoundary;

+

+    return batch;

+}

+

+/** Creates the delimiter that indicates that start or end of an individual request.

+ * @param {String} boundary Boundary string used to indicate the start of the request

+ * @param {Boolean} close - Flag indicating that a close delimiter string should be generated

+ * @returns {String} Delimiter string

+ */

+function writeBatchPartDelimiter(boundary, close) {

+    var result = "\r\n--" + boundary;

+    if (close) {

+        result += "--";

+    }

+

+    return result + "\r\n";

+}

+

+/** Serializes a part of a batch request to a string. A part can be either a GET request or

+ * a change set grouping several CUD (create, update, delete) requests.

+ * @param part - Request or change set object in payload representation format

+ * @param context - Object containing context information used for the serialization

+ * @param {boolean} [nested] - 

+ * @returns {String} String representing the serialized part

+ * A change set is an array of request objects and they cannot be nested inside other change sets.

+ */

+function writeBatchPart(part, context, nested) {

+    

+

+    var changeSet = part.__changeRequests;

+    var result;

+    if (isArray(changeSet)) {

+        if (nested) {

+            throw { message: "Not Supported: change set nested in other change set" };

+        }

+

+        var changeSetBoundary = createBoundary("changeset_");

+        result = "Content-Type: " + batchMediaType + "; boundary=" + changeSetBoundary + "\r\n";

+        var i, len;

+        for (i = 0, len = changeSet.length; i &lt; len; i++) {

+            result += writeBatchPartDelimiter(changeSetBoundary, false) +

+                 writeBatchPart(changeSet[i], context, true);

+        }

+

+        result += writeBatchPartDelimiter(changeSetBoundary, true);

+    } else {

+        result = "Content-Type: application/http\r\nContent-Transfer-Encoding: binary\r\n\r\n";

+        var partContext = extend({}, context);

+        partContext.handler = handler;

+        partContext.request = part;

+        partContext.contentType = null;

+

+        prepareRequest(part, partHandler(context), partContext);

+        result += writeRequest(part);

+    }

+

+    return result;

+}

+

+/** Serializes a request object to a string.

+ * @param request - Request object to serialize

+ * @returns {String} String representing the serialized request

+ */

+function writeRequest(request) {

+    var result = (request.method ? request.method : "GET") + " " + request.requestUri + " HTTP/1.1\r\n";

+    for (var name in request.headers) {

+        if (request.headers[name]) {

+            result = result + name + ": " + request.headers[name] + "\r\n";

+        }

+    }

+

+    result += "\r\n";

+

+    if (request.body) {

+        result += request.body;

+    }

+

+    return result;

+}

+

+

+

+/** batchHandler (see {@link module:odata/batch~batchParser}) */

+exports.batchHandler = handler(batchParser, batchSerializer, batchMediaType, MAX_DATA_SERVICE_VERSION);

+

+/** batchSerializer (see {@link module:odata/batch~batchSerializer}) */

+exports.batchSerializer = batchSerializer;

+

+/** writeRequest (see {@link module:odata/batch~writeRequest}) */

+exports.writeRequest = writeRequest;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/cache.js.html b/output/doc/javascript/apidoc/cache.js.html
new file mode 100644
index 0000000..9cffabe
--- /dev/null
+++ b/output/doc/javascript/apidoc/cache.js.html
@@ -0,0 +1,1495 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: cache.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: cache.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+ /** @module cache */

+

+//var odatajs = require('./odatajs/utils.js');

+var utils =  require('./utils.js');

+var deferred = require('./deferred.js');

+var storeReq = require('./store.js');

+var cacheSource = require('./cache/source.js');

+

+

+var assigned = utils.assigned;

+var delay = utils.delay;

+var extend = utils.extend;

+var djsassert = utils.djsassert;

+var isArray = utils.isArray;

+var normalizeURI = utils.normalizeURI;

+var parseInt10 = utils.parseInt10;

+var undefinedDefault = utils.undefinedDefault;

+

+var createDeferred = deferred.createDeferred;

+var DjsDeferred = deferred.DjsDeferred;

+

+

+var getJsonValueArraryLength = utils.getJsonValueArraryLength;

+var sliceJsonValueArray = utils.sliceJsonValueArray;

+var concatJsonValueArray = utils.concatJsonValueArray;

+

+

+

+/** Appends a page's data to the operation data.

+ * @param {Object} operation - Operation with  (i)ndex, (c)ount and (d)ata.

+ * @param {Object} page - Page with (i)ndex, (c)ount and (d)ata.

+ */

+function appendPage(operation, page) {

+

+    var intersection = intersectRanges(operation, page);

+    var start = 0;

+    var end = 0;

+    if (intersection) {

+        start = intersection.i - page.i;

+        end = start + (operation.c - getJsonValueArraryLength(operation.d));

+    }

+

+    operation.d = concatJsonValueArray(operation.d, sliceJsonValueArray(page.d, start, end));

+}

+

+/** Returns the {(i)ndex, (c)ount} range for the intersection of x and y.

+ * @param {Object} x - Range with (i)ndex and (c)ount members.

+ * @param {Object} y - Range with (i)ndex and (c)ount members.

+ * @returns {Object} The intersection (i)ndex and (c)ount; undefined if there is no intersection.

+ */

+function intersectRanges(x, y) {

+

+    var xLast = x.i + x.c;

+    var yLast = y.i + y.c;

+    var resultIndex = (x.i > y.i) ? x.i : y.i;

+    var resultLast = (xLast &lt; yLast) ? xLast : yLast;

+    var result;

+    if (resultLast >= resultIndex) {

+        result = { i: resultIndex, c: resultLast - resultIndex };

+    }

+

+    return result;

+}

+

+/** Checks whether val is a defined number with value zero or greater.

+ * @param {Number} val - Value to check.

+ * @param {String} name - Parameter name to use in exception.

+ * @throws Throws an exception if the check fails

+ */

+function checkZeroGreater(val, name) {

+

+    if (val === undefined || typeof val !== "number") {

+        throw { message: "'" + name + "' must be a number." };

+    }

+

+    if (isNaN(val) || val &lt; 0 || !isFinite(val)) {

+        throw { message: "'" + name + "' must be greater than or equal to zero." };

+    }

+}

+

+/** Checks whether val is undefined or a number with value greater than zero.

+ * @param {Number} val - Value to check.

+ * @param {String} name - Parameter name to use in exception.

+ * @throws Throws an exception if the check fails

+ */

+function checkUndefinedGreaterThanZero(val, name) {

+

+    if (val !== undefined) {

+        if (typeof val !== "number") {

+            throw { message: "'" + name + "' must be a number." };

+        }

+

+        if (isNaN(val) || val &lt;= 0 || !isFinite(val)) {

+            throw { message: "'" + name + "' must be greater than zero." };

+        }

+    }

+}

+

+/** Checks whether val is undefined or a number

+ * @param {Number} val - Value to check.

+ * @param {String} name - Parameter name to use in exception.

+ * @throws Throws an exception if the check fails

+ */

+function checkUndefinedOrNumber(val, name) {

+    if (val !== undefined && (typeof val !== "number" || isNaN(val) || !isFinite(val))) {

+        throw { message: "'" + name + "' must be a number." };

+    }

+}

+

+/** Performs a linear search on the specified array and removes the first instance of 'item'.

+ * @param {Array} arr - Array to search.

+ * @param {*} item - Item being sought.

+ * @returns {Boolean} true if the item was removed otherwise false

+ */

+function removeFromArray(arr, item) {

+

+    var i, len;

+    for (i = 0, len = arr.length; i &lt; len; i++) {

+        if (arr[i] === item) {

+            arr.splice(i, 1);

+            return true;

+        }

+    }

+

+    return false;

+}

+

+/** Estimates the size of an object in bytes.

+ * Object trees are traversed recursively

+ * @param {Object} object - Object to determine the size of.

+ * @returns {Number} Estimated size of the object in bytes.

+ */

+function estimateSize(object) {

+    var size = 0;

+    var type = typeof object;

+

+    if (type === "object" && object) {

+        for (var name in object) {

+            size += name.length * 2 + estimateSize(object[name]);

+        }

+    } else if (type === "string") {

+        size = object.length * 2;

+    } else {

+        size = 8;

+    }

+    return size;

+}

+

+/** Snaps low and high indices into page sizes and returns a range.

+ * @param {Number} lowIndex - Low index to snap to a lower value.

+ * @param {Number} highIndex - High index to snap to a higher value.

+ * @param {Number} pageSize - Page size to snap to.

+ * @returns {Object} A range with (i)ndex and (c)ount of elements.

+ */

+function snapToPageBoundaries(lowIndex, highIndex, pageSize) {

+    lowIndex = Math.floor(lowIndex / pageSize) * pageSize;

+    highIndex = Math.ceil((highIndex + 1) / pageSize) * pageSize;

+    return { i: lowIndex, c: highIndex - lowIndex };

+}

+

+// The DataCache is implemented using state machines.  The following constants are used to properly

+// identify and label the states that these machines transition to.

+var CACHE_STATE_DESTROY  = "destroy";

+var CACHE_STATE_IDLE     = "idle";

+var CACHE_STATE_INIT     = "init";

+var CACHE_STATE_READ     = "read";

+var CACHE_STATE_PREFETCH = "prefetch";

+var CACHE_STATE_WRITE    = "write";

+

+// DataCacheOperation state machine states.

+// Transitions on operations also depend on the cache current of the cache.

+var OPERATION_STATE_CANCEL = "cancel";

+var OPERATION_STATE_END    = "end";

+var OPERATION_STATE_ERROR  = "error";

+var OPERATION_STATE_START  = "start";

+var OPERATION_STATE_WAIT   = "wait";

+

+// Destroy state machine states

+var DESTROY_STATE_CLEAR = "clear";

+

+// Read / Prefetch state machine states

+var READ_STATE_DONE   = "done";

+var READ_STATE_LOCAL  = "local";

+var READ_STATE_SAVE   = "save";

+var READ_STATE_SOURCE = "source";

+

+/** Creates a new operation object.

+ * @class DataCacheOperation

+ * @param {Function} stateMachine - State machine that describes the specific behavior of the operation.

+ * @param {DjsDeferred} promise - Promise for requested values.

+ * @param {Boolean} isCancelable - Whether this operation can be canceled or not.

+ * @param {Number} index - Index of first item requested.

+ * @param {Number} count - Count of items requested.

+ * @param {Array} data - Array with the items requested by the operation.

+ * @param {Number} pending - Total number of pending prefetch records.

+ * @returns {DataCacheOperation} A new data cache operation instance.

+ */

+function DataCacheOperation(stateMachine, promise, isCancelable, index, count, data, pending) {

+

+   var stateData;

+    var cacheState;

+    var that = this;

+

+    that.p = promise;

+    that.i = index;

+    that.c = count;

+    that.d = data;

+    that.s = OPERATION_STATE_START;

+

+    that.canceled = false;

+    that.pending = pending;

+    that.oncomplete = null;

+

+    /** Transitions this operation to the cancel state and sets the canceled flag to true.

+     * The function is a no-op if the operation is non-cancelable.

+     * @method DataCacheOperation#cancel

+     */

+    that.cancel = function cancel() {

+

+        if (!isCancelable) {

+            return;

+        }

+

+        var state = that.s;

+        if (state !== OPERATION_STATE_ERROR && state !== OPERATION_STATE_END && state !== OPERATION_STATE_CANCEL) {

+            that.canceled = true;

+            that.transition(OPERATION_STATE_CANCEL, stateData);

+        }

+    };

+

+    /** Transitions this operation to the end state.

+     * @method DataCacheOperation#complete

+     */

+    that.complete = function () {

+

+        djsassert(that.s !== OPERATION_STATE_END, "DataCacheOperation.complete() - operation is in the end state", that);

+        that.transition(OPERATION_STATE_END, stateData);

+    };

+

+    /** Transitions this operation to the error state.

+     * @method DataCacheOperation#error

+     */

+    that.error = function (err) {

+        if (!that.canceled) {

+            djsassert(that.s !== OPERATION_STATE_END, "DataCacheOperation.error() - operation is in the end state", that);

+            djsassert(that.s !== OPERATION_STATE_ERROR, "DataCacheOperation.error() - operation is in the error state", that);

+            that.transition(OPERATION_STATE_ERROR, err);

+        }

+    };

+

+    /** Executes the operation's current state in the context of a new cache state.

+     * @method DataCacheOperation#run

+     * @param {Object} state - New cache state.

+     */

+    that.run = function (state) {

+

+        cacheState = state;

+        that.transition(that.s, stateData);

+    };

+

+    /** Transitions this operation to the wait state.

+     * @method DataCacheOperation#wait

+     */

+    that.wait = function (data) {

+

+        djsassert(that.s !== OPERATION_STATE_END, "DataCacheOperation.wait() - operation is in the end state", that);

+        that.transition(OPERATION_STATE_WAIT, data);

+    };

+

+    /** State machine that describes all operations common behavior.

+     * @method DataCacheOperation#operationStateMachine

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+     * @param {Object} [data] - Additional data passed to the state.

+     */

+    var operationStateMachine = function (opTargetState, cacheState, data) {

+

+        switch (opTargetState) {

+            case OPERATION_STATE_START:

+                // Initial state of the operation. The operation will remain in this state until the cache has been fully initialized.

+                if (cacheState !== CACHE_STATE_INIT) {

+                    stateMachine(that, opTargetState, cacheState, data);

+                }

+                break;

+

+            case OPERATION_STATE_WAIT:

+                // Wait state indicating that the operation is active but waiting for an asynchronous operation to complete.

+                stateMachine(that, opTargetState, cacheState, data);

+                break;

+

+            case OPERATION_STATE_CANCEL:

+                // Cancel state.

+                stateMachine(that, opTargetState, cacheState, data);

+                that.fireCanceled();

+                that.transition(OPERATION_STATE_END);

+                break;

+

+            case OPERATION_STATE_ERROR:

+                // Error state. Data is expected to be an object detailing the error condition.

+                stateMachine(that, opTargetState, cacheState, data);

+                that.canceled = true;

+                that.fireRejected(data);

+                that.transition(OPERATION_STATE_END);

+                break;

+

+            case OPERATION_STATE_END:

+                // Final state of the operation.

+                if (that.oncomplete) {

+                    that.oncomplete(that);

+                }

+                if (!that.canceled) {

+                    that.fireResolved();

+                }

+                stateMachine(that, opTargetState, cacheState, data);

+                break;

+

+            default:

+                // Any other state is passed down to the state machine describing the operation's specific behavior.

+

+                if (true) {

+                    // Check that the state machine actually handled the sate.

+                    var handled = stateMachine(that, opTargetState, cacheState, data);

+                    djsassert(handled, "Bad operation state: " + opTargetState + " cacheState: " + cacheState, this);

+                } else {

+

+                    stateMachine(that, opTargetState, cacheState, data);

+

+                }

+

+                break;

+        }

+    };

+

+

+

+    /** Transitions this operation to a new state.

+     * @method DataCacheOperation#transition

+     * @param {Object} state - State to transition the operation to.

+     * @param {Object} [data] - 

+     */

+    that.transition = function (state, data) {

+        that.s = state;

+        stateData = data;

+        operationStateMachine(state, cacheState, data);

+    };

+    

+    return that;

+}

+

+/** Fires a resolved notification as necessary.

+ * @method DataCacheOperation#fireResolved

+ */

+DataCacheOperation.prototype.fireResolved = function () {

+

+    // Fire the resolve just once.

+    var p = this.p;

+    if (p) {

+        this.p = null;

+        p.resolve(this.d);

+    }

+};

+

+/** Fires a rejected notification as necessary.

+ * @method DataCacheOperation#fireRejected

+ */

+DataCacheOperation.prototype.fireRejected = function (reason) {

+

+    // Fire the rejection just once.

+    var p = this.p;

+    if (p) {

+        this.p = null;

+        p.reject(reason);

+    }

+};

+

+/** Fires a canceled notification as necessary.

+ * @method DataCacheOperation#fireCanceled

+ */

+DataCacheOperation.prototype.fireCanceled = function () {

+

+    this.fireRejected({ canceled: true, message: "Operation canceled" });

+};

+

+

+/** Creates a data cache for a collection that is efficiently loaded on-demand.

+ * @class DataCache

+ * @param options - Options for the data cache, including name, source, pageSize,

+ * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.

+ * @returns {DataCache} A new data cache instance.

+ */

+function DataCache(options) {

+

+    var state = CACHE_STATE_INIT;

+    var stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };

+

+    var clearOperations = [];

+    var readOperations = [];

+    var prefetchOperations = [];

+

+    var actualCacheSize = 0;                                             // Actual cache size in bytes.

+    var allDataLocal = false;                                            // Whether all data is local.

+    var cacheSize = undefinedDefault(options.cacheSize, 1048576);        // Requested cache size in bytes, default 1 MB.

+    var collectionCount = 0;                                             // Number of elements in the server collection.

+    var highestSavedPage = 0;                                            // Highest index of all the saved pages.

+    var highestSavedPageSize = 0;                                        // Item count of the saved page with the highest index.

+    var overflowed = cacheSize === 0;                                    // If the cache has overflowed (actualCacheSize > cacheSize or cacheSize == 0);

+    var pageSize = undefinedDefault(options.pageSize, 50);               // Number of elements to store per page.

+    var prefetchSize = undefinedDefault(options.prefetchSize, pageSize); // Number of elements to prefetch from the source when the cache is idling.

+    var version = "1.0";

+    var cacheFailure;

+

+    var pendingOperations = 0;

+

+    var source = options.source;

+    if (typeof source === "string") {

+        // Create a new cache source.

+        source = new cacheSource.ODataCacheSource(options);

+    }

+    source.options = options;

+

+    // Create a cache local store.

+    var store = storeReq.createStore(options.name, options.mechanism);

+

+    var that = this;

+

+    that.onidle = options.idle;

+    that.stats = stats;

+

+    /** Counts the number of items in the collection.

+     * @method DataCache#count

+     * @returns {Object} A promise with the number of items.

+     */

+    that.count = function () {

+

+        if (cacheFailure) {

+            throw cacheFailure;

+        }

+

+        var deferred = createDeferred();

+        var canceled = false;

+

+        if (allDataLocal) {

+            delay(function () {

+                deferred.resolve(collectionCount);

+            });

+

+            return deferred.promise();

+        }

+

+        // TODO: Consider returning the local data count instead once allDataLocal flag is set to true.

+        var request = source.count(function (count) {

+            request = null;

+            stats.counts++;

+            deferred.resolve(count);

+        }, function (err) {

+            request = null;

+            deferred.reject(extend(err, { canceled: canceled }));

+        });

+

+        return extend(deferred.promise(), {

+

+             /** Aborts the count operation (used within promise callback)

+              * @method DataCache#cancelCount

+              */

+            cancel: function () {

+               

+                if (request) {

+                    canceled = true;

+                    request.abort();

+                    request = null;

+                }

+            }

+        });

+    };

+

+    /** Cancels all running operations and clears all local data associated with this cache.

+     * New read requests made while a clear operation is in progress will not be canceled.

+     * Instead they will be queued for execution once the operation is completed.

+     * @method DataCache#clear

+     * @returns {Object} A promise that has no value and can't be canceled.

+     */

+    that.clear = function () {

+

+        if (cacheFailure) {

+            throw cacheFailure;

+        }

+

+        if (clearOperations.length === 0) {

+            var deferred = createDeferred();

+            var op = new DataCacheOperation(destroyStateMachine, deferred, false);

+            queueAndStart(op, clearOperations);

+            return deferred.promise();

+        }

+        return clearOperations[0].p;

+    };

+

+    /** Filters the cache data based a predicate.

+     * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.

+     * @method DataCache#filterForward

+     * @param {Number} index - The index of the item to start filtering forward from.

+     * @param {Number} count - Maximum number of items to include in the result.

+     * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.

+     * @returns {DjsDeferred} A promise for an array of results.

+     */

+    that.filterForward = function (index, count, predicate) {

+        return filter(index, count, predicate, false);

+    };

+

+    /** Filters the cache data based a predicate.

+     * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.

+     * @method DataCache#filterBack

+     * @param {Number} index - The index of the item to start filtering backward from.

+     * @param {Number} count - Maximum number of items to include in the result.

+     * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.

+     * @returns {DjsDeferred} A promise for an array of results.

+     */

+    that.filterBack = function (index, count, predicate) {

+        return filter(index, count, predicate, true);

+    };

+

+    /** Reads a range of adjacent records.

+     * New read requests made while a clear operation is in progress will not be canceled.

+     * Instead they will be queued for execution once the operation is completed.

+     * @method DataCache#readRange

+     * @param {Number} index - Zero-based index of record range to read.

+     * @param {Number} count - Number of records in the range.

+     * @returns {DjsDeferred} A promise for an array of records; less records may be returned if the

+     * end of the collection is found.

+     */

+    that.readRange = function (index, count) {

+

+        checkZeroGreater(index, "index");

+        checkZeroGreater(count, "count");

+

+        if (cacheFailure) {

+            throw cacheFailure;

+        }

+

+        var deferred = createDeferred();

+

+        // Merging read operations would be a nice optimization here.

+        var op = new DataCacheOperation(readStateMachine, deferred, true, index, count, {}, 0);

+        queueAndStart(op, readOperations);

+

+        return extend(deferred.promise(), {

+            cancel: function () {

+                /** Aborts the readRange operation  (used within promise callback)

+                 * @method DataCache#cancelReadRange

+                 */

+                op.cancel();

+            }

+        });

+    };

+

+    /** Creates an Observable object that enumerates all the cache contents.

+     * @method DataCache#toObservable

+     * @returns A new Observable object that enumerates all the cache contents.

+     */

+    that.ToObservable = that.toObservable = function () {

+        if ( !utils.inBrowser()) {

+            throw { message: "Only in broser supported" };

+        }

+

+        if (!window.Rx || !window.Rx.Observable) {

+            throw { message: "Rx library not available - include rx.js" };

+        }

+

+        if (cacheFailure) {

+            throw cacheFailure;

+        }

+

+        //return window.Rx.Observable.create(function (obs) {

+        return new window.Rx.Observable(function (obs) {

+            var disposed = false;

+            var index = 0;

+

+            var errorCallback = function (error) {

+                if (!disposed) {

+                    obs.onError(error);

+                }

+            };

+

+            var successCallback = function (data) {

+                if (!disposed) {

+                    var i, len;

+                    for (i = 0, len = data.value.length; i &lt; len; i++) {

+                        // The wrapper automatically checks for Dispose

+                        // on the observer, so we don't need to check it here.

+                        //obs.next(data.value[i]);

+                        obs.onNext(data.value[i]);

+                    }

+

+                    if (data.value.length &lt; pageSize) {

+                        //obs.completed();

+                        obs.onCompleted();

+                    } else {

+                        index += pageSize;

+                        that.readRange(index, pageSize).then(successCallback, errorCallback);

+                    }

+                }

+            };

+

+            that.readRange(index, pageSize).then(successCallback, errorCallback);

+

+            return { Dispose: function () { 

+                obs.dispose(); // otherwise the check isStopped obs.onNext(data.value[i]);

+                disposed = true; 

+                } };

+        });

+    };

+

+    /** Creates a function that handles a callback by setting the cache into failure mode.

+     * @method DataCache~cacheFailureCallback

+     * @param {String} message - Message text.

+     * @returns {Function} Function to use as error callback.

+     * This function will specifically handle problems with critical store resources

+     * during cache initialization.

+     */

+    var cacheFailureCallback = function (message) {

+        

+

+        return function (error) {

+            cacheFailure = { message: message, error: error };

+

+            // Destroy any pending clear or read operations.

+            // At this point there should be no prefetch operations.

+            // Count operations will go through but are benign because they

+            // won't interact with the store.

+            djsassert(prefetchOperations.length === 0, "prefetchOperations.length === 0");

+            var i, len;

+            for (i = 0, len = readOperations.length; i &lt; len; i++) {

+                readOperations[i].fireRejected(cacheFailure);

+            }

+            for (i = 0, len = clearOperations.length; i &lt; len; i++) {

+                clearOperations[i].fireRejected(cacheFailure);

+            }

+

+            // Null out the operation arrays.

+            readOperations = clearOperations = null;

+        };

+    };

+

+    /** Updates the cache's state and signals all pending operations of the change.

+     * @method DataCache~changeState

+     * @param {Object} newState - New cache state.

+     * This method is a no-op if the cache's current state and the new state are the same.

+     */

+    var changeState = function (newState) {

+

+        if (newState !== state) {

+            state = newState;

+            var operations = clearOperations.concat(readOperations, prefetchOperations);

+            var i, len;

+            for (i = 0, len = operations.length; i &lt; len; i++) {

+                operations[i].run(state);

+            }

+        }

+    };

+

+    /** Removes all the data stored in the cache.

+     * @method DataCache~clearStore

+     * @returns {DjsDeferred} A promise with no value.

+     */

+    var clearStore = function () {

+        djsassert(state === CACHE_STATE_DESTROY || state === CACHE_STATE_INIT, "DataCache.clearStore() - cache is not on the destroy or initialize state, current sate = " + state);

+

+        var deferred = new DjsDeferred();

+        store.clear(function () {

+

+            // Reset the cache settings.

+            actualCacheSize = 0;

+            allDataLocal = false;

+            collectionCount = 0;

+            highestSavedPage = 0;

+            highestSavedPageSize = 0;

+            overflowed = cacheSize === 0;

+

+            // version is not reset, in case there is other state in eg V1.1 that is still around.

+

+            // Reset the cache stats.

+            stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };

+            that.stats = stats;

+

+            store.close();

+            deferred.resolve();

+        }, function (err) {

+            deferred.reject(err);

+        });

+        return deferred;

+    };

+

+    /** Removes an operation from the caches queues and changes the cache state to idle.

+     * @method DataCache~dequeueOperation

+     * @param {DataCacheOperation} operation - Operation to dequeue.

+     * This method is used as a handler for the operation's oncomplete event.

+    */

+    var dequeueOperation = function (operation) {

+

+        var removed = removeFromArray(clearOperations, operation);

+        if (!removed) {

+            removed = removeFromArray(readOperations, operation);

+            if (!removed) {

+                removeFromArray(prefetchOperations, operation);

+            }

+        }

+

+        pendingOperations--;

+        changeState(CACHE_STATE_IDLE);

+    };

+

+    /** Requests data from the cache source.

+     * @method DataCache~fetchPage

+     * @param {Number} start - Zero-based index of items to request.

+     * @returns {DjsDeferred} A promise for a page object with (i)ndex, (c)ount, (d)ata.

+     */

+    var fetchPage = function (start) {

+

+        djsassert(state !== CACHE_STATE_DESTROY, "DataCache.fetchPage() - cache is on the destroy state");

+        djsassert(state !== CACHE_STATE_IDLE, "DataCache.fetchPage() - cache is on the idle state");

+

+        var deferred = new DjsDeferred();

+        var canceled = false;

+

+        var request = source.read(start, pageSize, function (data) {

+            var length = getJsonValueArraryLength(data);

+            var page = { i: start, c: length, d: data };

+            deferred.resolve(page);

+        }, function (err) {

+            deferred.reject(err);

+        });

+

+        return extend(deferred, {

+            cancel: function () {

+                if (request) {

+                    request.abort();

+                    canceled = true;

+                    request = null;

+                }

+            }

+        });

+    };

+

+    /** Filters the cache data based a predicate.

+     * @method DataCache~filter

+     * @param {Number} index - The index of the item to start filtering from.

+     * @param {Number} count - Maximum number of items to include in the result.

+     * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.

+     * @param {Boolean} backwards - True if the filtering should move backward from the specified index, falsey otherwise.

+     * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.

+     * @returns {DjsDeferred} A promise for an array of results.

+     */

+    var filter = function (index, count, predicate, backwards) {

+

+        index = parseInt10(index);

+        count = parseInt10(count);

+

+        if (isNaN(index)) {

+            throw { message: "'index' must be a valid number.", index: index };

+        }

+        if (isNaN(count)) {

+            throw { message: "'count' must be a valid number.", count: count };

+        }

+

+        if (cacheFailure) {

+            throw cacheFailure;

+        }

+

+        index = Math.max(index, 0);

+

+        var deferred = createDeferred();

+        var returnData = {};

+        returnData.value = [];

+        var canceled = false;

+        var pendingReadRange = null;

+

+        var readMore = function (readIndex, readCount) {

+            if (!canceled) {

+                if (count > 0 && returnData.value.length >= count) {

+                    deferred.resolve(returnData);

+                } else {

+                    pendingReadRange = that.readRange(readIndex, readCount).then(function (data) {

+                        if (data["@odata.context"] && !returnData["@odata.context"]) {

+                            returnData["@odata.context"] = data["@odata.context"];

+                        }

+                        

+                        for (var i = 0, length = data.value.length; i &lt; length && (count &lt; 0 || returnData.value.length &lt; count); i++) {

+                            var dataIndex = backwards ? length - i - 1 : i;

+                            var item = data.value[dataIndex];

+                            if (predicate(item)) {

+                                var element = {

+                                    index: readIndex + dataIndex,

+                                    item: item

+                                };

+

+                                backwards ? returnData.value.unshift(element) : returnData.value.push(element);

+                            }

+                        }

+

+                        // Have we reached the end of the collection?

+                        if ((!backwards && data.value.length &lt; readCount) || (backwards && readIndex &lt;= 0)) {

+                            deferred.resolve(returnData);

+                        } else {

+                            var nextIndex = backwards ? Math.max(readIndex - pageSize, 0) : readIndex + readCount;

+                            readMore(nextIndex, pageSize);

+                        }

+                    }, function (err) {

+                        deferred.reject(err);

+                    });

+                }

+            }

+        };

+

+        // Initially, we read from the given starting index to the next/previous page boundary

+        var initialPage = snapToPageBoundaries(index, index, pageSize);

+        var initialIndex = backwards ? initialPage.i : index;

+        var initialCount = backwards ? index - initialPage.i + 1 : initialPage.i + initialPage.c - index;

+        readMore(initialIndex, initialCount);

+

+        return extend(deferred.promise(), {

+            /** Aborts the filter operation (used within promise callback)

+            * @method DataCache#cancelFilter

+             */

+            cancel: function () {

+

+                if (pendingReadRange) {

+                    pendingReadRange.cancel();

+                }

+                canceled = true;

+            }

+        });

+    };

+

+    /** Fires an onidle event if any functions are assigned.

+     * @method DataCache~fireOnIdle

+    */

+    var fireOnIdle = function () {

+

+        if (that.onidle && pendingOperations === 0) {

+            that.onidle();

+        }

+    };

+

+    /** Creates and starts a new prefetch operation.

+     * @method DataCache~prefetch

+     * @param {Number} start - Zero-based index of the items to prefetch.

+     * This method is a no-op if any of the following conditions is true:

+     *     1.- prefetchSize is 0

+     *     2.- All data has been read and stored locally in the cache.

+     *     3.- There is already an all data prefetch operation queued.

+     *     4.- The cache has run out of available space (overflowed).

+    */

+    var prefetch = function (start) {

+        

+

+        if (allDataLocal || prefetchSize === 0 || overflowed) {

+            return;

+        }

+

+        djsassert(state === CACHE_STATE_READ, "DataCache.prefetch() - cache is not on the read state, current state: " + state);

+

+        if (prefetchOperations.length === 0 || (prefetchOperations[0] && prefetchOperations[0].c !== -1)) {

+            // Merging prefetch operations would be a nice optimization here.

+            var op = new DataCacheOperation(prefetchStateMachine, null, true, start, prefetchSize, null, prefetchSize);

+            queueAndStart(op, prefetchOperations);

+        }

+    };

+

+    /** Queues an operation and runs it.

+     * @param {DataCacheOperation} op - Operation to queue.

+     * @param {Array} queue - Array that will store the operation.

+     */

+    var queueAndStart = function (op, queue) {

+

+        op.oncomplete = dequeueOperation;

+        queue.push(op);

+        pendingOperations++;

+        op.run(state);

+    };

+

+    /** Requests a page from the cache local store.

+     * @method DataCache~readPage    

+     * @param {Number} key - Zero-based index of the reuqested page.

+     * @returns {DjsDeferred} A promise for a found flag and page object with (i)ndex, (c)ount, (d)ata, and (t)icks.

+     */

+    var readPage = function (key) {

+

+        djsassert(state !== CACHE_STATE_DESTROY, "DataCache.readPage() - cache is on the destroy state");

+

+        var canceled = false;

+        var deferred = extend(new DjsDeferred(), {

+            /** Aborts the readPage operation. (used within promise callback)

+             * @method DataCache#cancelReadPage

+             */

+            cancel: function () {

+                canceled = true;

+            }

+        });

+

+        var error = storeFailureCallback(deferred, "Read page from store failure");

+

+        store.contains(key, function (contained) {

+            if (canceled) {

+                return;

+            }

+            if (contained) {

+                store.read(key, function (_, data) {

+                    if (!canceled) {

+                        deferred.resolve(data !== undefined, data);

+                    }

+                }, error);

+                return;

+            }

+            deferred.resolve(false);

+        }, error);

+        return deferred;

+    };

+

+    /** Saves a page to the cache local store.

+     * @method DataCache~savePage    

+     * @param {Number} key - Zero-based index of the requested page.

+     * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata, and (t)icks.

+     * @returns {DjsDeferred} A promise with no value.

+     */

+    var savePage = function (key, page) {

+

+        djsassert(state !== CACHE_STATE_DESTROY, "DataCache.savePage() - cache is on the destroy state");

+        djsassert(state !== CACHE_STATE_IDLE, "DataCache.savePage() - cache is on the idle state");

+

+        var canceled = false;

+

+        var deferred = extend(new DjsDeferred(), {

+            /** Aborts the savePage operation. (used within promise callback)

+             * @method DataCache#cancelReadPage

+             */

+            cancel: function () {

+                canceled = true;

+            }

+        });

+

+        var error = storeFailureCallback(deferred, "Save page to store failure");

+

+        var resolve = function () {

+            deferred.resolve(true);

+        };

+

+        if (page.c > 0) {

+            var pageBytes = estimateSize(page);

+            overflowed = cacheSize >= 0 && cacheSize &lt; actualCacheSize + pageBytes;

+

+            if (!overflowed) {

+                store.addOrUpdate(key, page, function () {

+                    updateSettings(page, pageBytes);

+                    saveSettings(resolve, error);

+                }, error);

+            } else {

+                resolve();

+            }

+        } else {

+            updateSettings(page, 0);

+            saveSettings(resolve, error);

+        }

+        return deferred;

+    };

+

+    /** Saves the cache's current settings to the local store.

+     * @method DataCache~saveSettings    

+     * @param {Function} success - Success callback.

+     * @param {Function} error - Errror callback.

+     */

+    var saveSettings = function (success, error) {

+

+        var settings = {

+            actualCacheSize: actualCacheSize,

+            allDataLocal: allDataLocal,

+            cacheSize: cacheSize,

+            collectionCount: collectionCount,

+            highestSavedPage: highestSavedPage,

+            highestSavedPageSize: highestSavedPageSize,

+            pageSize: pageSize,

+            sourceId: source.identifier,

+            version: version

+        };

+

+        store.addOrUpdate("__settings", settings, success, error);

+    };

+

+    /** Creates a function that handles a store error.

+     * @method DataCache~storeFailureCallback    

+     * @param {DjsDeferred} deferred - Deferred object to resolve.

+     * @returns {Function} Function to use as error callback.

+    

+     * This function will specifically handle problems when interacting with the store.

+     */

+    var storeFailureCallback = function (deferred/*, message*/) {

+        

+

+        return function (/*error*/) {

+            // var console = windo1w.console;

+            // if (console && console.log) {

+            //    console.log(message);

+            //    console.dir(error);

+            // }

+            deferred.resolve(false);

+        };

+    };

+

+    /** Updates the cache's settings based on a page object.

+     * @method DataCache~updateSettings    

+     * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata.

+     * @param {Number} pageBytes - Size of the page in bytes.

+     */

+    var updateSettings = function (page, pageBytes) {

+

+        var pageCount = page.c;

+        var pageIndex = page.i;

+

+        // Detect the collection size.

+        if (pageCount === 0) {

+            if (highestSavedPage === pageIndex - pageSize) {

+                collectionCount = highestSavedPage + highestSavedPageSize;

+            }

+        } else {

+            highestSavedPage = Math.max(highestSavedPage, pageIndex);

+            if (highestSavedPage === pageIndex) {

+                highestSavedPageSize = pageCount;

+            }

+            actualCacheSize += pageBytes;

+            if (pageCount &lt; pageSize && !collectionCount) {

+                collectionCount = pageIndex + pageCount;

+            }

+        }

+

+        // Detect the end of the collection.

+        if (!allDataLocal && collectionCount === highestSavedPage + highestSavedPageSize) {

+            allDataLocal = true;

+        }

+    };

+

+    /** State machine describing the behavior for cancelling a read or prefetch operation.

+     * @method DataCache~cancelStateMachine    

+     * @param {DataCacheOperation} operation - Operation being run.

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+     * @param {Object} [data] - 

+     * This state machine contains behavior common to read and prefetch operations.

+     */

+    var cancelStateMachine = function (operation, opTargetState, cacheState, data) {

+        

+

+        var canceled = operation.canceled && opTargetState !== OPERATION_STATE_END;

+        if (canceled) {

+            if (opTargetState === OPERATION_STATE_CANCEL) {

+                // Cancel state.

+                // Data is expected to be any pending request made to the cache.

+                if (data && data.cancel) {

+                    data.cancel();

+                }

+            }

+        }

+        return canceled;

+    };

+

+    /** State machine describing the behavior of a clear operation.

+     * @method DataCache~destroyStateMachine    

+     * @param {DataCacheOperation} operation - Operation being run.

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+    

+     * Clear operations have the highest priority and can't be interrupted by other operations; however,

+     * they will preempt any other operation currently executing.

+     */

+    var destroyStateMachine = function (operation, opTargetState, cacheState) {

+        

+

+        var transition = operation.transition;

+

+        // Signal the cache that a clear operation is running.

+        if (cacheState !== CACHE_STATE_DESTROY) {

+            changeState(CACHE_STATE_DESTROY);

+            return true;

+        }

+

+        switch (opTargetState) {

+            case OPERATION_STATE_START:

+                // Initial state of the operation.

+                transition(DESTROY_STATE_CLEAR);

+                break;

+

+            case OPERATION_STATE_END:

+                // State that signals the operation is done.

+                fireOnIdle();

+                break;

+

+            case DESTROY_STATE_CLEAR:

+                // State that clears all the local data of the cache.

+                clearStore().then(function () {

+                    // Terminate the operation once the local store has been cleared.

+                    operation.complete();

+                });

+                // Wait until the clear request completes.

+                operation.wait();

+                break;

+

+            default:

+                return false;

+        }

+        return true;

+    };

+

+    /** State machine describing the behavior of a prefetch operation.

+     * @method DataCache~prefetchStateMachine    

+     * @param {DataCacheOperation} operation - Operation being run.

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+     * @param {Object} [data] - 

+    

+     *  Prefetch operations have the lowest priority and will be interrupted by operations of

+     *  other kinds. A preempted prefetch operation will resume its execution only when the state

+     *  of the cache returns to idle.

+     * 

+     *  If a clear operation starts executing then all the prefetch operations are canceled,

+     *  even if they haven't started executing yet.

+     */

+    var prefetchStateMachine = function (operation, opTargetState, cacheState, data) {

+        

+

+        // Handle cancelation

+        if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {

+

+            var transition = operation.transition;

+

+            // Handle preemption

+            if (cacheState !== CACHE_STATE_PREFETCH) {

+                if (cacheState === CACHE_STATE_DESTROY) {

+                    if (opTargetState !== OPERATION_STATE_CANCEL) {

+                        operation.cancel();

+                    }

+                } else if (cacheState === CACHE_STATE_IDLE) {

+                    // Signal the cache that a prefetch operation is running.

+                    changeState(CACHE_STATE_PREFETCH);

+                }

+                return true;

+            }

+

+            switch (opTargetState) {

+                case OPERATION_STATE_START:

+                    // Initial state of the operation.

+                    if (prefetchOperations[0] === operation) {

+                        transition(READ_STATE_LOCAL, operation.i);

+                    }

+                    break;

+

+                case READ_STATE_DONE:

+                    // State that determines if the operation can be resolved or has to

+                    // continue processing.

+                    // Data is expected to be the read page.

+                    var pending = operation.pending;

+

+                    if (pending > 0) {

+                        pending -= Math.min(pending, data.c);

+                    }

+

+                    // Are we done, or has all the data been stored?

+                    if (allDataLocal || pending === 0 || data.c &lt; pageSize || overflowed) {

+                        operation.complete();

+                    } else {

+                        // Continue processing the operation.

+                        operation.pending = pending;

+                        transition(READ_STATE_LOCAL, data.i + pageSize);

+                    }

+                    break;

+

+                default:

+                    return readSaveStateMachine(operation, opTargetState, cacheState, data, true);

+            }

+        }

+        return true;

+    };

+

+    /** State machine describing the behavior of a read operation.

+     * @method DataCache~readStateMachine    

+     * @param {DataCacheOperation} operation - Operation being run.

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+     * @param {Object} [data] - 

+    

+     * Read operations have a higher priority than prefetch operations, but lower than

+     * clear operations. They will preempt any prefetch operation currently running

+     * but will be interrupted by a clear operation.

+     *          

+     * If a clear operation starts executing then all the currently running

+     * read operations are canceled. Read operations that haven't started yet will

+     * wait in the start state until the destory operation finishes.

+     */

+    var readStateMachine = function (operation, opTargetState, cacheState, data) {

+        

+

+        // Handle cancelation

+        if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {

+

+            var transition = operation.transition;

+

+            // Handle preemption

+            if (cacheState !== CACHE_STATE_READ && opTargetState !== OPERATION_STATE_START) {

+                if (cacheState === CACHE_STATE_DESTROY) {

+                    if (opTargetState !== OPERATION_STATE_START) {

+                        operation.cancel();

+                    }

+                } else if (cacheState !== CACHE_STATE_WRITE) {

+                    // Signal the cache that a read operation is running.

+                    djsassert(state == CACHE_STATE_IDLE || state === CACHE_STATE_PREFETCH, "DataCache.readStateMachine() - cache is not on the read or idle state.");

+                    changeState(CACHE_STATE_READ);

+                }

+

+                return true;

+            }

+

+            switch (opTargetState) {

+                case OPERATION_STATE_START:

+                    // Initial state of the operation.

+                    // Wait until the cache is idle or prefetching.

+                    if (cacheState === CACHE_STATE_IDLE || cacheState === CACHE_STATE_PREFETCH) {

+                        // Signal the cache that a read operation is running.

+                        changeState(CACHE_STATE_READ);

+                        if (operation.c >= 0) {

+                            // Snap the requested range to a page boundary.

+                            var range = snapToPageBoundaries(operation.i, operation.c, pageSize);

+                            transition(READ_STATE_LOCAL, range.i);

+                        } else {

+                            transition(READ_STATE_DONE, operation);

+                        }

+                    }

+                    break;

+

+                case READ_STATE_DONE:

+                    // State that determines if the operation can be resolved or has to

+                    // continue processing.

+                    // Data is expected to be the read page.

+                    appendPage(operation, data);

+                    var len = getJsonValueArraryLength(operation.d);

+                    // Are we done?

+                    if (operation.c === len || data.c &lt; pageSize) {

+                        // Update the stats, request for a prefetch operation.

+                        stats.cacheReads++;

+                        prefetch(data.i + data.c);

+                        // Terminate the operation.

+                        operation.complete();

+                    } else {

+                        // Continue processing the operation.

+                        transition(READ_STATE_LOCAL, data.i + pageSize);

+                    }

+                    break;

+

+                default:

+                    return readSaveStateMachine(operation, opTargetState, cacheState, data, false);

+            }

+        }

+

+        return true;

+    };

+

+    /** State machine describing the behavior for reading and saving data into the cache.

+     * @method DataCache~readSaveStateMachine    

+     * @param {DataCacheOperation} operation - Operation being run.

+     * @param {Object} opTargetState - Operation state to transition to.

+     * @param {Object} cacheState - Current cache state.

+     * @param {Object} [data] - 

+     * @param {Boolean} isPrefetch - Flag indicating whether a read (false) or prefetch (true) operation is running.

+     * This state machine contains behavior common to read and prefetch operations.

+    */

+    var readSaveStateMachine = function (operation, opTargetState, cacheState, data, isPrefetch) {

+

+        var error = operation.error;

+        var transition = operation.transition;

+        var wait = operation.wait;

+        var request;

+

+        switch (opTargetState) {

+            case OPERATION_STATE_END:

+                // State that signals the operation is done.

+                fireOnIdle();

+                break;

+

+            case READ_STATE_LOCAL:

+                // State that requests for a page from the local store.

+                // Data is expected to be the index of the page to request.

+                request = readPage(data).then(function (found, page) {

+                    // Signal the cache that a read operation is running.

+                    if (!operation.canceled) {

+                        if (found) {

+                            // The page is in the local store, check if the operation can be resolved.

+                            transition(READ_STATE_DONE, page);

+                        } else {

+                            // The page is not in the local store, request it from the source.

+                            transition(READ_STATE_SOURCE, data);

+                        }

+                    }

+                });

+                break;

+

+            case READ_STATE_SOURCE:

+                // State that requests for a page from the cache source.

+                // Data is expected to be the index of the page to request.

+                request = fetchPage(data).then(function (page) {

+                    // Signal the cache that a read operation is running.

+                    if (!operation.canceled) {

+                        // Update the stats and save the page to the local store.

+                        if (isPrefetch) {

+                            stats.prefetches++;

+                        } else {

+                            stats.netReads++;

+                        }

+                        transition(READ_STATE_SAVE, page);

+                    }

+                }, error);

+                break;

+

+            case READ_STATE_SAVE:

+                // State that saves a  page to the local store.

+                // Data is expected to be the page to save.

+                // Write access to the store is exclusive.

+                if (cacheState !== CACHE_STATE_WRITE) {

+                    changeState(CACHE_STATE_WRITE);

+                    request = savePage(data.i, data).then(function (saved) {

+                        if (!operation.canceled) {

+                            if (!saved && isPrefetch) {

+                                operation.pending = 0;

+                            }

+                            // Check if the operation can be resolved.

+                            transition(READ_STATE_DONE, data);

+                        }

+                        changeState(CACHE_STATE_IDLE);

+                    });

+                }

+                break;

+

+            default:

+                // Unknown state that can't be handled by this state machine.

+                return false;

+        }

+

+        if (request) {

+            // The operation might have been canceled between stack frames do to the async calls.

+            if (operation.canceled) {

+                request.cancel();

+            } else if (operation.s === opTargetState) {

+                // Wait for the request to complete.

+                wait(request);

+            }

+        }

+

+        return true;

+    };

+

+    // Initialize the cache.

+    store.read("__settings", function (_, settings) {

+        if (assigned(settings)) {

+            var settingsVersion = settings.version;

+            if (!settingsVersion || settingsVersion.indexOf("1.") !== 0) {

+                cacheFailureCallback("Unsupported cache store version " + settingsVersion)();

+                return;

+            }

+

+            if (pageSize !== settings.pageSize || source.identifier !== settings.sourceId) {

+                // The shape or the source of the data was changed so invalidate the store.

+                clearStore().then(function () {

+                    // Signal the cache is fully initialized.

+                    changeState(CACHE_STATE_IDLE);

+                }, cacheFailureCallback("Unable to clear store during initialization"));

+            } else {

+                // Restore the saved settings.

+                actualCacheSize = settings.actualCacheSize;

+                allDataLocal = settings.allDataLocal;

+                cacheSize = settings.cacheSize;

+                collectionCount = settings.collectionCount;

+                highestSavedPage = settings.highestSavedPage;

+                highestSavedPageSize = settings.highestSavedPageSize;

+                version = settingsVersion;

+

+                // Signal the cache is fully initialized.

+                changeState(CACHE_STATE_IDLE);

+            }

+        } else {

+            // This is a brand new cache.

+            saveSettings(function () {

+                // Signal the cache is fully initialized.

+                changeState(CACHE_STATE_IDLE);

+            }, cacheFailureCallback("Unable to write settings during initialization."));

+        }

+    }, cacheFailureCallback("Unable to read settings from store."));

+

+    return that;

+}

+

+/** Creates a data cache for a collection that is efficiently loaded on-demand.

+ * @param options 

+ * Options for the data cache, including name, source, pageSize, TODO check doku

+ * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.

+ * @returns {DataCache} A new data cache instance.

+ */

+function createDataCache (options) {

+    checkUndefinedGreaterThanZero(options.pageSize, "pageSize");

+    checkUndefinedOrNumber(options.cacheSize, "cacheSize");

+    checkUndefinedOrNumber(options.prefetchSize, "prefetchSize");

+

+    if (!assigned(options.name)) {

+        throw { message: "Undefined or null name", options: options };

+    }

+

+    if (!assigned(options.source)) {

+        throw { message: "Undefined source", options: options };

+    }

+

+    return new DataCache(options);

+}

+

+

+/** estimateSize (see {@link estimateSize}) */

+exports.estimateSize = estimateSize;

+

+/** createDataCache */  

+exports.createDataCache = createDataCache;

+

+

+

+</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/deferred.html b/output/doc/javascript/apidoc/deferred.html
new file mode 100644
index 0000000..609070d
--- /dev/null
+++ b/output/doc/javascript/apidoc/deferred.html
@@ -0,0 +1,512 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: odatajs/deferred</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: odatajs/deferred</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    odatajs/deferred
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="deferred.js.html">deferred.js</a>, <a href="deferred.js.html#line21">line 21</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Members</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="createDeferred"><span class="type-signature">&lt;static> </span>createDeferred<span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    <div class="description">
+        createDeferred (see module:datajs/deferred~createDeferred)
+    </div>
+    
+    
+    
+
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="deferred.js.html">deferred.js</a>, <a href="deferred.js.html#line187">line 187</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="DjsDeferred"><span class="type-signature">&lt;static> </span>DjsDeferred<span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    <div class="description">
+        DjsDeferred (see <a href="DjsDeferred.html">DjsDeferred</a>)
+    </div>
+    
+    
+    
+
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="deferred.js.html">deferred.js</a>, <a href="deferred.js.html#line190">line 190</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="createDeferred"><span class="type-signature">&lt;inner> </span>createDeferred<span class="signature">()</span><span class="type-signature"> &rarr; {<a href="DjsDeferred.html">DjsDeferred</a>}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a deferred object.
+    </div>
+    
+
+    
+    
+    
+    
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="deferred.js.html">deferred.js</a>, <a href="deferred.js.html#line175">line 175</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    A new deferred object. If jQuery is installed, then a jQueryDeferred object is returned, which provides a superset of features.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type"><a href="DjsDeferred.html">DjsDeferred</a></span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="forwardCall"><span class="type-signature">&lt;inner> </span>forwardCall<span class="signature">(thisValue, name, returnValue)</span><span class="type-signature"> &rarr; {function}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a new function to forward a call.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>thisValue</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Value to use as the 'this' object.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>name</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Name of function to forward to.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>returnValue</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Return value for the forward call (helps keep identity when chaining calls).</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="deferred.js.html">deferred.js</a>, <a href="deferred.js.html#line31">line 31</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    A new function that will forward a call.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">function</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/deferred.js.html b/output/doc/javascript/apidoc/deferred.js.html
new file mode 100644
index 0000000..fe2c9f3
--- /dev/null
+++ b/output/doc/javascript/apidoc/deferred.js.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: deferred.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: deferred.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module odatajs/deferred */

+

+

+

+/** Creates a new function to forward a call.

+ * @param {Object} thisValue - Value to use as the 'this' object.

+ * @param {String} name - Name of function to forward to.

+ * @param {Object} returnValue - Return value for the forward call (helps keep identity when chaining calls).

+ * @returns {Function} A new function that will forward a call.

+ */

+function forwardCall(thisValue, name, returnValue) {

+    return function () {

+        thisValue[name].apply(thisValue, arguments);

+        return returnValue;

+    };

+}

+

+/** Initializes a new DjsDeferred object.

+ * &lt;ul>

+ * &lt;li> Compability Note A - Ordering of callbacks through chained 'then' invocations &lt;br>

+ *

+ * The Wiki entry at http://wiki.commonjs.org/wiki/Promises/A

+ * implies that .then() returns a distinct object.

+ *

+ * For compatibility with http://api.jquery.com/category/deferred-object/

+ * we return this same object. This affects ordering, as

+ * the jQuery version will fire callbacks in registration

+ * order regardless of whether they occur on the result

+ * or the original object.

+ * &lt;/li>

+ * &lt;li>Compability Note B - Fulfillment value &lt;br>

+ *

+ * The Wiki entry at http://wiki.commonjs.org/wiki/Promises/A

+ * implies that the result of a success callback is the

+ * fulfillment value of the object and is received by

+ * other success callbacks that are chained.

+ *

+ * For compatibility with http://api.jquery.com/category/deferred-object/

+ * we disregard this value instead.

+ * &lt;/li>&lt;/ul>

+ * @class DjsDeferred 

+ */

+ function DjsDeferred() {

+    this._arguments = undefined;

+    this._done = undefined;

+    this._fail = undefined;

+    this._resolved = false;

+    this._rejected = false;

+}

+

+

+DjsDeferred.prototype = {

+

+    /** Adds success and error callbacks for this deferred object.

+     * See Compatibility Note A.

+     * @method DjsDeferred#then

+     * @param {function} [fulfilledHandler] - Success callback ( may be null)

+     * @param {function} [errorHandler] - Error callback ( may be null)

+     */

+    then: function (fulfilledHandler, errorHandler) {

+

+        if (fulfilledHandler) {

+            if (!this._done) {

+                this._done = [fulfilledHandler];

+            } else {

+                this._done.push(fulfilledHandler);

+            }

+        }

+

+        if (errorHandler) {

+            if (!this._fail) {

+                this._fail = [errorHandler];

+            } else {

+                this._fail.push(errorHandler);

+            }

+        }

+

+        //// See Compatibility Note A in the DjsDeferred constructor.

+        //// if (!this._next) {

+        ////    this._next = createDeferred();

+        //// }

+        //// return this._next.promise();

+

+        if (this._resolved) {

+            this.resolve.apply(this, this._arguments);

+        } else if (this._rejected) {

+            this.reject.apply(this, this._arguments);

+        }

+

+        return this;

+    },

+

+    /** Invokes success callbacks for this deferred object.

+     * All arguments are forwarded to success callbacks.

+     * @method DjsDeferred#resolve

+     */

+    resolve: function (/* args */) {

+        if (this._done) {

+            var i, len;

+            for (i = 0, len = this._done.length; i &lt; len; i++) {

+                //// See Compability Note B - Fulfillment value.

+                //// var nextValue =

+                this._done[i].apply(null, arguments);

+            }

+

+            //// See Compatibility Note A in the DjsDeferred constructor.

+            //// this._next.resolve(nextValue);

+            //// delete this._next;

+

+            this._done = undefined;

+            this._resolved = false;

+            this._arguments = undefined;

+        } else {

+            this._resolved = true;

+            this._arguments = arguments;

+        }

+    },

+

+    /** Invokes error callbacks for this deferred object.

+     * All arguments are forwarded to error callbacks.

+     * @method DjsDeferred#reject

+     */

+    reject: function (/* args */) {

+        

+        if (this._fail) {

+            var i, len;

+            for (i = 0, len = this._fail.length; i &lt; len; i++) {

+                this._fail[i].apply(null, arguments);

+            }

+

+            this._fail = undefined;

+            this._rejected = false;

+            this._arguments = undefined;

+        } else {

+            this._rejected = true;

+            this._arguments = arguments;

+        }

+    },

+

+    /** Returns a version of this object that has only the read-only methods available.

+     * @method DjsDeferred#promise

+     * @returns An object with only the promise object.

+     */

+

+    promise: function () {

+        var result = {};

+        result.then = forwardCall(this, "then", result);

+        return result;

+    }

+};

+

+/** Creates a deferred object.

+ * @returns {DjsDeferred} A new deferred object. If jQuery is installed, then a jQueryDeferred object is returned, which provides a superset of features.

+*/

+function createDeferred() {

+    if (window.jQuery && window.jQuery.Deferred) {

+        return new window.jQuery.Deferred();

+    } else {

+        return new DjsDeferred();

+    }

+}

+

+

+

+

+/** createDeferred (see {@link module:datajs/deferred~createDeferred}) */

+exports.createDeferred = createDeferred;

+

+/** DjsDeferred (see {@link DjsDeferred}) */

+exports.DjsDeferred = DjsDeferred;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/dom-DomStore.html b/output/doc/javascript/apidoc/dom-DomStore.html
new file mode 100644
index 0000000..bddfccc
--- /dev/null
+++ b/output/doc/javascript/apidoc/dom-DomStore.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/dom.html b/output/doc/javascript/apidoc/dom.html
new file mode 100644
index 0000000..76c9bab
--- /dev/null
+++ b/output/doc/javascript/apidoc/dom.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/dom.js.html b/output/doc/javascript/apidoc/dom.js.html
new file mode 100644
index 0000000..e69fb8c
--- /dev/null
+++ b/output/doc/javascript/apidoc/dom.js.html
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: store/dom.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: store/dom.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module store/dom */

+

+

+

+var utils = require('./../utils.js');

+

+// Imports.

+var throwErrorCallback = utils.throwErrorCallback;

+var delay = utils.delay;

+

+var localStorage = null;

+

+/** This method is used to override the Date.toJSON method and is called only by

+ * JSON.stringify.  It should never be called directly.

+ * @summary Converts a Date object into an object representation friendly to JSON serialization.

+ * @returns {Object} Object that represents the Date.

+ */

+function domStoreDateToJSON() {

+    var newValue = { v: this.valueOf(), t: "[object Date]" };

+    // Date objects might have extra properties on them so we save them.

+    for (var name in this) {

+        newValue[name] = this[name];

+    }

+    return newValue;

+}

+

+/** This method is used during JSON parsing and invoked only by the reviver function.

+ * It should never be called directly.

+ * @summary JSON reviver function for converting an object representing a Date in a JSON stream to a Date object

+ * @param value _

+ * @param value - Object to convert.

+ * @returns {Date} Date object.

+ */

+function domStoreJSONToDate(_, value) {

+    if (value && value.t === "[object Date]") {

+        var newValue = new Date(value.v);

+        for (var name in value) {

+            if (name !== "t" && name !== "v") {

+                newValue[name] = value[name];

+            }

+        }

+        value = newValue;

+    }

+    return value;

+}

+

+/** Qualifies the key with the name of the store.

+ * @param {Object} store - Store object whose name will be used for qualifying the key.

+ * @param {String} key - Key string.

+ * @returns {String} Fully qualified key string.

+ */

+function qualifyDomStoreKey(store, key) {

+    return store.name + "#!#" + key;

+}

+

+/** Gets the key part of a fully qualified key string.

+ * @param {Object} store - Store object whose name will be used for qualifying the key.

+ * @param {String} key - Fully qualified key string.

+ * @returns {String} Key part string

+ */

+function unqualifyDomStoreKey(store, key) {

+    return key.replace(store.name + "#!#", "");

+}

+

+/** Constructor for store objects that use DOM storage as the underlying mechanism.

+ * @class DomStore

+ * @constructor

+ * @param {String} name - Store name.

+ */

+function DomStore(name) {

+    this.name = name;

+}

+

+/** Creates a store object that uses DOM Storage as its underlying mechanism.

+ * @method module:store/dom~DomStore.create

+ * @param {String} name - Store name.

+ * @returns {Object} Store object.

+ */

+DomStore.create = function (name) {

+

+    if (DomStore.isSupported()) {

+        localStorage = localStorage || window.localStorage;

+        return new DomStore(name);

+    }

+

+    throw { message: "Web Storage not supported by the browser" };

+};

+

+/** Checks whether the underlying mechanism for this kind of store objects is supported by the browser.

+ * @method DomStore.isSupported

+ * @returns {Boolean} - True if the mechanism is supported by the browser; otherwise false.

+*/

+DomStore.isSupported = function () {

+    return !!window.localStorage;

+};

+

+/** Adds a new value identified by a key to the store.

+ * @method module:store/dom~DomStore#add

+ * @param {String} key - Key string.

+ * @param value - Value that is going to be added to the store.

+ * @param {Function} success - Callback for a successful add operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ * This method errors out if the store already contains the specified key.

+ */

+DomStore.prototype.add = function (key, value, success, error) {

+    error = error || this.defaultError;

+    var store = this;

+    this.contains(key, function (contained) {

+        if (!contained) {

+            store.addOrUpdate(key, value, success, error);

+        } else {

+            delay(error, { message: "key already exists", key: key });

+        }

+    }, error);

+};

+

+/** This method will overwrite the key's current value if it already exists in the store; otherwise it simply adds the new key and value.

+ * @summary Adds or updates a value identified by a key to the store.

+ * @method module:store/dom~DomStore#addOrUpdate

+ * @param {String} key - Key string.

+ * @param value - Value that is going to be added or updated to the store.

+ * @param {Function} success - Callback for a successful add or update operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ */

+DomStore.prototype.addOrUpdate = function (key, value, success, error) {

+    error = error || this.defaultError;

+

+    if (key instanceof Array) {

+        error({ message: "Array of keys not supported" });

+    } else {

+        var fullKey = qualifyDomStoreKey(this, key);

+        var oldDateToJSON = Date.prototype.toJSON;

+        try {

+            var storedValue = value;

+            if (storedValue !== undefined) {

+                // Dehydrate using json

+                Date.prototype.toJSON = domStoreDateToJSON;

+                storedValue = window.JSON.stringify(value);

+            }

+            // Save the json string.

+            localStorage.setItem(fullKey, storedValue);

+            delay(success, key, value);

+        }

+        catch (e) {

+            if (e.code === 22 || e.number === 0x8007000E) {

+                delay(error, { name: "QUOTA_EXCEEDED_ERR", error: e });

+            } else {

+                delay(error, e);

+            }

+        }

+        finally {

+            Date.prototype.toJSON = oldDateToJSON;

+        }

+    }

+};

+

+/** In case of an error, this method will not restore any keys that might have been deleted at that point.

+ * @summary Removes all the data associated with this store object.

+ * @method module:store/dom~DomStore#clear

+ * @param {Function} success - Callback for a successful clear operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ */

+DomStore.prototype.clear = function (success, error) {

+

+    error = error || this.defaultError;

+    try {

+        var i = 0, len = localStorage.length;

+        while (len > 0 && i &lt; len) {

+            var fullKey = localStorage.key(i);

+            var key = unqualifyDomStoreKey(this, fullKey);

+            if (fullKey !== key) {

+                localStorage.removeItem(fullKey);

+                len = localStorage.length;

+            } else {

+                i++;

+            }

+        }

+        delay(success);

+    }

+    catch (e) {

+        delay(error, e);

+    }

+};

+

+/** This function does nothing in DomStore as it does not have a connection model

+ * @method module:store/dom~DomStore#close

+ */

+DomStore.prototype.close = function () {

+};

+

+/** Checks whether a key exists in the store.

+ * @method module:store/dom~DomStore#contains

+ * @param {String} key - Key string.

+ * @param {Function} success - Callback indicating whether the store contains the key or not.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+*/

+DomStore.prototype.contains = function (key, success, error) {

+    error = error || this.defaultError;

+    try {

+        var fullKey = qualifyDomStoreKey(this, key);

+        var value = localStorage.getItem(fullKey);

+        delay(success, value !== null);

+    } catch (e) {

+        delay(error, e);

+    }

+};

+

+DomStore.prototype.defaultError = throwErrorCallback;

+

+/** Gets all the keys that exist in the store.

+ * @method module:store/dom~DomStore#getAllKeys

+ * @param {Function} success - Callback for a successful get operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ */

+DomStore.prototype.getAllKeys = function (success, error) {

+

+    error = error || this.defaultError;

+

+    var results = [];

+    var i, len;

+

+    try {

+        for (i = 0, len = localStorage.length; i &lt; len; i++) {

+            var fullKey = localStorage.key(i);

+            var key = unqualifyDomStoreKey(this, fullKey);

+            if (fullKey !== key) {

+                results.push(key);

+            }

+        }

+        delay(success, results);

+    }

+    catch (e) {

+        delay(error, e);

+    }

+};

+

+/** Identifies the underlying mechanism used by the store.*/

+DomStore.prototype.mechanism = "dom";

+

+/** Reads the value associated to a key in the store.

+ * @method module:store/dom~DomStore#read

+ * @param {String} key - Key string.

+ * @param {Function} success - Callback for a successful reads operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ */

+DomStore.prototype.read = function (key, success, error) {

+

+    error = error || this.defaultError;

+

+    if (key instanceof Array) {

+        error({ message: "Array of keys not supported" });

+    } else {

+        try {

+            var fullKey = qualifyDomStoreKey(this, key);

+            var value = localStorage.getItem(fullKey);

+            if (value !== null && value !== "undefined") {

+                // Hydrate using json

+                value = window.JSON.parse(value, domStoreJSONToDate);

+            }

+            else {

+                value = undefined;

+            }

+            delay(success, key, value);

+        } catch (e) {

+            delay(error, e);

+        }

+    }

+};

+

+/** Removes a key and its value from the store.

+ * @method module:store/dom~DomStore#remove

+ * @param {String} key - Key string.

+ * @param {Function} success - Callback for a successful remove operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+ */

+DomStore.prototype.remove = function (key, success, error) {

+    error = error || this.defaultError;

+

+    if (key instanceof Array) {

+        error({ message: "Batches not supported" });

+    } else {

+        try {

+            var fullKey = qualifyDomStoreKey(this, key);

+            localStorage.removeItem(fullKey);

+            delay(success);

+        } catch (e) {

+            delay(error, e);

+        }

+    }

+};

+

+/** Updates the value associated to a key in the store.

+ * @method module:store/dom~DomStore#update

+ * @param {String} key - Key string.

+ * @param value - New value.

+ * @param {Function} success - Callback for a successful update operation.

+ * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked

+ * This method errors out if the specified key is not found in the store.

+ */

+DomStore.prototype.update = function (key, value, success, error) {

+    error = error || this.defaultError;

+    var store = this;

+    this.contains(key, function (contained) {

+        if (contained) {

+            store.addOrUpdate(key, value, success, error);

+        } else {

+            delay(error, { message: "key not found", key: key });

+        }

+    }, error);

+};

+

+module.exports = DomStore;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/global.html b/output/doc/javascript/apidoc/global.html
new file mode 100644
index 0000000..e6625fd
--- /dev/null
+++ b/output/doc/javascript/apidoc/global.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Global</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Global</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Members</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="module:store/memory"><span class="type-signature"></span>module:store/memory<span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    <div class="description">
+        MemoryStore (see <a href="MemoryStore.html">MemoryStore</a>)
+    </div>
+    
+    
+    
+
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="memory.js.html">store/memory.js</a>, <a href="memory.js.html#line247">line 247</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/handler.html b/output/doc/javascript/apidoc/handler.html
new file mode 100644
index 0000000..5e47bcc
--- /dev/null
+++ b/output/doc/javascript/apidoc/handler.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/handler.js.html b/output/doc/javascript/apidoc/handler.js.html
new file mode 100644
index 0000000..d5eb855
--- /dev/null
+++ b/output/doc/javascript/apidoc/handler.js.html
@@ -0,0 +1,333 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata/handler.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata/handler.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module odata/handler */

+

+

+var utils    = require('./../utils.js');

+var oDataUtils    = require('./odatautils.js');

+

+// Imports.

+var assigned = utils.assigned;

+var extend = utils.extend;

+var trimString = utils.trimString;

+var maxVersion = oDataUtils.maxVersion;

+var MAX_DATA_SERVICE_VERSION = "4.0";

+

+/** Parses a string into an object with media type and properties.

+ * @param {String} str - String with media type to parse.

+ * @return null if the string is empty; an object with 'mediaType' and a 'properties' dictionary otherwise.

+ */

+function contentType(str) {

+

+    if (!str) {

+        return null;

+    }

+

+    var contentTypeParts = str.split(";");

+    var properties = {};

+

+    var i, len;

+    for (i = 1, len = contentTypeParts.length; i &lt; len; i++) {

+        var contentTypeParams = contentTypeParts[i].split("=");

+        properties[trimString(contentTypeParams[0])] = contentTypeParams[1];

+    }

+

+    return { mediaType: trimString(contentTypeParts[0]), properties: properties };

+}

+

+/** Serializes an object with media type and properties dictionary into a string.

+ * @param contentType - Object with media type and properties dictionary to serialize.

+ * @return String representation of the media type object; undefined if contentType is null or undefined.

+ */

+function contentTypeToString(contentType) {

+    if (!contentType) {

+        return undefined;

+    }

+

+    var result = contentType.mediaType;

+    var property;

+    for (property in contentType.properties) {

+        result += ";" + property + "=" + contentType.properties[property];

+    }

+    return result;

+}

+

+/** Creates an object that is going to be used as the context for the handler's parser and serializer.

+ * @param contentType - Object with media type and properties dictionary.

+ * @param {String} dataServiceVersion - String indicating the version of the protocol to use.

+ * @param context - Operation context.

+ * @param handler - Handler object that is processing a resquest or response.

+ * @return Context object.

+ */

+function createReadWriteContext(contentType, dataServiceVersion, context, handler) {

+

+    var rwContext = {};

+    extend(rwContext, context);

+    extend(rwContext, {

+        contentType: contentType,

+        dataServiceVersion: dataServiceVersion,

+        handler: handler

+    });

+

+    return rwContext;

+}

+

+/** Sets a request header's value. If the header has already a value other than undefined, null or empty string, then this method does nothing.

+ * @param request - Request object on which the header will be set.

+ * @param {String} name - Header name.

+ * @param {String} value - Header value.

+ */

+function fixRequestHeader(request, name, value) {

+    if (!request) {

+        return;

+    }

+

+    var headers = request.headers;

+    if (!headers[name]) {

+        headers[name] = value;

+    }

+}

+

+/** Sets the DataServiceVersion header of the request if its value is not yet defined or of a lower version.

+ * @param request - Request object on which the header will be set.

+ * @param {String} version - Version value.

+ *  If the request has already a version value higher than the one supplied the this function does nothing.

+ */

+function fixDataServiceVersionHeader(request, version) {   

+

+    if (request) {

+        var headers = request.headers;

+        var dsv = headers["OData-Version"];

+        headers["OData-Version"] = dsv ? maxVersion(dsv, version) : version;

+    }

+}

+

+/** Gets the value of a request or response header.

+ * @param requestOrResponse - Object representing a request or a response.

+ * @param {String} name - Name of the header to retrieve.

+ * @returns {String} String value of the header; undefined if the header cannot be found.

+ */

+function getRequestOrResponseHeader(requestOrResponse, name) {

+

+    var headers = requestOrResponse.headers;

+    return (headers && headers[name]) || undefined;

+}

+

+/** Gets the value of the Content-Type header from a request or response.

+ * @param requestOrResponse - Object representing a request or a response.

+ * @returns {Object} Object with 'mediaType' and a 'properties' dictionary; null in case that the header is not found or doesn't have a value.

+ */

+function getContentType(requestOrResponse) {

+

+    return contentType(getRequestOrResponseHeader(requestOrResponse, "Content-Type"));

+}

+

+var versionRE = /^\s?(\d+\.\d+);?.*$/;

+/** Gets the value of the DataServiceVersion header from a request or response.

+ * @param requestOrResponse - Object representing a request or a response.

+ * @returns {String} Data service version; undefined if the header cannot be found.

+ */

+function getDataServiceVersion(requestOrResponse) {

+

+    var value = getRequestOrResponseHeader(requestOrResponse, "OData-Version");

+    if (value) {

+        var matches = versionRE.exec(value);

+        if (matches && matches.length) {

+            return matches[1];

+        }

+    }

+

+    // Fall through and return undefined.

+}

+

+/** Checks that a handler can process a particular mime type.

+ * @param handler - Handler object that is processing a resquest or response.

+ * @param cType - Object with 'mediaType' and a 'properties' dictionary.

+ * @returns {Boolean} True if the handler can process the mime type; false otherwise.

+ *

+ * The following check isn't as strict because if cType.mediaType = application/; it will match an accept value of "application/xml";

+ * however in practice we don't not expect to see such "suffixed" mimeTypes for the handlers.

+ */

+function handlerAccepts(handler, cType) {

+    return handler.accept.indexOf(cType.mediaType) >= 0;

+}

+

+/** Invokes the parser associated with a handler for reading the payload of a HTTP response.

+ * @param handler - Handler object that is processing the response.

+ * @param {Function} parseCallback - Parser function that will process the response payload.

+ * @param response - HTTP response whose payload is going to be processed.

+ * @param context - Object used as the context for processing the response.

+ * @returns {Boolean} True if the handler processed the response payload and the response.data property was set; false otherwise.

+ */

+function handlerRead(handler, parseCallback, response, context) {

+

+    if (!response || !response.headers) {

+        return false;

+    }

+

+    var cType = getContentType(response);

+    var version = getDataServiceVersion(response) || "";

+    var body = response.body;

+

+    if (!assigned(body)) {

+        return false;

+    }

+

+    if (handlerAccepts(handler, cType)) {

+        var readContext = createReadWriteContext(cType, version, context, handler);

+        readContext.response = response;

+        response.data = parseCallback(handler, body, readContext);

+        return response.data !== undefined;

+    }

+

+    return false;

+}

+

+/** Invokes the serializer associated with a handler for generating the payload of a HTTP request.

+ * @param handler - Handler object that is processing the request.

+ * @param {Function} serializeCallback - Serializer function that will generate the request payload.

+ * @param request - HTTP request whose payload is going to be generated.

+ * @param context - Object used as the context for serializing the request.

+ * @returns {Boolean} True if the handler serialized the request payload and the request.body property was set; false otherwise.

+ */

+function handlerWrite(handler, serializeCallback, request, context) {

+    if (!request || !request.headers) {

+        return false;

+    }

+

+    var cType = getContentType(request);

+    var version = getDataServiceVersion(request);

+

+    if (!cType || handlerAccepts(handler, cType)) {

+        var writeContext = createReadWriteContext(cType, version, context, handler);

+        writeContext.request = request;

+

+        request.body = serializeCallback(handler, request.data, writeContext);

+

+        if (request.body !== undefined) {

+            fixDataServiceVersionHeader(request, writeContext.dataServiceVersion || "4.0");

+

+            fixRequestHeader(request, "Content-Type", contentTypeToString(writeContext.contentType));

+            fixRequestHeader(request, "OData-MaxVersion", handler.maxDataServiceVersion);

+            return true;

+        }

+    }

+

+    return false;

+}

+

+/** Creates a handler object for processing HTTP requests and responses.

+ * @param {Function} parseCallback - Parser function that will process the response payload.

+ * @param {Function} serializeCallback - Serializer function that will generate the request payload.

+ * @param {String} accept - String containing a comma separated list of the mime types that this handler can work with.

+ * @param {String} maxDataServiceVersion - String indicating the highest version of the protocol that this handler can work with.

+ * @returns {Object} Handler object.

+ */

+function handler(parseCallback, serializeCallback, accept, maxDataServiceVersion) {

+

+    return {

+        accept: accept,

+        maxDataServiceVersion: maxDataServiceVersion,

+

+        read: function (response, context) {

+            return handlerRead(this, parseCallback, response, context);

+        },

+

+        write: function (request, context) {

+            return handlerWrite(this, serializeCallback, request, context);

+        }

+    };

+}

+

+function textParse(handler, body /*, context */) {

+    return body;

+}

+

+function textSerialize(handler, data /*, context */) {

+    if (assigned(data)) {

+        return data.toString();

+    } else {

+        return undefined;

+    }

+}

+

+

+

+

+exports.textHandler = handler(textParse, textSerialize, "text/plain", MAX_DATA_SERVICE_VERSION);

+exports.contentType = contentType;

+exports.contentTypeToString = contentTypeToString;

+exports.handler = handler;

+exports.createReadWriteContext = createReadWriteContext;

+exports.fixRequestHeader = fixRequestHeader;

+exports.getRequestOrResponseHeader = getRequestOrResponseHeader;

+exports.getContentType = getContentType;

+exports.getDataServiceVersion = getDataServiceVersion;

+exports.MAX_DATA_SERVICE_VERSION = MAX_DATA_SERVICE_VERSION;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/index.html b/output/doc/javascript/apidoc/index.html
new file mode 100644
index 0000000..48a6eb8
--- /dev/null
+++ b/output/doc/javascript/apidoc/index.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Index</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Index</h1>
+    
+    
+
+
+    
+
+
+    <h3> </h3>
+
+
+
+
+
+
+
+
+
+    
+
+
+
+
+
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/indexeddb-IndexedDBStore.html b/output/doc/javascript/apidoc/indexeddb-IndexedDBStore.html
new file mode 100644
index 0000000..7e46083
--- /dev/null
+++ b/output/doc/javascript/apidoc/indexeddb-IndexedDBStore.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/indexeddb.html b/output/doc/javascript/apidoc/indexeddb.html
new file mode 100644
index 0000000..7338b69
--- /dev/null
+++ b/output/doc/javascript/apidoc/indexeddb.html
@@ -0,0 +1,642 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: store/indexeddb</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: store/indexeddb</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    store/indexeddb
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="indexeddb.js.html">store/indexeddb.js</a>, <a href="indexeddb.js.html#line21">line 21</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Classes</h3>
+        
+        <dl>
+            <dt><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></dt>
+            <dd></dd>
+        </dl>
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="getError"><span class="type-signature">&lt;inner> </span>getError<span class="signature">(error, defaultError)</span><span class="type-signature"> &rarr; {function}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Returns either a specific error handler or the default error handler
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The specific error handler</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>defaultError</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The default error handler</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="indexeddb.js.html">store/indexeddb.js</a>, <a href="indexeddb.js.html#line41">line 41</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    The error callback
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">function</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="openStoreDb"><span class="type-signature">&lt;inner> </span>openStoreDb<span class="signature">(store, success, error)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Opens the store object's indexed db database.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>store</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">IndexedDBStore</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The store object</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The success callback</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The error callback</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="indexeddb.js.html">store/indexeddb.js</a>, <a href="indexeddb.js.html#line75">line 75</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="openTransaction"><span class="type-signature">&lt;inner> </span>openTransaction<span class="signature">(store, mode, success, error)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Opens a new transaction to the store
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>store</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">IndexedDBStore</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The store object</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>mode</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Integer</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The read/write mode of the transaction (constants from IDBTransaction)</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The success callback</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The error callback</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="indexeddb.js.html">store/indexeddb.js</a>, <a href="indexeddb.js.html#line130">line 130</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:27 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/indexeddb.js.html b/output/doc/javascript/apidoc/indexeddb.js.html
new file mode 100644
index 0000000..041ec9e
--- /dev/null
+++ b/output/doc/javascript/apidoc/indexeddb.js.html
@@ -0,0 +1,496 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: store/indexeddb.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: store/indexeddb.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module store/indexeddb */

+var utils = require('./../utils.js');

+

+// Imports.

+var throwErrorCallback = utils.throwErrorCallback;

+var delay = utils.delay;

+

+

+var indexedDB = utils.inBrowser() ? window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.indexedDB : undefined;

+var IDBKeyRange = utils.inBrowser() ? window.IDBKeyRange || window.webkitIDBKeyRange : undefined;

+var IDBTransaction = utils.inBrowser() ? window.IDBTransaction || window.webkitIDBTransaction || {} : {} ;

+

+var IDBT_READ_ONLY = IDBTransaction.READ_ONLY || "readonly";

+var IDBT_READ_WRITE = IDBTransaction.READ_WRITE || "readwrite";

+

+/** Returns either a specific error handler or the default error handler

+ * @param {Function} error - The specific error handler

+ * @param {Function} defaultError - The default error handler

+ * @returns {Function} The error callback

+ */

+function getError(error, defaultError) {

+

+    return function (e) {

+        var errorFunc = error || defaultError;

+        if (!errorFunc) {

+            return;

+        }

+

+        // Old api quota exceeded error support.

+        if (Object.prototype.toString.call(e) === "[object IDBDatabaseException]") {

+            if (e.code === 11 /* IndexedDb disk quota exceeded */) {

+                errorFunc({ name: "QuotaExceededError", error: e });

+                return;

+            }

+            errorFunc(e);

+            return;

+        }

+

+        var errName;

+        try {

+            var errObj = e.target.error || e;

+            errName = errObj.name;

+        } catch (ex) {

+            errName = (e.type === "blocked") ? "IndexedDBBlocked" : "UnknownError";

+        }

+        errorFunc({ name: errName, error: e });

+    };

+}

+

+/** Opens the store object's indexed db database.

+ * @param {IndexedDBStore} store - The store object

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+function openStoreDb(store, success, error) {

+

+    var storeName = store.name;

+    var dbName = "_odatajs_" + storeName;

+

+    var request = indexedDB.open(dbName);

+    request.onblocked = error;

+    request.onerror = error;

+

+    request.onupgradeneeded = function () {

+        var db = request.result;

+        if (!db.objectStoreNames.contains(storeName)) {

+            db.createObjectStore(storeName);

+        }

+    };

+

+    request.onsuccess = function (event) {

+        var db = request.result;

+        if (!db.objectStoreNames.contains(storeName)) {

+            // Should we use the old style api to define the database schema?

+            if ("setVersion" in db) {

+                var versionRequest = db.setVersion("1.0");

+                versionRequest.onsuccess = function () {

+                    var transaction = versionRequest.transaction;

+                    transaction.oncomplete = function () {

+                        success(db);

+                    };

+                    db.createObjectStore(storeName, null, false);

+                };

+                versionRequest.onerror = error;

+                versionRequest.onblocked = error;

+                return;

+            }

+

+            // The database doesn't have the expected store.

+            // Fabricate an error object for the event for the schema mismatch

+            // and error out.

+            event.target.error = { name: "DBSchemaMismatch" };

+            error(event);

+            return;

+        }

+

+        db.onversionchange = function(event) {

+            event.target.close();

+        };

+        success(db);

+    };

+}

+

+/** Opens a new transaction to the store

+ * @param {IndexedDBStore} store - The store object

+ * @param {Integer} mode - The read/write mode of the transaction (constants from IDBTransaction)

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+function openTransaction(store, mode, success, error) {

+

+    var storeName = store.name;

+    var storeDb = store.db;

+    var errorCallback = getError(error, store.defaultError);

+

+    if (storeDb) {

+        success(storeDb.transaction(storeName, mode));

+        return;

+    }

+

+    openStoreDb(store, function (db) {

+        store.db = db;

+        success(db.transaction(storeName, mode));

+    }, errorCallback);

+}

+

+/** Creates a new IndexedDBStore.

+ * @class IndexedDBStore

+ * @constructor

+ * @param {String} name - The name of the store.

+ * @returns {Object} The new IndexedDBStore.

+ */

+function IndexedDBStore(name) {

+    this.name = name;

+}

+

+/** Creates a new IndexedDBStore.

+ * @method module:store/indexeddb~IndexedDBStore.create

+ * @param {String} name - The name of the store.

+ * @returns {Object} The new IndexedDBStore.

+ */

+IndexedDBStore.create = function (name) {

+    if (IndexedDBStore.isSupported()) {

+        return new IndexedDBStore(name);

+    }

+

+    throw { message: "IndexedDB is not supported on this browser" };

+};

+

+/** Returns whether IndexedDB is supported.

+ * @method module:store/indexeddb~IndexedDBStore.isSupported

+ * @returns {Boolean} True if IndexedDB is supported, false otherwise.

+ */

+IndexedDBStore.isSupported = function () {

+    return !!indexedDB;

+};

+

+/** Adds a key/value pair to the store

+ * @method module:store/indexeddb~IndexedDBStore#add

+ * @param {String} key - The key

+ * @param {Object} value - The value

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+*/

+IndexedDBStore.prototype.add = function (key, value, success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    var keys = [];

+    var values = [];

+

+    if (key instanceof Array) {

+        keys = key;

+        values = value;

+    } else {

+        keys = [key];

+        values = [value];

+    }

+

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        transaction.onabort = getError(error, defaultError, key, "add");

+        transaction.oncomplete = function () {

+            if (key instanceof Array) {

+                success(keys, values);

+            } else {

+                success(key, value);

+            }

+        };

+

+        for (var i = 0; i &lt; keys.length && i &lt; values.length; i++) {

+            transaction.objectStore(name).add({ v: values[i] }, keys[i]);

+        }

+    }, error);

+};

+

+/** Adds or updates a key/value pair in the store

+ * @method module:store/indexeddb~IndexedDBStore#addOrUpdate

+ * @param {String} key - The key

+ * @param {Object} value - The value

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.addOrUpdate = function (key, value, success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    var keys = [];

+    var values = [];

+

+    if (key instanceof Array) {

+        keys = key;

+        values = value;

+    } else {

+        keys = [key];

+        values = [value];

+    }

+

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        transaction.onabort = getError(error, defaultError);

+        transaction.oncomplete = function () {

+            if (key instanceof Array) {

+                success(keys, values);

+            } else {

+                success(key, value);

+            }

+        };

+

+        for (var i = 0; i &lt; keys.length && i &lt; values.length; i++) {

+            var record = { v: values[i] };

+            transaction.objectStore(name).put(record, keys[i]);

+        }

+    }, error);

+};

+

+/** Clears the store

+ * @method module:store/indexeddb~IndexedDBStore#clear

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.clear = function (success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        transaction.onerror = getError(error, defaultError);

+        transaction.oncomplete = function () {

+            success();

+        };

+

+        transaction.objectStore(name).clear();

+    }, error);

+};

+

+/** Closes the connection to the database

+ * @method module:store/indexeddb~IndexedDBStore#close

+*/

+IndexedDBStore.prototype.close = function () {

+    

+    if (this.db) {

+        this.db.close();

+        this.db = null;

+    }

+};

+

+/** Returns whether the store contains a key

+ * @method module:store/indexeddb~IndexedDBStore#contains

+ * @param {String} key - The key

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.contains = function (key, success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    openTransaction(this, IDBT_READ_ONLY, function (transaction) {

+        var objectStore = transaction.objectStore(name);

+        var request = objectStore.get(key);

+

+        transaction.oncomplete = function () {

+            success(!!request.result);

+        };

+        transaction.onerror = getError(error, defaultError);

+    }, error);

+};

+

+IndexedDBStore.prototype.defaultError = throwErrorCallback;

+

+/** Gets all the keys from the store

+ * @method module:store/indexeddb~IndexedDBStore#getAllKeys

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.getAllKeys = function (success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        var results = [];

+

+        transaction.oncomplete = function () {

+            success(results);

+        };

+

+        var request = transaction.objectStore(name).openCursor();

+

+        request.onerror = getError(error, defaultError);

+        request.onsuccess = function (event) {

+            var cursor = event.target.result;

+            if (cursor) {

+                results.push(cursor.key);

+                // Some tools have issues because continue is a javascript reserved word.

+                cursor["continue"].call(cursor);

+            }

+        };

+    }, error);

+};

+

+/** Identifies the underlying mechanism used by the store.

+*/

+IndexedDBStore.prototype.mechanism = "indexeddb";

+

+/** Reads the value for the specified key

+ * @method module:store/indexeddb~IndexedDBStore#read

+ * @param {String} key - The key

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ * If the key does not exist, the success handler will be called with value = undefined

+ */

+IndexedDBStore.prototype.read = function (key, success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    var keys = (key instanceof Array) ? key : [key];

+

+    openTransaction(this, IDBT_READ_ONLY, function (transaction) {

+        var values = [];

+

+        transaction.onerror = getError(error, defaultError, key, "read");

+        transaction.oncomplete = function () {

+            if (key instanceof Array) {

+                success(keys, values);

+            } else {

+                success(keys[0], values[0]);

+            }

+        };

+

+        for (var i = 0; i &lt; keys.length; i++) {

+            // Some tools have issues because get is a javascript reserved word. 

+            var objectStore = transaction.objectStore(name);

+            var request = objectStore.get.call(objectStore, keys[i]);

+            request.onsuccess = function (event) {

+                var record = event.target.result;

+                values.push(record ? record.v : undefined);

+            };

+        }

+    }, error);

+};

+

+/** Removes the specified key from the store

+ * @method module:store/indexeddb~IndexedDBStore#remove

+ * @param {String} key - The key

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.remove = function (key, success, error) {

+

+    var name = this.name;

+    var defaultError = this.defaultError;

+    var keys = (key instanceof Array) ? key : [key];

+

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        transaction.onerror = getError(error, defaultError);

+        transaction.oncomplete = function () {

+            success();

+        };

+

+        for (var i = 0; i &lt; keys.length; i++) {

+            // Some tools have issues because continue is a javascript reserved word.

+            var objectStore = transaction.objectStore(name);

+            objectStore["delete"].call(objectStore, keys[i]);

+        }

+    }, error);

+};

+

+/** Updates a key/value pair in the store

+ * @method module:store/indexeddb~IndexedDBStore#update

+ * @param {String} key - The key

+ * @param {Object} value - The value

+ * @param {Function} success - The success callback

+ * @param {Function} error - The error callback

+ */

+IndexedDBStore.prototype.update = function (key, value, success, error) {

+    var name = this.name;

+    var defaultError = this.defaultError;

+    var keys = [];

+    var values = [];

+

+    if (key instanceof Array) {

+        keys = key;

+        values = value;

+    } else {

+        keys = [key];

+        values = [value];

+    }

+

+    openTransaction(this, IDBT_READ_WRITE, function (transaction) {

+        transaction.onabort = getError(error, defaultError);

+        transaction.oncomplete = function () {

+            if (key instanceof Array) {

+                success(keys, values);

+            } else {

+                success(key, value);

+            }

+        };

+

+        for (var i = 0; i &lt; keys.length && i &lt; values.length; i++) {

+            var request = transaction.objectStore(name).openCursor(IDBKeyRange.only(keys[i]));

+            var record = { v: values[i] };

+            request.pair = { key: keys[i], value: record };

+            request.onsuccess = function (event) {

+                var cursor = event.target.result;

+                if (cursor) {

+                    cursor.update(event.target.pair.value);

+                } else {

+                    transaction.abort();

+                }

+            }

+        }

+    }, error);

+};

+

+

+module.exports = IndexedDBStore;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/json.html b/output/doc/javascript/apidoc/json.html
new file mode 100644
index 0000000..76f1751
--- /dev/null
+++ b/output/doc/javascript/apidoc/json.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/json.js.html b/output/doc/javascript/apidoc/json.js.html
new file mode 100644
index 0000000..7a48bc3
--- /dev/null
+++ b/output/doc/javascript/apidoc/json.js.html
@@ -0,0 +1,1057 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata/json.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata/json.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+

+/** @module odata/json */

+

+

+

+var utils        = require('./../utils.js');

+var oDataUtils   = require('./odatautils.js');

+var oDataHandler = require('./handler.js');

+

+var odataNs = "odata";

+var odataAnnotationPrefix = odataNs + ".";

+var contextUrlAnnotation = "@" + odataAnnotationPrefix + "context";

+

+var assigned = utils.assigned;

+var defined = utils.defined;

+var isArray = utils.isArray;

+//var isDate = utils.isDate;

+var isObject = utils.isObject;

+//var normalizeURI = utils.normalizeURI;

+var parseInt10 = utils.parseInt10;

+var getFormatKind = utils.getFormatKind;

+var convertByteArrayToHexString = utils.convertByteArrayToHexString;

+

+

+var formatDateTimeOffset = oDataUtils.formatDateTimeOffset;

+var formatDuration = oDataUtils.formatDuration;

+var formatNumberWidth = oDataUtils.formatNumberWidth;

+var getCanonicalTimezone = oDataUtils.getCanonicalTimezone;

+var handler = oDataUtils.handler;

+var isComplex = oDataUtils.isComplex;

+var isPrimitive = oDataUtils.isPrimitive;

+var isCollectionType = oDataUtils.isCollectionType;

+var lookupComplexType = oDataUtils.lookupComplexType;

+var lookupEntityType = oDataUtils.lookupEntityType;

+var lookupSingleton = oDataUtils.lookupSingleton;

+var lookupEntitySet = oDataUtils.lookupEntitySet;

+var lookupDefaultEntityContainer = oDataUtils.lookupDefaultEntityContainer;

+var lookupProperty = oDataUtils.lookupProperty;

+var MAX_DATA_SERVICE_VERSION = oDataUtils.MAX_DATA_SERVICE_VERSION;

+var maxVersion = oDataUtils.maxVersion;

+

+var isPrimitiveEdmType = oDataUtils.isPrimitiveEdmType;

+var isGeographyEdmType = oDataUtils.isGeographyEdmType;

+var isGeometryEdmType = oDataUtils.isGeometryEdmType;

+

+var PAYLOADTYPE_FEED = "f";

+var PAYLOADTYPE_ENTRY = "e";

+var PAYLOADTYPE_PROPERTY = "p";

+var PAYLOADTYPE_COLLECTION = "c";

+var PAYLOADTYPE_ENUMERATION_PROPERTY = "enum";

+var PAYLOADTYPE_SVCDOC = "s";

+var PAYLOADTYPE_ENTITY_REF_LINK = "erl";

+var PAYLOADTYPE_ENTITY_REF_LINKS = "erls";

+

+var PAYLOADTYPE_VALUE = "v";

+

+var PAYLOADTYPE_DELTA = "d";

+var DELTATYPE_FEED = "f";

+var DELTATYPE_DELETED_ENTRY = "de";

+var DELTATYPE_LINK = "l";

+var DELTATYPE_DELETED_LINK = "dl";

+

+var jsonMediaType = "application/json";

+var jsonContentType = oDataHandler.contentType(jsonMediaType);

+

+var jsonSerializableMetadata = ["@odata.id", "@odata.type"];

+

+

+

+

+

+/** Extend JSON OData payload with metadata

+ * @param handler - This handler.

+ * @param text - Payload text (this parser also handles pre-parsed objects).

+ * @param {Object} context - Object with parsing context.

+ * @return An object representation of the OData payload.

+ */

+function jsonParser(handler, text, context) {

+    var recognizeDates = defined(context.recognizeDates, handler.recognizeDates);

+    var model = context.metadata;

+    var json = (typeof text === "string") ? JSON.parse(text) : text;

+    var metadataContentType;

+    if (assigned(context.contentType) && assigned(context.contentType.properties)) {

+        metadataContentType = context.contentType.properties["odata.metadata"]; //TODO convert to lower before comparism

+    }

+

+    var payloadFormat = getFormatKind(metadataContentType, 1); // none: 0, minimal: 1, full: 2

+

+    // No errors should be throw out if we could not parse the json payload, instead we should just return the original json object.

+    if (payloadFormat === 0) {

+        return json;

+    }

+    else if (payloadFormat === 1) {

+        return addMinimalMetadataToJsonPayload(json, model, recognizeDates);

+    }

+    else if (payloadFormat === 2) {

+        // to do: using the EDM Model to get the type of each property instead of just guessing.

+        return addFullMetadataToJsonPayload(json, model, recognizeDates);

+    }

+    else {

+        return json;

+    }

+}

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+// The regular expression corresponds to something like this:

+// /Date(123+60)/

+//

+// This first number is date ticks, the + may be a - and is optional,

+// with the second number indicating a timezone offset in minutes.

+//

+// On the wire, the leading and trailing forward slashes are

+// escaped without being required to so the chance of collisions is reduced;

+// however, by the time we see the objects, the characters already

+// look like regular forward slashes.

+var jsonDateRE = /^\/Date\((-?\d+)(\+|-)?(\d+)?\)\/$/;

+

+

+// Some JSON implementations cannot produce the character sequence \/

+// which is needed to format DateTime and DateTimeOffset into the

+// JSON string representation defined by the OData protocol.

+// See the history of this file for a candidate implementation of

+// a 'formatJsonDateString' function.

+

+

+var jsonReplacer = function (_, value) {

+    /// &lt;summary>JSON replacer function for converting a value to its JSON representation.&lt;/summary>

+    /// &lt;param value type="Object">Value to convert.&lt;/param>

+    /// &lt;returns type="String">JSON representation of the input value.&lt;/returns>

+    /// &lt;remarks>

+    ///   This method is used during JSON serialization and invoked only by the JSON.stringify function.

+    ///   It should never be called directly.

+    /// &lt;/remarks>

+

+    if (value && value.__edmType === "Edm.Time") {

+        return formatDuration(value);

+    } else {

+        return value;

+    }

+};

+

+/** Serializes a ODataJs payload structure to the wire format which can be send to the server

+ * @param handler - This handler.

+ * @param data - Data to serialize.

+ * @param {Object} context - Object with serialization context.

+ * @returns {String} The string representation of data.

+ */

+function jsonSerializer(handler, data, context) {

+

+    var dataServiceVersion = context.dataServiceVersion || "4.0";

+    var cType = context.contentType = context.contentType || jsonContentType;

+

+    if (cType && cType.mediaType === jsonContentType.mediaType) {

+        context.dataServiceVersion = maxVersion(dataServiceVersion, "4.0");

+        var newdata = formatJsonRequestPayload(data);

+        if (newdata) {

+            return JSON.stringify(newdata,jsonReplacer);

+        }

+    }

+    return undefined;

+}

+

+

+

+

+/** Convert OData objects for serialisation in to a new data structure

+ * @param data - Data to serialize.

+ * @returns {String} The string representation of data.

+ */

+function formatJsonRequestPayload(data) {

+    if (!data) {

+        return data;

+    }

+

+    if (isPrimitive(data)) {

+        return data;

+    }

+

+    if (isArray(data)) {

+        var newArrayData = [];

+        var i, len;

+        for (i = 0, len = data.length; i &lt; len; i++) {

+            newArrayData[i] = formatJsonRequestPayload(data[i]);

+        }

+

+        return newArrayData;

+    }

+

+    var newdata = {};

+    for (var property in data) {

+        if (isJsonSerializableProperty(property)) {

+            newdata[property] = formatJsonRequestPayload(data[property]);

+        }

+    }

+

+    return newdata;

+}

+

+/** Determine form the attribute name if the attribute is a serializable property

+ * @param attribute

+ * @returns {boolean}

+ */

+function isJsonSerializableProperty(attribute) {

+    if (!attribute) {

+        return false;

+    }

+

+    if (attribute.indexOf("@odata.") == -1) {

+        return true;

+    }

+

+    var i, len;

+    for (i = 0, len = jsonSerializableMetadata.length; i &lt; len; i++) {

+        var name = jsonSerializableMetadata[i];

+        if (attribute.indexOf(name) != -1) {

+            return true;

+        }

+    }

+

+    return false;

+}

+

+/** Creates an object containing information for the json payload.

+ * @param {String} kind - JSON payload kind

+ * @param {String} type - Type name of the JSON payload.

+ * @returns {Object} Object with kind and type fields.

+ */

+function jsonMakePayloadInfo(kind, type) {

+    return { kind: kind, type: type || null };

+}

+

+

+

+/** Add metadata to an JSON payload complex object containing full metadata

+ * @param {Object} data - Data structure to be extended

+ * @param {Object} model - Metadata model

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function addFullMetadataToJsonPayload(data, model, recognizeDates) {

+    var type;

+    if (utils.isObject(data)) {

+        for (var key in data) {

+            if (data.hasOwnProperty(key)) {

+                if (key.indexOf('@') === -1) {

+                    if (utils.isArray(data[key])) {

+                        for (var i = 0; i &lt; data[key].length; ++i) {

+                            addFullMetadataToJsonPayload(data[key][i], model, recognizeDates);

+                        }

+                    } else if (utils.isObject(data[key])) {

+                        if (data[key] !== null) {

+                            //don't step into geo.. objects

+                            type = data[key+'@odata.type'];

+                            if (!type) {

+                                //type unknown

+                                addFullMetadataToJsonPayload(data[key], model, recognizeDates);

+                            } else {

+                                type = type.substring(1);

+                                if  (isGeographyEdmType(type) || isGeometryEdmType(type)) {

+                                    // don't add type info for geo* types

+                                } else {

+                                    addFullMetadataToJsonPayload(data[key], model, recognizeDates);

+                                }

+                            }

+                        }

+                    } else {

+                        type = data[key + '@odata.type'];

+

+                        // On .Net OData library, some basic EDM type is omitted, e.g. Edm.String, Edm.Int, and etc.

+                        // For the full metadata payload, we need to full fill the @data.type for each property if it is missing.

+                        // We do this is to help the OlingoJS consumers to easily get the type of each property.

+                        if (!assigned(type)) {

+                            // Guessing the "type" from the type of the value is not the right way here.

+                            // To do: we need to get the type from metadata instead of guessing.

+                            var typeFromObject = typeof data[key];

+                            if (typeFromObject === 'string') {

+                                addType(data, key, 'String');

+                            } else if (typeFromObject === 'boolean') {

+                                addType(data, key, 'Boolean');

+                            } else if (typeFromObject === 'number') {

+                                if (data[key] % 1 === 0) { // has fraction

+                                    addType(data, key, 'Int32'); // the biggst integer

+                                } else {

+                                    addType(data, key, 'Decimal'); // the biggst float single,doulbe,decimal

+                                }

+                            }

+                        }

+                        else {

+                            if (recognizeDates) {

+                                convertDatesNoEdm(data, key, type.substring(1));

+                            }

+                        }

+                    }

+                }

+            }

+        }

+    }

+

+    return data;

+}

+

+/** Loop through the properties of an JSON payload object, look up the type info of the property and call

+ * the appropriate add*MetadataToJsonPayloadObject function

+ * @param {Object} data - Data structure to be extended

+ * @param {String} objectInfoType - Information about the data (name,type,typename,...)

+ * @param {String} baseURI - Base Url

+ * @param {Object} model - Metadata model

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function checkProperties(data, objectInfoType, baseURI, model, recognizeDates) {

+    for (var name in data) {

+        if (name.indexOf("@") === -1) {

+            var curType = objectInfoType;

+            var propertyValue = data[name];

+            var property = lookupProperty(curType.property,name); //TODO SK add check for parent type

+

+            while (( property === null) && (curType.baseType !== undefined)) {

+                curType = lookupEntityType(curType.baseType, model);

+                property = lookupProperty(curType.property,name);

+            }

+

+            if ( isArray(propertyValue)) {

+                //data[name+'@odata.type'] = '#' + property.type;

+                if (isCollectionType(property.type)) {

+                    addTypeColNoEdm(data,name,property.type.substring(11,property.type.length-1));

+                } else {

+                    addTypeNoEdm(data,name,property.type);

+                }

+

+

+                for ( var i = 0; i &lt; propertyValue.length; i++) {

+                    addMetadataToJsonMinimalPayloadComplex(propertyValue[i], property, baseURI, model, recognizeDates);

+                }

+            } else if (isObject(propertyValue) && (propertyValue !== null)) {

+                addMetadataToJsonMinimalPayloadComplex(propertyValue, property, baseURI, model, recognizeDates);

+            } else {

+                //data[name+'@odata.type'] = '#' + property.type;

+                addTypeNoEdm(data,name,property.type);

+                if (recognizeDates) {

+                    convertDates(data, name, property.type);

+                }

+            }

+        }

+    }

+}

+

+

+

+/** Add metadata to an JSON payload object containing minimal metadata

+ * @param {Object} data - Json response payload object

+ * @param {Object} model - Object describing an OData conceptual schema

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ * @returns {Object} Object in the library's representation.

+ */

+function addMinimalMetadataToJsonPayload(data, model, recognizeDates) {

+

+    if (!assigned(model) || isArray(model)) {

+        return data;

+    }

+

+    var baseURI = data[contextUrlAnnotation];

+    var payloadInfo = createPayloadInfo(data, model);

+

+    switch (payloadInfo.detectedPayloadKind) {

+

+        case PAYLOADTYPE_VALUE:

+            if (payloadInfo.type !== null) {

+                return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);

+            } else {

+                return addTypeNoEdm(data,'value', payloadInfo.typeName);

+            }

+

+        case PAYLOADTYPE_FEED:

+            return addMetadataToJsonMinimalPayloadFeed(data, model, payloadInfo, baseURI, recognizeDates);

+

+        case PAYLOADTYPE_ENTRY:

+            return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);

+

+        case PAYLOADTYPE_COLLECTION:

+            return addMetadataToJsonMinimalPayloadCollection(data, model, payloadInfo, baseURI, recognizeDates);

+

+        case PAYLOADTYPE_PROPERTY:

+            if (payloadInfo.type !== null) {

+                return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);

+            } else {

+                return addTypeNoEdm(data,'value', payloadInfo.typeName);

+            }

+

+        case PAYLOADTYPE_SVCDOC:

+            return data;

+

+        case PAYLOADTYPE_LINKS:

+            return data;

+    }

+

+    return data;

+}

+

+/** Add metadata to an JSON payload feed object containing minimal metadata

+ * @param {Object} data - Data structure to be extended

+ * @param {Object} model - Metadata model

+ * @param {String} feedInfo - Information about the data (name,type,typename,...)

+ * @param {String} baseURI - Base Url

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function addMetadataToJsonMinimalPayloadFeed(data, model, feedInfo, baseURI, recognizeDates) {

+    var entries = [];

+    var items = data.value;

+    var i,len;

+    var entry;

+    for (i = 0, len = items.length; i &lt; len; i++) {

+        var item = items[i];

+        if ( defined(item['@odata.type'])) { // in case of mixed feeds

+            var typeName = item['@odata.type'].substring(1);

+            var type = lookupEntityType( typeName, model);

+            var entryInfo = {

+                contentTypeOdata : feedInfo.contentTypeOdata,

+                detectedPayloadKind : feedInfo.detectedPayloadKind,

+                name : feedInfo.name,

+                type : type,

+                typeName : typeName

+            };

+

+            entry = addMetadataToJsonMinimalPayloadEntity(item, entryInfo, baseURI, model, recognizeDates);

+        } else {

+            entry = addMetadataToJsonMinimalPayloadEntity(item, feedInfo, baseURI, model, recognizeDates);

+        }

+

+        entries.push(entry);

+    }

+    data.value = entries;

+    return data;

+}

+

+

+/** Add metadata to an JSON payload entity object containing minimal metadata

+ * @param {Object} data - Data structure to be extended

+ * @param {String} objectInfo - Information about the data (name,type,typename,...)

+ * @param {String} baseURI - Base Url

+ * @param {Object} model - Metadata model

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function addMetadataToJsonMinimalPayloadEntity(data, objectInfo, baseURI, model, recognizeDates) {

+    addType(data,'',objectInfo.typeName);

+

+    var keyType = objectInfo.type;

+    while ((defined(keyType)) && ( keyType.key === undefined) && (keyType.baseType !== undefined)) {

+        keyType = lookupEntityType(keyType.baseType, model);

+    }

+

+    if (keyType.key !== undefined) {

+        var lastIdSegment = objectInfo.name + jsonGetEntryKey(data, keyType);

+        data['@odata.id'] = baseURI.substring(0, baseURI.lastIndexOf("$metadata")) + lastIdSegment;

+        data['@odata.editLink'] = lastIdSegment;

+    }

+

+    //var serviceURI = baseURI.substring(0, baseURI.lastIndexOf("$metadata"));

+

+    checkProperties(data, objectInfo.type, baseURI, model, recognizeDates);

+

+    return data;

+}

+

+/** Add metadata to an JSON payload complex object containing minimal metadata

+ * @param {Object} data - Data structure to be extended

+ * @param {String} property - Information about the data (name,type,typename,...)

+ * @param {String} baseURI - Base Url

+ * @param {Object} model - Metadata model

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function addMetadataToJsonMinimalPayloadComplex(data, property, baseURI, model, recognizeDates) {

+    var type = property.type;

+    if (isCollectionType(property.type)) {

+        type =property.type.substring(11,property.type.length-1);

+    }

+

+    addType(data,'',property.type);

+

+    var propertyType = lookupComplexType(type, model);

+    if (propertyType === null)  {

+        return; //TODO check what to do if the type is not known e.g. type #GeometryCollection

+    }

+

+    checkProperties(data, propertyType, baseURI, model, recognizeDates);

+}

+

+/** Add metadata to an JSON payload collection object containing minimal metadata

+ * @param {Object} data - Data structure to be extended

+ * @param {Object} model - Metadata model

+ * @param {String} collectionInfo - Information about the data (name,type,typename,...)

+ * @param {String} baseURI - Base Url

+ * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.

+ */

+function addMetadataToJsonMinimalPayloadCollection(data, model, collectionInfo, baseURI, recognizeDates) {

+

+    addTypeColNoEdm(data,'', collectionInfo.typeName);

+

+    if (collectionInfo.type !== null) {

+        var entries = [];

+

+        var items = data.value;

+        var i,len;

+        var entry;

+        for (i = 0, len = items.length; i &lt; len; i++) {

+            var item = items[i];

+            if ( defined(item['@odata.type'])) { // in case of mixed collections

+                var typeName = item['@odata.type'].substring(1);

+                var type = lookupEntityType( typeName, model);

+                var entryInfo = {

+                    contentTypeOdata : collectionInfo.contentTypeOdata,

+                    detectedPayloadKind : collectionInfo.detectedPayloadKind,

+                    name : collectionInfo.name,

+                    type : type,

+                    typeName : typeName

+                };

+

+                entry = addMetadataToJsonMinimalPayloadEntity(item, entryInfo, baseURI, model, recognizeDates);

+            } else {

+                entry = addMetadataToJsonMinimalPayloadEntity(item, collectionInfo, baseURI, model, recognizeDates);

+            }

+

+            entries.push(entry);

+        }

+        data.value = entries;

+    }

+    return data;

+}

+

+/** Add an OData type tag to an JSON payload object

+ * @param {Object} data - Data structure to be extended

+ * @param {String} name - Name of the property whose type is set

+ * @param {String} value - Type name

+ */

+function addType(data, name, value ) {

+    var fullName = name + '@odata.type';

+

+    if ( data[fullName] === undefined) {

+        data[fullName] = '#' + value;

+    }

+}

+

+/** Add an OData type tag to an JSON payload object collection (without "Edm." namespace)

+ * @param {Object} data - Data structure to be extended

+ * @param {String} name - Name of the property whose type is set

+ * @param {String} typeName - Type name

+ */

+function addTypeColNoEdm(data, name, typeName ) {

+    var fullName = name + '@odata.type';

+

+    if ( data[fullName] === undefined) {

+        if ( typeName.substring(0,4)==='Edm.') {

+            data[fullName] = '#Collection('+typeName.substring(4)+ ')';

+        } else {

+            data[fullName] = '#Collection('+typeName+ ')';

+        }

+    }

+}

+

+

+/** Add an OData type tag to an JSON payload object (without "Edm." namespace)

+ * @param {Object} data - Data structure to be extended

+ * @param {String} name - Name of the property whose type is set

+ * @param {String} value - Type name

+ */

+function addTypeNoEdm(data, name, value ) {

+    var fullName = name + '@odata.type';

+

+    if ( data[fullName] === undefined) {

+        if ( value.substring(0,4)==='Edm.') {

+            data[fullName] = '#' + value.substring(4);

+        } else {

+            data[fullName] = '#' + value;

+        }

+    }

+    return data;

+}

+/** Convert the date/time format of an property from the JSON payload object (without "Edm." namespace)

+ * @param {Object} data - Data structure to be extended

+ * @param propertyName - Name of the property to be changed

+ * @param type - Type

+ */

+function convertDates(data, propertyName,type) {

+    if (type === 'Edm.Date') {

+        data[propertyName] = oDataUtils.parseDate(data[propertyName], true);

+    } else if (type === 'Edm.DateTimeOffset') {

+        data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);

+    } else if (type === 'Edm.Duration') {

+        data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);

+    } else if (type === 'Edm.Time') {

+        data[propertyName] = oDataUtils.parseTime(data[propertyName], true);

+    }

+}

+

+/** Convert the date/time format of an property from the JSON payload object

+ * @param {Object} data - Data structure to be extended

+ * @param propertyName - Name of the property to be changed

+ * @param type - Type

+ */

+function convertDatesNoEdm(data, propertyName,type) {

+    if (type === 'Date') {

+        data[propertyName] = oDataUtils.parseDate(data[propertyName], true);

+    } else if (type === 'DateTimeOffset') {

+        data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);

+    } else if (type === 'Duration') {

+        data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);

+    } else if (type === 'Time') {

+        data[propertyName] = oDataUtils.parseTime(data[propertyName], true);

+    }

+}

+

+/** Formats a value according to Uri literal format

+ * @param value - Value to be formatted.

+ * @param type - Edm type of the value

+ * @returns {string} Value after formatting

+ */

+function formatLiteral(value, type) {

+

+    value = "" + formatRawLiteral(value, type);

+    value = encodeURIComponent(value.replace("'", "''"));

+    switch ((type)) {

+        case "Edm.Binary":

+            return "X'" + value + "'";

+        case "Edm.DateTime":

+            return "datetime" + "'" + value + "'";

+        case "Edm.DateTimeOffset":

+            return "datetimeoffset" + "'" + value + "'";

+        case "Edm.Decimal":

+            return value + "M";

+        case "Edm.Guid":

+            return "guid" + "'" + value + "'";

+        case "Edm.Int64":

+            return value + "L";

+        case "Edm.Float":

+            return value + "f";

+        case "Edm.Double":

+            return value + "D";

+        case "Edm.Geography":

+            return "geography" + "'" + value + "'";

+        case "Edm.Geometry":

+            return "geometry" + "'" + value + "'";

+        case "Edm.Time":

+            return "time" + "'" + value + "'";

+        case "Edm.String":

+            return "'" + value + "'";

+        default:

+            return value;

+    }

+}

+

+/** convert raw byteArray to hexString if the property is an binary property

+ * @param value - Value to be formatted.

+ * @param type - Edm type of the value

+ * @returns {string} Value after formatting

+ */

+function formatRawLiteral(value, type) {

+    switch (type) {

+        case "Edm.Binary":

+            return convertByteArrayToHexString(value);

+        default:

+            return value;

+    }

+}

+

+/** Formats the given minutes into (+/-)hh:mm format.

+ * @param {Number} minutes - Number of minutes to format.

+ * @returns {String} The minutes in (+/-)hh:mm format.

+ */

+function minutesToOffset(minutes) {

+

+    var sign;

+    if (minutes &lt; 0) {

+        sign = "-";

+        minutes = -minutes;

+    } else {

+        sign = "+";

+    }

+

+    var hours = Math.floor(minutes / 60);

+    minutes = minutes - (60 * hours);

+

+    return sign + formatNumberWidth(hours, 2) + ":" + formatNumberWidth(minutes, 2);

+}

+

+/** Parses the JSON Date representation into a Date object.

+ * @param {String} value - String value.

+ * @returns {Date} A Date object if the value matches one; falsy otherwise.

+ */

+function parseJsonDateString(value) {

+

+    var arr = value && jsonDateRE.exec(value);

+    if (arr) {

+        // 0 - complete results; 1 - ticks; 2 - sign; 3 - minutes

+        var result = new Date(parseInt10(arr[1]));

+        if (arr[2]) {

+            var mins = parseInt10(arr[3]);

+            if (arr[2] === "-") {

+                mins = -mins;

+            }

+

+            // The offset is reversed to get back the UTC date, which is

+            // what the API will eventually have.

+            var current = result.getUTCMinutes();

+            result.setUTCMinutes(current - mins);

+            result.__edmType = "Edm.DateTimeOffset";

+            result.__offset = minutesToOffset(mins);

+        }

+        if (!isNaN(result.valueOf())) {

+            return result;

+        }

+    }

+

+    // Allow undefined to be returned.

+}

+

+/** Creates an object containing information for the context

+ * @param {String} fragments - Uri fragment

+ * @param {Object} model - Object describing an OData conceptual schema

+ * @returns {Object} type(optional)  object containing type information for entity- and complex-types ( null if a typeName is a primitive)

+ */

+function parseContextUriFragment( fragments, model ) {

+    var ret = {};

+

+    if (fragments.indexOf('/') === -1 ) {

+        if (fragments.length === 0) {

+            // Capter 10.1

+            ret.detectedPayloadKind = PAYLOADTYPE_SVCDOC;

+            return ret;

+        } else if (fragments === 'Edm.Null') {

+            // Capter 10.15

+            ret.detectedPayloadKind = PAYLOADTYPE_VALUE;

+            ret.isNullProperty = true;

+            return ret;

+        } else if (fragments === 'Collection($ref)') {

+            // Capter 10.11

+            ret.detectedPayloadKind = PAYLOADTYPE_ENTITY_REF_LINKS;

+            return ret;

+        } else if (fragments === '$ref') {

+            // Capter 10.12

+            ret.detectedPayloadKind = PAYLOADTYPE_ENTITY_REF_LINK;

+            return ret;

+        } else {

+            //TODO check for navigation resource

+        }

+    }

+

+    ret.type = undefined;

+    ret.typeName = undefined;

+

+    var fragmentParts = fragments.split("/");

+    var type;

+

+    for(var i = 0; i &lt; fragmentParts.length; ++i) {

+        var fragment = fragmentParts[i];

+        if (ret.typeName === undefined) {

+            //preparation

+            if ( fragment.indexOf('(') !== -1 ) {

+                //remove the query function, cut fragment to matching '('

+                var index = fragment.length - 2 ;

+                for ( var rCount = 1; rCount > 0 && index > 0; --index) {

+                    if ( fragment.charAt(index)=='(') {

+                        rCount --;

+                    } else if ( fragment.charAt(index)==')') {

+                        rCount ++;

+                    }

+                }

+

+                if (index === 0) {

+                    //TODO throw error

+                }

+

+                //remove the projected entity from the fragment; TODO decide if we want to store the projected entity

+                var inPharenthesis = fragment.substring(index+2,fragment.length - 1);

+                fragment = fragment.substring(0,index+1);

+

+                if (utils.startsWith(fragment, 'Collection')) {

+                    ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;

+                    // Capter 10.14

+                    ret.typeName = inPharenthesis;

+

+                    type = lookupEntityType(ret.typeName, model);

+                    if ( type !== null) {

+                        ret.type = type;

+                        continue;

+                    }

+                    type = lookupComplexType(ret.typeName, model);

+                    if ( type !== null) {

+                        ret.type = type;

+                        continue;

+                    }

+

+                    ret.type = null;//in case of #Collection(Edm.String) only lastTypeName is filled

+                    continue;

+                } else {

+                    // projection: Capter 10.7, 10.8 and 10.9

+                    ret.projection = inPharenthesis;

+                }

+            }

+

+

+            if (jsonIsPrimitiveType(fragment)) {

+                ret.typeName = fragment;

+                ret.type = null;

+                ret.detectedPayloadKind = PAYLOADTYPE_VALUE;

+                continue;

+            }

+

+            var container = lookupDefaultEntityContainer(model);

+

+            //check for entity

+            var entitySet = lookupEntitySet(container.entitySet, fragment);

+            if ( entitySet !== null) {

+                ret.typeName = entitySet.entityType;

+                ret.type = lookupEntityType( ret.typeName, model);

+                ret.name = fragment;

+                ret.detectedPayloadKind = PAYLOADTYPE_FEED;

+                // Capter 10.2

+                continue;

+            }

+

+            //check for singleton

+            var singleton = lookupSingleton(container.singleton, fragment);

+            if ( singleton !== null) {

+                ret.typeName = singleton.entityType;

+                ret.type = lookupEntityType( ret.typeName, model);

+                ret.name = fragment;

+                ret.detectedPayloadKind =  PAYLOADTYPE_ENTRY;

+                // Capter 10.4

+                continue;

+            }

+

+

+

+            //TODO throw ERROR

+        } else {

+            //check for $entity

+            if (utils.endsWith(fragment, '$entity') && (ret.detectedPayloadKind === PAYLOADTYPE_FEED)) {

+                //TODO ret.name = fragment;

+                ret.detectedPayloadKind = PAYLOADTYPE_ENTRY;

+                // Capter 10.3 and 10.6

+                continue;

+            }

+

+            //check for derived types

+            if (fragment.indexOf('.') !== -1) {

+                // Capter 10.6

+                ret.typeName = fragment;

+                type = lookupEntityType(ret.typeName, model);

+                if ( type !== null) {

+                    ret.type = type;

+                    continue;

+                }

+                type = lookupComplexType(ret.typeName, model);

+                if ( type !== null) {

+                    ret.type = type;

+                    continue;

+                }

+

+                //TODO throw ERROR invalid type

+            }

+

+            //check for property value

+            if ( ret.detectedPayloadKind === PAYLOADTYPE_FEED || ret.detectedPayloadKind === PAYLOADTYPE_ENTRY) {

+                var property = lookupProperty(ret.type.property, fragment);

+                if (property !== null) {

+                    //PAYLOADTYPE_COLLECTION

+                    ret.typeName = property.type;

+

+

+                    if (utils.startsWith(property.type, 'Collection')) {

+                        ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;

+                        var tmp12 =  property.type.substring(10+1,property.type.length - 1);

+                        ret.typeName = tmp12;

+                        ret.type = lookupComplexType(tmp12, model);

+                        ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;

+                    } else {

+                        ret.type = lookupComplexType(property.type, model);

+                        ret.detectedPayloadKind = PAYLOADTYPE_PROPERTY;

+                    }

+

+                    ret.name = fragment;

+                    // Capter 10.15

+                }

+                continue;

+            }

+

+            if (fragment === '$delta') {

+                ret.deltaKind = DELTATYPE_FEED;

+                continue;

+            } else if (utils.endsWith(fragment, '/$deletedEntity')) {

+                ret.deltaKind = DELTATYPE_DELETED_ENTRY;

+                continue;

+            } else if (utils.endsWith(fragment, '/$link')) {

+                ret.deltaKind = DELTATYPE_LINK;

+                continue;

+            } else if (utils.endsWith(fragment, '/$deletedLink')) {

+                ret.deltaKind = DELTATYPE_DELETED_LINK;

+                continue;

+            }

+            //TODO throw ERROr

+        }

+    }

+

+    return ret;

+}

+

+

+/** Infers the information describing the JSON payload from its metadata annotation, structure, and data model.

+ * @param {Object} data - Json response payload object.

+ * @param {Object} model - Object describing an OData conceptual schema.

+ * If the arguments passed to the function don't convey enough information about the payload to determine without doubt that the payload is a feed then it

+ * will try to use the payload object structure instead.  If the payload looks like a feed (has value property that is an array or non-primitive values) then

+ * the function will report its kind as PAYLOADTYPE_FEED unless the inferFeedAsComplexType flag is set to true. This flag comes from the user request

+ * and allows the user to control how the library behaves with an ambigous JSON payload.

+ * @return Object with kind and type fields. Null if there is no metadata annotation or the payload info cannot be obtained..

+ */

+function createPayloadInfo(data, model) {

+    var metadataUri = data[contextUrlAnnotation];

+    if (!metadataUri || typeof metadataUri !== "string") {

+        return null;

+    }

+

+    var fragmentStart = metadataUri.lastIndexOf("#");

+    if (fragmentStart === -1) {

+        return jsonMakePayloadInfo(PAYLOADTYPE_SVCDOC);

+    }

+

+    var fragment = metadataUri.substring(fragmentStart + 1);

+    return parseContextUriFragment(fragment,model);

+}

+/** Gets the key of an entry.

+ * @param {Object} data - JSON entry.

+ * @param {Object} data - EDM entity model for key loockup.

+ * @returns {string} Entry instance key.

+ */

+function jsonGetEntryKey(data, entityModel) {

+

+    var entityInstanceKey;

+    var entityKeys = entityModel.key[0].propertyRef;

+    var type;

+    entityInstanceKey = "(";

+    if (entityKeys.length == 1) {

+        type = lookupProperty(entityModel.property, entityKeys[0].name).type;

+        entityInstanceKey += formatLiteral(data[entityKeys[0].name], type);

+    } else {

+        var first = true;

+        for (var i = 0; i &lt; entityKeys.length; i++) {

+            if (!first) {

+                entityInstanceKey += ",";

+            } else {

+                first = false;

+            }

+            type = lookupProperty(entityModel.property, entityKeys[i].name).type;

+            entityInstanceKey += entityKeys[i].name + "=" + formatLiteral(data[entityKeys[i].name], type);

+        }

+    }

+    entityInstanceKey += ")";

+    return entityInstanceKey;

+}

+/** Determines whether a type name is a primitive type in a JSON payload.

+ * @param {String} typeName - Type name to test.

+ * @returns {Boolean} True if the type name an EDM primitive type or an OData spatial type; false otherwise.

+ */

+function jsonIsPrimitiveType(typeName) {

+    return isPrimitiveEdmType(typeName) || isGeographyEdmType(typeName) || isGeometryEdmType(typeName);

+}

+

+

+var jsonHandler = oDataHandler.handler(jsonParser, jsonSerializer, jsonMediaType, MAX_DATA_SERVICE_VERSION);

+jsonHandler.recognizeDates = false;

+

+exports.createPayloadInfo = createPayloadInfo;

+exports.jsonHandler = jsonHandler;

+exports.jsonParser = jsonParser;

+exports.jsonSerializer = jsonSerializer;

+exports.parseJsonDateString = parseJsonDateString;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/memory-MemoryStore.html b/output/doc/javascript/apidoc/memory-MemoryStore.html
new file mode 100644
index 0000000..ad06d9a
--- /dev/null
+++ b/output/doc/javascript/apidoc/memory-MemoryStore.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/memory.html b/output/doc/javascript/apidoc/memory.html
new file mode 100644
index 0000000..b7402d1
--- /dev/null
+++ b/output/doc/javascript/apidoc/memory.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: store/memory</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: store/memory</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    store/memory
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="memory.js.html">store/memory.js</a>, <a href="memory.js.html#line21">line 21</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Classes</h3>
+        
+        <dl>
+            <dt><a href="memory-MemoryStore.html">MemoryStore</a></dt>
+            <dd></dd>
+        </dl>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:27 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/memory.js.html b/output/doc/javascript/apidoc/memory.js.html
new file mode 100644
index 0000000..a3edf2d
--- /dev/null
+++ b/output/doc/javascript/apidoc/memory.js.html
@@ -0,0 +1,296 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: store/memory.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: store/memory.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module store/memory */

+

+

+var utils = require('./../utils.js');

+

+// Imports.

+var throwErrorCallback = utils.throwErrorCallback;

+var delay = utils.delay;

+

+/** Constructor for store objects that use a sorted array as the underlying mechanism.

+ * @class MemoryStore

+ * @constructor

+ * @param {String} name - Store name.

+ */

+function MemoryStore(name) {

+

+    var holes = [];

+    var items = [];

+    var keys = {};

+

+    this.name = name;

+

+    var getErrorCallback = function (error) {

+        return error || this.defaultError;

+    };

+

+    /** Validates that the specified key is not undefined, not null, and not an array

+     * @param key - Key value.

+     * @param {Function} error - Error callback.

+     * @returns {Boolean} True if the key is valid. False if the key is invalid and the error callback has been queued for execution.

+     */

+    function validateKeyInput(key, error) {

+

+        var messageString;

+

+        if (key instanceof Array) {

+            messageString = "Array of keys not supported";

+        }

+

+        if (key === undefined || key === null) {

+            messageString = "Invalid key";

+        }

+

+        if (messageString) {

+            delay(error, { message: messageString });

+            return false;

+        }

+        return true;

+    }

+

+    /** This method errors out if the store already contains the specified key.

+     * @summary Adds a new value identified by a key to the store.

+     * @method module:store/memory~MemoryStore#add

+     * @param {String} key - Key string.

+     * @param value - Value that is going to be added to the store.

+     * @param {Function} success - Callback for a successful add operation.

+     * @param {Function} error - Callback for handling errors. If not specified then store.defaultError is invoked.

+     */

+    this.add = function (key, value, success, error) {

+        error = getErrorCallback(error);

+

+        if (validateKeyInput(key, error)) {

+            if (!keys.hasOwnProperty(key)) {

+                this.addOrUpdate(key, value, success, error);

+            } else {

+                error({ message: "key already exists", key: key });

+            }

+        }

+    };

+

+    /** This method will overwrite the key's current value if it already exists in the store; otherwise it simply adds the new key and value.

+     * @summary Adds or updates a value identified by a key to the store.

+     * @method module:store/memory~MemoryStore#addOrUpdate

+     * @param {String} key - Key string.

+     * @param value - Value that is going to be added or updated to the store.

+     * @param {Function} success - Callback for a successful add or update operation.

+     * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+    */

+    this.addOrUpdate = function (key, value, success, error) {

+        

+        error = getErrorCallback(error);

+

+        if (validateKeyInput(key, error)) {

+            var index = keys[key];

+            if (index === undefined) {

+                if (holes.length > 0) {

+                    index = holes.splice(0, 1);

+                } else {

+                    index = items.length;

+                }

+            }

+            items[index] = value;

+            keys[key] = index;

+            delay(success, key, value);

+        }

+    };

+

+    /** Removes all the data associated with this store object.

+     * @method module:store/memory~MemoryStore#clear

+     * @param {Function} success - Callback for a successful clear operation.

+     */

+    this.clear = function (success) {

+        items = [];

+        keys = {};

+        holes = [];

+        delay(success);

+    };

+

+    /** Checks whether a key exists in the store.

+     * @method module:store/memory~MemoryStore#contains

+     * @param {String} key - Key string.

+     * @param {Function} success - Callback indicating whether the store contains the key or not.

+     */

+    this.contains = function (key, success) {

+        var contained = keys.hasOwnProperty(key);

+        delay(success, contained);

+    };

+

+    /** Gets all the keys that exist in the store.

+     * @method module:store/memory~MemoryStore#getAllKeys

+     * @param {Function} success - Callback for a successful get operation.

+     */

+    this.getAllKeys = function (success) {

+

+        var results = [];

+        for (var name in keys) {

+            results.push(name);

+        }

+        delay(success, results);

+    };

+

+    /** Reads the value associated to a key in the store.

+     * @method module:store/memory~MemoryStore#read

+     * @param {String} key - Key string.

+     * @param {Function} success - Callback for a successful reads operation.

+     * @param {Function} error - Callback for handling errors. If not specified then store.defaultError is invoked.

+     */

+    this.read = function (key, success, error) {

+        error = getErrorCallback(error);

+

+        if (validateKeyInput(key, error)) {

+            var index = keys[key];

+            delay(success, key, items[index]);

+        }

+    };

+

+    /** Removes a key and its value from the store.

+     * @method module:store/memory~MemoryStore#remove

+     * @param {String} key - Key string.

+     * @param {Function} success - Callback for a successful remove operation.

+     * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+     */

+    this.remove = function (key, success, error) {

+        error = getErrorCallback(error);

+

+        if (validateKeyInput(key, error)) {

+            var index = keys[key];

+            if (index !== undefined) {

+                if (index === items.length - 1) {

+                    items.pop();

+                } else {

+                    items[index] = undefined;

+                    holes.push(index);

+                }

+                delete keys[key];

+

+                // The last item was removed, no need to keep track of any holes in the array.

+                if (items.length === 0) {

+                    holes = [];

+                }

+            }

+

+            delay(success);

+        }

+    };

+

+    /** Updates the value associated to a key in the store.

+     * @method module:store/memory~MemoryStore#update

+     * @param {String} key - Key string.

+     * @param value - New value.

+     * @param {Function} success - Callback for a successful update operation.

+     * @param {Function} [error] - Callback for handling errors. If not specified then store.defaultError is invoked.

+     * This method errors out if the specified key is not found in the store.

+     */

+    this.update = function (key, value, success, error) {

+        error = getErrorCallback(error);

+        if (validateKeyInput(key, error)) {

+            if (keys.hasOwnProperty(key)) {

+                this.addOrUpdate(key, value, success, error);

+            } else {

+                error({ message: "key not found", key: key });

+            }

+        }

+    };

+}

+

+/** Creates a store object that uses memory storage as its underlying mechanism.

+ * @method MemoryStore.create

+ * @param {String} name - Store name.

+ * @returns {Object} Store object.

+ */

+MemoryStore.create = function (name) {

+    return new MemoryStore(name);

+};

+

+/** Checks whether the underlying mechanism for this kind of store objects is supported by the browser.

+ * @method MemoryStore.isSupported

+ * @returns {Boolean} True if the mechanism is supported by the browser; otherwise false.

+ */

+MemoryStore.isSupported = function () {

+    return true;

+};

+

+/** This function does nothing in MemoryStore as it does not have a connection model.

+*/

+MemoryStore.prototype.close = function () {

+};

+

+MemoryStore.prototype.defaultError = throwErrorCallback;

+

+/** Identifies the underlying mechanism used by the store.

+*/

+MemoryStore.prototype.mechanism = "memory";

+

+

+/** MemoryStore (see {@link MemoryStore}) */

+module.exports = MemoryStore;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/metadata.html b/output/doc/javascript/apidoc/metadata.html
new file mode 100644
index 0000000..e011132
--- /dev/null
+++ b/output/doc/javascript/apidoc/metadata.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/metadata.js.html b/output/doc/javascript/apidoc/metadata.js.html
new file mode 100644
index 0000000..985e8af
--- /dev/null
+++ b/output/doc/javascript/apidoc/metadata.js.html
@@ -0,0 +1,572 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata/metadata.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata/metadata.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+/** @module odata/metadata */

+

+var utils    = require('./../utils.js');

+var oDSxml    = require('./../xml.js');

+var odataHandler    = require('./handler.js');

+

+

+

+// imports 

+var contains = utils.contains;

+var normalizeURI = utils.normalizeURI;

+var xmlAttributes = oDSxml.xmlAttributes;

+var xmlChildElements = oDSxml.xmlChildElements;

+var xmlFirstChildElement = oDSxml.xmlFirstChildElement;

+var xmlInnerText = oDSxml.xmlInnerText;

+var xmlLocalName = oDSxml.xmlLocalName;

+var xmlNamespaceURI = oDSxml.xmlNamespaceURI;

+var xmlNS = oDSxml.xmlNS;

+var xmlnsNS = oDSxml.xmlnsNS;

+var xmlParse = oDSxml.xmlParse;

+

+var ado = oDSxml.http + "docs.oasis-open.org/odata/";      // http://docs.oasis-open.org/odata/

+var adoDs = ado + "ns";                             // http://docs.oasis-open.org/odata/ns

+var edmxNs = adoDs + "/edmx";                       // http://docs.oasis-open.org/odata/ns/edmx

+var edmNs1 = adoDs + "/edm";                        // http://docs.oasis-open.org/odata/ns/edm

+var odataMetaXmlNs = adoDs + "/metadata";           // http://docs.oasis-open.org/odata/ns/metadata

+var MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;

+

+var xmlMediaType = "application/xml";

+

+/** Creates an object that describes an element in an schema.

+ * @param {Array} attributes - List containing the names of the attributes allowed for this element.

+ * @param {Array} elements - List containing the names of the child elements allowed for this element.

+ * @param {Boolean} text - Flag indicating if the element's text value is of interest or not.

+ * @param {String} ns - Namespace to which the element belongs to.

+ * If a child element name ends with * then it is understood by the schema that that child element can appear 0 or more times.

+ * @returns {Object} Object with attributes, elements, text, and ns fields.

+ */

+function schemaElement(attributes, elements, text, ns) {

+

+    return {

+        attributes: attributes,

+        elements: elements,

+        text: text || false,

+        ns: ns

+    };

+}

+

+// It's assumed that all elements may have Documentation children and Annotation elements.

+// See http://docs.oasis-open.org/odata/odata/v4.0/cs01/part3-csdl/odata-v4.0-cs01-part3-csdl.html for a CSDL reference.

+var schema = {

+    elements: {

+        Action: schemaElement(

+        /*attributes*/["Name", "IsBound", "EntitySetPath"],

+        /*elements*/["ReturnType", "Parameter*", "Annotation*"]

+        ),

+        ActionImport: schemaElement(

+        /*attributes*/["Name", "Action", "EntitySet", "Annotation*"]

+        ),

+        Annotation: schemaElement(

+        /*attributes*/["Term", "Qualifier", "Binary", "Bool", "Date", "DateTimeOffset", "Decimal", "Duration", "EnumMember", "Float", "Guid", "Int", "String", "TimeOfDay", "AnnotationPath", "NavigationPropertyPath", "Path", "PropertyPath", "UrlRef"],

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*", "Annotation*"]

+        ),

+        AnnotationPath: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Annotations: schemaElement(

+        /*attributes*/["Target", "Qualifier"],

+        /*elements*/["Annotation*"]

+        ),

+        Apply: schemaElement(

+        /*attributes*/["Function"],

+        /*elements*/["String*", "Path*", "LabeledElement*", "Annotation*"]

+        ),

+        And: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Or: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Not: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Eq: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Ne: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Gt: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Ge: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Lt: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Le: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Binary: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Bool: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Cast: schemaElement(

+        /*attributes*/["Type"],

+        /*elements*/["Path*", "Annotation*"]

+        ),

+        Collection: schemaElement(

+        /*attributes*/null,

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*"]

+        ),

+        ComplexType: schemaElement(

+        /*attributes*/["Name", "BaseType", "Abstract", "OpenType"],

+        /*elements*/["Property*", "NavigationProperty*", "Annotation*"]

+        ),

+        Date: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        DateTimeOffset: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Decimal: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Duration: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        EntityContainer: schemaElement(

+        /*attributes*/["Name", "Extends"],

+        /*elements*/["EntitySet*", "Singleton*", "ActionImport*", "FunctionImport*", "Annotation*"]

+        ),

+        EntitySet: schemaElement(

+        /*attributes*/["Name", "EntityType", "IncludeInServiceDocument"],

+        /*elements*/["NavigationPropertyBinding*", "Annotation*"]

+        ),

+        EntityType: schemaElement(

+        /*attributes*/["Name", "BaseType", "Abstract", "OpenType", "HasStream"],

+        /*elements*/["Key*", "Property*", "NavigationProperty*", "Annotation*"]

+        ),

+        EnumMember: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        EnumType: schemaElement(

+        /*attributes*/["Name", "UnderlyingType", "IsFlags"],

+        /*elements*/["Member*"]

+        ),

+        Float: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Function: schemaElement(

+        /*attributes*/["Name", "IsBound", "IsComposable", "EntitySetPath"],

+        /*elements*/["ReturnType", "Parameter*", "Annotation*"]

+        ),

+        FunctionImport: schemaElement(

+        /*attributes*/["Name", "Function", "EntitySet", "IncludeInServiceDocument", "Annotation*"]

+        ),

+        Guid: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        If: schemaElement(

+        /*attributes*/null,

+        /*elements*/["Path*", "String*", "Annotation*"]

+        ),

+        Int: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        IsOf: schemaElement(

+        /*attributes*/["Type", "MaxLength", "Precision", "Scale", "Unicode", "SRID", "DefaultValue", "Annotation*"],

+        /*elements*/["Path*"]

+        ),

+        Key: schemaElement(

+        /*attributes*/null,

+        /*elements*/["PropertyRef*"]

+        ),

+        LabeledElement: schemaElement(

+        /*attributes*/["Name"],

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*", "Annotation*"]

+        ),

+        LabeledElementReference: schemaElement(

+        /*attributes*/["Term"],

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*"]

+        ),

+        Member: schemaElement(

+        /*attributes*/["Name", "Value"],

+        /*element*/["Annotation*"]

+        ),

+        NavigationProperty: schemaElement(

+        /*attributes*/["Name", "Type", "Nullable", "Partner", "ContainsTarget"],

+        /*elements*/["ReferentialConstraint*", "OnDelete*", "Annotation*"]

+        ),

+        NavigationPropertyBinding: schemaElement(

+        /*attributes*/["Path", "Target"]

+        ),

+        NavigationPropertyPath: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Null: schemaElement(

+        /*attributes*/null,

+        /*elements*/["Annotation*"]

+        ),

+        OnDelete: schemaElement(

+        /*attributes*/["Action"],

+        /*elements*/["Annotation*"]

+        ),

+        Path: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Parameter: schemaElement(

+        /*attributes*/["Name", "Type", "Nullable", "MaxLength", "Precision", "Scale", "SRID"],

+        /*elements*/["Annotation*"]

+        ),

+        Property: schemaElement(

+        /*attributes*/["Name", "Type", "Nullable", "MaxLength", "Precision", "Scale", "Unicode", "SRID", "DefaultValue"],

+        /*elements*/["Annotation*"]

+        ),

+        PropertyPath: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        PropertyRef: schemaElement(

+        /*attributes*/["Name", "Alias"]

+        ),

+        PropertyValue: schemaElement(

+        /*attributes*/["Property", "Path"],

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*", "Annotation*"]

+        ),

+        Record: schemaElement(

+        /*attributes*/null,

+        /*Elements*/["PropertyValue*", "Property*", "Annotation*"]

+        ),

+        ReferentialConstraint: schemaElement(

+        /*attributes*/["Property", "ReferencedProperty", "Annotation*"]

+        ),

+        ReturnType: schemaElement(

+        /*attributes*/["Type", "Nullable", "MaxLength", "Precision", "Scale", "SRID"]

+        ),

+        String: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        Schema: schemaElement(

+        /*attributes*/["Namespace", "Alias"],

+        /*elements*/["Action*", "Annotations*", "Annotation*", "ComplexType*", "EntityContainer", "EntityType*", "EnumType*", "Function*", "Term*", "TypeDefinition*", "Annotation*"]

+        ),

+        Singleton: schemaElement(

+        /*attributes*/["Name", "Type"],

+        /*elements*/["NavigationPropertyBinding*", "Annotation*"]

+        ),

+        Term: schemaElement(

+        /*attributes*/["Name", "Type", "BaseTerm", "DefaultValue ", "AppliesTo", "Nullable", "MaxLength", "Precision", "Scale", "SRID"],

+        /*elements*/["Annotation*"]

+        ),

+        TimeOfDay: schemaElement(

+        /*attributes*/null,

+        /*elements*/null,

+        /*text*/true

+        ),

+        TypeDefinition: schemaElement(

+        /*attributes*/["Name", "UnderlyingType", "MaxLength", "Unicode", "Precision", "Scale", "SRID"],

+        /*elements*/["Annotation*"]

+        ),

+        UrlRef: schemaElement(

+        /*attributes*/null,

+        /*elements*/["Binary*", "Bool*", "Date*", "DateTimeOffset*", "Decimal*", "Duration*", "EnumMember*", "Float*", "Guid*", "Int*", "String*", "TimeOfDay*", "And*", "Or*", "Not*", "Eq*", "Ne*", "Gt*", "Ge*", "Lt*", "Le*", "AnnotationPath*", "Apply*", "Cast*", "Collection*", "If*", "IsOf*", "LabeledElement*", "LabeledElementReference*", "Null*", "NavigationPropertyPath*", "Path*", "PropertyPath*", "Record*", "UrlRef*", "Annotation*"]

+        ),

+

+        // See http://msdn.microsoft.com/en-us/library/dd541238(v=prot.10) for an EDMX reference.

+        Edmx: schemaElement(

+        /*attributes*/["Version"],

+        /*elements*/["DataServices", "Reference*"],

+        /*text*/false,

+        /*ns*/edmxNs

+        ),

+        DataServices: schemaElement(

+        /*attributes*/["m:MaxDataServiceVersion", "m:DataServiceVersion"],

+        /*elements*/["Schema*"],

+        /*text*/false,

+        /*ns*/edmxNs

+        ),

+        Reference: schemaElement(

+        /*attributes*/["Uri"],

+        /*elements*/["Include*", "IncludeAnnotations*", "Annotation*"]

+        ),

+        Include: schemaElement(

+        /*attributes*/["Namespace", "Alias"]

+        ),

+        IncludeAnnotations: schemaElement(

+        /*attributes*/["TermNamespace", "Qualifier", "TargetNamespace"]

+        )

+    }

+};

+

+

+/** Converts a Pascal-case identifier into a camel-case identifier.

+ * @param {String} text - Text to convert.

+ * @returns {String} Converted text.

+ * If the text starts with multiple uppercase characters, it is left as-is.

+ */

+function scriptCase(text) {

+

+    if (!text) {

+        return text;

+    }

+

+    if (text.length > 1) {

+        var firstTwo = text.substr(0, 2);

+        if (firstTwo === firstTwo.toUpperCase()) {

+            return text;

+        }

+

+        return text.charAt(0).toLowerCase() + text.substr(1);

+    }

+

+    return text.charAt(0).toLowerCase();

+}

+

+/** Gets the schema node for the specified element.

+ * @param {Object} parentSchema - Schema of the parent XML node of 'element'.

+ * @param candidateName - XML element name to consider.

+ * @returns {Object} The schema that describes the specified element; null if not found.

+ */

+function getChildSchema(parentSchema, candidateName) {

+

+    var elements = parentSchema.elements;

+    if (!elements) {

+        return null;

+    }

+

+    var i, len;

+    for (i = 0, len = elements.length; i &lt; len; i++) {

+        var elementName = elements[i];

+        var multipleElements = false;

+        if (elementName.charAt(elementName.length - 1) === "*") {

+            multipleElements = true;

+            elementName = elementName.substr(0, elementName.length - 1);

+        }

+

+        if (candidateName === elementName) {

+            var propertyName = scriptCase(elementName);

+            return { isArray: multipleElements, propertyName: propertyName };

+        }

+    }

+

+    return null;

+}

+

+/** Checks whether the specifies namespace URI is one of the known CSDL namespace URIs.

+ * @param {String} nsURI - Namespace URI to check.

+ * @returns {Boolean} true if nsURI is a known CSDL namespace; false otherwise.

+ */

+function isEdmNamespace(nsURI) {

+

+    return nsURI === edmNs1;

+}

+

+/** Parses a CSDL document.

+ * @param element - DOM element to parse.

+ * @returns {Object} An object describing the parsed element.

+ */

+function parseConceptualModelElement(element) {

+

+    var localName = xmlLocalName(element);

+    var nsURI = xmlNamespaceURI(element);

+    var elementSchema = schema.elements[localName];

+    if (!elementSchema) {

+        return null;

+    }

+

+    if (elementSchema.ns) {

+        if (nsURI !== elementSchema.ns) {

+            return null;

+        }

+    } else if (!isEdmNamespace(nsURI)) {

+        return null;

+    }

+

+    var item = {};

+    var attributes = elementSchema.attributes || [];

+    xmlAttributes(element, function (attribute) {

+

+        var localName = xmlLocalName(attribute);

+        var nsURI = xmlNamespaceURI(attribute);

+        var value = attribute.value;

+

+        // Don't do anything with xmlns attributes.

+        if (nsURI === xmlnsNS) {

+            return;

+        }

+

+        // Currently, only m: for metadata is supported as a prefix in the internal schema table,

+        // un-prefixed element names imply one a CSDL element.

+        var schemaName = null;

+        if (isEdmNamespace(nsURI) || nsURI === null) {

+            schemaName = "";

+        } else if (nsURI === odataMetaXmlNs) {

+            schemaName = "m:";

+        }

+

+        if (schemaName !== null) {

+            schemaName += localName;

+

+            if (contains(attributes, schemaName)) {

+                item[scriptCase(localName)] = value;

+            }

+        }

+

+    });

+

+    xmlChildElements(element, function (child) {

+        var localName = xmlLocalName(child);

+        var childSchema = getChildSchema(elementSchema, localName);

+        if (childSchema) {

+            if (childSchema.isArray) {

+                var arr = item[childSchema.propertyName];

+                if (!arr) {

+                    arr = [];

+                    item[childSchema.propertyName] = arr;

+                }

+                arr.push(parseConceptualModelElement(child));

+            } else {

+                item[childSchema.propertyName] = parseConceptualModelElement(child);

+            }

+        } 

+    });

+

+    if (elementSchema.text) {

+        item.text = xmlInnerText(element);

+    }

+

+    return item;

+}

+

+/** Parses a metadata document.

+ * @param handler - This handler.

+ * @param {String} text - Metadata text.

+ * @returns An object representation of the conceptual model.

+ */

+function metadataParser(handler, text) {

+

+    var doc = xmlParse(text);

+    var root = xmlFirstChildElement(doc);

+    return parseConceptualModelElement(root) || undefined;

+}

+

+

+

+exports.metadataHandler = odataHandler.handler(metadataParser, null, xmlMediaType, MAX_DATA_SERVICE_VERSION);

+

+exports.schema = schema;

+exports.scriptCase = scriptCase;

+exports.getChildSchema = getChildSchema;

+exports.parseConceptualModelElement = parseConceptualModelElement;

+exports.metadataParser = metadataParser;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/module-cache.html b/output/doc/javascript/apidoc/module-cache.html
new file mode 100644
index 0000000..ffecd81
--- /dev/null
+++ b/output/doc/javascript/apidoc/module-cache.html
Binary files differ
diff --git a/output/doc/javascript/apidoc/module-datajs.html b/output/doc/javascript/apidoc/module-datajs.html
new file mode 100644
index 0000000..3080906
--- /dev/null
+++ b/output/doc/javascript/apidoc/module-datajs.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: datajs</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: datajs</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    datajs
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odatajs.js.html">odatajs.js</a>, <a href="odatajs.js.html#line3">line 3</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-datajs.html">datajs</a></li><li><a href="deferred.html">datajs/deferred</a></li><li><a href="utils.html">datajs/utils</a></li><li><a href="xml.html">datajs/xml</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils_.html">odata/utils</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Mon Sep 15 2014 13:08:00 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/module-odata.html b/output/doc/javascript/apidoc/module-odata.html
new file mode 100644
index 0000000..1013d70
--- /dev/null
+++ b/output/doc/javascript/apidoc/module-odata.html
@@ -0,0 +1,1117 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: odata</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: odata</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    odata
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line21">line 21</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="defaultSuccess"><span class="type-signature">&lt;static> </span>defaultSuccess<span class="signature">(data)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Default success handler for OData.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>data</code></td>
+            
+            
+            <td class="type">
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Data to process.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line67">line 67</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="parseMetadata"><span class="type-signature">&lt;static> </span>parseMetadata<span class="signature">(csdlMetadataDocument)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Parses the csdl metadata to ODataJS metatdata format. This method can be used when the metadata is retrieved using something other than odatajs
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>csdlMetadataDocument</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">A string that represents the entire csdl metadata.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line172">line 172</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    An object that has the representation of the metadata in odatajs format.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="read"><span class="type-signature">&lt;static> </span>read<span class="signature">(urlOrRequest, <span class="optional">success</span>, <span class="optional">error</span>, <span class="optional">handler</span>, <span class="optional">httpClient</span>, <span class="optional">metadata</span>)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Reads data from the specified URL.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		<th>Argument</th>
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>urlOrRequest</code></td>
+            
+            
+            <td class="type">
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">URL to read data from.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>handler</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>httpClient</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>metadata</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line110">line 110</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="request"><span class="type-signature">&lt;static> </span>request<span class="signature">(request, <span class="optional">success</span>, <span class="optional">error</span>, <span class="optional">handler</span>, <span class="optional">httpClient</span>, <span class="optional">metadata</span>)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Sends a request containing OData payload to a server.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		<th>Argument</th>
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>request</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">Object that represents the request to be sent.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>success</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>error</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">function</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>handler</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>httpClient</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>metadata</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line130">line 130</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="dispatchHandler"><span class="type-signature">&lt;inner> </span>dispatchHandler<span class="signature">(handlerMethod, requestOrResponse, context)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Dispatches an operation to handlers.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>handlerMethod</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Name of handler method to invoke.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>requestOrResponse</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">request/response argument for delegated call.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>context</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">context argument for delegated call.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="odata.js.html">odata.js</a>, <a href="odata.js.html#line53">line 53</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/module-store.html b/output/doc/javascript/apidoc/module-store.html
new file mode 100644
index 0000000..4f417bd
--- /dev/null
+++ b/output/doc/javascript/apidoc/module-store.html
@@ -0,0 +1,306 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: store</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: store</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    store
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="store.js.html">store.js</a>, <a href="store.js.html#line4">line 4</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="createStore"><span class="type-signature">&lt;static> </span>createStore<span class="signature">(name, <span class="optional">mechanism</span>)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a new store object.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		<th>Argument</th>
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>name</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">Store name.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>mechanism</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+                <td class="attributes">
+                
+                    &lt;optional><br>
+                
+                    
+                
+                    
+                
+                </td>
+            
+            
+            
+            
+            <td class="description last">-</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="store.js.html">store.js</a>, <a href="store.js.html#line34">line 34</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    Store object.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:27 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/net.html b/output/doc/javascript/apidoc/net.html
new file mode 100644
index 0000000..c00b3fb
--- /dev/null
+++ b/output/doc/javascript/apidoc/net.html
@@ -0,0 +1,3179 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Module: odata/net</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Module: odata/net</h1>
+    
+    
+
+
+
+<section>
+    
+<header>
+    <h2>
+    odata/net
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line3">line 3</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="createIFrame"><span class="type-signature">&lt;inner> </span>createIFrame<span class="signature">(url)</span><span class="type-signature"> &rarr; {HTMLElement}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates an IFRAME tag for loading the JSONP script
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The source URL of the script</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line53">line 53</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    The IFRAME tag
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">HTMLElement</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="createXmlHttpRequest"><span class="type-signature">&lt;inner> </span>createXmlHttpRequest<span class="signature">()</span><span class="type-signature"> &rarr; {XmlHttpRequest}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a XmlHttpRequest object.
+    </div>
+    
+
+    
+    
+    
+    
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line70">line 70</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    XmlHttpRequest object.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">XmlHttpRequest</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isAbsoluteUrl"><span class="type-signature">&lt;inner> </span>isAbsoluteUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is an absolute URL.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line95">line 95</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is an absolute URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isAbsoluteUrl"><span class="type-signature">&lt;inner> </span>isAbsoluteUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is an absolute URL.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line53">line 53</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is an absolute URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isLocalUrl"><span class="type-signature">&lt;inner> </span>isLocalUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is local to the current context.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line105">line 105</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is a local URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isLocalUrl"><span class="type-signature">&lt;inner> </span>isLocalUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is local to the current context.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line63">line 63</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is a local URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="readResponseHeaders"><span class="type-signature">&lt;inner> </span>readResponseHeaders<span class="signature">(xhr, headers)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Reads response headers into array.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>xhr</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">XMLHttpRequest</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">HTTP request with response available.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>headers</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Array</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Target array to fill with name/value pairs.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line149">line 149</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="readResponseHeaders"><span class="type-signature">&lt;inner> </span>readResponseHeaders<span class="signature">(inHeader, outHeader)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Reads response headers into array.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>inHeader</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last"></td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>outHeader</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Array</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last"></td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line80">line 80</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="removeCallback"><span class="type-signature">&lt;inner> </span>removeCallback<span class="signature">(name, tick)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Removes a callback used for a JSONP request.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>name</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Function name to remove.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>tick</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Number</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Tick count used on the callback.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line121">line 121</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="removeIFrame"><span class="type-signature">&lt;inner> </span>removeIFrame<span class="signature">(iframe)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Removes an iframe.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>iframe</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The iframe to remove.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line136">line 136</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    Null value to be assigned to iframe reference.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="writeHtmlToIFrame"><span class="type-signature">&lt;inner> </span>writeHtmlToIFrame<span class="signature">(iframe, html)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Writes HTML to an IFRAME document.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>iframe</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">HTMLElement</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The IFRAME element to write to.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>html</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The HTML to write.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line165">line 165</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+
+
+<section>
+    
+<header>
+    <h2>
+    odata/net
+    </h2>
+    
+</header>  
+
+<article>
+    <div class="container-overview">
+    
+    
+    
+        
+        
+        
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line20">line 20</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+        
+        
+    
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+        <h3 class="subsection-title">Methods</h3>
+        
+        <dl>
+            
+<dt>
+    <h4 class="name" id="createIFrame"><span class="type-signature">&lt;inner> </span>createIFrame<span class="signature">(url)</span><span class="type-signature"> &rarr; {HTMLElement}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates an IFRAME tag for loading the JSONP script
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The source URL of the script</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line53">line 53</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    The IFRAME tag
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">HTMLElement</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="createXmlHttpRequest"><span class="type-signature">&lt;inner> </span>createXmlHttpRequest<span class="signature">()</span><span class="type-signature"> &rarr; {XmlHttpRequest}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Creates a XmlHttpRequest object.
+    </div>
+    
+
+    
+    
+    
+    
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line70">line 70</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    XmlHttpRequest object.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">XmlHttpRequest</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isAbsoluteUrl"><span class="type-signature">&lt;inner> </span>isAbsoluteUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is an absolute URL.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line95">line 95</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is an absolute URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isAbsoluteUrl"><span class="type-signature">&lt;inner> </span>isAbsoluteUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is an absolute URL.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line53">line 53</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is an absolute URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isLocalUrl"><span class="type-signature">&lt;inner> </span>isLocalUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is local to the current context.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line105">line 105</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is a local URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="isLocalUrl"><span class="type-signature">&lt;inner> </span>isLocalUrl<span class="signature">(url)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Checks whether the specified URL is local to the current context.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>url</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">URL to check.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line63">line 63</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    true if the url is a local URL; false otherwise.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Boolean</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="readResponseHeaders"><span class="type-signature">&lt;inner> </span>readResponseHeaders<span class="signature">(xhr, headers)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Reads response headers into array.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>xhr</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">XMLHttpRequest</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">HTTP request with response available.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>headers</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Array</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Target array to fill with name/value pairs.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line149">line 149</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="readResponseHeaders"><span class="type-signature">&lt;inner> </span>readResponseHeaders<span class="signature">(inHeader, outHeader)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Reads response headers into array.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>inHeader</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last"></td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>outHeader</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Array</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last"></td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net.js.html">odata/net.js</a>, <a href="net.js.html#line80">line 80</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="removeCallback"><span class="type-signature">&lt;inner> </span>removeCallback<span class="signature">(name, tick)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Removes a callback used for a JSONP request.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>name</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Function name to remove.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>tick</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Number</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">Tick count used on the callback.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line121">line 121</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="removeIFrame"><span class="type-signature">&lt;inner> </span>removeIFrame<span class="signature">(iframe)</span><span class="type-signature"> &rarr; {Object}</span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Removes an iframe.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>iframe</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">Object</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The iframe to remove.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line136">line 136</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    <h5>Returns:</h5>
+    
+            
+<div class="param-desc">
+    Null value to be assigned to iframe reference.
+</div>
+
+
+
+<dl>
+	<dt>
+		Type
+	</dt>
+	<dd>
+		
+<span class="param-type">Object</span>
+
+
+	</dd>
+</dl>
+
+        
+    
+    
+</dd>
+
+        
+            
+<dt>
+    <h4 class="name" id="writeHtmlToIFrame"><span class="type-signature">&lt;inner> </span>writeHtmlToIFrame<span class="signature">(iframe, html)</span><span class="type-signature"></span></h4>
+    
+    
+</dt>
+<dd>
+    
+    
+    <div class="description">
+        Writes HTML to an IFRAME document.
+    </div>
+    
+
+    
+    
+    
+    
+    
+        <h5>Parameters:</h5>
+        
+
+<table class="params">
+    <thead>
+	<tr>
+		
+		<th>Name</th>
+		
+		
+		<th>Type</th>
+		
+		
+		
+		
+		
+		<th class="last">Description</th>
+	</tr>
+	</thead>
+	
+	<tbody>
+	
+	
+        <tr>
+            
+                <td class="name"><code>iframe</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">HTMLElement</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The IFRAME element to write to.</td>
+        </tr>
+	
+	
+	
+        <tr>
+            
+                <td class="name"><code>html</code></td>
+            
+            
+            <td class="type">
+            
+                
+<span class="param-type">String</span>
+
+
+            
+            </td>
+            
+            
+            
+            
+            
+            <td class="description last">The HTML to write.</td>
+        </tr>
+	
+	
+	</tbody>
+</table>
+    
+    
+    
+<dl class="details">
+    
+        
+    
+    
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="net-browser.js.html">odata/net-browser.js</a>, <a href="net-browser.js.html#line165">line 165</a>
+    </li></ul></dd>
+    
+    
+    
+    
+    
+    
+    
+</dl>
+
+    
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    
+</dd>
+
+        </dl>
+    
+    
+    
+    
+    
+</article>
+
+</section>  
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/output/doc/javascript/apidoc/net.js.html b/output/doc/javascript/apidoc/net.js.html
new file mode 100644
index 0000000..d04a1d5
--- /dev/null
+++ b/output/doc/javascript/apidoc/net.js.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata/net.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata/net.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+/** @module odata/net */

+

+

+var http = require('http');

+var utils    = require('./../utils.js');

+var url = require("url");

+

+

+var defined = utils.defined;

+var delay = utils.delay;

+

+var ticks = 0;

+

+/* Checks whether the specified request can be satisfied with a JSONP request.

+ * @param request - Request object to check.

+ * @returns {Boolean} true if the request can be satisfied; false otherwise.

+

+ * Requests that 'degrade' without changing their meaning by going through JSONP

+ * are considered usable.

+ *

+ * We allow data to come in a different format, as the servers SHOULD honor the Accept

+ * request but may in practice return content with a different MIME type.

+ */

+function canUseJSONP(request) {

+    return false;

+}

+

+

+

+/** Checks whether the specified URL is an absolute URL.

+ * @param {String} url - URL to check.

+ * @returns {Boolean} true if the url is an absolute URL; false otherwise.

+*/

+function isAbsoluteUrl(url) {

+    return url.indexOf("http://") === 0 ||

+           url.indexOf("https://") === 0 ||

+           url.indexOf("file://") === 0;

+}

+

+/** Checks whether the specified URL is local to the current context.

+ * @param {String} url - URL to check.

+ * @returns {Boolean} true if the url is a local URL; false otherwise.

+ */

+function isLocalUrl(url) {

+

+    if (!isAbsoluteUrl(url)) {

+        return true;

+    }

+

+    // URL-embedded username and password will not be recognized as same-origin URLs.

+    var location = window.location;

+    var locationDomain = location.protocol + "//" + location.host + "/";

+    return (url.indexOf(locationDomain) === 0);

+}

+

+

+/** Reads response headers into array.

+ * @param {Object} inHeader

+ * @param {Array} outHeader

+ */

+function readResponseHeaders(inHeader, outHeader) {

+    for (var property in inHeader) {

+        

+        if (inHeader.hasOwnProperty(property)) {

+            outHeader[property] = inHeader[property];

+        }

+    }

+}

+

+    

+

+

+

+exports.defaultHttpClient = {

+    formatQueryString: "$format=json",

+

+    

+    /** Performs a network request.

+     * @param {Object} request - Request description

+     * @param {Function} success - Success callback with the response object.

+     * @param {Function} error - Error callback with an error object.

+     * @returns {Object} Object with an 'abort' method for the operation.

+     */

+    request: function (request, success, error) {

+

+        var result = {};

+        var done = false;

+        

+        var options = url.parse(request.requestUri);

+        options.method = request.method || "GET";

+        options.headers = {};

+        //options.auth = request.user + ':' + request.password;

+        //add headers

+        var name;

+        if (request.headers) {

+            for (name in request.headers) {

+                options.headers[name] = request.headers[name];

+            }

+        }   

+        

+

+        var xhr = http.request(options);

+

+        result.abort = function () {

+            if (done) {

+                return;

+            }

+

+            done = true;

+            if (xhr) {

+                xhr.abort();

+                xhr = null;

+            }

+

+            error({ message: "Request aborted" });

+        };

+

+        // Set the timeout if available.

+        if (request.timeoutMS) {

+            xhr.setTimeout(request.timeoutMS,function () {

+                if (!done) {

+                    done = true;

+                    xhr = null;

+                    error({ message: "Request timed out" });

+                }

+            });

+        }

+

+        xhr.on('error', function(e) {

+            var response = { requestUri: url, statusCode: 400, statusText: e.message };

+            error({ message: "HTTP request failed", request: request, response: response });

+        });

+             

+

+        xhr.on('response', function (resp) {

+            if (done || xhr === null) {

+                return;

+            }

+

+            var headers = [];

+            readResponseHeaders(resp.headers, headers);

+                        

+            var body = '';

+

+            resp.on('data', function(chunk) {

+                body+=chunk;

+            });

+            resp.on('end', function() {

+                // do what you do

+                var response = { requestUri: url, statusCode: resp.statusCode, statusText: '', headers: headers, body: body };

+

+                done = true;

+                xhr = null;

+                if (resp.statusCode >= 200 && resp.statusCode &lt;= 299) {

+                    success(response);

+                } else {

+                    error({ message: "HTTP request failed", request: request, response: response });

+                }   

+            });

+        });

+

+        //xhr.open(request.method || "GET", url, true,);

+        if (request.body) {

+            xhr.write(request.body);

+        }

+        xhr.end();

+

+        return result;

+    }

+};

+

+

+

+exports.canUseJSONP = canUseJSONP;

+exports.isAbsoluteUrl = isAbsoluteUrl;

+exports.isLocalUrl = isLocalUrl;</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/odata.js.html b/output/doc/javascript/apidoc/odata.js.html
new file mode 100644
index 0000000..508741e
--- /dev/null
+++ b/output/doc/javascript/apidoc/odata.js.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odata.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odata.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*

+ * 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.

+ */

+'use strict';

+

+ /** @module odata */

+

+// Imports

+var odataUtils    = exports.utils     = require('./odata/odatautils.js');

+var odataHandler  = exports.handler   = require('./odata/handler.js');

+var odataMetadata = exports.metadata  = require('./odata/metadata.js');

+var odataNet      = exports.net       = require('./odata/net.js');

+var odataJson     = exports.json      = require('./odata/json.js');

+                    exports.batch     = require('./odata/batch.js');

+                    

+

+

+var utils = require('./utils.js');

+var assigned = utils.assigned;

+

+var defined = utils.defined;

+var throwErrorCallback = utils.throwErrorCallback;

+

+var invokeRequest = odataUtils.invokeRequest;

+var MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;

+var prepareRequest = odataUtils.prepareRequest;

+var metadataParser = odataMetadata.metadataParser;

+

+// CONTENT START

+

+var handlers = [odataJson.jsonHandler, odataHandler.textHandler];

+

+/** Dispatches an operation to handlers.

+ * @param {String} handlerMethod - Name of handler method to invoke.

+ * @param {Object} requestOrResponse - request/response argument for delegated call.

+ * @param {Object} context - context argument for delegated call.

+ */

+function dispatchHandler(handlerMethod, requestOrResponse, context) {

+

+    var i, len;

+    for (i = 0, len = handlers.length; i &lt; len && !handlers[i][handlerMethod](requestOrResponse, context); i++) {

+    }

+

+    if (i === len) {

+        throw { message: "no handler for data" };

+    }

+}

+

+/** Default success handler for OData.

+ * @param data - Data to process.

+ */

+exports.defaultSuccess = function (data) {

+

+    window.alert(window.JSON.stringify(data));

+};

+

+exports.defaultError = throwErrorCallback;

+

+exports.defaultHandler = {

+

+        /** Reads the body of the specified response by delegating to JSON handlers.

+        * @param response - Response object.

+        * @param context - Operation context.

+        */

+        read: function (response, context) {

+

+            if (response && assigned(response.body) && response.headers["Content-Type"]) {

+                dispatchHandler("read", response, context);

+            }

+        },

+

+        /** Write the body of the specified request by delegating to JSON handlers.

+        * @param request - Reques tobject.

+        * @param context - Operation context.

+        */

+        write: function (request, context) {

+

+            dispatchHandler("write", request, context);

+        },

+

+        maxDataServiceVersion: MAX_DATA_SERVICE_VERSION,

+        accept: "application/json;q=0.9, */*;q=0.1"

+    };

+

+exports.defaultMetadata = []; //TODO check why is the defaultMetadata an Array? and not an Object.

+

+/** Reads data from the specified URL.

+ * @param urlOrRequest - URL to read data from.

+ * @param {Function} [success] - 

+ * @param {Function} [error] - 

+ * @param {Object} [handler] - 

+ * @param {Object} [httpClient] - 

+ * @param {Object} [metadata] - 

+ */

+exports.read = function (urlOrRequest, success, error, handler, httpClient, metadata) {

+

+    var request;

+    if (urlOrRequest instanceof String || typeof urlOrRequest === "string") {

+        request = { requestUri: urlOrRequest };

+    } else {

+        request = urlOrRequest;

+    }

+

+    return exports.request(request, success, error, handler, httpClient, metadata);

+};

+

+/** Sends a request containing OData payload to a server.

+ * @param {Object} request - Object that represents the request to be sent.

+ * @param {Function} [success] - 

+ * @param {Function} [error] - 

+ * @param {Object} [handler] - 

+ * @param {Object} [httpClient] - 

+ * @param {Object} [metadata] - 

+ */

+exports.request = function (request, success, error, handler, httpClient, metadata) {

+

+    success = success || exports.defaultSuccess;

+    error = error || exports.defaultError;

+    handler = handler || exports.defaultHandler;

+    httpClient = httpClient || odataNet.defaultHttpClient;

+    metadata = metadata || exports.defaultMetadata;

+

+    // Augment the request with additional defaults.

+    request.recognizeDates = utils.defined(request.recognizeDates, odataJson.jsonHandler.recognizeDates);

+    request.callbackParameterName = utils.defined(request.callbackParameterName, odataNet.defaultHttpClient.callbackParameterName);

+    request.formatQueryString = utils.defined(request.formatQueryString, odataNet.defaultHttpClient.formatQueryString);

+    request.enableJsonpCallback = utils.defined(request.enableJsonpCallback, odataNet.defaultHttpClient.enableJsonpCallback);

+

+    // Create the base context for read/write operations, also specifying complete settings.

+    var context = {

+        metadata: metadata,

+        recognizeDates: request.recognizeDates,

+        callbackParameterName: request.callbackParameterName,

+        formatQueryString: request.formatQueryString,

+        enableJsonpCallback: request.enableJsonpCallback

+    };

+

+    try {

+        odataUtils.prepareRequest(request, handler, context);

+        return odataUtils.invokeRequest(request, success, error, handler, httpClient, context);

+    } catch (err) {

+        // errors in success handler for sync requests are catched here and result in error handler calls. 

+        // So here we fix this and throw that error further.

+        if (err.bIsSuccessHandlerError) {

+            throw err;

+        } else {

+            error(err);

+        }

+    }

+

+};

+

+/** Parses the csdl metadata to ODataJS metatdata format. This method can be used when the metadata is retrieved using something other than odatajs

+ * @param {string} csdlMetadataDocument - A string that represents the entire csdl metadata.

+ * @returns {Object} An object that has the representation of the metadata in odatajs format.

+ */

+exports.parseMetadata = function (csdlMetadataDocument) {

+

+    return metadataParser(null, csdlMetadataDocument);

+};

+

+// Configure the batch handler to use the default handler for the batch parts.

+exports.batch.batchHandler.partHandler = exports.defaultHandler;

+exports.metadataHandler =  odataMetadata.metadataHandler;

+exports.jsonHandler =  odataJson.jsonHandler;

+</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils.html">odata/utils</a></li><li><a href="deferred.html">odatajs/deferred</a></li><li><a href="utils_.html">odatajs/utils</a></li><li><a href="xml.html">odatajs/xml</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Apr 09 2015 08:31:26 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/odatajs.js.html b/output/doc/javascript/apidoc/odatajs.js.html
new file mode 100644
index 0000000..fe0aac4
--- /dev/null
+++ b/output/doc/javascript/apidoc/odatajs.js.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: odatajs.js</title>
+    
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+    
+    <h1 class="page-title">Source: odatajs.js</h1>
+    
+    
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source"><code>/*
+ * 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.
+ */
+
+/** @module datajs */
+
+//expose all external usable functions via self.apiFunc = function
+exports.version = {
+    major: 1,
+    minor: 1,
+    build: 1
+};
+
+exports.deferred = require('./odatajs/deferred.js');
+exports.utils = require('./odatajs/utils.js');
+exports.xml = require('./odatajs/xml.js');
+
+</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cache.html">cache</a></li><li><a href="source.html">cache/source</a></li><li><a href="module-datajs.html">datajs</a></li><li><a href="deferred.html">datajs/deferred</a></li><li><a href="utils.html">datajs/utils</a></li><li><a href="xml.html">datajs/xml</a></li><li><a href="module-odata.html">odata</a></li><li><a href="batch.html">odata/batch</a></li><li><a href="handler.html">odata/handler</a></li><li><a href="json.html">odata/json</a></li><li><a href="metadata.html">odata/metadata</a></li><li><a href="net.html">odata/net</a></li><li><a href="utils_.html">odata/utils</a></li><li><a href="module-store.html">store</a></li><li><a href="dom.html">store/dom</a></li><li><a href="indexeddb.html">store/indexeddb</a></li><li><a href="memory.html">store/memory</a></li></ul><h3>Classes</h3><ul><li><a href="DataCache.html">DataCache</a></li><li><a href="DataCacheOperation.html">DataCacheOperation</a></li><li><a href="DjsDeferred.html">DjsDeferred</a></li><li><a href="dom-DomStore.html">DomStore</a></li><li><a href="indexeddb-IndexedDBStore.html">IndexedDBStore</a></li><li><a href="memory-MemoryStore.html">MemoryStore</a></li><li><a href="ODataCacheSource.html">ODataCacheSource</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Mon Sep 15 2014 13:07:59 GMT+0200 (MESZ)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/output/doc/javascript/apidoc/scripts/linenumber.js b/output/doc/javascript/apidoc/scripts/linenumber.js
new file mode 100644
index 0000000..613865d
--- /dev/null
+++ b/output/doc/javascript/apidoc/scripts/linenumber.js
@@ -0,0 +1,17 @@
+(function() {
+    var counter = 0;
+    var numbered;
+    var source = document.getElementsByClassName('prettyprint source');
+
+    if (source && source[0]) {
+        source = source[0].getElementsByTagName('code')[0];
+
+        numbered = source.innerHTML.split('\n');
+        numbered = numbered.map(function(item) {
+            counter++;
+            return '<span id="line' + counter + '" class="line"></span>' + item;
+        });
+
+        source.innerHTML = numbered.join('\n');
+    }
+})();
diff --git a/output/doc/javascript/apidoc/scripts/prettify/Apache-License-2.0.txt b/output/doc/javascript/apidoc/scripts/prettify/Apache-License-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/output/doc/javascript/apidoc/scripts/prettify/Apache-License-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an