Index: branches/beta/data/module/Services/JSON/LICENSE
===================================================================
--- branches/beta/data/module/Services/JSON/LICENSE	(revision 16825)
+++ branches/beta/data/module/Services/JSON/LICENSE	(revision 16825)
@@ -0,0 +1,21 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: branches/beta/data/module/Services/JSON/doc/blank.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/blank.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/blank.html	(revision 16825)
@@ -0,0 +1,13 @@
+<html>
+<head>
+	<title>Generated Documentation</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+</head>
+<body>
+<div align="center"><h1>Generated Documentation</h1></div>
+<b>Welcome to default!</b><br />
+<br />
+This documentation was generated by <a href="http://www.phpdoc.org">phpDocumentor v1.2.3</a><br />
+</body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/index.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/index.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/index.html	(revision 16825)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+   <html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<!-- Generated by phpDocumentor on Tue, 27 Jun 2006 22:54:25 -0700  -->
+  <title>Generated Documentation</title>
+  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+</head>
+
+<FRAMESET rows='100,*'>
+	<FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999">
+	<FRAMESET cols='25%,*'>
+		<FRAME src='li_Services_JSON.html' name='left_bottom' frameborder="1" bordercolor="#999999">
+		<FRAME src='blank.html' name='right' frameborder="1" bordercolor="#999999">
+	</FRAMESET>
+	<NOFRAMES>
+		<H2>Frame Alert</H2>
+		<P>This document is designed to be viewed using the frames feature.
+		If you see this message, you are using a non-frame-capable web client.</P>
+	</NOFRAMES>
+</FRAMESET>
+</HTML>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Empties_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Empties_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Empties_TestCase.html	(revision 16825)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_Empties_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_Empties_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">364</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_Empties_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_Empties_TestCase</span>
+										<a href="#Services_JSON_Empties_TestCase" title="details" class="method-name">Services_JSON_Empties_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_type" title="details" class="method-name">test_type</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_Empties_TestCase" id="Services_JSON_Empties_TestCase"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_Empties_TestCase</span> (line <span class="line-number">366</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_Empties_TestCase</span>
+		<span class="method-name">
+			Services_JSON_Empties_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">370</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_type" id="test_type"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_type</span> (line <span class="line-number">384</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_type
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Object_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Object_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Object_TestCase.html	(revision 16825)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_Object_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_Object_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">289</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_Object_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_Object_TestCase</span>
+										<a href="#Services_JSON_Object_TestCase" title="details" class="method-name">Services_JSON_Object_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_from_then_to_JSON" title="details" class="method-name">test_from_then_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_JSON" title="details" class="method-name">test_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_type" title="details" class="method-name">test_type</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_Object_TestCase" id="Services_JSON_Object_TestCase"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_Object_TestCase</span> (line <span class="line-number">291</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_Object_TestCase</span>
+		<span class="method-name">
+			Services_JSON_Object_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">295</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_from_then_to_JSON" id="test_from_then_to_JSON"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_from_then_to_JSON</span> (line <span class="line-number">321</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_from_then_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_JSON" id="test_to_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_JSON</span> (line <span class="line-number">315</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_type" id="test_type"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_type</span> (line <span class="line-number">309</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_type
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_AssocArray_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_AssocArray_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_AssocArray_TestCase.html	(revision 16825)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_AssocArray_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_AssocArray_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">157</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_AssocArray_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_AssocArray_TestCase</span>
+										<a href="#Services_JSON_AssocArray_TestCase" title="details" class="method-name">Services_JSON_AssocArray_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_JSON" title="details" class="method-name">test_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_then_from_JSON" title="details" class="method-name">test_to_then_from_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_type" title="details" class="method-name">test_type</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_AssocArray_TestCase" id="Services_JSON_AssocArray_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_AssocArray_TestCase</span> (line <span class="line-number">159</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_AssocArray_TestCase</span>
+		<span class="method-name">
+			Services_JSON_AssocArray_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">163</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_JSON" id="test_to_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_JSON</span> (line <span class="line-number">187</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_then_from_JSON" id="test_to_then_from_JSON"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_then_from_JSON</span> (line <span class="line-number">200</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_then_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_type" id="test_type"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_type</span> (line <span class="line-number">181</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_type
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/_JSON_php.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/_JSON_php.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/_JSON_php.html	(revision 16825)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page JSON.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/JSON.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+			|									<a href="#sec-constants">Constants</a>
+										</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Converts to and from JSON format.</p>
+<p class="description"><p>JSON (JavaScript Object Notation) is a lightweight data-interchange  format. It is easy for humans to read and write. It is easy for machines  to parse and generate. It is based on a subset of the JavaScript  Programming Language, Standard ECMA-262 3rd Edition - December 1999.  This feature can also be found in  Python. JSON is a text format that is  completely language independent but uses conventions that are familiar  to programmers of the C-family of languages, including C, C++, C#, Java,  JavaScript, Perl, TCL, and many others. These properties make JSON an  ideal data-interchange language.</p><p>This package provides a simple encoder and decoder for JSON notation. It  is intended for use with client-side Javascript applications that make  use of HTTPRequest to perform server communication functions - data can  be encoded into JSON notation for use in a client-side javascript, or  decoded from incoming Javascript requests. JSON format is native to  Javascript, and can be directly eval()'ed with no further parsing  overhead</p><p>All strings should be in ASCII or UTF-8 format!</p><p>LICENSE: Redistribution and use in source and binary forms, with or  without modification, are permitted provided that the following  conditions are met: Redistributions of source code must retain the  above copyright notice, this list of conditions and the following  disclaimer. Redistributions in binary form must reproduce the above  copyright notice, this list of conditions and the following disclaimer  in the documentation and/or other materials provided with the  distribution.</p><p>THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN  NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH  DAMAGE.</p></p>
+	<ul class="tags">
+				<li><span class="field">license:</span> <a href="http://www.opensource.org/licenses/bsd-license.php">http://www.opensource.org/licenses/bsd-license.php</a></li>
+				<li><span class="field">link:</span> <a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198">http://pear.php.net/pepr/pepr-proposal-show.php?id=198</a></li>
+				<li><span class="field">version:</span> CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $</li>
+				<li><span class="field">copyright:</span> 2005 Michal Migurski</li>
+				<li><span class="field">author:</span> Matt Knapp &lt;<a href="mailto:mdknapp[at]gmail[dot]com">mailto:mdknapp[at]gmail[dot]com</a>&gt;</li>
+				<li><span class="field">author:</span> Brett Stimmerman &lt;<a href="mailto:brettstimmerman[at]gmail[dot]com">mailto:brettstimmerman[at]gmail[dot]com</a>&gt;</li>
+				<li><span class="field">author:</span> Michal Migurski &lt;<a href="mailto:mike-json@teczno.com">mailto:mike-json@teczno.com</a>&gt;</li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+			|										<a href="#sec-constants">Constants</a>
+															</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON.html">Services_JSON</a>
+					</td>
+					<td>
+											Converts to and from JSON format.
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_Error.html">Services_JSON_Error</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	<a name="sec-constants"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Constants</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+							<a href="#sec-classes">Classes</a>
+				|									<span class="disabled">Constants</span>
+											</div>
+		<div class="info-box-body">	
+			<a name="defineSERVICES_JSON_IN_ARR"><!-- --></a>
+<div class="oddrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_IN_ARR</span> = 3
+			(line <span class="line-number">72</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Marker constant for Services_JSON::decode(), used to flag stack state</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_IN_CMT"><!-- --></a>
+<div class="evenrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_IN_CMT</span> = 5
+			(line <span class="line-number">82</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Marker constant for Services_JSON::decode(), used to flag stack state</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_IN_OBJ"><!-- --></a>
+<div class="oddrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_IN_OBJ</span> = 4
+			(line <span class="line-number">77</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Marker constant for Services_JSON::decode(), used to flag stack state</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_IN_STR"><!-- --></a>
+<div class="evenrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_IN_STR</span> = 2
+			(line <span class="line-number">67</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Marker constant for Services_JSON::decode(), used to flag stack state</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_LOOSE_TYPE"><!-- --></a>
+<div class="oddrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_LOOSE_TYPE</span> = 16
+			(line <span class="line-number">87</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Behavior switch for Services_JSON::decode()</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_SLICE"><!-- --></a>
+<div class="evenrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_SLICE</span> = 1
+			(line <span class="line-number">62</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Marker constant for Services_JSON::decode(), used to flag stack state</p>
+	
+		
+</div>
+<a name="defineSERVICES_JSON_SUPPRESS_ERRORS"><!-- --></a>
+<div class="oddrow">
+	
+	<div>
+		<span class="const-title">
+			<span class="const-name">SERVICES_JSON_SUPPRESS_ERRORS</span> = 32
+			(line <span class="line-number">92</span>)
+		</span>
+	</div>
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Behavior switch for Services_JSON::decode()</p>
+	
+		
+</div>
+		</div>
+	</div>
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:25 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Error.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Error.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Error.html	(revision 16825)
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_Error</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_Error</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_JSON_php.html">/JSON.php</a> (line <span class="field">781</span>)
+		</p>
+		
+				
+		<pre>PEAR_Error
+   |
+   --Services_JSON_Error</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_Error</span>
+										<a href="#Services_JSON_Error" title="details" class="method-name">Services_JSON_Error</a>
+											([<span class="var-type">mixed</span>&nbsp;<span class="var-name">$message</span> = <span class="var-default">'unknown error'</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$code</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$mode</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$options</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$userinfo</span> = <span class="var-default">null</span>])
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_Error" id="Services_JSON_Error"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_Error</span> (line <span class="line-number">783</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_Error</span>
+		<span class="method-name">
+			Services_JSON_Error
+		</span>
+					([<span class="var-type">mixed</span>&nbsp;<span class="var-name">$message</span> = <span class="var-default">'unknown error'</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$code</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$mode</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$options</span> = <span class="var-default">null</span>], [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$userinfo</span> = <span class="var-default">null</span>])
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_UnquotedKeys_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_UnquotedKeys_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_UnquotedKeys_TestCase.html	(revision 16825)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_UnquotedKeys_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_UnquotedKeys_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">406</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_UnquotedKeys_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_UnquotedKeys_TestCase</span>
+										<a href="#Services_JSON_UnquotedKeys_TestCase" title="details" class="method-name">Services_JSON_UnquotedKeys_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_from_JSON" title="details" class="method-name">test_from_JSON</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_UnquotedKeys_TestCase" id="Services_JSON_UnquotedKeys_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_UnquotedKeys_TestCase</span> (line <span class="line-number">408</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_UnquotedKeys_TestCase</span>
+		<span class="method-name">
+			Services_JSON_UnquotedKeys_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">412</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_from_JSON" id="test_from_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_from_JSON</span> (line <span class="line-number">424</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:27 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_EncDec_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_EncDec_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_EncDec_TestCase.html	(revision 16825)
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_EncDec_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_EncDec_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">25</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_EncDec_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_EncDec_TestCase</span>
+										<a href="#Services_JSON_EncDec_TestCase" title="details" class="method-name">Services_JSON_EncDec_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_from_JSON" title="details" class="method-name">test_from_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_from_then_to_JSON" title="details" class="method-name">test_from_then_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_JSON" title="details" class="method-name">test_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_then_from_JSON" title="details" class="method-name">test_to_then_from_JSON</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_EncDec_TestCase" id="Services_JSON_EncDec_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_EncDec_TestCase</span> (line <span class="line-number">27</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_EncDec_TestCase</span>
+		<span class="method-name">
+			Services_JSON_EncDec_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">31</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_from_JSON" id="test_from_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_from_JSON</span> (line <span class="line-number">88</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_from_then_to_JSON" id="test_from_then_to_JSON"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_from_then_to_JSON</span> (line <span class="line-number">135</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_from_then_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_JSON" id="test_to_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_JSON</span> (line <span class="line-number">68</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_then_from_JSON" id="test_to_then_from_JSON"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_then_from_JSON</span> (line <span class="line-number">115</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_then_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_NestedArray_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_NestedArray_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_NestedArray_TestCase.html	(revision 16825)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_NestedArray_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_NestedArray_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">212</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_NestedArray_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_NestedArray_TestCase</span>
+										<a href="#Services_JSON_NestedArray_TestCase" title="details" class="method-name">Services_JSON_NestedArray_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_from_JSON" title="details" class="method-name">test_from_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_type" title="details" class="method-name">test_type</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#_test_from_JSON" title="details" class="method-name">_test_from_JSON</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_NestedArray_TestCase" id="Services_JSON_NestedArray_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_NestedArray_TestCase</span> (line <span class="line-number">214</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_NestedArray_TestCase</span>
+		<span class="method-name">
+			Services_JSON_NestedArray_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">218</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_from_JSON" id="test_from_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_from_JSON</span> (line <span class="line-number">272</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_type" id="test_type"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_type</span> (line <span class="line-number">265</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_type
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="method_test_from_JSON" id="_test_from_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">_test_from_JSON</span> (line <span class="line-number">281</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			_test_from_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Spaces_Comments_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Spaces_Comments_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_Spaces_Comments_TestCase.html	(revision 16825)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_Spaces_Comments_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_Spaces_Comments_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">328</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_Spaces_Comments_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_Spaces_Comments_TestCase</span>
+										<a href="#Services_JSON_Spaces_Comments_TestCase" title="details" class="method-name">Services_JSON_Spaces_Comments_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_comments" title="details" class="method-name">test_comments</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_spaces" title="details" class="method-name">test_spaces</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_Spaces_Comments_TestCase" id="Services_JSON_Spaces_Comments_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_Spaces_Comments_TestCase</span> (line <span class="line-number">330</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_Spaces_Comments_TestCase</span>
+		<span class="method-name">
+			Services_JSON_Spaces_Comments_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">334</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_comments" id="test_comments"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_comments</span> (line <span class="line-number">355</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_comments
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_spaces" id="test_spaces"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_spaces</span> (line <span class="line-number">350</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_spaces
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_ErrorSuppression_TestCase.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_ErrorSuppression_TestCase.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON_ErrorSuppression_TestCase.html	(revision 16825)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON_ErrorSuppression_TestCase</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON_ErrorSuppression_TestCase</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+		<p class="notes">
+			Located in <a class="field" href="_Test-JSON_php.html">/Test-JSON.php</a> (line <span class="field">434</span>)
+		</p>
+		
+				
+		<pre>PHPUnit_TestCase
+   |
+   --Services_JSON_ErrorSuppression_TestCase</pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON_ErrorSuppression_TestCase</span>
+										<a href="#Services_JSON_ErrorSuppression_TestCase" title="details" class="method-name">Services_JSON_ErrorSuppression_TestCase</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setUp" title="details" class="method-name">setUp</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_JSON" title="details" class="method-name">test_to_JSON</a>
+										()
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#test_to_JSON_suppressed" title="details" class="method-name">test_to_JSON_suppressed</a>
+										()
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON_ErrorSuppression_TestCase" id="Services_JSON_ErrorSuppression_TestCase"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON_ErrorSuppression_TestCase</span> (line <span class="line-number">436</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON_ErrorSuppression_TestCase</span>
+		<span class="method-name">
+			Services_JSON_ErrorSuppression_TestCase
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$name</span>)
+			</div>
+	
+		
+		
+	</div>
+<a name="methodsetUp" id="setUp"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setUp</span> (line <span class="line-number">440</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setUp
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_JSON" id="test_to_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_JSON</span> (line <span class="line-number">462</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_JSON
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+<a name="methodtest_to_JSON_suppressed" id="test_to_JSON_suppressed"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">test_to_JSON_suppressed</span> (line <span class="line-number">469</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			test_to_JSON_suppressed
+		</span>
+				()
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/Services_JSON.html	(revision 16825)
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Services_JSON</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Services_JSON</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Converts to and from JSON format.</p>
+<p class="description"><p>Brief example of use:</p><p><pre><code><pre><br />1     <span class="src-comm">// create a new instance of Services_JSON</span><br />2      <span class="src-var">$json</span> = <span class="src-key">new</span> <a href="../Services_JSON/Services_JSON.html#methodServices_JSON">Services_JSON</a><span class="src-sym">(</span><span class="src-sym">)</span>;<br />3     <br />4      <span class="src-comm">// convert a complexe value to JSON notation, and send it to the browser</span><br />5      <span class="src-var">$value</span> = <span class="src-key">array</span><span class="src-sym">(</span><span class="src-str">'foo'</span><span class="src-sym">,</span> <span class="src-str">'bar'</span><span class="src-sym">,</span> <span class="src-key">array</span><span class="src-sym">(</span><span class="src-num">1</span><span class="src-sym">,</span> <span class="src-num">2</span><span class="src-sym">,</span> <span class="src-str">'baz'</span><span class="src-sym">)</span><span class="src-sym">,</span> <span class="src-key">array</span><span class="src-sym">(</span><span class="src-num">3</span><span class="src-sym">,</span> <span class="src-key">array</span><span class="src-sym">(</span><span class="src-num">4</span><span class="src-sym">)</span><span class="src-sym">)</span><span class="src-sym">)</span>;<br />6      <span class="src-var">$output</span> = <span class="src-var">$json</span><span class="src-sym">-&gt;</span><a href="../Services_JSON/Services_JSON.html#methodencode">encode</a><span class="src-sym">(</span><span class="src-var">$value</span><span class="src-sym">)</span>;<br />7     <br />8      print<span class="src-sym">(</span><span class="src-var">$output</span><span class="src-sym">)</span>;<br />9      <span class="src-comm">// prints: [&quot;foo&quot;,&quot;bar&quot;,[1,2,&quot;baz&quot;],[3,[4]]]</span><br />10    <br />11     <span class="src-comm">// accept incoming POST data, assumed to be in JSON notation</span><br />12     <span class="src-var">$input</span> = <a href="http://www.php.net/file_get_contents">file_get_contents</a><span class="src-sym">(</span><span class="src-str">'php://input'</span><span class="src-sym">,</span> <span class="src-num">1000000</span><span class="src-sym">)</span>;<br />13     <span class="src-var">$value</span> = <span class="src-var">$json</span><span class="src-sym">-&gt;</span><a href="../Services_JSON/Services_JSON.html#methoddecode">decode</a><span class="src-sym">(</span><span class="src-var">$input</span><span class="src-sym">)</span>;</pre></code></pre></p></p>
+		<p class="notes">
+			Located in <a class="field" href="_JSON_php.html">/JSON.php</a> (line <span class="field">115</span>)
+		</p>
+		
+				
+		<pre></pre>
+	
+			</div>
+</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+								
+				<div class="method-definition">
+											<span class="method-result">Services_JSON</span>
+										<a href="#Services_JSON" title="details" class="method-name">Services_JSON</a>
+											(<span class="var-type">int</span>&nbsp;<span class="var-name">$use</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">mixed</span>
+										<a href="#decode" title="details" class="method-name">decode</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$str</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">mixed</span>
+										<a href="#encode" title="details" class="method-name">encode</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$var</span>)
+									</div>
+								
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#isError" title="details" class="method-name">isError</a>
+											(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$data</span>, [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$code</span> = <span class="var-default">null</span>])
+									</div>
+							</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+													<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodServices_JSON" id="Services_JSON"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor Services_JSON</span> (line <span class="line-number">133</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">constructs a new JSON instance</p>
+	
+	<div class="method-signature">
+		<span class="method-result">Services_JSON</span>
+		<span class="method-name">
+			Services_JSON
+		</span>
+					(<span class="var-type">int</span>&nbsp;<span class="var-name">$use</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">int</span>
+				<span class="var-name">$use</span><span class="var-description">: <p>object behavior flags; combine with boolean-OR</p><p>possible values: <ul><li>SERVICES_JSON_LOOSE_TYPE:  loose typing.
+                                   &quot;{...}&quot; syntax creates associative arrays
+                                   instead of objects in decode().</li><li>SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
+                                   Values which can't be encoded (e.g. resources)
+                                   appear as NULL instead of throwing errors.
+                                   By default, a deeply-nested resource will
+                                   bubble up with an error, so all return values
+                                   from encode() should be checked with isError()</li></ul></p></span>			</li>
+				</ul>
+		
+		
+	</div>
+<a name="methoddecode" id="decode"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">decode</span> (line <span class="line-number">484</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">decodes a JSON string into appropriate variable</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> number, boolean, string, array, or object                    corresponding to given JSON input string.                    See argument 1 to Services_JSON() above for object-output behavior.                    Note that decode() always returns strings                    in ASCII or UTF-8 format!</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">mixed</span>
+		<span class="method-name">
+			decode
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$str</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$str</span><span class="var-description">: JSON-formatted string</span>			</li>
+				</ul>
+		
+		
+	</div>
+<a name="methodencode" id="encode"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">encode</span> (line <span class="line-number">237</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">encodes an arbitrary variable into JSON format</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> JSON string representation of input var or an error if a problem occurs</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">mixed</span>
+		<span class="method-name">
+			encode
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$var</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">mixed</span>
+				<span class="var-name">$var</span><span class="var-description">: any number, boolean, string, array, or object to be encoded.                            see argument 1 to Services_JSON() above for array-parsing behavior.                            if var is a strng, note that encode() always expects it                            to be in ASCII or UTF-8 format!</span>			</li>
+				</ul>
+		
+		
+	</div>
+<a name="methodisError" id="isError"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">isError</span> (line <span class="line-number">766</span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">todo:</span> Ultimately, this should just call PEAR::isError()</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			isError
+		</span>
+					(<span class="var-type">mixed</span>&nbsp;<span class="var-name">$data</span>, [<span class="var-type">mixed</span>&nbsp;<span class="var-name">$code</span> = <span class="var-default">null</span>])
+			</div>
+	
+		
+		
+	</div>
+						
+		</div>
+	</div>
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:25 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/Services_JSON/_Test-JSON_php.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/Services_JSON/_Test-JSON_php.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/Services_JSON/_Test-JSON_php.html	(revision 16825)
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page Test-JSON.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/Test-JSON.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+			|							<a href="#sec-includes">Includes</a>
+												</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Unit tests for Services_JSON.</p>
+	<ul class="tags">
+				<li><span class="field">version:</span> CVS: $Id: Test-JSON.php,v 1.28 2006/06/28 05:54:17 migurski Exp $</li>
+				<li><span class="field">license:</span> <a href="http://www.opensource.org/licenses/bsd-license.php">http://www.opensource.org/licenses/bsd-license.php</a></li>
+				<li><span class="field">link:</span> <a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198">http://pear.php.net/pepr/pepr-proposal-show.php?id=198</a></li>
+				<li><span class="field">copyright:</span> 2005 Michal Migurski</li>
+				<li><span class="field">author:</span> Brett Stimmerman &lt;<a href="mailto:brettstimmerman[at]gmail[dot]com">mailto:brettstimmerman[at]gmail[dot]com</a>&gt;</li>
+				<li><span class="field">author:</span> Michal Migurski &lt;<a href="mailto:mike-json@teczno.com">mailto:mike-json@teczno.com</a>&gt;</li>
+				<li><span class="field">author:</span> Matt Knapp &lt;<a href="mailto:mdknapp[at]gmail[dot]com">mailto:mdknapp[at]gmail[dot]com</a>&gt;</li>
+				<li><span class="field">see:</span> <a href="../Services_JSON/_JSON_php.html">JSON.php</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+			|							<a href="#sec-includes">Includes</a>
+																		</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_EncDec_TestCase.html">Services_JSON_EncDec_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_AssocArray_TestCase.html">Services_JSON_AssocArray_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_NestedArray_TestCase.html">Services_JSON_NestedArray_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_Object_TestCase.html">Services_JSON_Object_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_Spaces_Comments_TestCase.html">Services_JSON_Spaces_Comments_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_Empties_TestCase.html">Services_JSON_Empties_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_UnquotedKeys_TestCase.html">Services_JSON_UnquotedKeys_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../Services_JSON/Services_JSON_ErrorSuppression_TestCase.html">Services_JSON_ErrorSuppression_TestCase</a>
+					</td>
+					<td>
+											
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	<a name="sec-includes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Includes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+							<a href="#sec-classes">Classes</a>
+				|						<span class="disabled">Includes</span>
+														</div>
+		<div class="info-box-body">	
+			<a name="_PHPUnit_php"><!-- --></a>
+<div class="oddrow">
+	
+	<div>
+		<span class="include-title">
+			<span class="include-type">require_once</span>
+			(<span class="include-name">'PHPUnit.php'</span>)
+			(line <span class="line-number">22</span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+	
+</div>
+<a name="_JSON_php"><!-- --></a>
+<div class="evenrow">
+	
+	<div>
+		<span class="include-title">
+			<span class="include-type">require_once</span>
+			(<span class="include-name"><a href="../Services_JSON/_JSON_php.html">'JSON.php'</a></span>)
+			(line <span class="line-number">23</span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+	
+</div>
+		</div>
+	</div>
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:26 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</div></body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/errors.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/errors.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/errors.html	(revision 16825)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>phpDocumentor Parser Errors and Warnings</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a href="#Post-parsing">Post-parsing</a><br>
+<a href="#Test-JSON.php">Test-JSON.php</a><br>
+<a name="Post-parsing"></a>
+<h1>Post-parsing</h1>
+<h2>Warnings:</h2><br>
+<b>Warning</b> - Class Services_JSON_ErrorSuppression_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_Spaces_Comments_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_Empties_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_UnquotedKeys_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_Error parent PEAR_Error not found<br>
+<b>Warning</b> - Class Services_JSON_AssocArray_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_EncDec_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_NestedArray_TestCase parent PHPUnit_TestCase not found<br>
+<b>Warning</b> - Class Services_JSON_Object_TestCase parent PHPUnit_TestCase not found<br>
+<a name="JSON.php"></a>
+<h1>JSON.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 115</b> - no @package tag was used in a DocBlock for class Services_JSON<br>
+<b>Warning on line 781</b> - no @package tag was used in a DocBlock for class Services_JSON_Error<br>
+<b>Warning on line 795</b> - no @package tag was used in a DocBlock for class Services_JSON_Error<br>
+<b>Warning on line 795</b> - 
+duplicate class element "Services_JSON_Error" in file /Users/migurski/Sites/JSON-PHP/JSON.php will be ignored.
+Use an @ignore tag on the original if you want this case to be documented.<br>
+<a name="Test-JSON.php"></a>
+<h1>Test-JSON.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 19</b> - package default is already in category , will now replace with category <br>
+<b>Warning on line 21</b> - Page-level DocBlock precedes "require_once Test-JSON.php", use another DocBlock to document the source element<br>
+<b>Warning on line 24</b> - no @package tag was used in a DocBlock for class Services_JSON_EncDec_TestCase<br>
+<b>Warning on line 156</b> - no @package tag was used in a DocBlock for class Services_JSON_AssocArray_TestCase<br>
+<b>Warning on line 211</b> - no @package tag was used in a DocBlock for class Services_JSON_NestedArray_TestCase<br>
+<b>Warning on line 288</b> - no @package tag was used in a DocBlock for class Services_JSON_Object_TestCase<br>
+<b>Warning on line 327</b> - no @package tag was used in a DocBlock for class Services_JSON_Spaces_Comments_TestCase<br>
+<b>Warning on line 363</b> - no @package tag was used in a DocBlock for class Services_JSON_Empties_TestCase<br>
+<b>Warning on line 405</b> - no @package tag was used in a DocBlock for class Services_JSON_UnquotedKeys_TestCase<br>
+<b>Warning on line 433</b> - no @package tag was used in a DocBlock for class Services_JSON_ErrorSuppression_TestCase<br>
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:27 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/media/stylesheet.css
===================================================================
--- branches/beta/data/module/Services/JSON/doc/media/stylesheet.css	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/media/stylesheet.css	(revision 16825)
@@ -0,0 +1,134 @@
+a { color: #336699; text-decoration: none; }
+a:hover { color: #6699CC; text-decoration: underline; }
+a:active { color: #6699CC; text-decoration: underline; }
+
+body { background : #FFFFFF; }
+body, table { font-family: Georgia, Times New Roman, Times, serif; font-size: 10pt }
+p, li { line-height: 140% }
+a img { border: 0px; }
+dd { margin-left: 0px; padding-left: 1em; }
+
+/* Page layout/boxes */
+
+.info-box {}
+.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #CCCCFF }
+.info-box-body { border: 1px solid #999999; padding: .5em; }
+.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; }
+
+.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em}
+.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em}
+
+.page-body { max-width: 800px; margin: auto; }
+.tree dl { margin: 0px }
+
+/* Index formatting classes */
+
+.index-item-body { margin-top: .5em; margin-bottom: .5em}
+.index-item-description { margin-top: .25em }
+.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt }
+.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em}
+.index-letter-title { font-size: 12pt; font-weight: bold }
+.index-letter-menu { text-align: center; margin: 1em }
+.index-letter { font-size: 12pt }
+
+/* Docbook classes */
+
+.description {}
+.short-description { font-weight: bold; color: #666666; }
+.tags {	padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; }
+.parameters {	padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; }
+.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; }
+.package {  }
+.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black }
+.package-details { font-size: 85%; }
+.sub-package { font-weight: bold; font-size: 120% }
+.tutorial { border-width: thin; border-color: #0066ff }
+.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; }
+.nav-button-disabled { color: #999999; }
+.nav-button:active, 
+.nav-button:focus, 
+.nav-button:hover { background-color: #DDDDDD; outline: 1px solid #999999; text-decoration: none }
+.folder-title { font-style: italic }
+
+/* Generic formatting */
+
+.field { font-weight: bold; }
+.detail { font-size: 8pt; }
+.notes { font-style: italic; font-size: 8pt; }
+.separator { background-color: #999999; height: 2px; }
+.warning {  color: #FF6600; }
+.disabled { font-style: italic; color: #999999; }
+
+/* Code elements */
+
+.line-number {  }
+
+.class-table { width: 100%; }
+.class-table-header { border-bottom: 1px dotted #666666; text-align: left}
+.class-name { color: #000000; font-weight: bold; }
+
+.method-summary { padding-left: 1em; font-size: 8pt }
+.method-header { }
+.method-definition { margin-bottom: .3em }
+.method-title { font-weight: bold; }
+.method-name { font-weight: bold; }
+.method-signature { font-size: 85%; color: #666666; margin: .5em 0em }
+.method-result { font-style: italic; }
+
+.var-summary { padding-left: 1em; font-size: 8pt; }
+.var-header { }
+.var-title { margin-bottom: .3em }
+.var-type { font-style: italic; }
+.var-name { font-weight: bold; }
+.var-default {}
+.var-description { font-weight: normal; color: #000000; }
+
+.include-title {  }
+.include-type { font-style: italic; }
+.include-name { font-weight: bold; }
+
+.const-title {  }
+.const-name { font-weight: bold; }
+
+/* Syntax highlighting */
+
+.src-code {  border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; }
+
+.src-comm { color: green; }
+.src-id {  }
+.src-inc { color: #0000FF; }
+.src-key { color: #0000FF; }
+.src-num { color: #CC0000; }
+.src-str { color: #66cccc; }
+.src-sym { font-weight: bold; }
+.src-var { }
+
+.src-php { font-weight: bold; }
+
+.src-doc { color: #009999 }
+.src-doc-close-template { color: #0000FF }
+.src-doc-coretag { color: #0099FF; font-weight: bold }
+.src-doc-inlinetag { color: #0099FF }
+.src-doc-internal { color: #6699cc }
+.src-doc-tag { color: #0080CC }
+.src-doc-template { color: #0000FF }
+.src-doc-type { font-style: italic }
+.src-doc-var { font-style: italic }
+
+/* tutorial */
+
+.authors {  }
+.author { font-style: italic; font-weight: bold }
+.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal }
+.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em }
+.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap }
+.release-info { font-size: 85%; font-style: italic; margin: 1em 0em }
+.ref-title-box {  }
+.ref-title {  }
+.ref-purpose { font-style: italic; color: #666666 }
+.ref-synopsis {  }
+.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #CCCCFF  }
+.cmd-synopsis { margin: 1em 0em }
+.cmd-title { font-weight: bold }
+.toc { margin-left: 2em; padding-left: 0em }
+
Index: branches/beta/data/module/Services/JSON/doc/media/banner.css
===================================================================
--- branches/beta/data/module/Services/JSON/doc/media/banner.css	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/media/banner.css	(revision 16825)
@@ -0,0 +1,32 @@
+body 
+{ 
+	background-color: #CCCCFF; 
+	margin: 0px; 
+	padding: 0px;
+}
+
+/* Banner (top bar) classes */
+
+.banner {  }
+
+.banner-menu 
+{ 
+	clear: both;
+	padding: .5em;
+	border-top: 2px solid #6666AA;	
+}
+
+.banner-title 
+{ 
+	text-align: right; 
+	font-size: 20pt; 
+	font-weight: bold; 
+	margin: .2em;
+}
+
+.package-selector 
+{ 
+	background-color: #AAAADD; 
+	border: 1px solid black; 
+	color: yellow;
+}
Index: branches/beta/data/module/Services/JSON/doc/elementindex_Services_JSON.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/elementindex_Services_JSON.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/elementindex_Services_JSON.html	(revision 16825)
@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a name="top"></a>
+<h2>[Services_JSON] element index</h2>
+<a href="elementindex.html">All elements</a>
+<br />
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex_Services_JSON.html#d">d</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#e">e</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#i">i</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#j">j</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#s">s</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#t">t</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#_">_</a>
+</div>
+
+	<a name="_"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">_</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">_test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#method_test_from_JSON">Services_JSON_NestedArray_TestCase::_test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+	<a name="d"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">d</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">decode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methoddecode">Services_JSON::decode()</a> in JSON.php</div>
+							<div class="index-item-description">decodes a JSON string into appropriate variable</div>
+					</dd>
+		</dl>
+	<a name="e"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">e</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">encode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodencode">Services_JSON::encode()</a> in JSON.php</div>
+							<div class="index-item-description">encodes an arbitrary variable into JSON format</div>
+					</dd>
+		</dl>
+	<a name="i"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">i</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">isError</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodisError">Services_JSON::isError()</a> in JSON.php</div>
+					</dd>
+		</dl>
+	<a name="j"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">j</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">JSON.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html">JSON.php</a> in JSON.php</div>
+					</dd>
+		</dl>
+	<a name="s"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">s</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						Services_JSON
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html">Services_JSON</a> in JSON.php</div>
+							<div class="index-item-description">Converts to and from JSON format.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodServices_JSON">Services_JSON::Services_JSON()</a> in JSON.php</div>
+							<div class="index-item-description">constructs a new JSON instance</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_AssocArray_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodServices_JSON_AssocArray_TestCase">Services_JSON_AssocArray_TestCase::Services_JSON_AssocArray_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_AssocArray_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html">Services_JSON_AssocArray_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Empties_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html">Services_JSON_Empties_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Empties_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodServices_JSON_Empties_TestCase">Services_JSON_Empties_TestCase::Services_JSON_Empties_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_EncDec_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodServices_JSON_EncDec_TestCase">Services_JSON_EncDec_TestCase::Services_JSON_EncDec_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_EncDec_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html">Services_JSON_EncDec_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Error</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Error.html#methodServices_JSON_Error">Services_JSON_Error::Services_JSON_Error()</a> in JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Error
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Error.html">Services_JSON_Error</a> in JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_ErrorSuppression_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html">Services_JSON_ErrorSuppression_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_ErrorSuppression_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodServices_JSON_ErrorSuppression_TestCase">Services_JSON_ErrorSuppression_TestCase::Services_JSON_ErrorSuppression_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_ARR</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_ARR">SERVICES_JSON_IN_ARR</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_CMT</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_CMT">SERVICES_JSON_IN_CMT</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_OBJ</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_OBJ">SERVICES_JSON_IN_OBJ</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_STR</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_STR">SERVICES_JSON_IN_STR</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_LOOSE_TYPE</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_LOOSE_TYPE">SERVICES_JSON_LOOSE_TYPE</a> in JSON.php</div>
+							<div class="index-item-description">Behavior switch for Services_JSON::decode()</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_NestedArray_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodServices_JSON_NestedArray_TestCase">Services_JSON_NestedArray_TestCase::Services_JSON_NestedArray_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_NestedArray_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html">Services_JSON_NestedArray_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Object_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodServices_JSON_Object_TestCase">Services_JSON_Object_TestCase::Services_JSON_Object_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Object_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html">Services_JSON_Object_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_SLICE</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_SLICE">SERVICES_JSON_SLICE</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Spaces_Comments_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html">Services_JSON_Spaces_Comments_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Spaces_Comments_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodServices_JSON_Spaces_Comments_TestCase">Services_JSON_Spaces_Comments_TestCase::Services_JSON_Spaces_Comments_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_SUPPRESS_ERRORS</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_SUPPRESS_ERRORS">SERVICES_JSON_SUPPRESS_ERRORS</a> in JSON.php</div>
+							<div class="index-item-description">Behavior switch for Services_JSON::decode()</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_UnquotedKeys_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html">Services_JSON_UnquotedKeys_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_UnquotedKeys_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodServices_JSON_UnquotedKeys_TestCase">Services_JSON_UnquotedKeys_TestCase::Services_JSON_UnquotedKeys_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodsetUp">Services_JSON_UnquotedKeys_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodsetUp">Services_JSON_Spaces_Comments_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodsetUp">Services_JSON_Object_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodsetUp">Services_JSON_Empties_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodsetUp">Services_JSON_AssocArray_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodsetUp">Services_JSON_NestedArray_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodsetUp">Services_JSON_EncDec_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodsetUp">Services_JSON_ErrorSuppression_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+	<a name="t"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">t</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Test-JSON.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_Test-JSON_php.html">Test-JSON.php</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_comments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodtest_comments">Services_JSON_Spaces_Comments_TestCase::test_comments()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_from_JSON">Services_JSON_EncDec_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodtest_from_JSON">Services_JSON_UnquotedKeys_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodtest_from_JSON">Services_JSON_NestedArray_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_then_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_from_then_to_JSON">Services_JSON_Object_TestCase::test_from_then_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_then_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_from_then_to_JSON">Services_JSON_EncDec_TestCase::test_from_then_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_spaces</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodtest_spaces">Services_JSON_Spaces_Comments_TestCase::test_spaces()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_to_JSON">Services_JSON_Object_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodtest_to_JSON">Services_JSON_ErrorSuppression_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_to_JSON">Services_JSON_EncDec_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_to_JSON">Services_JSON_AssocArray_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON_suppressed</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodtest_to_JSON_suppressed">Services_JSON_ErrorSuppression_TestCase::test_to_JSON_suppressed()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_then_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_to_then_from_JSON">Services_JSON_AssocArray_TestCase::test_to_then_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_then_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_to_then_from_JSON">Services_JSON_EncDec_TestCase::test_to_then_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_type">Services_JSON_AssocArray_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodtest_type">Services_JSON_Empties_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodtest_type">Services_JSON_NestedArray_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_type">Services_JSON_Object_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex_Services_JSON.html#d">d</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#e">e</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#i">i</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#j">j</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#s">s</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#t">t</a>
+	<a class="index-letter" href="elementindex_Services_JSON.html#_">_</a>
+</div>	</body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/packages.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/packages.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/packages.html	(revision 16825)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<link rel="stylesheet" href="media/banner.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="banner">
+				<div class="banner-title">Services_JSON</div>
+				<div class="banner-menu">
+	        <table cellpadding="0" cellspacing="0" style="width: 100%">
+	          <tr>
+              <td>
+								              </td>
+              <td style="width: 2em">&nbsp;</td>
+              <td style="text-align: right">
+								              </td>
+						</tr>
+          </table>
+				</div>
+			</div>
+		</body>
+	</html>
Index: branches/beta/data/module/Services/JSON/doc/li_Services_JSON.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/li_Services_JSON.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/li_Services_JSON.html	(revision 16825)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<div class="package-title">Services_JSON</div>
+<div class="package-details">
+
+	<dl class="tree">
+		
+		<dt class="folder-title">Description</dt>
+		<dd>
+			<a href='classtrees_Services_JSON.html' target='right'>Class trees</a><br />
+			<a href='elementindex_Services_JSON.html' target='right'>Index of elements</a><br />
+							<a href="todolist.html" target="right">Todo List</a><br />
+					</dd>
+	
+							
+							
+													<dt class="folder-title">Classes</dt>
+											<dd><a href='Services_JSON/Services_JSON.html' target='right'>Services_JSON</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_AssocArray_TestCase.html' target='right'>Services_JSON_AssocArray_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_Empties_TestCase.html' target='right'>Services_JSON_Empties_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_EncDec_TestCase.html' target='right'>Services_JSON_EncDec_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_Error.html' target='right'>Services_JSON_Error</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_ErrorSuppression_TestCase.html' target='right'>Services_JSON_ErrorSuppression_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_NestedArray_TestCase.html' target='right'>Services_JSON_NestedArray_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_Object_TestCase.html' target='right'>Services_JSON_Object_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_Spaces_Comments_TestCase.html' target='right'>Services_JSON_Spaces_Comments_TestCase</a></dd>
+											<dd><a href='Services_JSON/Services_JSON_UnquotedKeys_TestCase.html' target='right'>Services_JSON_UnquotedKeys_TestCase</a></dd>
+																						<dt class="folder-title">Files</dt>
+											<dd><a href='Services_JSON/_JSON_php.html' target='right'>JSON.php</a></dd>
+											<dd><a href='Services_JSON/_Test-JSON_php.html' target='right'>Test-JSON.php</a></dd>
+																	
+						
+			</dl>
+</div>
+<p class="notes"><a href="http://www.phpdoc.org" target="_blank">phpDocumentor v <span class="field">1.2.3</span></a></p>
+</BODY>
+</HTML>
Index: branches/beta/data/module/Services/JSON/doc/elementindex.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/elementindex.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/elementindex.html	(revision 16825)
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a name="top"></a>
+<h2>Full index</h2>
+<h3>Package indexes</h3>
+<ul>
+	<li><a href="elementindex_Services_JSON.html">Services_JSON</a></li>
+</ul>
+<br />
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex.html#d">d</a>
+	<a class="index-letter" href="elementindex.html#e">e</a>
+	<a class="index-letter" href="elementindex.html#i">i</a>
+	<a class="index-letter" href="elementindex.html#"></a>
+	<a class="index-letter" href="elementindex.html#s">s</a>
+	<a class="index-letter" href="elementindex.html#t">t</a>
+</div>
+
+	<a name="d"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">d</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">decode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methoddecode">Services_JSON::decode()</a> in JSON.php</div>
+							<div class="index-item-description">decodes a JSON string into appropriate variable</div>
+					</dd>
+		</dl>
+	<a name="e"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">e</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">encode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodencode">Services_JSON::encode()</a> in JSON.php</div>
+							<div class="index-item-description">encodes an arbitrary variable into JSON format</div>
+					</dd>
+		</dl>
+	<a name="i"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">i</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">isError</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodisError">Services_JSON::isError()</a> in JSON.php</div>
+					</dd>
+		</dl>
+	<a name="j"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">j</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">JSON.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html">JSON.php</a> in JSON.php</div>
+					</dd>
+		</dl>
+	<a name="s"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">s</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						Services_JSON
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html">Services_JSON</a> in JSON.php</div>
+							<div class="index-item-description">Converts to and from JSON format.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON.html#methodServices_JSON">Services_JSON::Services_JSON()</a> in JSON.php</div>
+							<div class="index-item-description">constructs a new JSON instance</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_AssocArray_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodServices_JSON_AssocArray_TestCase">Services_JSON_AssocArray_TestCase::Services_JSON_AssocArray_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_AssocArray_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html">Services_JSON_AssocArray_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Empties_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html">Services_JSON_Empties_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Empties_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodServices_JSON_Empties_TestCase">Services_JSON_Empties_TestCase::Services_JSON_Empties_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_EncDec_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodServices_JSON_EncDec_TestCase">Services_JSON_EncDec_TestCase::Services_JSON_EncDec_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_EncDec_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html">Services_JSON_EncDec_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Error</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Error.html#methodServices_JSON_Error">Services_JSON_Error::Services_JSON_Error()</a> in JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Error
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Error.html">Services_JSON_Error</a> in JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_ErrorSuppression_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html">Services_JSON_ErrorSuppression_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_ErrorSuppression_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodServices_JSON_ErrorSuppression_TestCase">Services_JSON_ErrorSuppression_TestCase::Services_JSON_ErrorSuppression_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_ARR</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_ARR">SERVICES_JSON_IN_ARR</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_CMT</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_CMT">SERVICES_JSON_IN_CMT</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_OBJ</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_OBJ">SERVICES_JSON_IN_OBJ</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_IN_STR</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_IN_STR">SERVICES_JSON_IN_STR</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_LOOSE_TYPE</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_LOOSE_TYPE">SERVICES_JSON_LOOSE_TYPE</a> in JSON.php</div>
+							<div class="index-item-description">Behavior switch for Services_JSON::decode()</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_NestedArray_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodServices_JSON_NestedArray_TestCase">Services_JSON_NestedArray_TestCase::Services_JSON_NestedArray_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_NestedArray_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html">Services_JSON_NestedArray_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Object_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodServices_JSON_Object_TestCase">Services_JSON_Object_TestCase::Services_JSON_Object_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Object_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html">Services_JSON_Object_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_SLICE</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_SLICE">SERVICES_JSON_SLICE</a> in JSON.php</div>
+							<div class="index-item-description">Marker constant for Services_JSON::decode(), used to flag stack state</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_Spaces_Comments_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html">Services_JSON_Spaces_Comments_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_Spaces_Comments_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodServices_JSON_Spaces_Comments_TestCase">Services_JSON_Spaces_Comments_TestCase::Services_JSON_Spaces_Comments_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="const-title">SERVICES_JSON_SUPPRESS_ERRORS</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_JSON_php.html#defineSERVICES_JSON_SUPPRESS_ERRORS">SERVICES_JSON_SUPPRESS_ERRORS</a> in JSON.php</div>
+							<div class="index-item-description">Behavior switch for Services_JSON::decode()</div>
+					</dd>
+			<dt class="field">
+						Services_JSON_UnquotedKeys_TestCase
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html">Services_JSON_UnquotedKeys_TestCase</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">Services_JSON_UnquotedKeys_TestCase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodServices_JSON_UnquotedKeys_TestCase">Services_JSON_UnquotedKeys_TestCase::Services_JSON_UnquotedKeys_TestCase()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodsetUp">Services_JSON_UnquotedKeys_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodsetUp">Services_JSON_Spaces_Comments_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodsetUp">Services_JSON_Object_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodsetUp">Services_JSON_Empties_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodsetUp">Services_JSON_AssocArray_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodsetUp">Services_JSON_NestedArray_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodsetUp">Services_JSON_EncDec_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUp</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodsetUp">Services_JSON_ErrorSuppression_TestCase::setUp()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+	<a name="t"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">t</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Test-JSON.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/_Test-JSON_php.html">Test-JSON.php</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_comments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodtest_comments">Services_JSON_Spaces_Comments_TestCase::test_comments()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_from_JSON">Services_JSON_EncDec_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html#methodtest_from_JSON">Services_JSON_UnquotedKeys_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodtest_from_JSON">Services_JSON_NestedArray_TestCase::test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_then_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_from_then_to_JSON">Services_JSON_Object_TestCase::test_from_then_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_from_then_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_from_then_to_JSON">Services_JSON_EncDec_TestCase::test_from_then_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_spaces</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html#methodtest_spaces">Services_JSON_Spaces_Comments_TestCase::test_spaces()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_to_JSON">Services_JSON_Object_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodtest_to_JSON">Services_JSON_ErrorSuppression_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_to_JSON">Services_JSON_EncDec_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_to_JSON">Services_JSON_AssocArray_TestCase::test_to_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_JSON_suppressed</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html#methodtest_to_JSON_suppressed">Services_JSON_ErrorSuppression_TestCase::test_to_JSON_suppressed()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_then_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_to_then_from_JSON">Services_JSON_AssocArray_TestCase::test_to_then_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_to_then_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_EncDec_TestCase.html#methodtest_to_then_from_JSON">Services_JSON_EncDec_TestCase::test_to_then_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html#methodtest_type">Services_JSON_AssocArray_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Empties_TestCase.html#methodtest_type">Services_JSON_Empties_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#methodtest_type">Services_JSON_NestedArray_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">test_type</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_Object_TestCase.html#methodtest_type">Services_JSON_Object_TestCase::test_type()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+	<a name="_"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">_</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">_test_from_JSON</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html#method_test_from_JSON">Services_JSON_NestedArray_TestCase::_test_from_JSON()</a> in Test-JSON.php</div>
+					</dd>
+		</dl>
+
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex.html#d">d</a>
+	<a class="index-letter" href="elementindex.html#e">e</a>
+	<a class="index-letter" href="elementindex.html#i">i</a>
+	<a class="index-letter" href="elementindex.html#"></a>
+	<a class="index-letter" href="elementindex.html#s">s</a>
+	<a class="index-letter" href="elementindex.html#t">t</a>
+</div>	</body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/todolist.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/todolist.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/todolist.html	(revision 16825)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Todo List</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<div align="center"><h1>Todo List</h1></div>
+<h2>Services_JSON</h2>
+<h3><a href="Services_JSON/Services_JSON.html#methodisError">Services_JSON::isError()</a></h3>
+<ul>
+    <li>Ultimately, this should just call PEAR::isError()</li>
+</ul>
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:27 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</body>
+</html>
Index: branches/beta/data/module/Services/JSON/doc/classtrees_Services_JSON.html
===================================================================
--- branches/beta/data/module/Services/JSON/doc/classtrees_Services_JSON.html	(revision 16825)
+++ branches/beta/data/module/Services/JSON/doc/classtrees_Services_JSON.html	(revision 16825)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						
+<!-- Start of Class Data -->
+<H2>
+	
+</H2>
+<h2>Root class Services_JSON</h2>
+<ul>
+<li><a href="Services_JSON/Services_JSON.html">Services_JSON</a></li></ul>
+
+<h2>Root class Services_JSON_AssocArray_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_AssocArray_TestCase.html">Services_JSON_AssocArray_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_Empties_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_Empties_TestCase.html">Services_JSON_Empties_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_EncDec_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_EncDec_TestCase.html">Services_JSON_EncDec_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_Error</h2>
+<ul>
+<li>PEAR_Error<ul><li><a href="Services_JSON/Services_JSON_Error.html">Services_JSON_Error</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_ErrorSuppression_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_ErrorSuppression_TestCase.html">Services_JSON_ErrorSuppression_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_NestedArray_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_NestedArray_TestCase.html">Services_JSON_NestedArray_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_Object_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_Object_TestCase.html">Services_JSON_Object_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_Spaces_Comments_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_Spaces_Comments_TestCase.html">Services_JSON_Spaces_Comments_TestCase</a></li></ul></li></ul>
+
+<h2>Root class Services_JSON_UnquotedKeys_TestCase</h2>
+<ul>
+<li>PHPUnit_TestCase<ul><li><a href="Services_JSON/Services_JSON_UnquotedKeys_TestCase.html">Services_JSON_UnquotedKeys_TestCase</a></li></ul></li></ul>
+
+	<p class="notes" id="credit">
+		Documentation generated on Tue, 27 Jun 2006 22:54:25 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
+	</p>
+	</body>
+</html>
Index: branches/beta/data/module/Services/JSON/Test-JSON.php
===================================================================
--- branches/beta/data/module/Services/JSON/Test-JSON.php	(revision 16825)
+++ branches/beta/data/module/Services/JSON/Test-JSON.php	(revision 16825)
@@ -0,0 +1,521 @@
+<?php
+// $Id: Test-JSON.php 16259 2007-10-05 02:49:20Z adachi $
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Unit tests for Services_JSON.
+ * @see JSON.php
+ *
+ * @category
+ * @package     Services_JSON
+ * @author      Michal Migurski <mike-json@teczno.com>
+ * @author      Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright   2005 Michal Migurski
+ * @version     CVS: $Id: Test-JSON.php 16259 2007-10-05 02:49:20Z adachi $
+ * @license     http://www.opensource.org/licenses/bsd-license.php
+ * @link        http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+    error_reporting(E_ALL);
+
+    require_once 'PHPUnit.php';
+    require_once 'JSON.php';
+
+    class Services_JSON_EncDec_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_EncDec_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json = new Services_JSON();
+
+            $obj = new stdClass();
+            $obj->a_string = '"he":llo}:{world';
+            $obj->an_array = array(1, 2, 3);
+            $obj->obj = new stdClass();
+            $obj->obj->a_number = 123;
+
+            $this->obj = $obj;
+            $this->obj_j = '{"a_string":"\"he\":llo}:{world","an_array":[1,2,3],"obj":{"a_number":123}}';
+            $this->obj_d = 'object with properties, nested object and arrays';
+
+            $this->arr = array(null, true, array(1, 2, 3), "hello\"],[world!");
+            $this->arr_j = '[null,true,[1,2,3],"hello\"],[world!"]';
+            $this->arr_d = 'array with elements and nested arrays';
+
+            $this->str1 = 'hello world';
+            $this->str1_j = '"hello world"';
+            $this->str1_j_ = "'hello world'";
+            $this->str1_d = 'hello world';
+            $this->str1_d_ = 'hello world, double quotes';
+
+            $this->str2 = "hello\t\"world\"";
+            $this->str2_j = '"hello\\t\\"world\\""';
+            $this->str2_d = 'hello world, with tab, double-quotes';
+
+            $this->str3 = "\\\r\n\t\"/";
+            $this->str3_j = '"\\\\\\r\\n\\t\\"\\/"';
+            $this->str3_d = 'backslash, return, newline, tab, double-quote';
+
+            $this->str4 = 'héllö wørłd';
+            $this->str4_j = '"h\u00e9ll\u00f6 w\u00f8r\u0142d"';
+            $this->str4_j_ = '"héllö wørłd"';
+            $this->str4_d = 'hello world, with unicode';
+        }
+
+        function test_to_JSON()
+        {
+            $this->assertEquals('null', $this->json->encode(null), 'type case: null');
+            $this->assertEquals('true', $this->json->encode(true), 'type case: boolean true');
+            $this->assertEquals('false', $this->json->encode(false), 'type case: boolean false');
+
+            $this->assertEquals('1', $this->json->encode(1), 'numeric case: 1');
+            $this->assertEquals('-1', $this->json->encode(-1), 'numeric case: -1');
+            $this->assertEquals('1.000000', $this->json->encode(1.0), 'numeric case: 1.0');
+            $this->assertEquals('1.100000', $this->json->encode(1.1), 'numeric case: 1.1');
+
+            $this->assertEquals($this->str1_j, $this->json->encode($this->str1), "string case: {$this->str1_d}");
+            $this->assertEquals($this->str2_j, $this->json->encode($this->str2), "string case: {$this->str2_d}");
+            $this->assertEquals($this->str3_j, $this->json->encode($this->str3), "string case: {$this->str3_d}");
+            $this->assertEquals($this->str4_j, $this->json->encode($this->str4), "string case: {$this->str4_d}");
+
+            $this->assertEquals($this->arr_j, $this->json->encode($this->arr), "array case: {$this->arr_d}");
+            $this->assertEquals($this->obj_j, $this->json->encode($this->obj), "object case: {$this->obj_d}");
+        }
+
+        function test_from_JSON()
+        {
+            $this->assertEquals(null, $this->json->decode('null'), 'type case: null');
+            $this->assertEquals(true, $this->json->decode('true'), 'type case: boolean true');
+            $this->assertEquals(false, $this->json->decode('false'), 'type case: boolean false');
+
+            $this->assertEquals(1, $this->json->decode('1'), 'numeric case: 1');
+            $this->assertEquals(-1, $this->json->decode('-1'), 'numeric case: -1');
+            $this->assertEquals(1.0, $this->json->decode('1.0'), 'numeric case: 1.0');
+            $this->assertEquals(1.1, $this->json->decode('1.1'), 'numeric case: 1.1');
+
+            $this->assertEquals(11.0, $this->json->decode('1.1e1'), 'numeric case: 1.1e1');
+            $this->assertEquals(11.0, $this->json->decode('1.10e+1'), 'numeric case: 1.10e+1');
+            $this->assertEquals(0.11, $this->json->decode('1.1e-1'), 'numeric case: 1.1e-1');
+            $this->assertEquals(-0.11, $this->json->decode('-1.1e-1'), 'numeric case: -1.1e-1');
+
+            $this->assertEquals($this->str1, $this->json->decode($this->str1_j),  "string case: {$this->str1_d}");
+            $this->assertEquals($this->str1, $this->json->decode($this->str1_j_), "string case: {$this->str1_d_}");
+            $this->assertEquals($this->str2, $this->json->decode($this->str2_j),  "string case: {$this->str2_d}");
+            $this->assertEquals($this->str3, $this->json->decode($this->str3_j),  "string case: {$this->str3_d}");
+            $this->assertEquals($this->str4, $this->json->decode($this->str4_j),  "string case: {$this->str4_d}");
+            $this->assertEquals($this->str4, $this->json->decode($this->str4_j_),  "string case: {$this->str4_d}");
+
+            $this->assertEquals($this->arr, $this->json->decode($this->arr_j), "array case: {$this->arr_d}");
+            $this->assertEquals($this->obj, $this->json->decode($this->obj_j), "object case: {$this->obj_d}");
+        }
+
+        function test_to_then_from_JSON()
+        {
+            $this->assertEquals(null, $this->json->decode($this->json->encode(null)), 'type case: null');
+            $this->assertEquals(true, $this->json->decode($this->json->encode(true)), 'type case: boolean true');
+            $this->assertEquals(false, $this->json->decode($this->json->encode(false)), 'type case: boolean false');
+
+            $this->assertEquals(1, $this->json->decode($this->json->encode(1)), 'numeric case: 1');
+            $this->assertEquals(-1, $this->json->decode($this->json->encode(-1)), 'numeric case: -1');
+            $this->assertEquals(1.0, $this->json->decode($this->json->encode(1.0)), 'numeric case: 1.0');
+            $this->assertEquals(1.1, $this->json->decode($this->json->encode(1.1)), 'numeric case: 1.1');
+
+            $this->assertEquals($this->str1, $this->json->decode($this->json->encode($this->str1)), "string case: {$this->str1_d}");
+            $this->assertEquals($this->str2, $this->json->decode($this->json->encode($this->str2)), "string case: {$this->str2_d}");
+            $this->assertEquals($this->str3, $this->json->decode($this->json->encode($this->str3)), "string case: {$this->str3_d}");
+            $this->assertEquals($this->str4, $this->json->decode($this->json->encode($this->str4)), "string case: {$this->str4_d}");
+
+            $this->assertEquals($this->arr, $this->json->decode($this->json->encode($this->arr)), "array case: {$this->arr_d}");
+            $this->assertEquals($this->obj, $this->json->decode($this->json->encode($this->obj)), "object case: {$this->obj_d}");
+        }
+
+        function test_from_then_to_JSON()
+        {
+            $this->assertEquals('null', $this->json->encode($this->json->decode('null')), 'type case: null');
+            $this->assertEquals('true', $this->json->encode($this->json->decode('true')), 'type case: boolean true');
+            $this->assertEquals('false', $this->json->encode($this->json->decode('false')), 'type case: boolean false');
+
+            $this->assertEquals('1', $this->json->encode($this->json->decode('1')), 'numeric case: 1');
+            $this->assertEquals('-1', $this->json->encode($this->json->decode('-1')), 'numeric case: -1');
+            $this->assertEquals('1.0', $this->json->encode($this->json->decode('1.0')), 'numeric case: 1.0');
+            $this->assertEquals('1.1', $this->json->encode($this->json->decode('1.1')), 'numeric case: 1.1');
+
+            $this->assertEquals($this->str1_j, $this->json->encode($this->json->decode($this->str1_j)), "string case: {$this->str1_d}");
+            $this->assertEquals($this->str2_j, $this->json->encode($this->json->decode($this->str2_j)), "string case: {$this->str2_d}");
+            $this->assertEquals($this->str3_j, $this->json->encode($this->json->decode($this->str3_j)), "string case: {$this->str3_d}");
+            $this->assertEquals($this->str4_j, $this->json->encode($this->json->decode($this->str4_j)), "string case: {$this->str4_d}");
+            $this->assertEquals($this->str4_j, $this->json->encode($this->json->decode($this->str4_j_)), "string case: {$this->str4_d}");
+
+            $this->assertEquals($this->arr_j, $this->json->encode($this->json->decode($this->arr_j)), "array case: {$this->arr_d}");
+            $this->assertEquals($this->obj_j, $this->json->encode($this->json->decode($this->obj_j)), "object case: {$this->obj_d}");
+        }
+    }
+
+    class Services_JSON_AssocArray_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_AssocArray_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json_l = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+            $this->json_s = new Services_JSON();
+
+            $this->arr = array('car1'=> array('color'=> 'tan', 'model' => 'sedan'),
+            	'car2' => array('color' => 'red', 'model' => 'sports'));
+            $this->arr_jo = '{"car1":{"color":"tan","model":"sedan"},"car2":{"color":"red","model":"sports"}}';
+            $this->arr_d = 'associative array with nested associative arrays';
+
+            $this->arn = array(0=> array(0=> 'tan\\', 'model\\' => 'sedan'), 1 => array(0 => 'red', 'model' => 'sports'));
+            $this->arn_ja = '[{"0":"tan\\\\","model\\\\":"sedan"},{"0":"red","model":"sports"}]';
+            $this->arn_d = 'associative array with nested associative arrays, and some numeric keys thrown in';
+
+            $this->arrs = array (1 => 'one', 2 => 'two', 5 => 'five');
+            $this->arrs_jo = '{"1":"one","2":"two","5":"five"}';
+            $this->arrs_d = 'associative array numeric keys which are not fully populated in a range of 0 to length-1';
+        }
+
+        function test_type()
+        {
+            $this->assertEquals('array',  gettype($this->json_l->decode($this->arn_ja)), "loose type should be array");
+            $this->assertEquals('array',  gettype($this->json_s->decode($this->arn_ja)), "strict type should be array");
+        }
+
+        function test_to_JSON()
+        {
+            // both strict and loose JSON should result in an object
+            $this->assertEquals($this->arr_jo, $this->json_l->encode($this->arr), "array case - loose: {$this->arr_d}");
+            $this->assertEquals($this->arr_jo, $this->json_s->encode($this->arr), "array case - strict: {$this->arr_d}");
+
+            // ...unless the input array has some numeric indeces, in which case the behavior is to degrade to a regular array
+            $this->assertEquals($this->arn_ja, $this->json_s->encode($this->arn), "array case - strict: {$this->arn_d}");
+
+            // Test a sparsely populated numerically indexed associative array
+            $this->assertEquals($this->arrs_jo, $this->json_l->encode($this->arrs), "sparse numeric assoc array: {$this->arrs_d}");
+        }
+
+        function test_to_then_from_JSON()
+        {
+            // these tests motivated by a bug in which strings that end
+            // with backslashes followed by quotes were incorrectly decoded.
+            
+            foreach(array('\\"', '\\\\"', '\\"\\"', '\\""\\""', '\\\\"\\\\"') as $v) {
+                $this->assertEquals(array($v), $this->json_l->decode($this->json_l->encode(array($v))));
+                $this->assertEquals(array('a' => $v), $this->json_l->decode($this->json_l->encode(array('a' => $v))));
+            }
+        }
+    }
+
+    class Services_JSON_NestedArray_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_NestedArray_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+
+            $this->str1 = '[{"this":"that"}]';
+            $this->arr1 = array(array('this' => 'that'));
+
+            $this->str2 = '{"this":["that"]}';
+            $this->arr2 = array('this' => array('that'));
+
+            $this->str3 = '{"params":[{"foo":["1"],"bar":"1"}]}';
+            $this->arr3 = array('params' => array(array('foo' => array('1'), 'bar' => '1')));
+
+            $this->str4 = '{"0": {"foo": "bar", "baz": "winkle"}}';
+            $this->arr4 = array('0' => array('foo' => 'bar', 'baz' => 'winkle'));
+
+            $this->str5 = '{"params":[{"options": {"old": [ ], "new": {"0": {"elements": {"old": [], "new": {"0": {"elementName": "aa", "isDefault": false, "elementRank": "0", "priceAdjust": "0", "partNumber": ""}}}, "optionName": "aa", "isRequired": false, "optionDesc": null}}}}]}';
+            $this->arr5 = array (
+              'params' => array (
+                0 => array (
+                  'options' =>
+                  array (
+                    'old' => array(),
+                    'new' => array (
+                      0 => array (
+                        'elements' => array (
+                          'old' => array(),
+                          'new' => array (
+                            0 => array (
+                              'elementName' => 'aa',
+                              'isDefault' => false,
+                              'elementRank' => '0',
+                              'priceAdjust' => '0',
+                              'partNumber' => '',
+                            ),
+                          ),
+                        ),
+                        'optionName' => 'aa',
+                        'isRequired' => false,
+                        'optionDesc' => NULL,
+                      ),
+                    ),
+                  ),
+                ),
+              ),
+            );
+        }
+
+        function test_type()
+        {
+            $this->assertEquals('array', gettype($this->json->decode($this->str1)), "loose type should be array");
+            $this->assertEquals('array', gettype($this->json->decode($this->str2)), "loose type should be array");
+            $this->assertEquals('array', gettype($this->json->decode($this->str3)), "loose type should be array");
+        }
+
+        function test_from_JSON()
+        {
+            $this->assertEquals($this->arr1, $this->json->decode($this->str1), "simple compactly-nested array");
+            $this->assertEquals($this->arr2, $this->json->decode($this->str2), "simple compactly-nested array");
+            $this->assertEquals($this->arr3, $this->json->decode($this->str3), "complex compactly nested array");
+            $this->assertEquals($this->arr4, $this->json->decode($this->str4), "complex compactly nested array");
+            $this->assertEquals($this->arr5, $this->json->decode($this->str5), "super complex compactly nested array");
+        }
+
+        function _test_from_JSON()
+        {
+            $super = '{"params":[{"options": {"old": {}, "new": {"0": {"elements": {"old": {}, "new": {"0": {"elementName": "aa", "isDefault": false, "elementRank": "0", "priceAdjust": "0", "partNumber": ""}}}, "optionName": "aa", "isRequired": false, "optionDesc": ""}}}}]}';
+            print("trying {$super}...\n");
+            print var_export($this->json->decode($super));
+        }
+    }
+
+    class Services_JSON_Object_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_Object_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json_l = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+            $this->json_s = new Services_JSON();
+
+            $this->obj_j = '{"a_string":"\"he\":llo}:{world","an_array":[1,2,3],"obj":{"a_number":123}}';
+
+            $this->obj1->car1->color = 'tan';
+            $this->obj1->car1->model = 'sedan';
+            $this->obj1->car2->color = 'red';
+            $this->obj1->car2->model = 'sports';
+            $this->obj1_j = '{"car1":{"color":"tan","model":"sedan"},"car2":{"color":"red","model":"sports"}}';
+            $this->obj1_d = 'Object with nested objects';
+        }
+
+        function test_type()
+        {
+            $this->assertEquals('object', gettype($this->json_s->decode($this->obj_j)), "checking whether decoded type is object");
+            $this->assertEquals('array',  gettype($this->json_l->decode($this->obj_j)), "checking whether decoded type is array");
+        }
+
+        function test_to_JSON()
+        {
+            $this->assertEquals($this->obj1_j, $this->json_s->encode($this->obj1), "object - strict: {$this->obj1_d}");
+            $this->assertEquals($this->obj1_j, $this->json_l->encode($this->obj1), "object - loose: {$this->obj1_d}");
+        }
+
+        function test_from_then_to_JSON()
+        {
+            $this->assertEquals($this->obj_j, $this->json_s->encode($this->json_s->decode($this->obj_j)), "object case");
+            $this->assertEquals($this->obj_j, $this->json_l->encode($this->json_l->decode($this->obj_j)), "array case");
+        }
+    }
+
+    class Services_JSON_Spaces_Comments_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_Spaces_Comments_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+
+            $this->obj_j = '{"a_string":"\"he\":llo}:{world","an_array":[1,2,3],"obj":{"a_number":123}}';
+
+            $this->obj_js = '{"a_string": "\"he\":llo}:{world",
+                              "an_array":[1, 2, 3],
+                              "obj": {"a_number":123}}';
+
+            $this->obj_jc1 = '{"a_string": "\"he\":llo}:{world",
+                              // here is a comment, hoorah
+                              "an_array":[1, 2, 3],
+                              "obj": {"a_number":123}}';
+
+            $this->obj_jc2 = '/* this here is the sneetch */ "the sneetch"
+                              // this has been the sneetch.';
+
+            $this->obj_jc3 = '{"a_string": "\"he\":llo}:{world",
+                              /* here is a comment, hoorah */
+                              "an_array":[1, 2, 3 /* and here is another */],
+                              "obj": {"a_number":123}}';
+
+            $this->obj_jc4 = '{\'a_string\': "\"he\":llo}:{world",
+                              /* here is a comment, hoorah */
+                              \'an_array\':[1, 2, 3 /* and here is another */],
+                              "obj": {"a_number":123}}';
+        }
+
+        function test_spaces()
+        {
+            $this->assertEquals($this->json->decode($this->obj_j), $this->json->decode($this->obj_js), "checking whether notation with spaces works");
+        }
+
+        function test_comments()
+        {
+            $this->assertEquals($this->json->decode($this->obj_j), $this->json->decode($this->obj_jc1), "checking whether notation with single line comments works");
+            $this->assertEquals('the sneetch', $this->json->decode($this->obj_jc2), "checking whether notation with multiline comments works");
+            $this->assertEquals($this->json->decode($this->obj_j), $this->json->decode($this->obj_jc3), "checking whether notation with multiline comments works");
+            $this->assertEquals($this->json->decode($this->obj_j), $this->json->decode($this->obj_jc4), "checking whether notation with single-quotes and multiline comments works");
+        }
+    }
+
+    class Services_JSON_Empties_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_Empties_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json_l = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+            $this->json_s = new Services_JSON();
+
+            $this->obj0_j = '{}';
+            $this->arr0_j = '[]';
+
+            $this->obj1_j = '{ }';
+            $this->arr1_j = '[ ]';
+
+            $this->obj2_j = '{ /* comment inside */ }';
+            $this->arr2_j = '[ /* comment inside */ ]';
+        }
+
+        function test_type()
+        {
+            $this->assertEquals('array',   gettype($this->json_l->decode($this->arr0_j)), "should be array");
+            $this->assertEquals('object',  gettype($this->json_s->decode($this->obj0_j)), "should be object");
+
+            $this->assertEquals(0,  count($this->json_l->decode($this->arr0_j)), "should be empty array");
+            $this->assertEquals(0,  count(get_object_vars($this->json_s->decode($this->obj0_j))), "should be empty object");
+
+            $this->assertEquals('array',   gettype($this->json_l->decode($this->arr1_j)), "should be array, even with space");
+            $this->assertEquals('object',  gettype($this->json_s->decode($this->obj1_j)), "should be object, even with space");
+
+            $this->assertEquals(0,  count($this->json_l->decode($this->arr1_j)), "should be empty array, even with space");
+            $this->assertEquals(0,  count(get_object_vars($this->json_s->decode($this->obj1_j))), "should be empty object, even with space");
+
+            $this->assertEquals('array',   gettype($this->json_l->decode($this->arr2_j)), "should be array, despite comment");
+            $this->assertEquals('object',  gettype($this->json_s->decode($this->obj2_j)), "should be object, despite comment");
+
+            $this->assertEquals(0,  count($this->json_l->decode($this->arr2_j)), "should be empty array, despite comment");
+            $this->assertEquals(0,  count(get_object_vars($this->json_s->decode($this->obj2_j))), "should be empty object, despite commentt");
+        }
+    }
+
+    class Services_JSON_UnquotedKeys_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_UnquotedKeys_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+
+            $this->arn = array(0=> array(0=> 'tan', 'model' => 'sedan'), 1 => array(0 => 'red', 'model' => 'sports'));
+            $this->arn_ja = '[{0:"tan","model":"sedan"},{"0":"red",model:"sports"}]';
+            $this->arn_d = 'associative array with unquoted keys, nested associative arrays, and some numeric keys thrown in';
+
+            $this->arrs = array (1 => 'one', 2 => 'two', 5 => 'fi"ve');
+            $this->arrs_jo = '{"1":"one",2:"two","5":\'fi"ve\'}';
+            $this->arrs_d = 'associative array with unquoted keys, single-quoted values, numeric keys which are not fully populated in a range of 0 to length-1';
+        }
+
+        function test_from_JSON()
+        {
+            // ...unless the input array has some numeric indeces, in which case the behavior is to degrade to a regular array
+            $this->assertEquals($this->arn, $this->json->decode($this->arn_ja), "array case - strict: {$this->arn_d}");
+
+            // Test a sparsely populated numerically indexed associative array
+            $this->assertEquals($this->arrs, $this->json->decode($this->arrs_jo), "sparse numeric assoc array: {$this->arrs_d}");
+        }
+    }
+
+    class Services_JSON_ErrorSuppression_TestCase extends PHPUnit_TestCase {
+
+        function Services_JSON_ErrorSuppression_TestCase($name) {
+            $this->PHPUnit_TestCase($name);
+        }
+
+        function setUp() {
+            $this->json = new Services_JSON();
+            $this->json_ = new Services_JSON(SERVICES_JSON_SUPPRESS_ERRORS);
+
+            $this->res = tmpfile();
+            $this->res_j_ = 'null';
+            $this->res_d = 'naked resource';
+
+            $this->arr = array('a', 1, tmpfile());
+            $this->arr_j_ = '["a",1,null]';
+            $this->arr_d = 'array with string, number and resource';
+
+            $obj = new stdClass();
+            $obj->a_string = '"he":llo}:{world';
+            $obj->an_array = array(1, 2, 3);
+            $obj->resource = tmpfile();
+
+            $this->obj = $obj;
+            $this->obj_j_ = '{"a_string":"\"he\":llo}:{world","an_array":[1,2,3],"resource":null}';
+            $this->obj_d = 'object with properties, array, and nested resource';
+        }
+
+        function test_to_JSON()
+        {
+            $this->assertTrue(Services_JSON::isError($this->json->encode($this->res)), "resource case: {$this->res_d}");
+            $this->assertTrue(Services_JSON::isError($this->json->encode($this->arr)), "array case: {$this->arr_d}");
+            $this->assertTrue(Services_JSON::isError($this->json->encode($this->obj)), "object case: {$this->obj_d}");
+        }
+
+        function test_to_JSON_suppressed()
+        {
+            $this->assertEquals($this->res_j_, $this->json_->encode($this->res), "resource case: {$this->res_d}");
+            $this->assertEquals($this->arr_j_, $this->json_->encode($this->arr), "array case: {$this->arr_d}");
+            $this->assertEquals($this->obj_j_, $this->json_->encode($this->obj), "object case: {$this->obj_d}");
+        }
+    }
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_EncDec_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_AssocArray_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_NestedArray_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_Object_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_Spaces_Comments_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_Empties_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_UnquotedKeys_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+    $suite  = new PHPUnit_TestSuite('Services_JSON_ErrorSuppression_TestCase');
+    $result = PHPUnit::run($suite);
+    echo $result->toString();
+
+?>
Index: branches/beta/data/module/Services/JSON.php
===================================================================
--- branches/beta/data/module/Services/JSON.php	(revision 16825)
+++ branches/beta/data/module/Services/JSON.php	(revision 16825)
@@ -0,0 +1,806 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in  Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * @category
+ * @package     Services_JSON
+ * @author      Michal Migurski <mike-json@teczno.com>
+ * @author      Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright   2005 Michal Migurski
+ * @version     CVS: $Id: JSON.php 16259 2007-10-05 02:49:20Z adachi $
+ * @license     http://www.opensource.org/licenses/bsd-license.php
+ * @link        http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_SLICE',   1);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_STR',  2);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_ARR',  3);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_OBJ',  4);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_CMT', 5);
+
+/**
+ * Behavior switch for Services_JSON::decode()
+ */
+define('SERVICES_JSON_LOOSE_TYPE', 16);
+
+/**
+ * Behavior switch for Services_JSON::decode()
+ */
+define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * Brief example of use:
+ *
+ * <code>
+ * // create a new instance of Services_JSON
+ * $json = new Services_JSON();
+ *
+ * // convert a complexe value to JSON notation, and send it to the browser
+ * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
+ * $output = $json->encode($value);
+ *
+ * print($output);
+ * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
+ *
+ * // accept incoming POST data, assumed to be in JSON notation
+ * $input = file_get_contents('php://input', 1000000);
+ * $value = $json->decode($input);
+ * </code>
+ */
+class Services_JSON
+{
+   /**
+    * constructs a new JSON instance
+    *
+    * @param    int     $use    object behavior flags; combine with boolean-OR
+    *
+    *                           possible values:
+    *                           - SERVICES_JSON_LOOSE_TYPE:  loose typing.
+    *                                   "{...}" syntax creates associative arrays
+    *                                   instead of objects in decode().
+    *                           - SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
+    *                                   Values which can't be encoded (e.g. resources)
+    *                                   appear as NULL instead of throwing errors.
+    *                                   By default, a deeply-nested resource will
+    *                                   bubble up with an error, so all return values
+    *                                   from encode() should be checked with isError()
+    */
+    function Services_JSON($use = 0)
+    {
+        $this->use = $use;
+    }
+
+   /**
+    * convert a string from one UTF-16 char to one UTF-8 char
+    *
+    * Normally should be handled by mb_convert_encoding, but
+    * provides a slower PHP-only method for installations
+    * that lack the multibye string extension.
+    *
+    * @param    string  $utf16  UTF-16 character
+    * @return   string  UTF-8 character
+    * @access   private
+    */
+    function utf162utf8($utf16)
+    {
+        // oh please oh please oh please oh please oh please
+        if(function_exists('mb_convert_encoding')) {
+            return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
+        }
+
+        $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
+
+        switch(true) {
+            case ((0x7F & $bytes) == $bytes):
+                // this case should never be reached, because we are in ASCII range
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0x7F & $bytes);
+
+            case (0x07FF & $bytes) == $bytes:
+                // return a 2-byte UTF-8 character
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0xC0 | (($bytes >> 6) & 0x1F))
+                     . chr(0x80 | ($bytes & 0x3F));
+
+            case (0xFFFF & $bytes) == $bytes:
+                // return a 3-byte UTF-8 character
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0xE0 | (($bytes >> 12) & 0x0F))
+                     . chr(0x80 | (($bytes >> 6) & 0x3F))
+                     . chr(0x80 | ($bytes & 0x3F));
+        }
+
+        // ignoring UTF-32 for now, sorry
+        return '';
+    }
+
+   /**
+    * convert a string from one UTF-8 char to one UTF-16 char
+    *
+    * Normally should be handled by mb_convert_encoding, but
+    * provides a slower PHP-only method for installations
+    * that lack the multibye string extension.
+    *
+    * @param    string  $utf8   UTF-8 character
+    * @return   string  UTF-16 character
+    * @access   private
+    */
+    function utf82utf16($utf8)
+    {
+        // oh please oh please oh please oh please oh please
+        if(function_exists('mb_convert_encoding')) {
+            return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+        }
+
+        switch(strlen($utf8)) {
+            case 1:
+                // this case should never be reached, because we are in ASCII range
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return $utf8;
+
+            case 2:
+                // return a UTF-16 character from a 2-byte UTF-8 char
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0x07 & (ord($utf8{0}) >> 2))
+                     . chr((0xC0 & (ord($utf8{0}) << 6))
+                         | (0x3F & ord($utf8{1})));
+
+            case 3:
+                // return a UTF-16 character from a 3-byte UTF-8 char
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr((0xF0 & (ord($utf8{0}) << 4))
+                         | (0x0F & (ord($utf8{1}) >> 2)))
+                     . chr((0xC0 & (ord($utf8{1}) << 6))
+                         | (0x7F & ord($utf8{2})));
+        }
+
+        // ignoring UTF-32 for now, sorry
+        return '';
+    }
+
+   /**
+    * encodes an arbitrary variable into JSON format
+    *
+    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
+    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
+    *                           if var is a strng, note that encode() always expects it
+    *                           to be in ASCII or UTF-8 format!
+    *
+    * @return   mixed   JSON string representation of input var or an error if a problem occurs
+    * @access   public
+    */
+    function encode($var)
+    {
+        switch (gettype($var)) {
+            case 'boolean':
+                return $var ? 'true' : 'false';
+
+            case 'NULL':
+                return 'null';
+
+            case 'integer':
+                return (int) $var;
+
+            case 'double':
+            case 'float':
+                return (float) $var;
+
+            case 'string':
+                // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+                $ascii = '';
+                $strlen_var = strlen($var);
+
+               /*
+                * Iterate over every character in the string,
+                * escaping with a slash or encoding to UTF-8 where necessary
+                */
+                for ($c = 0; $c < $strlen_var; ++$c) {
+
+                    $ord_var_c = ord($var{$c});
+
+                    switch (true) {
+                        case $ord_var_c == 0x08:
+                            $ascii .= '\b';
+                            break;
+                        case $ord_var_c == 0x09:
+                            $ascii .= '\t';
+                            break;
+                        case $ord_var_c == 0x0A:
+                            $ascii .= '\n';
+                            break;
+                        case $ord_var_c == 0x0C:
+                            $ascii .= '\f';
+                            break;
+                        case $ord_var_c == 0x0D:
+                            $ascii .= '\r';
+                            break;
+
+                        case $ord_var_c == 0x22:
+                        case $ord_var_c == 0x2F:
+                        case $ord_var_c == 0x5C:
+                            // double quote, slash, slosh
+                            $ascii .= '\\'.$var{$c};
+                            break;
+
+                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+                            // characters U-00000000 - U-0000007F (same as ASCII)
+                            $ascii .= $var{$c};
+                            break;
+
+                        case (($ord_var_c & 0xE0) == 0xC0):
+                            // characters U-00000080 - U-000007FF, mask 110XXXXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+                            $c += 1;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xF0) == 0xE0):
+                            // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}));
+                            $c += 2;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xF8) == 0xF0):
+                            // characters U-00010000 - U-001FFFFF, mask 11110XXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}));
+                            $c += 3;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xFC) == 0xF8):
+                            // characters U-00200000 - U-03FFFFFF, mask 111110XX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}),
+                                         ord($var{$c + 4}));
+                            $c += 4;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xFE) == 0xFC):
+                            // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}),
+                                         ord($var{$c + 4}),
+                                         ord($var{$c + 5}));
+                            $c += 5;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+                    }
+                }
+
+                return '"'.$ascii.'"';
+
+            case 'array':
+               /*
+                * As per JSON spec if any array key is not an integer
+                * we must treat the the whole array as an object. We
+                * also try to catch a sparsely populated associative
+                * array with numeric keys here because some JS engines
+                * will create an array with empty indexes up to
+                * max_index which can cause memory issues and because
+                * the keys, which may be relevant, will be remapped
+                * otherwise.
+                *
+                * As per the ECMA and JSON specification an object may
+                * have any string as a property. Unfortunately due to
+                * a hole in the ECMA specification if the key is a
+                * ECMA reserved word or starts with a digit the
+                * parameter is only accessible using ECMAScript's
+                * bracket notation.
+                */
+
+                // treat as a JSON object
+                if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+                    $properties = array_map(array($this, 'name_value'),
+                                            array_keys($var),
+                                            array_values($var));
+
+                    foreach($properties as $property) {
+                        if(Services_JSON::isError($property)) {
+                            return $property;
+                        }
+                    }
+
+                    return '{' . join(',', $properties) . '}';
+                }
+
+                // treat it like a regular array
+                $elements = array_map(array($this, 'encode'), $var);
+
+                foreach($elements as $element) {
+                    if(Services_JSON::isError($element)) {
+                        return $element;
+                    }
+                }
+
+                return '[' . join(',', $elements) . ']';
+
+            case 'object':
+                $vars = get_object_vars($var);
+
+                $properties = array_map(array($this, 'name_value'),
+                                        array_keys($vars),
+                                        array_values($vars));
+
+                foreach($properties as $property) {
+                    if(Services_JSON::isError($property)) {
+                        return $property;
+                    }
+                }
+
+                return '{' . join(',', $properties) . '}';
+
+            default:
+                return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
+                    ? 'null'
+                    : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
+        }
+    }
+
+   /**
+    * array-walking function for use in generating JSON-formatted name-value pairs
+    *
+    * @param    string  $name   name of key to use
+    * @param    mixed   $value  reference to an array element to be encoded
+    *
+    * @return   string  JSON-formatted name-value pair, like '"name":value'
+    * @access   private
+    */
+    function name_value($name, $value)
+    {
+        $encoded_value = $this->encode($value);
+
+        if(Services_JSON::isError($encoded_value)) {
+            return $encoded_value;
+        }
+
+        return $this->encode(strval($name)) . ':' . $encoded_value;
+    }
+
+   /**
+    * reduce a string by removing leading and trailing comments and whitespace
+    *
+    * @param    $str    string      string value to strip of comments and whitespace
+    *
+    * @return   string  string value stripped of comments and whitespace
+    * @access   private
+    */
+    function reduce_string($str)
+    {
+        $str = preg_replace(array(
+
+                // eliminate single line comments in '// ...' form
+                '#^\s*//(.+)$#m',
+
+                // eliminate multi-line comments in '/* ... */' form, at start of string
+                '#^\s*/\*(.+)\*/#Us',
+
+                // eliminate multi-line comments in '/* ... */' form, at end of string
+                '#/\*(.+)\*/\s*$#Us'
+
+            ), '', $str);
+
+        // eliminate extraneous space
+        return trim($str);
+    }
+
+   /**
+    * decodes a JSON string into appropriate variable
+    *
+    * @param    string  $str    JSON-formatted string
+    *
+    * @return   mixed   number, boolean, string, array, or object
+    *                   corresponding to given JSON input string.
+    *                   See argument 1 to Services_JSON() above for object-output behavior.
+    *                   Note that decode() always returns strings
+    *                   in ASCII or UTF-8 format!
+    * @access   public
+    */
+    function decode($str)
+    {
+        $str = $this->reduce_string($str);
+
+        switch (strtolower($str)) {
+            case 'true':
+                return true;
+
+            case 'false':
+                return false;
+
+            case 'null':
+                return null;
+
+            default:
+                $m = array();
+
+                if (is_numeric($str)) {
+                    // Lookie-loo, it's a number
+
+                    // This would work on its own, but I'm trying to be
+                    // good about returning integers where appropriate:
+                    // return (float)$str;
+
+                    // Return float or int, as appropriate
+                    return ((float)$str == (integer)$str)
+                        ? (integer)$str
+                        : (float)$str;
+
+                } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
+                    // STRINGS RETURNED IN UTF-8 FORMAT
+                    $delim = substr($str, 0, 1);
+                    $chrs = substr($str, 1, -1);
+                    $utf8 = '';
+                    $strlen_chrs = strlen($chrs);
+
+                    for ($c = 0; $c < $strlen_chrs; ++$c) {
+
+                        $substr_chrs_c_2 = substr($chrs, $c, 2);
+                        $ord_chrs_c = ord($chrs{$c});
+
+                        switch (true) {
+                            case $substr_chrs_c_2 == '\b':
+                                $utf8 .= chr(0x08);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\t':
+                                $utf8 .= chr(0x09);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\n':
+                                $utf8 .= chr(0x0A);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\f':
+                                $utf8 .= chr(0x0C);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\r':
+                                $utf8 .= chr(0x0D);
+                                ++$c;
+                                break;
+
+                            case $substr_chrs_c_2 == '\\"':
+                            case $substr_chrs_c_2 == '\\\'':
+                            case $substr_chrs_c_2 == '\\\\':
+                            case $substr_chrs_c_2 == '\\/':
+                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+                                   ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+                                    $utf8 .= $chrs{++$c};
+                                }
+                                break;
+
+                            case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
+                                // single, escaped unicode character
+                                $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
+                                       . chr(hexdec(substr($chrs, ($c + 4), 2)));
+                                $utf8 .= $this->utf162utf8($utf16);
+                                $c += 5;
+                                break;
+
+                            case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
+                                $utf8 .= $chrs{$c};
+                                break;
+
+                            case ($ord_chrs_c & 0xE0) == 0xC0:
+                                // characters U-00000080 - U-000007FF, mask 110XXXXX
+                                //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 2);
+                                ++$c;
+                                break;
+
+                            case ($ord_chrs_c & 0xF0) == 0xE0:
+                                // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 3);
+                                $c += 2;
+                                break;
+
+                            case ($ord_chrs_c & 0xF8) == 0xF0:
+                                // characters U-00010000 - U-001FFFFF, mask 11110XXX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 4);
+                                $c += 3;
+                                break;
+
+                            case ($ord_chrs_c & 0xFC) == 0xF8:
+                                // characters U-00200000 - U-03FFFFFF, mask 111110XX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 5);
+                                $c += 4;
+                                break;
+
+                            case ($ord_chrs_c & 0xFE) == 0xFC:
+                                // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 6);
+                                $c += 5;
+                                break;
+
+                        }
+
+                    }
+
+                    return $utf8;
+
+                } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+                    // array, or object notation
+
+                    if ($str{0} == '[') {
+                        $stk = array(SERVICES_JSON_IN_ARR);
+                        $arr = array();
+                    } else {
+                        if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                            $stk = array(SERVICES_JSON_IN_OBJ);
+                            $obj = array();
+                        } else {
+                            $stk = array(SERVICES_JSON_IN_OBJ);
+                            $obj = new stdClass();
+                        }
+                    }
+
+                    array_push($stk, array('what'  => SERVICES_JSON_SLICE,
+                                           'where' => 0,
+                                           'delim' => false));
+
+                    $chrs = substr($str, 1, -1);
+                    $chrs = $this->reduce_string($chrs);
+
+                    if ($chrs == '') {
+                        if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                            return $arr;
+
+                        } else {
+                            return $obj;
+
+                        }
+                    }
+
+                    //print("\nparsing {$chrs}\n");
+
+                    $strlen_chrs = strlen($chrs);
+
+                    for ($c = 0; $c <= $strlen_chrs; ++$c) {
+
+                        $top = end($stk);
+                        $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+                        if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
+                            // found a comma that is not inside a string, array, etc.,
+                            // OR we've reached the end of the character list
+                            $slice = substr($chrs, $top['where'], ($c - $top['where']));
+                            array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+                            //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                            if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                                // we are in an array, so just push an element onto the stack
+                                array_push($arr, $this->decode($slice));
+
+                            } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+                                // we are in an object, so figure
+                                // out the property name and set an
+                                // element in an associative array,
+                                // for now
+                                $parts = array();
+                                
+                                if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                    // "name":value pair
+                                    $key = $this->decode($parts[1]);
+                                    $val = $this->decode($parts[2]);
+
+                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                                        $obj[$key] = $val;
+                                    } else {
+                                        $obj->$key = $val;
+                                    }
+                                } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                    // name:value pair, where name is unquoted
+                                    $key = $parts[1];
+                                    $val = $this->decode($parts[2]);
+
+                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                                        $obj[$key] = $val;
+                                    } else {
+                                        $obj->$key = $val;
+                                    }
+                                }
+
+                            }
+
+                        } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
+                            // found a quote, and we are not inside a string
+                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+                            //print("Found start of string at {$c}\n");
+
+                        } elseif (($chrs{$c} == $top['delim']) &&
+                                 ($top['what'] == SERVICES_JSON_IN_STR) &&
+                                 ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
+                            // found a quote, we're in a string, and it's not escaped
+                            // we know that it's not escaped becase there is _not_ an
+                            // odd number of backslashes at the end of the string so far
+                            array_pop($stk);
+                            //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
+
+                        } elseif (($chrs{$c} == '[') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a left-bracket, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
+                            //print("Found start of array at {$c}\n");
+
+                        } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
+                            // found a right-bracket, and we're in an array
+                            array_pop($stk);
+                            //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        } elseif (($chrs{$c} == '{') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a left-brace, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+                            //print("Found start of object at {$c}\n");
+
+                        } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
+                            // found a right-brace, and we're in an object
+                            array_pop($stk);
+                            //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        } elseif (($substr_chrs_c_2 == '/*') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a comment start, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
+                            $c++;
+                            //print("Found start of comment at {$c}\n");
+
+                        } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
+                            // found a comment end, and we're in one now
+                            array_pop($stk);
+                            $c++;
+
+                            for ($i = $top['where']; $i <= $c; ++$i)
+                                $chrs = substr_replace($chrs, ' ', $i, 1);
+
+                            //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        }
+
+                    }
+
+                    if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                        return $arr;
+
+                    } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+                        return $obj;
+
+                    }
+
+                }
+        }
+    }
+
+    /**
+     * @todo Ultimately, this should just call PEAR::isError()
+     */
+    function isError($data, $code = null)
+    {
+        if (class_exists('pear')) {
+            return PEAR::isError($data, $code);
+        } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
+                                 is_subclass_of($data, 'services_json_error'))) {
+            return true;
+        }
+
+        return false;
+    }
+}
+
+if (class_exists('PEAR_Error')) {
+
+    class Services_JSON_Error extends PEAR_Error
+    {
+        function Services_JSON_Error($message = 'unknown error', $code = null,
+                                     $mode = null, $options = null, $userinfo = null)
+        {
+            parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
+        }
+    }
+
+} else {
+
+    /**
+     * @todo Ultimately, this class shall be descended from PEAR_Error
+     */
+    class Services_JSON_Error
+    {
+        function Services_JSON_Error($message = 'unknown error', $code = null,
+                                     $mode = null, $options = null, $userinfo = null)
+        {
+
+        }
+    }
+
+}
+    
+?>
