Merged all of Gregg Kellogg's test suite changes into json-ld.org website.
authorManu Sporny <msporny@digitalbazaar.com>
Thu, 26 May 2011 21:56:23 -0400
changeset 31 77505b8ddcad
parent 30 3770c6e17245
child 32 40bbe643c241
Merged all of Gregg Kellogg's test suite changes into json-ld.org website.
test-suite/.htaccess
test-suite/README
test-suite/check-test
test-suite/crazyivan.js
test-suite/crazyivan.py
test-suite/css/screen.css
test-suite/git-update
test-suite/index.html
test-suite/jquery-1.4.2.min.js
test-suite/manifest.ttl
test-suite/retrieve-tests
test-suite/sparql-query
test-suite/test-cases
test-suite/test-details
test-suite/tests/0001.json
test-suite/tests/0001.sparql
test-suite/tests/0002.json
test-suite/tests/0002.sparql
test-suite/tests/0003.json
test-suite/tests/0003.sparql
test-suite/tests/0004.json
test-suite/tests/0004.sparql
test-suite/tests/0005.json
test-suite/tests/0005.sparql
test-suite/tests/0006.json
test-suite/tests/0006.sparql
test-suite/tests/0007.json
test-suite/tests/0007.sparql
test-suite/tests/0008.json
test-suite/tests/0008.sparql
test-suite/tests/0009.json
test-suite/tests/0009.sparql
test-suite/tests/0010.json
test-suite/tests/0010.sparql
test-suite/tests/0011.json
test-suite/tests/0011.sparql
test-suite/tests/0012.json
test-suite/tests/0012.sparql
test-suite/tests/0013.json
test-suite/tests/0013.sparql
test-suite/tests/0014.json
test-suite/tests/0014.sparql
test-suite/tests/0015.json
test-suite/tests/0015.sparql
test-suite/tests/0016.json
test-suite/tests/0016.sparql
test-suite/tests/0017.json
test-suite/tests/0017.sparql
test-suite/tests/0018.json
test-suite/tests/0018.sparql
test-suite/tests/0019.json
test-suite/tests/0019.sparql
test-suite/tests/0020.json
test-suite/tests/0020.sparql
test-suite/tests/0021.json
test-suite/tests/0021.sparql
test-suite/tests/0022.json
test-suite/tests/0022.sparql
test-suite/tests/0023.json
test-suite/tests/0023.sparql
test-suite/tests/0024.json
test-suite/tests/0024.sparql
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/.htaccess	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+AddHandler mod_python .py
+PythonDebug On
+PythonHandler crazyivan
+
+<FilesMatch "(test-cases|retrieve-tests|check-test|test-details|git-update|sparql-query)">
+   SetHandler mod_python
+</FilesMatch>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/README	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,77 @@
+Introduction
+------------
+
+The JSON-LD Test Suite is a set of Web Services, markup and tests that can 
+be used to verify JSON-LD Processor conformance to the set of specifications
+that constitute JSON-LD. The goal of the suite is to provide an easy and 
+comprehensive JSON-LD testing solution for developers creating JSON-LD Processors.
+
+Design
+------
+
+The JSON-LD Test suite allows developers to mix and match JSON-LD test manifests, 
+JSON-LD processor endpoints and SPARQL endpoints. Processing happens in the
+following order:
+
+JSON-LD Test Manifest -> JSON-LD Test Suite -> JSON-LD processor -> SPARQL endpoint
+
+The JSON-LD Test Suite drives the entire process. The first step is to
+retrieve the list of tests that should be run for a particular manifest.
+Then the JSON-LD test suite uses the processor that was selected to
+extract the triples and send those triples, along with what triples are
+expected (via a SPARQL query) to the SPARQL endpoint. The end result is a
+yes/no on whether the expected triples were extracted by the JSON-LD processor.
+
+Running the Test Suite
+----------------------
+
+You can view and run this test suite at the following URL:
+
+http://json-ld.org/test-suite/
+
+Contributing
+------------
+
+If you would like to contribute a new test or a fix to an existing test,
+please follow these steps:
+
+1. Notify the JSON-LD mailing list, public-linked-json@w3.org, 
+   that you will be creating a new test or fix and the purpose of the
+   change.
+2. Clone the git repository: git@github.com:msporny/json-ld-test-suite.git
+3. Make your changes and submit them via github, or via a 'git format-patch'
+   to Manu Sporny <msporny@digitalbazaar.com> or to the JSON-LD mailing list.
+
+Optionally, you can ask Manu for direct access to the repository and may make
+changes directly to the JSON-LD Test Suite source code. All updates to the test 
+suite go live on Digital Bazaar's JSON-LD Test Suite site within seconds of 
+committing changes to github via a WebHook call.
+
+How to Add a Unit Test
+----------------------
+
+In order to add a unit test, you must follow these steps:
+   
+1. Pick a new unit test number. For example - 250. To be consistent, please use
+   the next available unit test number.
+2. Create a markup file in the tests/ directory with a .json extension. 
+   For example: tests/250.json
+3. Create a SPARQL query file in the tests/ directory with a .sparql extension.
+   For example: tests/250.sparql
+4. Add your test to manifest.ttl.
+
+There are three classifications for Unit Tests:
+
+required - These are tests that are required for proper operation per the
+           JSON-LD specification.
+optional - These are tests for optional features supported by some JSON-LD 
+           Processors.
+buggy    - These are tests that are buggy or are not considered valid test
+           cases by all JSON-LD processor maintainers.
+
+The test suite is designed to empower JSON-LD processor maintainers to create
+and add tests as they see fit. This may mean that the test suite may become
+unstable from time to time, but this approach has been taken so that the 
+long-term goal of having a comprehensive test suite for JSON-LD can be achieved
+by the JSON-LD community.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/check-test	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/crazyivan.js	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,415 @@
+/**
+ * This Javascript file is used by the Crazy Ivan JSON-LD Test Harness
+ * to process the entire test suite without requiring the developer to
+ * leave the page.
+ */
+
+/**
+ * Sends an XML HTTP request to a given URL and calls a given callback
+ * with the data.
+ *
+ * @param url the URL to call
+ * @param callback the callback to call with the returned data.
+ * @param postData the data to use when posting to the given URL.
+ */
+function sendRequest(url, callback, callback_data)
+{
+   jQuery.get(url, function(data) { callback(data, callback_data); });
+}
+
+/**
+ * Creates an XML HTTP Object based on the type of browser that the
+ * client is using.
+ */
+function createXMLHTTPObject()
+{
+   var xmlHttp;
+
+   // get the non-IE (non-ActiveX) version of the xml http object
+   // if the object hasn't been acquired yet
+   if(xmlHttp == null && typeof XMLHttpRequest !== 'undefined')
+   {
+      xmlHttp = new XMLHttpRequest();
+   }
+
+   return xmlHttp;
+}
+
+/**
+ * Makes a call to retrieve all of the unit tests that are associated with the
+ * selected test suite and status filter.
+ */
+function retrieveUnitTests()
+{
+   // note the test cases are loading
+   document.getElementById('unit-tests').innerHTML = "<span style=\"font-size: 150%; font-weight: bold; color: #f00\">Test Cases are Loading...</span>";
+
+   // send the HTTP request to the crazy ivan web service
+   sendRequest('retrieve-tests', displayUnitTests)
+}
+
+/**
+ * Displays all of the unit tests.
+ *
+ * @param req the HTTP request object.
+ */
+function displayUnitTests(response, callbackData)
+{
+   document.getElementById('unit-tests').innerHTML = response;
+}
+
+/**
+ * Performs a check of a unit test given the unit test number, source
+ * test file and SPARQL test file.
+ *
+ * @param num the test case number
+ * @param source_url the source test file to use.
+ * @param sparql_url the SPARQL test query to use.
+ * @param expected_result the expected result of the SPARQL query.
+ */
+function checkUnitTest(num, source_url, sparql_url, expected_result)
+{
+   var jldExtractorUrl = getJldExtractorUrl();
+   var sparqlEngineUrl = getSparqlEngineUrl();
+   
+   document.getElementById('unit-test-status-' + num).innerHTML =
+      "CHECKING...";
+   sendRequest('check-test?id=' + num +
+               '&source=' + source_url +
+               '&sparql=' + sparql_url +
+               '&expected-result=' + expected_result +
+               '&jsonld-extractor=' + escape(jldExtractorUrl) +
+               '&sparql-engine=' + escape(sparqlEngineUrl),
+               displayUnitTestResult, num)
+}
+
+/**
+ * Shows the details of a particular test case.
+ *
+ * @param num the unit test ID.
+ * @param source_url the document to use for testing.
+ * @param sparql_url the SPARQL test query to use.
+ * @param jsonld_extractor_url the JSON-LD extractor web service URL.
+ * @param n3_extractor_url the N3 extractor web service URL.
+ */
+function showUnitTestDetails(num, source_url, sparql_url)
+{
+   var jldExtractorUrl = getJldExtractorUrl();
+   var n3ExtractorUrl = "http://www.w3.org/2007/08/pyRdfa/shadowextract?format=n3&uri=";
+
+   document.getElementById('unit-test-details-' + num).innerHTML =
+      "Retreiving information...";
+   sendRequest('test-details?id=' + num +
+               '&source=' + escape(source_url) +
+               '&sparql=' + escape(sparql_url) +
+               '&jsonld-extractor=' + escape(jldExtractorUrl) +
+               '&n3-extractor=' + escape(n3ExtractorUrl),
+               displayUnitTestDetailsResult, num)
+}
+
+/**
+ * Hides the details of the unit test given
+ *
+ * @param num the unit test number to hide.
+ */
+function hideUnitTestDetails(num)
+{
+   document.getElementById('unit-test-details-' + num).innerHTML = "";
+}
+
+/**
+ * Displays the return value of a unit test result.
+ *
+ * @param num the unit test number to hide.
+ */
+function displayUnitTestResult(response, num)
+{
+   var unitTestId = 'unit-test-status-' + num;
+
+   if(response.length < 512)
+   {
+      var e = document.getElementById(unitTestId);
+      e.innerHTML = response;
+   }
+   else
+   {
+      leadingZeros = "";
+      if(num < 10)
+      {
+         leadingZeros = "000";
+      }
+      else if(num < 100)
+      {
+         leadingZeros = "00";
+      }
+      else if(num < 1000)
+      {
+         leadingZeros = "000";
+      }
+      else if(num < 10000)
+      {
+         leadingZeros = "0";
+      }
+
+      var formattedNum = leadingZeros + num;
+      var baseTcUrl = getBaseTcUrl();
+      var htmlUrl = baseTcUrl + formattedNum + ".xhtml";
+      var sparqlUrl = baseTcUrl + formattedNum + ".sparql";
+      var expectedResult = "true";
+
+      document.getElementById(unitTestId).innerHTML =
+         "<a href=\"javascript:checkUnitTest(" + num + ",'" +
+    htmlUrl + "','" + sparqlUrl + "','" + expectedResult +
+    "')\" style=\"font-weight: bold; color: #f00\">ERROR</a>" +
+    "<pre>" + response + "</pre>";
+   }
+}
+
+/**
+ * Displays the return HTML value for the unit test details.
+ *
+ * @param response the HTTP request object.
+ * @param num the unit test number to hide.
+ */
+function displayUnitTestDetailsResult(response, num)
+{
+   document.getElementById('unit-test-details-' + num).innerHTML = response;
+}
+
+/**
+ * Gets the host language identifier for the currently selected test suite.
+ *
+ * @return the host language identifier for the currently selected test suite.
+ */
+function getTestSuiteHostLanguage()
+{
+   var rval = "";
+   var testsuite = document.getElementById('test-suite-selection').value;
+
+   languages = ["xml1", "xhtml1", "html4", "html5", "xhtml5", 
+      "svgtiny1.2", "svg"];
+   
+   // check for all languages in the test suite string
+   var arrayLength = languages.length;
+   for(var i = 0; i < arrayLength; ++i)
+   {
+      var language = languages[i];
+      if(testsuite.indexOf(language) != -1)
+      {
+         rval = language;
+         break;
+      }
+   }
+
+   return rval;
+}
+
+/**
+ * Gets the base Test Case URL based on the test manifest.
+ *
+ * @return the base test case URL containing all of the HTML and SPARQL files.
+ */
+function getBaseTcUrl()
+{
+   return 'http://json-ld.digitalbazaar.com/test-suite/test-cases/';
+}
+
+/**
+ * Gets the currently selected JSON-LD extractor URL.
+ *
+ * @return The JSON-LD extractor URL.
+ */
+function getJldExtractorUrl()
+{
+   var rval = "";
+   var extractor = document.getElementById('jsonld-extractor-selection').value;
+
+   if(extractor === "RDF.rb")
+   {
+      rval = "http://rdf.kellogg-assoc.com/distiller?raw=true&fmt=rdfxml&in_fmt=jsonld&uri="
+   }
+   else if(extractor === "other")
+   {
+      rval = document.getElementById('jsonld-extractor-selection-value').value;
+   }
+
+   return rval;
+}
+
+/**
+ * Gets the currently selected SPARQL engine URL.
+ *
+ * @return the SPARQL engine URL
+ */
+function getSparqlEngineUrl()
+{
+   var rval = "";
+   var engine = document.getElementById('sparql-engine-selection').value;
+
+   if(engine === "graphene")
+   {
+      rval = window.location + "sparql-query";
+   }
+   else if(engine === "sparqler")
+   {
+      rval = "http://sparql.org/sparql?stylesheet=%2Fxml-to-html.xsl&query=";
+   }
+   else if(engine === "virtuoso")
+   {
+      rval = "http://demo.openlinksw.com/sparql/?should-sponge=soft&query=";
+   }
+   else if(engine === "other")
+   {
+      rval = document.getElementById('sparql-engine-selection-value').value;
+   }
+
+   return rval;
+}
+
+/**
+ * Update the configuration that is displayed on the web page.
+ */
+function updateConfigurationDisplay()
+{
+   var testSuiteManifest = getTestSuiteHostLanguage();
+   var jldExtractorUrl = getJldExtractorUrl();
+   var sparqlEngineUrl = getSparqlEngineUrl();
+   
+   document.getElementById('test-suite-selection-value').innerHTML =
+      testSuiteManifest;
+   document.getElementById('jsonld-extractor-selection-value').value =
+      jldExtractorUrl;
+   document.getElementById('sparql-engine-selection-value').value =
+      sparqlEngineUrl;
+}
+
+/**
+ * Runs all of the unit tests by calling each anchor element
+ * one-by-one.
+ */
+function performAllUnitTests()
+{
+   utCount = 0;
+   for(var i = 1; i <= 2000; i++)
+   {
+      var id = "unit-test-anchor-" + i;
+      var elem = document.getElementById(id);
+      if(elem && elem.href)
+      {
+         utCount += 1;
+         setTimeout(elem.href, (utCount * 1000));
+      }
+   }
+}
+
+/**
+ * Generates an EARL report by checking the status of each test and
+ */
+function generateEarlReport()
+{
+   var jldExtractorUrl = getJldExtractorUrl();
+   var rdftext = '';
+   
+   rdftext =  '<rdf:RDF xmlns:earl="http://www.w3.org/ns/earl#"\n';   
+   rdftext += ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n';
+   rdftext += ' xmlns:dc="http://purl.org/dc/elements/1.1/"\n';
+   rdftext += ' xmlns:foaf="http://xmlns.com/foaf/0.1/">\n\n';
+
+   rdftext += '<earl:Software ' +
+      'rdf:about="http://json-ld.org/rdfa-test-harness">\n';
+   rdftext += ' <dc:title>Crazy Ivan</dc:title>\n';
+   rdftext += ' <dc:description>The W3C JSON-LD Test Harness</dc:description>\n';
+   rdftext += ' <foaf:homepage ' +
+      'rdf:resource="http://json-ld.org/test-harness" />\n';
+   rdftext += '</earl:Software>\n\n';
+
+   for(var i = 1; i <= 2000; i++)
+   {
+      var id = "unit-test-anchor-" + i;
+      var elem = document.getElementById(id);
+      if(elem)
+      {
+         // Calculate the proper idString to use when describing the
+         // test case numbers.
+         idString = "";
+         if(i < 10)
+         {
+            idString = '000' + i;
+         }
+         else if(i < 100)
+         {
+            idString = '00' + i;
+         }
+         else if(i < 1000)
+         {
+            idString = '0' + i;
+         }
+         else
+         {
+            idString = i;
+         }
+            
+         var assertionUrl =
+            "http://json-ld.digitalbazaar.com/rdfa-test-harness#" + id
+         var tcUrl = 'http://www.w3.org/2011/05/SWD/JSON-LD/testsuite/' +   // FIXME
+            'testcases/Test' + idString;
+         var tcDescription =
+            document.getElementById(id.replace('anchor', 'description'));
+         var tcResult =
+            document.getElementById(id.replace('anchor', 'result')).innerHTML;
+         var resultUrl = 'http://www.w3.org/ns/earl#notTested';
+
+         if(tcResult == "PASS")
+         {
+            resultUrl = 'http://www.w3.org/ns/earl#pass';
+         }
+         else if((tcResult == "FAIL") || (tcResult == "ERROR"))
+         {
+            resultUrl = 'http://www.w3.org/ns/earl#fail';
+         }
+         
+         rdftext += '<earl:TestCase rdf:about="' + tcUrl +'">\n';
+         rdftext += ' <dc:title>Test Case #' +
+            id.replace('unit-test-anchor-', '') + '</dc:title>\n';
+         rdftext += ' <dc:description>' +
+            tcDescription.innerHTML + '</dc:description>\n';
+         rdftext += '</earl:TestCase>\n';
+
+         rdftext += '<earl:Assertion rdf:about="' +
+            assertionUrl.replace('anchor', 'assertion') + '">\n';
+         rdftext += ' <earl:assertedBy rdf:resource="http://json-ld.digitalbazaar.com/json-ld-test-harness"/>\n';
+         rdftext += ' <earl:subject rdf:resource="' + jldExtractorUrl  +
+            '"/>\n';
+         rdftext += ' <earl:test rdf:resource="' + tcUrl + '"/>\n';
+         rdftext += ' <earl:result rdf:parseType="Resource">\n';
+           rdftext += '  <rdf:type ';
+         rdftext += 'rdf:resource="http://www.w3.org/ns/earl#TestResult"/>\n';
+         rdftext += '  <earl:outcome ';
+         rdftext += 'rdf:resource="' + resultUrl + '"/>\n';
+         rdftext += ' </earl:result>\n';
+
+         rdftext += '</earl:Assertion>\n\n';
+      }
+   }
+   rdftext += '</rdf:RDF>\n';   
+
+   document.getElementById('earl-report').innerHTML = escapeXml(rdftext);
+}
+
+/**
+ * Escapes XML-specific codes, such as <, >, & and \t and encodes them
+ * into XHTML.
+ */
+function escapeXml(text)
+{
+   var rval = '';
+   
+   var LT = new RegExp("<", "g");  
+   var GT = new RegExp(">", "g");  
+   var AMP = new RegExp("&", "g");  
+   var TAB = new RegExp("\t", "g");
+   
+   rval = text.replace(AMP,"&amp;").replace(LT, "&lt;").replace(GT, "&gt;").replace(TAB, "   ");
+
+   return rval;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/crazyivan.py	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,494 @@
+##
+# This is the web service form for the Crazy Ivan JSON-LD Test Harness script.
+# License: Creative Commons Attribution Share-Alike
+# @author Manu Sporny
+import os, os.path
+import re
+import subprocess
+from re import search
+import urllib2
+from urllib2 import urlopen
+import urllib
+from rdflib.Graph import Graph
+import xml.sax.saxutils
+from mod_python import apache
+
+##
+# Retrieves all of the test cases from the given test suite manifest URL and
+# filters the RDF using the given status filter.
+#
+# @param base_uri the base URL for the test cases
+# @returns a tuple containing all of the filtered test cases including
+#          unit test number, title, Host Language URL, and SPARQL URL.
+def retrieveTestCases(base_uri):
+    # query the master test manifest
+    q = """
+    PREFIX test: <http://www.w3.org/2006/03/test-description#>
+    PREFIX dc:   <http://purl.org/dc/elements/1.1/>
+    SELECT ?t ?title ?classification ?expected_results
+    FROM <%s>
+    WHERE 
+    {
+    ?t dc:title ?title .
+    ?t test:classification ?classification .
+    OPTIONAL
+    { 
+    ?t test:expectedResults ?expected_results .
+    }
+    }""" % (base_uri + "manifest.ttl")
+
+    # Construct the graph from the given RDF and apply the SPARQL filter above
+    g = Graph()
+    unittests = []
+    for tc, title, classification_url, expected_results in g.query(q):
+        classification = classification_url.split("#")[-1]
+
+        matches = search(r'(\d+)', tc)
+        num = matches.groups(1)[0]
+
+        if(expected_results == None):
+            expected_results = 'true'
+
+        # Generate the input document URLs
+        suffix = "xml"
+        if hostLanguage in ["xhtml1", "xhtml5"]:
+            suffix = "xhtml"
+        elif hostLanguage in ["html4", "html5"]:
+            suffix = "xhtml"
+        elif hostLanguage in ["svgtiny1.2", "svg"]:
+            suffix = "svg"
+
+        doc_uri = "%stest-cases/%s." % \
+            (base_uri, num)
+
+        unittests.append((int(num),
+                          str(title),
+                          str(doc_uri + suffix),
+                          str(doc_uri + "sparql"),
+                          str(classification),
+                          str(expected_results)))
+
+    # Sorts the unit tests in unit test number order.
+    def sorttests(a, b):
+        if(a[0] < b[0]):
+            return -1
+        elif(a[0] == b[0]):
+            return 0
+        else:
+            return 1
+
+    unittests.sort(sorttests)
+          
+    return unittests
+
+##
+# Performs a SPARQL query given a query and a source URL
+#
+def performSparqlQuery(req, query):
+    rval = False
+
+    # Perform a simple SPARQL query given the input data
+    g = Graph()
+    result = g.query(query)
+    if(req):
+        req.write("%s" % str(result.askAnswer[0]).lower())
+    else:
+        rval = result.askAnswer[0]
+
+    return rval
+
+##
+# Performs a given unit test given the RDF extractor URL, sparql engine URL,
+# HTML file and SPARQL validation file.
+#
+# @param rdf_extractor_url The RDF extractor web service.
+# @param sparql_engine_url The SPARQL engine URL.
+# @param doc_url the HTML file to use as input.
+# @param sparql_url the SPARQL validation file to use on the RDF graph.
+def performUnitTest(rdf_extractor_url, sparql_engine_url,
+                    doc_url, sparql_url, expected_result):
+    # Build the RDF extractor URL
+    rdf_extract_url = rdf_extractor_url + urllib.quote(doc_url)
+
+    # Build the SPARQL query
+    sparql_query = urlopen(sparql_url).read()
+    sparql_query = sparql_query.replace("ASK WHERE",
+                                        "ASK FROM <%s> WHERE" % \
+                                        (rdf_extract_url,))
+
+    # Perform the SPARQL query
+    if(sparql_engine_url.find("/test-suite/sparql-query") != -1):
+        # If the SPARQL query is to this SPARQL endpoint, do the query
+        # internally
+        sparql_value = performSparqlQuery(None, sparql_query)
+    elif(sparql_engine_url.find("openlinksw") != -1):
+        # Build the SPARQLer service URL
+        sparql_engine_url += urllib.quote(sparql_query)
+
+        # Call the Virtuoso service
+        sparql_engine_result = urlopen(sparql_engine_url).read()
+
+        sparql_value = (sparql_engine_result.find(expected_result) != -1)
+    elif(sparql_engine_url.find("sparql.org") != -1):
+        # Build the SPARQLer service URL
+        sparql_engine_url += urllib.quote(sparql_query)
+        sparql_engine_url += "&default-graph-uri=&stylesheet=%2Fxml-to-html.xsl"
+
+        # Call the SPARQLer service
+        sparql_engine_result = urlopen(sparql_engine_url).read()
+
+        # TODO: Remove this hack, it's temporary until Michael Hausenblas puts
+        #       an "expected SPARQL result" flag into the test manifest.
+        query_result = "<boolean>%s</boolean>" % (expected_result,)
+        sparql_value = (sparql_engine_result.find(query_result) != -1)
+
+    return sparql_value
+
+##
+# Writes all the available test cases.
+#
+# Writes the test case alternatives for the given URL
+def writeTestCaseRetrievalError(req, tc):
+    req.write("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
+ "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 
+<html version="XHTML+RDFa 1.0" xmlns="http://www.w3.org/1999/xhtml"
+   xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#"
+   xmlns:dcterms="http://purl.org/dc/terms/"
+   xmlns:test="http://www.w3.org/2006/03/test-description#"> 
+   
+   <head> 
+      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
+      <title>JSON-LD Test Suite: Test Cases</title> 
+   </head>
+   <body>
+   <p>
+      There was an error while retrieving the test case. This is often because
+      the URL specified points to a test case that doesn't exist: %s
+   </p>
+   </body>
+</html>
+""" % (req.unparsed_uri,))
+
+##
+# Writes the test case alternatives for the given URL
+#
+# Writes the test case alternatives for the given URL
+def writeTestCaseAlternatives(req, arguments):
+    path = req.parsed_uri[-3]
+    tc = path[path.rfind("/") + 1:]
+    base_uri = req.construct_url( \
+        path[0:path.rfind("/test-cases/")] + "/test-cases/")
+
+    filename = arguments.split("/")[-1]
+    req.write("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
+ "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 
+<html version="XHTML+RDFa 1.0" xmlns="http://www.w3.org/1999/xhtml"
+   xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#"
+   xmlns:dcterms="http://purl.org/dc/terms/"
+   xmlns:test="http://www.w3.org/2006/03/test-description#"> 
+   
+   <head> 
+      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
+      <title>JSON-LD Test Suite: Select a Test Case Document</title> 
+   </head>
+   <body>
+   <p>
+      The following documents are associated with Test Case %s:
+      <ul>
+         <li><a href="%s%s.json">JSON-LD</li>
+         <li><a href="%s%s.sparql">SPARQL for JSON-LD</li>
+      </ul>
+   </p>
+   </body>
+</html>""" % (tc,
+              base_uri, filename, 
+              base_uri, filename))
+
+##
+# Writes a test case document for the given URL.
+def writeTestCaseDocument(req, path):
+    absolute_path = req.parsed_uri[-3]
+    base_uri = req.construct_url( \
+        absolute_path[0:absolute_path.rfind("/test-cases/")] + "/test-cases/")
+    # FIXME: DEBUGging sparql queryies
+    base_uri = base_uri.replace("sites.local/", "")
+    
+    base_path = os.path.join(req.document_root() + 
+        absolute_path[0:absolute_path.rfind("/test-suite/")] + "/test-suite/")
+    document = path[-1]
+    body = ""
+
+    # Generate the filename that resides on disk
+    filename = base_path + "/" + os.path.join("tests", document)
+
+    # Check to see if the file exists and extract the body of the document
+    if(os.path.exists(filename)):
+        bfile = open(filename, "r")
+        lines = bfile.readlines()
+        body += line
+    else:
+        req.status = apache.HTTP_NOT_FOUND
+
+    # Create the regular expression to rewrite the contents of the JSON and
+    # SPARQL files
+    tcpath = base_uri
+    jsonre = re.compile("([0-9]{4,4})\.json")
+    tcpathre = re.compile("\$TCPATH")
+
+    if(document.endswith(".sparql")):
+        req.content_type = "application/sparql-query"
+        req.write(tcpathre.sub(tcpath, body))
+    elif(document.endswith(".json")):
+        req.content_type = "application/json"
+        req.write(tcpathre.sub(tcpath, body))
+    else:
+        req.status = apache.HTTP_NOT_FOUND
+
+##
+# Writes the unit test HTML to the given request object.
+#
+# @param req the HTTP request object.
+# @param test a tuple containing the unit test number, JSON file, SPARQL file,
+#             and the status of the test.
+def writeUnitTestHtml(req, test):
+    num = test[0]
+    title = test[1]
+    doc_url = test[2]
+    sparql_url = test[3]
+    status = test[4]
+    expected_result = test[5]
+    formatted_num = "%04i" % (num,)
+
+    req.write("""
+<p class=\"unittest\">
+[<span id=\"unit-test-status-%i\">
+    <a id=\"unit-test-anchor-%i\"
+       href=\"javascript:checkUnitTest(%i,'%s','%s','%s')\">
+       <span id=\"unit-test-result-%i\">TEST</span></a>
+ </span>]
+   Test #%i (%s): <span id=\"unit-test-description-%i\">%s</span>
+   [<span id=\"unit-test-details-status-%i\">
+    <a href=\"javascript:showUnitTestDetails(%i, '%s', '%s')\">show details</a>
+     | 
+    <a href=\"javascript:hideUnitTestDetails(%i)\">hide details</a>
+     |
+    <a href=\"test-cases/%s\">source</a>
+    </span>
+    ]<div style=\"margin-left: 50px\" id=\"unit-test-details-%i\">
+    </div>
+</p>
+
+""" % (num, num, num, doc_url, sparql_url, expected_result, num, num,
+       status, num, title, num, num, doc_url, sparql_url, num, formatted_num, 
+       num))
+
+# Returns the HTML encoded version of the given string. This is useful to
+# display a plain ASCII text string on a web page.
+def htmlEncode(s):
+    for code in (('&', '&amp;'), ('<', '&lt;'), ('>', '&gt;'), ('"', '&quot;'),
+        ("'", '&#39;'), ("\\n", '<br/>')):
+        s = s.replace(code[0], code[1])
+    return s
+
+##
+# Checks a unit test and outputs a simple unit test result as HTML.
+#
+# @param req the HTML request object.
+# @param num the unit test number.
+# @param rdf_extractor_url The RDF extractor web service.
+# @param sparql_engine_url The SPARQL engine URL.
+# @param doc_url the JSON file to use as input.
+# @param sparql_url the SPARQL file to use when validating the RDF graph.
+def checkUnitTestHtml(req, num, rdfa_extractor_url, sparql_engine_url,
+                      doc_url, sparql_url, expected_result):
+    try:
+        if(performUnitTest(rdfa_extractor_url, sparql_engine_url,
+                           doc_url, sparql_url, expected_result) == True):
+            req.write("<span id=\"unit-test-anchor-%s\" style=\"text-decoration: underline; color: #090\" onclick=\"javascript:checkUnitTest(%s, '%s', '%s', '%s')\"><span id='unit-test-result-%s'>PASS</span></span>" % (num, num, doc_url, sparql_url, expected_result, num))
+        else:
+            req.write("<span id=\"unit-test-anchor-%s\" style=\"text-decoration: underline; font-weight: bold; color: #f00\" onclick=\"javascript:checkUnitTest(%s, '%s', '%s', '%s')\"><span id='unit-test-result-%s'>FAIL</span></span>" % (num, num, doc_url, sparql_url, expected_result, num))
+    except Exception, e:
+        import traceback 
+        testSuitePath = os.path.dirname(req.canonical_filename)
+        exceptionText = htmlEncode( \
+            traceback.format_exc().replace(testSuitePath, ""))
+        req.write(exceptionText)
+
+##
+# Outputs the details related to a given unit test given the unit test number,
+# RDF extractor URL, sparql engine URL, JSON file and SPARQL validation file.
+# The output is written to the req object as HTML.
+#
+# @param req the HTTP request.
+# @param num the unit test number.
+# @param rdf_extractor_url The RDF extractor web service.
+# @param sparql_engine_url The SPARQL engine URL.
+# @param doc_url the JSON file to use as input.
+# @param sparql_url the SPARQL validation file to use on the RDF graph.
+def retrieveUnitTestDetailsHtml(req, num, rdf_extractor_url, n3_extractor_url,
+                                doc_url, sparql_url):
+    # Build the RDF extractor URL
+    rdf_extract_url = rdf_extractor_url + doc_url
+
+    # Build the N3 extractor URL
+    n3_extract_url = n3_extractor_url + doc_url
+
+    # Decode the SPARQL and document URLs
+    sparql_url = urllib.unquote(sparql_url)
+    doc_url = urllib.unquote(doc_url)
+
+    # Get the SPARQL query
+    sparql_text = ""
+    try:
+        sparql_text = urlopen(sparql_url).read()
+    except urllib2.HTTPError:
+        sparql_text = "ERROR retrieving " + sparql_url
+
+    # Get the document data
+    doc_text = ""
+    try:
+        doc_text = urlopen(doc_url).read()
+    except urllib2.HTTPError:
+        doc_text = "ERROR retrieving " + doc_url
+
+    # get the triples in N3 format
+    n3_text = ""
+    try:
+        n3_text = urlopen(n3_extract_url).read()
+    except urllib2.HTTPError:
+        n3_text = "ERROR retrieving " + n3_extract_url
+
+    # Get the RDF text
+    rdf_text = ""
+    try:
+        rdf_text = urlopen(rdf_extract_url).read()
+    except urllib2.HTTPError:
+        rdf_text = "ERROR retrieving " + rdf_extract_url
+
+    req.write("""
+    <h3>Test #%s Source Document</h3>
+    <pre class="code">\n%s\n</pre>
+    <em>Source: <a href="%s">%s</a></em>
+    <h3>Test #%s N3 (Reference Implementation Triples)</h3>
+    <pre class="code">\n%s\n</pre>
+    <em>Extracted using: <a href="%s">%s</a></em>
+    <h3>Test #%s RDF</h3>
+    <pre class="code">\n%s\n</pre>
+    <em>Extracted using: <a href="%s">%s</a></em>
+    <h3>Test #%s SPARQL Test</h3>
+    <pre class="code">\n%s\n</pre>
+    <em>Source: <a href="%s">%s</a></em>
+    """ % (num, 
+           xml.sax.saxutils.escape(doc_text),
+           urllib.unquote(doc_url), urllib.unquote(doc_url), 
+           num,
+           xml.sax.saxutils.escape(n3_text),
+           urllib.unquote(n3_extract_url), urllib.unquote(n3_extract_url), 
+           num,
+           xml.sax.saxutils.escape(rdf_text), 
+           urllib.unquote(rdf_extract_url), urllib.unquote(rdf_extract_url), 
+           num, 
+           xml.sax.saxutils.escape(sparql_text),
+           urllib.unquote(sparql_url), urllib.unquote(sparql_url)))
+
+##
+# The handler function is what is called whenever an apache call is made.
+#
+# @param req the HTTP request.
+#
+# @return apache.OK if there wasn't an error, the appropriate error code if
+#         there was a failure.
+def handler(req):
+    # File that runs an apache test.
+    status = apache.OK
+  
+    puri = req.parsed_uri
+    service = puri[-3]
+    base_uri = req.construct_url( \
+        service[0:service.rfind("/test-suite/")] + "/test-suite/")
+    # FIXME: DEBUGging sparql queryies
+    base_uri = base_uri.replace("sites.local/", "")
+    argstr = puri[-2]
+    args = {}
+
+    # Convert all of the arguments from their URL-encoded value to normal text
+    if(argstr and len(argstr) > 0):
+        if("&" in argstr):
+            for kv in argstr.split("&"):
+                key, value = kv.split("=", 1)
+                args[urllib.unquote(key)] = urllib.unquote(value)
+        elif("=" in argstr):
+            key, value = argstr.split("=")
+            args[urllib.unquote(key)] = urllib.unquote(value)
+
+    # Retrieve a single test case
+    req.content_type = 'text/plain'
+    if(service.find("/test-suite/test-cases") != -1):
+        req.content_type = 'text/html'
+        document = service[service.find("test-cases/"):].split("/")
+        if(len(document) == 2):
+            writeTestCaseAlternatives(req, document[-1])
+        elif(len(document) <= 3):
+            writeTestCaseRetrievalError(req, document[-1])
+        elif(len(document) == 4):
+            writeTestCaseDocument(req, document)
+        else:
+            req.write("ERROR DOCUMENT:" + str(document))
+
+    # Retrieve a test suite
+    elif(service.find("/test-suite/retrieve-tests") != -1):
+        req.content_type = 'text/html'
+
+        unittests = retrieveTestCases(base_uri)
+        for ut in unittests:
+            writeUnitTestHtml(req, ut)
+
+    # Check a particular unit test
+    elif(service.find("/test-suite/check-test") != -1):
+        req.content_type = 'text/html'
+        if(args.has_key('id') and args.has_key('source') and
+           args.has_key('sparql') and args.has_key('rdfa-extractor') and
+           args.has_key('sparql-engine') and args.has_key('expected-result')):
+            checkUnitTestHtml(req, args['id'], args['rdfa-extractor'],
+                              args['sparql-engine'],
+                              args['source'], args['sparql'],
+                              args['expected-result'])
+        else:
+            req.write("ID, RDFA-EXTRACTOR, SPARQL-ENGINE, XHTML and " + \
+                      "SPARQL not specified in request to test harness!")
+            req.write("ARGS:" + str(args))
+
+    # Retrieve the details about a particular unit test
+    elif(service.find("/test-suite/test-details") != -1):
+        req.content_type = 'text/html'
+        if(args.has_key('id') and args.has_key('source') and
+           args.has_key('sparql') and args.has_key('rdfa-extractor') and
+           args.has_key('n3-extractor')):
+            retrieveUnitTestDetailsHtml(req, args['id'],
+                                        args['rdfa-extractor'],
+                                        args['n3-extractor'],
+                                        args['source'], args['sparql'])
+        else:
+            req.write("ID, SOURCE, SPARQL, RDFA-EXTRACTOR or N3-EXTRACTOR " + \
+                      "was not specified in the request URL to the" + \
+                      "test harness: " + service)
+
+    elif(service.find("/test-suite/sparql-query") != -1):
+        query = req.read()
+        performSparqlQuery(req, query)
+
+    # Perform a git update in the current directory
+    elif(service.find("/test-suite/git-update") != -1):
+        testSuitePath = os.path.dirname(req.canonical_filename)
+        gitUpdatePath = os.path.join(testSuitePath, ".git")
+        p = subprocess.Popen(["git", "--git-dir", gitUpdatePath, "pull"], 
+            bufsize=4096, stdout=subprocess.PIPE, stderr=subprocess.PIPE, 
+            close_fds=True, cwd=testSuitePath)
+        (so, se) = p.communicate()
+        req.write("GIT status: %s%s" % (so, se))
+    else:
+        req.content_type = 'text/html'
+        req.write("<b>ERROR: Unknown CrazyIvan service: %s</b>" % (service,))
+
+    return status
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/css/screen.css	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,81 @@
+
+/* Style for a "Recommendation" */
+
+/*
+   Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved.
+   The following software licensing rules apply:
+   http://www.w3.org/Consortium/Legal/copyright-software */
+
+   * Removed W3C logo -- 20090919 - Manu Sporny
+
+/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */
+
+body {
+  font-family: sans-serif;
+  color: black;
+  background: white;
+}
+:link { color: #00C; background: transparent }
+:visited { color: #609; background: transparent }
+a:active { color: #C00; background: transparent }
+
+a:link img, a:visited img { border-style: none } /* no border on img links */
+
+a img { color: white; }        /* trick to hide the border in Netscape 4 */
+@media all {                   /* hide the next rule from Netscape 4 */
+  a img { color: inherit; }    /* undo the color change above */
+}
+
+th, td { /* ns 4 */
+  font-family: sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 { text-align: left }
+/* background should be transparent, but WebTV has a bug */
+h1, h2, h3 { color: #005A9C; background: white }
+h1 { font: 170% sans-serif }
+h2 { font: 140% sans-serif }
+h3 { font: 120% sans-serif }
+h4 { font: bold 100% sans-serif }
+h5 { font: italic 100% sans-serif }
+h6 { font: small-caps 100% sans-serif }
+
+.hide { display: none }
+
+div.head { margin-bottom: 1em }
+div.head h1 { margin-top: 2em; clear: both }
+div.head table { margin-left: 2em; margin-top: 2em }
+
+p.copyright { font-size: small }
+p.copyright small { font-size: small }
+
+@media screen {  /* hide from IE3 */
+a[href]:hover { background: #ffa }
+}
+
+dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */
+dt { font-weight: bold }
+
+pre, code { font-family: monospace } /* navigator 4 requires this */
+
+ul.toc, ol.toc {
+  list-style: disc;		/* Mac NS has problem with 'none' */
+  list-style: none;
+}
+
+@media aural {  
+  h1, h2, h3 { stress: 20; richness: 90 }
+  .hide { speak: none }
+  p.copyright { volume: x-soft; speech-rate: x-fast }
+  dt { pause-before: 20% }
+  pre { speak-punctuation: code } 
+}
+
+pre {
+background: #eeeeff;
+padding: 1em;
+-webkit-border-radius: 10px;
+-moz-border-radius: 10px;
+border-radius: 10px;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/git-update	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/index.html	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+  <title>The JSON-LD Test Harness (Crazy Ivan)</title>
+  <link rel="stylesheet" type="text/css" href="css/screen.css" />
+  <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
+  <script type="text/javascript" src="crazyivan.js"></script>
+</head>
+
+<body onload="javascript:updateConfigurationDisplay();retrieveUnitTests()">
+
+<h1 style="text-align: center;">JSON-LD Test Suite</h1>
+
+<h2>Overview</h2>
+<noscript>
+<p>WARNING: You need Javascript enabled to use this web page!</p>
+</noscript>
+<p>
+The JSON-LD Test Suite provides an interactive mechanism to check the 
+conformance of an JSON-LD processor and SPARQL query engine. 
+This service is intended for anybody that wants to see how JSON-LD works as 
+well as developers that want to do conformance testing on their own 
+JSON-LD/SPARQL implementations.
+</p>
+<p>
+There are several things that you can do on this web page:
+</p>
+
+<ul>
+ <li>To run a unit test, click on the [TEST] link.</li>
+ <li>To see the details of a unit test, click on the [show details] link.</li>
+ <li>You can execute every unit test by clicking on the 
+   [Run All Unit Tests] button.</li>
+ <li>You can modify the Test Suite, Approval Status, JSON-LD Extractor Service 
+   and SPARQL Engine URLs.</li>
+</ul>
+
+<h2>Status</h2>
+<ul>
+<li>These tests are in active development by the 
+<a href="http:fixme">JSON-LD Working Group</a> at
+  the <a href="http://www.w3c.org">World Wide Web Consortium</a>.</li>
+<li>These tests may be used to check conformance for an JSON-LD processor.</li>
+<li>The tests are subject to change at any point between now and June 2011.</li>
+<li>All bugs, suggestions and thoughts about The JSON-LD Test Suite
+  should be sent to the 
+  <a href="http://lists.w3.org/Archives/Public/public-linked-json/">
+  JSON-LD Working Group mailing list</a>.</li>
+</ul>
+
+<h2>Configuration</h2>
+
+<form action="crazyivan.py" method="get">
+<div class="form-input">
+<p>
+Test Suite: 
+<select id="test-suite-selection"
+        onchange="javascript:updateConfigurationDisplay();retrieveUnitTests()">
+  <option value="json-ld">JSON-LD</option>
+</select>
+<span id="test-suite-selection-value"></span>
+</p>
+<p>
+RDFa extractor URL: 
+<select id="jsonld-extractor-selection"
+        onchange="javascript:updateConfigurationDisplay()">
+  <option value="RDF.rb">RDF.rb (rdf.kellogg-assoc.com) - Ruby</option>
+  <option value="other">Other JSON-LD Extractor:</option>
+</select>
+<input type="text" id="jsonld-extractor-selection-value" size="32" />
+</p>
+<p>
+SPARQL engine URL: 
+<select id="sparql-engine-selection"
+        onchange="javascript:updateConfigurationDisplay()">
+  <option value="sparqler">SPARQLer (sparql.org)</option>
+  <option value="virtuoso">Virtuoso (openlinksw.com)</option>
+  <option value="graphene">Graphene (rdfa.digitalbazaar.com)</option>
+  <option value="other">Other SPARQL Processor:</option>
+</select>
+<input type="text" id="sparql-engine-selection-value" size="32" />
+</p>
+
+<p>
+<input type="button" onclick="javascript:performAllUnitTests()" value="Run All Unit Tests" />
+</p>
+</div>
+</form>
+
+<h2>Test Cases</h2>
+<div id="unit-tests">
+</div>
+
+<!--h1>EARL Report</h1>
+
+<p>
+You can generate an EARL report of the currently selected JSON-LD parser by clicking the "Generate EARL Report" button. Make sure that you have run all of the unit tests above by clicking the "Run All Unit Tests" button.
+</p>
+<p>
+<input type="button" onclick="javascript:generateEarlReport()" value="Generate EARL Report" />
+</p>
+<pre id="earl-report">
+</pre-->
+
+<h1>Useful JSON-LD Resources</h1>
+<ul>
+  <li>The <a href="http://json-ld.org/">JSON-LD Interest Group</a></li>
+ <li>The <a href="http://lists.w3.org/Archives/Public/public-linked-json/">JSON-LD Mailing List</a></li>
+ <li>The <a href="http://json-ld.org/spec/latest/">JSON-LD Specification</a></li>
+</ul>
+
+<hr />
+<address>
+ Last modified: 2011-05-21, Gregg Kellogg
+</address>
+
+<p><a rel="Copyright"
+href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a>
+&copy; 1994-2007 <a href="http://www.w3.org/"><acronym
+title="World Wide Web Consortium">W3C</acronym></a><sup>&reg;</sup> (<a
+href="http://www.csail.mit.edu/"><acronym
+title="Massachusetts Institute of Technology">MIT</acronym></a>, <a
+href="http://www.ercim.org/"><acronym
+title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>,
+<a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a
+href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+<a
+href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+<a rel="Copyright"
+href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+use</a> and <a rel="Copyright"
+href="http://www.w3.org/Consortium/Legal/copyright-software">software
+licensing</a> rules apply. Your interactions with this site are in accordance
+with our <a
+href="http://www.w3.org/Consortium/Legal/privacy-statement#Public">public</a>
+and <a
+href="http://www.w3.org/Consortium/Legal/privacy-statement#Members">Member</a>
+privacy statements.</p>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/jquery-1.4.2.min.js	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/manifest.ttl	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,248 @@
+#@base <http://json-ld.org/test-suite/> .
+@prefix : <http://www.w3.org/2006/03/test-description#> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix log: <http://www.w3.org/2000/10/swap/log#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+<test-cases/0001> dc:contributor "Gregg Kellogg";
+  dc:title "Plain literal with URIs";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0001.json>;
+  :informationResourceResults <test-cases/0001.sparql>;
+  :purpose "Tests generation of a triple using full URIs and a plain literal.";
+  :specificationReference <http://json-ld.org/spec/latest/#plain-literals>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0002> dc:contributor "Gregg Kellogg";
+  dc:title "Plain literal with CURIE from default context";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0002.json>;
+  :informationResourceResults <test-cases/0002.sparql>;
+  :purpose "Tests generation of a triple using a CURIE defined in the default context.";
+  :specificationReference <http://json-ld.org/spec/latest/#iris>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0003> dc:contributor "Gregg Kellogg";
+  dc:title "Default subject is BNode";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0003.json>;
+  :informationResourceResults <test-cases/0003.sparql>;
+  :purpose "Tests that a BNode is created if no explicit subject is set.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0004> dc:contributor "Gregg Kellogg";
+  dc:title "Literal with language tag";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0004.json>;
+  :informationResourceResults <test-cases/0004.sparql>;
+  :purpose "Tests that a plain literal is created with a language tag.";
+  :specificationReference <http://json-ld.org/spec/latest/#language-specification-in-plain-literals>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0005> dc:contributor "Gregg Kellogg";
+  dc:title "Extended character set literal";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0005.json>;
+  :informationResourceResults <test-cases/0005.sparql>;
+  :purpose "Tests that a literal may be created using extended characters.";
+  :specificationReference "";
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0006> dc:contributor "Gregg Kellogg";
+  dc:title "Typed literal";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0006.json>;
+  :informationResourceResults <test-cases/0006.sparql>;
+  :purpose "Tests creation of a literal with a datatype.";
+  :specificationReference <http://json-ld.org/spec/latest/#typed-literals>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0007> dc:contributor "Gregg Kellogg";
+  dc:title "Tests 'a' generates rdf:type and object is implicit IRI";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0007.json>;
+  :informationResourceResults <test-cases/0007.sparql>;
+  :purpose "Verify that 'a' is an alias for rdf:type, and the object is created as an IRI.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0008> dc:contributor "Gregg Kellogg";
+  dc:title "Test prefix defined in @context";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0008.json>;
+  :informationResourceResults <test-cases/0008.sparql>;
+  :purpose "Generate an IRI using a prefix defined within an @context.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0009> dc:contributor "Gregg Kellogg";
+  dc:title "Test using default prefix";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0009.json>;
+  :informationResourceResults <test-cases/0009.sparql>;
+  :purpose "The empty string may be used to define the default prefix.";
+  :specificationReference "";
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0010> dc:contributor "Gregg Kellogg";
+  dc:title "Test object processing defines object";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0010.json>;
+  :informationResourceResults <test-cases/0010.sparql>;
+  :purpose "A property referencing an associative array gets object from subject of array.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0011> dc:contributor "Gregg Kellogg";
+  dc:title "Test object processing defines object with implicit BNode";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0011.json>;
+  :informationResourceResults <test-cases/0011.sparql>;
+  :purpose "If no @ is specified, a BNode is created, and will be used as the object of an enclosing property.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0012> dc:contributor "Gregg Kellogg";
+  dc:title "Multiple Objects for a Single Property";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0012.json>;
+  :informationResourceResults <test-cases/0012.sparql>;
+  :purpose "Tests that Multiple Objects are for a Single Property using array syntax.";
+  :specificationReference <http://json-ld.org/spec/latest/#multiple-objects-for-a-single-property>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0013> dc:contributor "Gregg Kellogg";
+  dc:title "Creation of an empty list";
+  a :TestCase;
+  :classification :optional;
+  :informationResourceInput <test-cases/0013.json>;
+  :informationResourceResults <test-cases/0013.sparql>;
+  :purpose "Tests that [[]] generates an empty list.";
+  :specificationReference "If the value is a regular array, should we support RDF List/Sequence generation of triples?";
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0014> dc:contributor "Gregg Kellogg";
+  dc:title "Creation of a list with single element";
+  a :TestCase;
+  :classification :optional;
+  :informationResourceInput <test-cases/0014.json>;
+  :informationResourceResults <test-cases/0014.sparql>;
+  :purpose "Tests that [[a]] generates list.";
+  :specificationReference "If the value is a regular array, should we support RDF List/Sequence generation of triples?";
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0015> dc:contributor "Gregg Kellogg";
+  dc:title "Creation of a list with multiple elements";
+  a :TestCase;
+  :classification :optional;
+  :informationResourceInput <test-cases/0015.json>;
+  :informationResourceResults <test-cases/0015.sparql>;
+  :purpose "Tests that list with multiple elements.";
+  :specificationReference "If the value is a regular array, should we support RDF List/Sequence generation of triples?";
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0016> dc:contributor "Gregg Kellogg";
+  dc:title "Test @base";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0016.json>;
+  :informationResourceResults <test-cases/0016.sparql>;
+  :purpose "Tests using @base in @context for IRI processing.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0017> dc:contributor "Gregg Kellogg";
+  dc:title "Test @vocab";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0017.json>;
+  :informationResourceResults <test-cases/0017.sparql>;
+  :purpose "Tests using @vocab in @context for IRI processing.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0018> dc:contributor "Gregg Kellogg";
+  dc:title "Test @base and @vocab together";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0018.json>;
+  :informationResourceResults <test-cases/0018.sparql>;
+  :purpose "Tests using @base and @vocab in @context for IRI processing.";
+  :specificationReference <http://json-ld.org/spec/latest/#the-json-ld-processing-algorithm>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0019> dc:contributor "Gregg Kellogg";
+  dc:title "Test type coercion to anyURI";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0019.json>;
+  :informationResourceResults <test-cases/0019.sparql>;
+  :purpose "Tests coercion of object to anyURI when specified.";
+  :specificationReference <http://json-ld.org/spec/latest/#type-coercion>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0020> dc:contributor "Gregg Kellogg";
+  dc:title "Test type coercion to typed literal";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0020.json>;
+  :informationResourceResults <test-cases/0020.sparql>;
+  :purpose "Tests coercion of object to a typed literal when specified.";
+  :specificationReference <http://json-ld.org/spec/latest/#type-coercion>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0021> dc:contributor "Gregg Kellogg";
+  dc:title "Test coercion of decimal value";
+  a :TestCase;
+  :classification :buggy;
+  :informationResourceInput <test-cases/0021.json>;
+  :informationResourceResults <test-cases/0021.sparql>;
+  :purpose "Tests that a decimal value generates a xsd:decimal typed literal (buggy test).";
+  :specificationReference <http://json-ld.org/spec/latest/#automatic-typing>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0022> dc:contributor "Gregg Kellogg";
+  dc:title "Test coercion of double value";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0022.json>;
+  :informationResourceResults <test-cases/0022.sparql>;
+  :purpose "Tests that a decimal value generates a xsd:double typed literal;.";
+  :specificationReference <http://json-ld.org/spec/latest/#automatic-typing>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0023> dc:contributor "Gregg Kellogg";
+  dc:title "Test coercion of integer value";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0023.json>;
+  :informationResourceResults <test-cases/0023.sparql>;
+  :purpose "Tests that a decimal value generates a xsd:integer typed literal.";
+  :specificationReference <http://json-ld.org/spec/latest/#automatic-typing>;
+  :expectedResults "true"^^xsd:boolean .
+
+<test-cases/0024> dc:contributor "Gregg Kellogg";
+  dc:title "Test coercion of boolean value";
+  a :TestCase;
+  :classification :required;
+  :informationResourceInput <test-cases/0024.json>;
+  :informationResourceResults <test-cases/0024.sparql>;
+  :purpose "Tests that a decimal value generates a xsd:boolean typed literal.";
+  :specificationReference <http://json-ld.org/spec/latest/#automatic-typing>;
+  :expectedResults "true"^^xsd:boolean .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/retrieve-tests	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/sparql-query	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/test-cases	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/test-details	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+crazyivan.py
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0001.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "http://xmlns.com/foaf/0.1/name": "Gregg Kellogg"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0001.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+	<http://greggkellogg.net/foaf#me> foaf:name "Gregg Kellogg" .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0002.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:name": "Gregg Kellogg"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0002.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+	<http://greggkellogg.net/foaf#me> foaf:name "Gregg Kellogg" .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0003.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,1 @@
+{ "a": "foaf:Person" }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0003.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  ?s a foaf:Person .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0004.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,3 @@
+{
+  "rdfs:label": {"@literal": "A plain literal with a lang tag.", "@language": "en-us"}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0004.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+ASK WHERE {
+  _:s rdfs:label "A plain literal with a lang tag."@en-us .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0005.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,9 @@
+[
+  {
+    "@": "http://greggkellogg.net/foaf#me",
+    "foaf:knows": {"@iri": "http://www.ivan-herman.net/foaf#me"}
+  },{
+    "@": "http://www.ivan-herman.net/foaf#me",
+    "foaf:name": {"@literal": "Herman Iván", "@language": "hu"}
+  }
+]
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0005.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows <http://www.ivan-herman.net/foaf#me> .
+  <http://www.ivan-herman.net/foaf#me> foaf:name "Herman Iv\u00E1n"@hu .
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0006.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@":  "http://greggkellogg.net/foaf#me",
+  "dcterms:created":  {"@literal": "1957-02-27", "@datatype": "xsd:date"}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0006.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX dcterms: <http://purl.org/dc/terms/>
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> dcterms:created "1957-02-27"^^xsd:date
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0007.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "a": "foaf:Person"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0007.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> rdf:type foaf:Person
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0008.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+{
+  "@context": {
+    "d": "http://example.com/default#"
+  },
+  "d:foo": "bar"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0008.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,3 @@
+ASK WHERE {
+  _:a <http://example.com/default#foo> "bar" .
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0009.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+{
+  "@context": {
+    "": "http://example.com/default#"
+  },
+  ":foo": "bar"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0009.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,3 @@
+ASK WHERE {
+  _:a <http://example.com/default#foo> "bar" .
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0010.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": {
+    "@": "http://www.ivan-herman.net/foaf#me",
+    "foaf:name": "Ivan Herman"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0010.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows <http://www.ivan-herman.net/foaf#me> .
+  <http://www.ivan-herman.net/foaf#me> foaf:name "Ivan Herman" .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0011.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": {
+    "foaf:name": "Manu Sporny"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0011.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows ?o .
+  ?o foaf:name "Manu Sporny" .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0012.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": ["Manu Sporny", "Ivan Herman"]
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0012.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows "Manu Sporny", "Ivan Herman" .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0013.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": [[]]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0013.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows [] .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0014.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": [["Manu Sporny"]]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0014.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows ("Manu Sporny") .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0015.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@": "http://greggkellogg.net/foaf#me",
+  "foaf:knows": [["Manu Sporny", "Ivan Herman"]]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0015.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows ("Manu Sporny" "Ivan Herman") .
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0016.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+{
+  "@context": {
+    "@base":  "http://greggkellogg.net/foaf"
+  },
+  "@":  "#me",
+  "doap:homepage":  {"@iri": "http://github.com/gkellogg/"}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0016.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX doap: <http://usefulinc.com/ns/doap#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> doap:homepage <http://github.com/gkellogg/>
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0017.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+{
+  "@context": {
+    "@vocab": "http://usefulinc.com/ns/doap#"
+  },
+  "@":  "http://greggkellogg.net/foaf#me",
+  "homepage":  {"@iri": "http://github.com/gkellogg/"}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0017.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX doap: <http://usefulinc.com/ns/doap#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> doap:homepage <http://github.com/gkellogg/>
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0018.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,8 @@
+{
+  "@context": {
+    "@base":  "http://greggkellogg.net/foaf",
+    "@vocab": "http://usefulinc.com/ns/doap#"
+  },
+  "@":  "#me",
+  "homepage":  {"@iri": "http://github.com/gkellogg/"}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0018.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX doap: <http://usefulinc.com/ns/doap#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> doap:homepage <http://github.com/gkellogg/>
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0019.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+{
+  "@context": {
+    "@coerce":  { "xsd:anyURI": "foaf:knows"}
+  },
+  "@":  "http://greggkellogg.net/foaf#me",
+  "foaf:knows":  "http://www.ivan-herman.net/foaf#me"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0019.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX foaf: <http://xmlns.com/foaf/0.1/>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> foaf:knows <http://www.ivan-herman.net/foaf#me> .
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0020.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,7 @@
+{
+  "@context": {
+    "@coerce":  { "xsd:date": "dcterms:created"}
+  },
+  "@":  "http://greggkellogg.net/foaf#me",
+  "dcterms:created":  "1957-02-27"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0020.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,6 @@
+PREFIX dcterms: <http://purl.org/dc/terms/>
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  <http://greggkellogg.net/foaf#me> dcterms:created "1957-02-27"^^xsd:date
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0021.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@context": { "measure": "http://example/measure#"},
+  "measure:cups": 5.3
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0021.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  _:a <http://example/measure#cups> "5.3"^^xsd:decimal
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0022.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@context": { "measure": "http://example/measure#"},
+  "measure:cups": 5.3e0
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0022.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  _:a <http://example/measure#cups> "5.3"^^xsd:double
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0023.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@context": { "chem": "http://example/chem#"},
+  "chem:protons": 12
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0023.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  _:a <http://example/chem#protons> "12"^^xsd:integer
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0024.json	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,4 @@
+{
+  "@context": { "sensor": "http://example/sensor#"},
+  "sensor:active": true
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/tests/0024.sparql	Thu May 26 21:56:23 2011 -0400
@@ -0,0 +1,5 @@
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ASK WHERE {
+  _:a <http://example/sensor#active> "true"^^xsd:boolean
+}
\ No newline at end of file