<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>build.properties</filename>
    </added>
    <added>
      <filename>dist/env-js.jar</filename>
    </added>
    <added>
      <filename>rhino/htmlcleaner2_1.jar</filename>
    </added>
    <added>
      <filename>rhino/src/META-INF/MANIFEST.MF</filename>
    </added>
    <added>
      <filename>rhino/src/org/mozilla/javascript/tools/envjs/Global.java</filename>
    </added>
    <added>
      <filename>rhino/src/org/mozilla/javascript/tools/envjs/Main.java</filename>
    </added>
    <added>
      <filename>rhino/src/org/mozilla/javascript/tools/envjs/Window.java</filename>
    </added>
    <added>
      <filename>src/build.js</filename>
    </added>
    <added>
      <filename>test/vendor/Prototype/.gitignore</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,6 @@
 dist/env.*.*.*.js
 dist/env.rhino.*.*.*.js
+dist/env-js.*.jar
 *~
 rhino/build
+jshost</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-JAR = java -jar rhino/js.jar
+JAR = java -jar dist/env-js.jar
 
 test-rhino:
 	ant -emacs test</diff>
      <filename>Makefile</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,9 @@
 task :default =&gt; [:test]
 
 task :test do
-  classpath = [File.join(&quot;.&quot;, &quot;rhino&quot;, &quot;ant.jar&quot;), File.join(&quot;.&quot;, &quot;rhino&quot;, &quot;ant-launcher.jar&quot;)].join(File::PATH_SEPARATOR)
+  classpath = [
+  	File.join(&quot;.&quot;, &quot;rhino&quot;, &quot;ant.jar&quot;), 
+  	File.join(&quot;.&quot;, &quot;rhino&quot;, &quot;ant-launcher.jar&quot;)
+  ].join(File::PATH_SEPARATOR)
   exec &quot;java -cp #{classpath} org.apache.tools.ant.Main -emacs all&quot;
 end</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,7 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;project name=&quot;Env&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;
     &lt;description&gt;Builds, tests, and runs the project Env.&lt;/description&gt;
-    &lt;property name=&quot;BUILD_MAJOR&quot;    value=&quot;0&quot; /&gt;
-    &lt;property name=&quot;BUILD_MINOR&quot;    value=&quot;9&quot; /&gt;
-    &lt;property name=&quot;BUILD_ID&quot;       value=&quot;7&quot; /&gt;
+    &lt;tstamp/&gt;
     
     &lt;property name=&quot;SRC_DIR&quot;        
             location=&quot;src&quot;           
@@ -28,6 +26,9 @@
             location=&quot;${PREFIX}/&quot;             
             description=&quot;Folder for concatenated, min, lite and packed target&quot; /&gt;
 
+    
+    &lt;property file=&quot;build.properties&quot;/&gt;
+    
     &lt;!-- Files names for distribution --&gt;
     &lt;property name=&quot;ENV_DIST&quot;  
             location=&quot;${DIST_DIR}/env.${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}.js&quot; /&gt;
@@ -49,6 +50,12 @@
           &lt;!-- CORE --&gt;
         &lt;echo message=&quot;Building ${ENV_DIST}&quot; /&gt;
         &lt;concat destfile=&quot;${ENV_DIST}&quot;&gt;
+            &lt;filterchain&gt;    
+                &lt;replacetokens&gt;
+                    &lt;token key=&quot;VERSION&quot; value=&quot;${BUILD}&quot;/&gt;
+                &lt;/replacetokens&gt;
+            &lt;/filterchain&gt;
+            &lt;fileset dir=&quot;${SRC_DIR}&quot; includes=&quot;build.js&quot; /&gt;
             &lt;fileset dir=&quot;${SRC_DIR}&quot; includes=&quot;intro.js&quot; /&gt;
             &lt;fileset dir=&quot;${SRC_DIR}&quot; includes=&quot;window/window.js&quot; /&gt;
             &lt;fileset dir=&quot;${SRC_DIR}&quot; includes=&quot;platform/xmlsax.js&quot; /&gt;
@@ -144,6 +151,12 @@
         &lt;!-- RHINO --&gt;
         &lt;echo message=&quot;Building ${ENV_RHINO}&quot; /&gt;
         &lt;concat destfile=&quot;${ENV_RHINO}&quot;&gt;
+            &lt;filterchain&gt;    
+                &lt;replacetokens&gt;
+                    &lt;token key=&quot;VERSION&quot; value=&quot;${BUILD}&quot;/&gt;
+                &lt;/replacetokens&gt;
+            &lt;/filterchain&gt;
+            &lt;fileset dir=&quot;${SRC_DIR}&quot;  includes=&quot;build.js&quot; /&gt;
             &lt;fileset dir=&quot;${SRC_DIR}&quot;  includes=&quot;platform/core.js&quot; /&gt;
             &lt;fileset dir=&quot;${SRC_DIR}&quot;  includes=&quot;platform/rhino.js&quot; /&gt;
             &lt;fileset dir=&quot;${DIST_DIR}&quot; includes=&quot;env.js&quot; /&gt;
@@ -153,7 +166,7 @@
     &lt;/target&gt;
     
     &lt;target name=&quot;test&quot; description=&quot;Run the tests&quot;&gt;
-      &lt;java fork=&quot;true&quot; jar=&quot;rhino/env.js.jar&quot; failonerror=&quot;true&quot;&gt;
+      &lt;java fork=&quot;true&quot; jar=&quot;${DIST_DIR}/env-js.jar&quot; failonerror=&quot;true&quot;&gt;
         &lt;arg value=&quot;test/test.js&quot;/&gt;
         &lt;jvmarg value=&quot;-Dfile.encoding=utf-8&quot;/&gt;
       &lt;/java&gt;</diff>
      <filename>build.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,23 @@
 /*
+ * Envjs env-js.1.0.rc1 
  * Pure JavaScript Browser Environment
  *   By John Resig &lt;http://ejohn.org/&gt;
- * Copyright 2008 John Resig, under the MIT License
+ * Copyright 2008-2009 John Resig, under the MIT License
  */
 
 
 try {
-        // this goes into the global namespace, but less likely to collide with
-        //   client JS code than methods in Rhino shell (load, print, etc.)
-    this.__proto__._$envjs$makeObjectIntoWindow$_ = function($w, $env,
-                                                             $parentWindow,
-                                                             $initTop){
-
-        // The Window Object
-        var __this__ = $w;
-        $w.__defineGetter__('window', function(){
-            return __this__;
-        });
+        
+    Envjs.window = function($w, 
+                            $env,
+                            $parentWindow,
+                            $initTop){
+
+    // The Window Object
+    var __this__ = $w;
+    $w.__defineGetter__('window', function(){
+        return __this__;
+    });
 
 /*
 *	window.js
@@ -3546,61 +3547,7 @@ var $handleEndOfNormalOrEmptyElement = function(node, doc, p){
         if (node.src &amp;&amp; node.src.length &gt; 0){
             $debug(&quot;getting content document for (i)frame from &quot; + node.src);
 
-            // create a new global/window object, such that its methods and
-            //   objects are defined within the scope of the new global.
-            //   Then load content from .src into it
-            try {
-
-        /* this code semi-duplicated in html/frame.js -- sorry */
-                // a blank object, pre-configured to inherit original global
-                //                   vvvv from EnvjsRhinoSupraGlobal.java
-                var frameWindow = createAGlobalObject();
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us a scope that's easy to change
-                var mkAndLoadNewWindow   = function(){
-                  localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                    localCopy_window, localCopy_window.top);
-                  node._content = frameWindow;
-                  frameWindow.location = node.src;
-                }
-
-
-
-                // change scope of window object creation functions, so that
-                //   functions/code they create will be scoped to new window
-                    // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                                        oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + node.src, e);
-            }
+            $env.loadFrame(node, $env.location(node.src));
 
             var event = doc.createEvent();
             event.initEvent(&quot;load&quot;);
@@ -5129,6 +5076,262 @@ __extend__(HTMLDocument.prototype, {
 });
 
 $w.HTMLDocument = HTMLDocument;
+$debug(&quot;Defining HTMLElement&quot;);
+/*
+* HTMLElement - DOM Level 2
+*/
+var HTMLElement = function(ownerDocument) {
+    this.DOMElement = DOMElement;
+    this.DOMElement(ownerDocument);
+    
+    this.$css2props = null;
+};
+HTMLElement.prototype = new DOMElement;
+__extend__(HTMLElement.prototype, {
+		get className() { 
+		    return this.getAttribute(&quot;class&quot;)||&quot;&quot;; 
+		    
+	    },
+		set className(val) { 
+		    return this.setAttribute(&quot;class&quot;,trim(val)); 
+		    
+	    },
+		get dir() { 
+		    return this.getAttribute(&quot;dir&quot;)||&quot;ltr&quot;; 
+		    
+	    },
+		set dir(val) { 
+		    return this.setAttribute(&quot;dir&quot;,val); 
+		    
+	    },
+		get id(){  
+		    return this.getAttribute('id')||''; 
+		    
+	    },
+		set id(id){  
+		    this.setAttribute('id', id); 
+            
+	    },
+		get innerHTML(){  
+		    return this.childNodes.xml; 
+		    
+	    },
+		set innerHTML(html){
+		    //$debug(&quot;htmlElement.innerHTML(&quot;+html+&quot;)&quot;);
+		    //Should be replaced with HTMLPARSER usage
+		    var doc = new DOMParser().
+			  parseFromString('&lt;div&gt;'+html+'&lt;/div&gt;');
+            var parent = doc.documentElement;
+			while(this.firstChild != null){
+			    this.removeChild( this.firstChild );
+			}
+			var importedNode;
+			while(parent.firstChild != null){
+	            importedNode = this.importNode( 
+	                parent.removeChild( parent.firstChild ), true);
+			    this.appendChild( importedNode );   
+		    }
+		    //Mark for garbage collection
+		    doc = null;
+		},
+		get lang() { 
+		    return this.getAttribute(&quot;lang&quot;)||&quot;&quot;; 
+		    
+	    },
+		set lang(val) { 
+		    return this.setAttribute(&quot;lang&quot;,val); 
+		    
+	    },
+		get offsetHeight(){
+		    return Number(this.style[&quot;height&quot;].replace(&quot;px&quot;,&quot;&quot;));
+		},
+		get offsetWidth(){
+		    return Number(this.style[&quot;width&quot;].replace(&quot;px&quot;,&quot;&quot;));
+		},
+		offsetLeft: 0,
+		offsetRight: 0,
+		get offsetParent(){
+		    /* TODO */
+		    return;
+	    },
+		set offsetParent(element){
+		    /* TODO */
+		    return;
+	    },
+		scrollHeight: 0,
+		scrollWidth: 0,
+		scrollLeft: 0, 
+		scrollRight: 0,
+		get style(){
+		    if(this.$css2props === null){
+		        this.updateCss2Props();
+	        }
+	        return this.$css2props
+		},
+		updateCss2Props: function() {
+			this.$css2props = new CSS2Properties({
+				onSet: (function(that) {
+					return function() { that.__setAttribute(&quot;style&quot;, this.cssText); }
+				})(this),
+				cssText:this.getAttribute(&quot;style&quot;)
+			});
+		},
+		__setAttribute: HTMLElement.prototype.setAttribute,
+		setAttribute: function (name, value) {
+		    this.__setAttribute(name, value);
+		    if (name === &quot;style&quot;) {
+		        this.updateCss2Props();
+		    }
+		},
+		get title() { 
+		    return this.getAttribute(&quot;title&quot;)||&quot;&quot;; 
+		    
+	    },
+		set title(val) { 
+		    return this.setAttribute(&quot;title&quot;,val); 
+		    
+	    },
+		//Not in the specs but I'll leave it here for now.
+		get outerHTML(){ 
+		    return this.xml; 
+		    
+	    },
+	    scrollIntoView: function(){
+	        /*TODO*/
+	        return;
+	    
+        },
+
+		onclick: function(event){
+		    __eval__(this.getAttribute('onclick')||'', this)
+	    },
+        // non-ECMA function, but no other way for click events to enter env.js
+        __click__: function(element){
+            var event = new Event({
+              target:element,
+              currentTarget:element
+            });
+            event.initEvent(&quot;click&quot;);
+            element.dispatchEvent(event);
+        },
+
+		ondblclick: function(event){
+            __eval__(this.getAttribute('ondblclick')||'', this);
+	    },
+		onkeydown: function(event){
+            __eval__(this.getAttribute('onkeydown')||'', this);
+	    },
+		onkeypress: function(event){
+            __eval__(this.getAttribute('onkeypress')||'', this);
+	    },
+		onkeyup: function(event){
+            __eval__(this.getAttribute('onkeyup')||'', this);
+	    },
+		onmousedown: function(event){
+            __eval__(this.getAttribute('onmousedown')||'', this);
+	    },
+		onmousemove: function(event){
+            __eval__(this.getAttribute('onmousemove')||'', this);
+	    },
+		onmouseout: function(event){
+            __eval__(this.getAttribute('onmouseout')||'', this);
+	    },
+		onmouseover: function(event){
+            __eval__(this.getAttribute('onmouseover')||'', this);
+	    },
+		onmouseup: function(event){
+            __eval__(this.getAttribute('onmouseup')||'', this);
+	    }
+});
+
+var __eval__ = function(script, startingNode){
+    if (script == &quot;&quot;)
+        return;                    // don't assemble environment if no script...
+
+    try{
+        var doEval = function(scriptText){
+            eval(scriptText);
+        }
+
+        var listOfScopes = [];
+        for (var node = startingNode; node != null; node = node.parentNode)
+            listOfScopes.push(node);
+        listOfScopes.push(window);
+
+
+        var oldScopesArray = $env.configureScope(
+          doEval,        // the function whose scope chain to change
+          listOfScopes); // last array element is &quot;head&quot; of new chain
+        doEval.call(startingNode, script);
+        $env.restoreScope(oldScopesArray);
+                         // oldScopesArray is N-element array of two-element
+                         // arrays.  First element is JS object whose scope
+                         // was modified, second is original value to restore.
+    }catch(e){
+        $error(e);
+    }
+};
+
+var __registerEventAttrs__ = function(elm){
+    if(elm.hasAttribute('onclick')){ 
+        elm.addEventListener('click', elm.onclick ); 
+    }
+    if(elm.hasAttribute('ondblclick')){ 
+        elm.addEventListener('dblclick', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeydown')){ 
+        elm.addEventListener('keydown', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeypress')){ 
+        elm.addEventListener('keypress', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeyup')){ 
+        elm.addEventListener('keyup', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmousedown')){ 
+        elm.addEventListener('mousedown', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmousemove')){ 
+        elm.addEventListener('mousemove', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseout')){ 
+        elm.addEventListener('mouseout', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseover')){ 
+        elm.addEventListener('mouseover', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseup')){ 
+        elm.addEventListener('mouseup', elm.onclick ); 
+    }
+    return elm;
+};
+	
+var __submit__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;submit&quot;);
+	element.dispatchEvent(event);
+};
+var __focus__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;focus&quot;);
+	element.dispatchEvent(event);
+};
+var __blur__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;blur&quot;);
+	element.dispatchEvent(event);
+};
+
+$w.HTMLElement = HTMLElement;
 $debug(&quot;Defining HTMLCollection&quot;);
 /*
 * HTMLCollection - DOM Level 2
@@ -5810,70 +6013,8 @@ __extend__(HTMLFrameElement.prototype, {
         this.setAttribute('src', value);
 
         if (value &amp;&amp; value.length &gt; 0){
-            try {
-
-        /* this code semi-duplicated in dom/implementation.js -- sorry */
-                var frameWindow;
-                var makingNewWinFlag = !(this._content);
-                if (makingNewWinFlag)
-                            // a blank object, inherits from original global
-                                  //  v EnvjsRhinoSupraGlobal.java
-                    frameWindow = createAGlobalObject();
-                else
-                    frameWindow = this._content;
-
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us something whose scope
-                //   is easy to change
-                var mkAndLoadNewWindow   = function(){
-                    if (makingNewWinFlag){
-                        localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                          localCopy_window,
-                                          localCopy_window.top);
-                    }
-
-                    frameWindow.location = value;
-                }
-
-
-                // change scope of window object creation
-                //   functions, so that functions/code they create
-                //   will be scoped to new window object
-        // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-                this._content = frameWindow;
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                  oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + value, e);
-            }
-
+            $env.loadFrame(this, $env.location(value));
+            
             var event = document.createEvent();
             event.initEvent(&quot;load&quot;);
             this.dispatchEvent( event, false );
@@ -10059,12 +10200,12 @@ try{
 */
 
 
-    };        // close function definition begun in 'intro.js'
+    };// close function definition begun in 'intro.js'
 
 
-        // turn &quot;original&quot; JS interpreter global object into the
-        //   &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
-    _$envjs$makeObjectIntoWindow$_(this, Envjs, null, this);
+    // turn &quot;original&quot; JS interpreter global object into the
+    // &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
+    Envjs.window(this, Envjs, null, this);
 
 } catch(e){
     Envjs.error(&quot;ERROR LOADING ENV : &quot; + e + &quot;\nLINE SOURCE:\n&quot; +</diff>
      <filename>dist/env.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,9 @@
+/*
+ * Envjs env-js.1.0.rc1 
+ * Pure JavaScript Browser Environment
+ *   By John Resig &lt;http://ejohn.org/&gt;
+ * Copyright 2008-2009 John Resig, under the MIT License
+ */
 /**
  * @author thatcher
  */
@@ -92,6 +98,8 @@ var Envjs = function(){
     $env.lang           = ''; 
     $env.platform       = &quot;Rhino &quot;;//how do we get the version
     
+    $env.load = function(){};
+    
     $env.safeScript = function(){
       //do nothing  
     };
@@ -160,6 +168,79 @@ var Envjs = function(){
     
     $env.loadInlineScript = function(script){};
     
+    
+    $env.globalize = function(){};
+    $env.getScope = function(){};
+    $env.setScope = function(){};
+    $env.configureScope = function(){};
+    $env.restoreScope = function(){};
+    $env.loadFrame = function(frame, url){
+        try {
+
+            /* this code semi-duplicated in dom/implementation.js -- sorry */
+            var frameWindow,
+            	makingNewWinFlag = !(frame._content);
+            if (makingNewWinFlag)
+                // a blank object, inherits from original global
+                // see org.mozilla.javascript.tools.envjs.Window.java
+                frameWindow = $env.globalize();
+            else
+                frameWindow = frame._content;
+
+
+            // define local variables with content of things that are
+            // in current global/window, because when the following
+            // function executes we'll have a new/blank
+            // global/window and won't be able to get at them....
+            var local__window__    = $env.window,
+            	local_env          = $env,
+            	local_window       = window;
+
+            // a local function gives us something whose scope
+            // is easy to change
+            var __frame__   = function(){
+                if (makingNewWinFlag){
+                    local__window__(frameWindow, 
+                                    local_env,
+                                    local_window,
+                                    local_window.top);
+                }
+
+                frameWindow.location = url;
+            }
+
+
+            // change scope of window object creation
+            //   functions, so that functions/code they create
+            //   will be scoped to new window object
+            // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
+            var scopes = {
+                frame : $env.getScope(__frame__),
+                window : $env.getScope(local__window__),
+                global_load: $env.getScope(load),
+                local_load: $env.getScope($env.loadLocalScript)
+            };
+
+            $env.setScope(__frame__,             frameWindow);
+            $env.setScope(local__window__,       frameWindow);
+            $env.setScope($env.load,             frameWindow);
+            $env.setScope($env.loadLocalScript,  frameWindow);
+
+            __frame__();
+            frame._content = frameWindow;
+
+            // now restore the scope
+            $env.setScope(__frame__, scopes.frame);
+            $env.setScope(local__window__, scopes.window);
+            $env.setScope($env.load, scopes.global_load);
+            $env.setScope($env.loadLocalScript, scopes.local_load);
+            
+        } catch(e){
+            $env.error(&quot;failed to load frame content: from &quot; + url, e);
+        }
+
+    };
+    
 })(Envjs);/*
 *	env.rhino.js
 */
@@ -199,60 +280,60 @@ var Envjs = function(){
     var timers = [];
 
     $env.timer = function(fn, interval){
-	this.fn = fn;
-	this.interval = interval;
-	this.at = Date.now() + interval;
-	this.index = timers.length;
-	timers[this.index] = this;
+    	this.fn = fn;
+    	this.interval = interval;
+    	this.at = Date.now() + interval;
+    	this.index = timers.length;
+    	timers[this.index] = this;
     };	
 
     $env.timer.prototype.start = function(){};
     $env.timer.prototype.stop = function(){
-	delete timers[this.index];
+	    delete timers[this.index];
     };
 
     // wait === null: execute any immediately runnable timers and return
     // wait(n) (n &gt; 0): execute any timers as they fire but no longer than n ms
     // wait(0): execute any timers as they fire, waiting until there are none left
     $env.wait = function(wait) {
-	var i;
-	var empty;
-	var after;
-	var now;
-	var timer;
-	var sleep;
-	if (wait !== 0 &amp;&amp; wait !== null &amp;&amp; wait !== undefined){
-	    wait += Date.now();
-	}
-	for (;;) {
-	    for (i in timers){
-		timer = timers[i];
-		now = Date.now();
-		if (timer.at &lt;= now){
-		    f = timer.fn;
-		    f();
-		    timer.at += timer.interval;
-		}
-	    }
-	    empty = true;
-	    sleep = null;
-	    now = Date.now();
-	    for (i in timers){
-		empty = false;
-		timer = timers[i];
-		after = timer.at - now
-		sleep = (sleep === null || after &lt; sleep) ? after : sleep;
-	    }
-	    sleep = sleep &lt; 0 ? 0 : sleep;
-	    if (empty ||
-                ( wait !== 0 ) &amp;&amp;
-                 ( ( sleep &gt; 0 &amp;&amp; !wait ) || ( Date.now() + sleep &gt; wait ) ) ) {
-		break;
-	    }
-	    if (sleep) {
-		java.lang.Thread.currentThread().sleep(sleep);
-	    }
-	}
+    	var i;
+    	var empty;
+    	var after;
+    	var now;
+    	var timer;
+    	var sleep;
+    	if (wait !== 0 &amp;&amp; wait !== null &amp;&amp; wait !== undefined){
+    	    wait += Date.now();
+    	}
+    	for (;;) {
+    	    for (i in timers){
+        		timer = timers[i];
+        		now = Date.now();
+        		if (timer.at &lt;= now){
+        		    f = timer.fn;
+        		    f();
+        		    timer.at += timer.interval;
+        		}
+    	    }
+    	    empty = true;
+    	    sleep = null;
+    	    now = Date.now();
+    	    for (i in timers){
+        		empty = false;
+        		timer = timers[i];
+        		after = timer.at - now
+        		sleep = (sleep === null || after &lt; sleep) ? after : sleep;
+	        }
+    	    sleep = sleep &lt; 0 ? 0 : sleep;
+    	    if (empty ||
+                    ( wait !== 0 ) &amp;&amp;
+                     ( ( sleep &gt; 0 &amp;&amp; !wait ) || ( Date.now() + sleep &gt; wait ) ) ) {
+    		    break;
+    	    }
+    	    if (sleep) {
+    		    java.lang.Thread.currentThread().sleep(sleep);
+    	    }
+    	}
     };
 
     //Since we're running in rhino I guess we can safely assume
@@ -382,7 +463,7 @@ var Envjs = function(){
                 
         }
         if(responseHandler){
-          responseHandler();
+            responseHandler();
         }
     };
     
@@ -390,27 +471,66 @@ var Envjs = function(){
     htmlDocBuilder.setNamespaceAware(false);
     htmlDocBuilder.setValidating(false);
     
+    var htmlCleaner,
+        cleanDomSerializer,
+        cleanProperties;
     $env.parseHTML = function(htmlstring){
-        return htmlDocBuilder.newDocumentBuilder().parse(
+        var domdoc;//what's up dom doc?
+        if($env.cleanHTML){
+            htmlCleaner = htmlCleaner||new org.htmlcleaner.HtmlCleaner();
+            cleanDomSerializer = cleanDomSerializer||new org.htmlcleaner.DomSerializer();
+            cleanProperties = cleanProperties||new org.htmlcleaner.CleanerProperties();
+            domdoc = org.htmlcleaner.DomSerializer.createDOM(htmlCleaner.clean(htmlstring));
+        }else{
+            domdoc =  htmlDocBuilder.newDocumentBuilder().parse(
                   new java.io.ByteArrayInputStream(
-                        (new java.lang.String(htmlstring)).getBytes(&quot;UTF8&quot;)))+&quot;&quot;;
+                        (new java.lang.String(htmlstring)).getBytes(&quot;UTF8&quot;)));
+        }
+        return domdoc;
     };
     
     var xmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
     xmlDocBuilder.setNamespaceAware(true);
-    xmlDocBuilder.setValidating(true);
+    xmlDocBuilder.setValidating(false);
     
     $env.parseXML = function(xmlstring){
         return xmlDocBuilder.newDocumentBuilder().parse(
                   new java.io.ByteArrayInputStream(
-                        (new java.lang.String(xmlstring)).getBytes(&quot;UTF8&quot;)))+&quot;&quot;;
+                        (new java.lang.String(xmlstring)).getBytes(&quot;UTF8&quot;)));
     };
     
     
     $env.xpath = function(expression, doc){
-    return Packages.javax.xml.xpath.
-      XPathFactory.newInstance().newXPath().
-        evaluate(expression, doc, javax.xml.xpath.XPathConstants.NODESET);
+        return Packages.javax.xml.xpath.
+          XPathFactory.newInstance().newXPath().
+            evaluate(expression, doc, javax.xml.xpath.XPathConstants.NODESET);
+    };
+    
+    var jsonmlxslt;
+    $env.jsonml = function(xmlstring){
+        jsonmlxslt = jsonmlxslt||$env.xslt($env.xml2jsonml.toXMLString());
+        var jsonml = $env.xslttransform(jsonmlxslt, xmlstring);
+        //$env.debug('jsonml :\n'+jsonml);
+        return eval(jsonml);
+    };
+    var transformerFactory;
+    $env.xslt = function(xsltstring){
+        transformerFactory = transformerFactory||
+            Packages.javax.xml.transform.TransformerFactory.newInstance();
+        return transformerFactory.newTransformer(
+              new javax.xml.transform.dom.DOMSource(
+                  $env.parseXML(xsltstring)
+              )
+          );
+    };
+    $env.xslttransform = function(xslt, xmlstring){
+        var baos = new java.io.ByteArrayOutputStream();
+        xslt.transform(
+            new javax.xml.transform.dom.DOMSource($env.parseHTML(xmlstring)),
+            new javax.xml.transform.stream.StreamResult(baos)
+        );
+        return java.nio.charset.Charset.forName(&quot;UTF-8&quot;).
+            decode(java.nio.ByteBuffer.wrap(baos.toByteArray())).toString()+&quot;&quot;;
     };
     
     $env.tmpdir         = java.lang.System.getProperty(&quot;java.io.tmpdir&quot;); 
@@ -419,7 +539,10 @@ var Envjs = function(){
     $env.os_version     = java.lang.System.getProperty(&quot;os.version&quot;); 
     $env.lang           = java.lang.System.getProperty(&quot;user.lang&quot;); 
     $env.platform       = &quot;Rhino &quot;;//how do we get the version
-    
+
+    //injected by org.mozilla.javascript.tools.envjs.
+    $env.load = load;
+
     $env.safeScript = function(){
       //do nothing  
     };
@@ -434,28 +557,36 @@ var Envjs = function(){
         $env.debug(&quot;loading inline script :&quot; + script.text);
         var tmpFile = $env.writeToTempFile(script.text, 'js') ;
         $env.debug(&quot;loading &quot; + tmpFile);
-        load(tmpFile);
+        $env.load(tmpFile);
     };
     
+    //injected by org.mozilla.javascript.tools.envjs.
+    $env.globalize = globalize;
+    $env.getScope = getScope;
+    $env.setScope = setScope;
+    $env.configureScope = configureScope;
+    $env.restoreScope = restoreScope;
+    
 })(Envjs);/*
+ * Envjs env-js.1.0.rc1 
  * Pure JavaScript Browser Environment
  *   By John Resig &lt;http://ejohn.org/&gt;
- * Copyright 2008 John Resig, under the MIT License
+ * Copyright 2008-2009 John Resig, under the MIT License
  */
 
 
 try {
-        // this goes into the global namespace, but less likely to collide with
-        //   client JS code than methods in Rhino shell (load, print, etc.)
-    this.__proto__._$envjs$makeObjectIntoWindow$_ = function($w, $env,
-                                                             $parentWindow,
-                                                             $initTop){
-
-        // The Window Object
-        var __this__ = $w;
-        $w.__defineGetter__('window', function(){
-            return __this__;
-        });
+        
+    Envjs.window = function($w, 
+                            $env,
+                            $parentWindow,
+                            $initTop){
+
+    // The Window Object
+    var __this__ = $w;
+    $w.__defineGetter__('window', function(){
+        return __this__;
+    });
 
 /*
 *	window.js
@@ -3985,61 +4116,7 @@ var $handleEndOfNormalOrEmptyElement = function(node, doc, p){
         if (node.src &amp;&amp; node.src.length &gt; 0){
             $debug(&quot;getting content document for (i)frame from &quot; + node.src);
 
-            // create a new global/window object, such that its methods and
-            //   objects are defined within the scope of the new global.
-            //   Then load content from .src into it
-            try {
-
-        /* this code semi-duplicated in html/frame.js -- sorry */
-                // a blank object, pre-configured to inherit original global
-                //                   vvvv from EnvjsRhinoSupraGlobal.java
-                var frameWindow = createAGlobalObject();
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us a scope that's easy to change
-                var mkAndLoadNewWindow   = function(){
-                  localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                    localCopy_window, localCopy_window.top);
-                  node._content = frameWindow;
-                  frameWindow.location = node.src;
-                }
-
-
-
-                // change scope of window object creation functions, so that
-                //   functions/code they create will be scoped to new window
-                    // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                                        oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + node.src, e);
-            }
+            $env.loadFrame(node, $env.location(node.src));
 
             var event = doc.createEvent();
             event.initEvent(&quot;load&quot;);
@@ -5568,6 +5645,262 @@ __extend__(HTMLDocument.prototype, {
 });
 
 $w.HTMLDocument = HTMLDocument;
+$debug(&quot;Defining HTMLElement&quot;);
+/*
+* HTMLElement - DOM Level 2
+*/
+var HTMLElement = function(ownerDocument) {
+    this.DOMElement = DOMElement;
+    this.DOMElement(ownerDocument);
+    
+    this.$css2props = null;
+};
+HTMLElement.prototype = new DOMElement;
+__extend__(HTMLElement.prototype, {
+		get className() { 
+		    return this.getAttribute(&quot;class&quot;)||&quot;&quot;; 
+		    
+	    },
+		set className(val) { 
+		    return this.setAttribute(&quot;class&quot;,trim(val)); 
+		    
+	    },
+		get dir() { 
+		    return this.getAttribute(&quot;dir&quot;)||&quot;ltr&quot;; 
+		    
+	    },
+		set dir(val) { 
+		    return this.setAttribute(&quot;dir&quot;,val); 
+		    
+	    },
+		get id(){  
+		    return this.getAttribute('id')||''; 
+		    
+	    },
+		set id(id){  
+		    this.setAttribute('id', id); 
+            
+	    },
+		get innerHTML(){  
+		    return this.childNodes.xml; 
+		    
+	    },
+		set innerHTML(html){
+		    //$debug(&quot;htmlElement.innerHTML(&quot;+html+&quot;)&quot;);
+		    //Should be replaced with HTMLPARSER usage
+		    var doc = new DOMParser().
+			  parseFromString('&lt;div&gt;'+html+'&lt;/div&gt;');
+            var parent = doc.documentElement;
+			while(this.firstChild != null){
+			    this.removeChild( this.firstChild );
+			}
+			var importedNode;
+			while(parent.firstChild != null){
+	            importedNode = this.importNode( 
+	                parent.removeChild( parent.firstChild ), true);
+			    this.appendChild( importedNode );   
+		    }
+		    //Mark for garbage collection
+		    doc = null;
+		},
+		get lang() { 
+		    return this.getAttribute(&quot;lang&quot;)||&quot;&quot;; 
+		    
+	    },
+		set lang(val) { 
+		    return this.setAttribute(&quot;lang&quot;,val); 
+		    
+	    },
+		get offsetHeight(){
+		    return Number(this.style[&quot;height&quot;].replace(&quot;px&quot;,&quot;&quot;));
+		},
+		get offsetWidth(){
+		    return Number(this.style[&quot;width&quot;].replace(&quot;px&quot;,&quot;&quot;));
+		},
+		offsetLeft: 0,
+		offsetRight: 0,
+		get offsetParent(){
+		    /* TODO */
+		    return;
+	    },
+		set offsetParent(element){
+		    /* TODO */
+		    return;
+	    },
+		scrollHeight: 0,
+		scrollWidth: 0,
+		scrollLeft: 0, 
+		scrollRight: 0,
+		get style(){
+		    if(this.$css2props === null){
+		        this.updateCss2Props();
+	        }
+	        return this.$css2props
+		},
+		updateCss2Props: function() {
+			this.$css2props = new CSS2Properties({
+				onSet: (function(that) {
+					return function() { that.__setAttribute(&quot;style&quot;, this.cssText); }
+				})(this),
+				cssText:this.getAttribute(&quot;style&quot;)
+			});
+		},
+		__setAttribute: HTMLElement.prototype.setAttribute,
+		setAttribute: function (name, value) {
+		    this.__setAttribute(name, value);
+		    if (name === &quot;style&quot;) {
+		        this.updateCss2Props();
+		    }
+		},
+		get title() { 
+		    return this.getAttribute(&quot;title&quot;)||&quot;&quot;; 
+		    
+	    },
+		set title(val) { 
+		    return this.setAttribute(&quot;title&quot;,val); 
+		    
+	    },
+		//Not in the specs but I'll leave it here for now.
+		get outerHTML(){ 
+		    return this.xml; 
+		    
+	    },
+	    scrollIntoView: function(){
+	        /*TODO*/
+	        return;
+	    
+        },
+
+		onclick: function(event){
+		    __eval__(this.getAttribute('onclick')||'', this)
+	    },
+        // non-ECMA function, but no other way for click events to enter env.js
+        __click__: function(element){
+            var event = new Event({
+              target:element,
+              currentTarget:element
+            });
+            event.initEvent(&quot;click&quot;);
+            element.dispatchEvent(event);
+        },
+
+		ondblclick: function(event){
+            __eval__(this.getAttribute('ondblclick')||'', this);
+	    },
+		onkeydown: function(event){
+            __eval__(this.getAttribute('onkeydown')||'', this);
+	    },
+		onkeypress: function(event){
+            __eval__(this.getAttribute('onkeypress')||'', this);
+	    },
+		onkeyup: function(event){
+            __eval__(this.getAttribute('onkeyup')||'', this);
+	    },
+		onmousedown: function(event){
+            __eval__(this.getAttribute('onmousedown')||'', this);
+	    },
+		onmousemove: function(event){
+            __eval__(this.getAttribute('onmousemove')||'', this);
+	    },
+		onmouseout: function(event){
+            __eval__(this.getAttribute('onmouseout')||'', this);
+	    },
+		onmouseover: function(event){
+            __eval__(this.getAttribute('onmouseover')||'', this);
+	    },
+		onmouseup: function(event){
+            __eval__(this.getAttribute('onmouseup')||'', this);
+	    }
+});
+
+var __eval__ = function(script, startingNode){
+    if (script == &quot;&quot;)
+        return;                    // don't assemble environment if no script...
+
+    try{
+        var doEval = function(scriptText){
+            eval(scriptText);
+        }
+
+        var listOfScopes = [];
+        for (var node = startingNode; node != null; node = node.parentNode)
+            listOfScopes.push(node);
+        listOfScopes.push(window);
+
+
+        var oldScopesArray = $env.configureScope(
+          doEval,        // the function whose scope chain to change
+          listOfScopes); // last array element is &quot;head&quot; of new chain
+        doEval.call(startingNode, script);
+        $env.restoreScope(oldScopesArray);
+                         // oldScopesArray is N-element array of two-element
+                         // arrays.  First element is JS object whose scope
+                         // was modified, second is original value to restore.
+    }catch(e){
+        $error(e);
+    }
+};
+
+var __registerEventAttrs__ = function(elm){
+    if(elm.hasAttribute('onclick')){ 
+        elm.addEventListener('click', elm.onclick ); 
+    }
+    if(elm.hasAttribute('ondblclick')){ 
+        elm.addEventListener('dblclick', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeydown')){ 
+        elm.addEventListener('keydown', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeypress')){ 
+        elm.addEventListener('keypress', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onkeyup')){ 
+        elm.addEventListener('keyup', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmousedown')){ 
+        elm.addEventListener('mousedown', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmousemove')){ 
+        elm.addEventListener('mousemove', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseout')){ 
+        elm.addEventListener('mouseout', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseover')){ 
+        elm.addEventListener('mouseover', elm.onclick ); 
+    }
+    if(elm.hasAttribute('onmouseup')){ 
+        elm.addEventListener('mouseup', elm.onclick ); 
+    }
+    return elm;
+};
+	
+var __submit__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;submit&quot;);
+	element.dispatchEvent(event);
+};
+var __focus__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;focus&quot;);
+	element.dispatchEvent(event);
+};
+var __blur__ = function(element){
+	var event = new Event({
+	  target:element,
+	  currentTarget:element
+	});
+	event.initEvent(&quot;blur&quot;);
+	element.dispatchEvent(event);
+};
+
+$w.HTMLElement = HTMLElement;
 $debug(&quot;Defining HTMLCollection&quot;);
 /*
 * HTMLCollection - DOM Level 2
@@ -6249,70 +6582,8 @@ __extend__(HTMLFrameElement.prototype, {
         this.setAttribute('src', value);
 
         if (value &amp;&amp; value.length &gt; 0){
-            try {
-
-        /* this code semi-duplicated in dom/implementation.js -- sorry */
-                var frameWindow;
-                var makingNewWinFlag = !(this._content);
-                if (makingNewWinFlag)
-                            // a blank object, inherits from original global
-                                  //  v EnvjsRhinoSupraGlobal.java
-                    frameWindow = createAGlobalObject();
-                else
-                    frameWindow = this._content;
-
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us something whose scope
-                //   is easy to change
-                var mkAndLoadNewWindow   = function(){
-                    if (makingNewWinFlag){
-                        localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                          localCopy_window,
-                                          localCopy_window.top);
-                    }
-
-                    frameWindow.location = value;
-                }
-
-
-                // change scope of window object creation
-                //   functions, so that functions/code they create
-                //   will be scoped to new window object
-        // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-                this._content = frameWindow;
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                  oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + value, e);
-            }
-
+            $env.loadFrame(this, $env.location(value));
+            
             var event = document.createEvent();
             event.initEvent(&quot;load&quot;);
             this.dispatchEvent( event, false );
@@ -10498,12 +10769,12 @@ try{
 */
 
 
-    };        // close function definition begun in 'intro.js'
+    };// close function definition begun in 'intro.js'
 
 
-        // turn &quot;original&quot; JS interpreter global object into the
-        //   &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
-    _$envjs$makeObjectIntoWindow$_(this, Envjs, null, this);
+    // turn &quot;original&quot; JS interpreter global object into the
+    // &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
+    Envjs.window(this, Envjs, null, this);
 
 } catch(e){
     Envjs.error(&quot;ERROR LOADING ENV : &quot; + e + &quot;\nLINE SOURCE:\n&quot; +</diff>
      <filename>dist/env.rhino.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,101 @@
 
-&lt;project name=&quot;rhino&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;
-  &lt;target name=&quot;all&quot;&gt;
-    &lt;ant antfile=&quot;src/build.xml&quot; target=&quot;combined-jar&quot;/&gt;
-  &lt;/target&gt;
+&lt;!--
+ * This file is a component of env.js,
+ *     http://github.com/gleneivey/env-js/commits/master/README
+ * a Pure JavaScript Browser Environment
+ * Copyright 2009 John Resig, licensed under the MIT License
+ *     http://www.opensource.org/licenses/mit-license.php
+  --&gt;
+&lt;project name=&quot;Env4Rhino&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;
+    &lt;description&gt;
+        Compiles rhino-specific extensions to support window-like
+        scope chains for iframes in env-js.  It also adds htmlcleaner
+        to support the parsing of malformed html.
+        
+        The repackaged js.jar is named env-js.jar to facilitate 
+        ease of use as a unified java environment for hosting
+        env.js browser environment emulation.
+        
+        Special thanks to Glen E. Ivey for the rhino extensions,
+        iframe implementations, among many other contributions.
+    &lt;/description&gt;
+    &lt;tstamp/&gt;
+  
+    &lt;property name=&quot;SRC_DIR&quot;        
+            location=&quot;src&quot;           
+            description=&quot;Source Folder&quot;/&gt;
+    &lt;property name=&quot;BUILD_DIR&quot;        
+            location=&quot;build&quot;           
+            description=&quot;Build Folder&quot;/&gt;
+    &lt;property name=&quot;CLASS_DIR&quot;        
+            location=&quot;${BUILD_DIR}/classes&quot;           
+            description=&quot;Compiled Classes Folder&quot;/&gt;
+    &lt;property name=&quot;DIST_DIR&quot;        
+            location=&quot;../dist&quot;           
+            description=&quot;Distribution Folder&quot;/&gt;
+    
+    &lt;property name=&quot;RHINO_JAR&quot;      
+            location=&quot;js.jar&quot;  
+            description=&quot;Rhino JS Engine&quot;/&gt;
+    &lt;property name=&quot;HTMLCLEANER_JAR&quot;      
+            location=&quot;htmlcleaner2_1.jar&quot;  
+            description=&quot;HTML Cleaner Engine&quot;/&gt;
+    &lt;property name='JAVA_DEBUG' 
+              value='on'/&gt;
+    &lt;property name='JAVA_TARGET' 
+              value='1.5'/&gt;
+    &lt;property name='JAVA_SRC' 
+              value='1.5'/&gt; 
+    &lt;property name='JAR_COMPRESSION' 
+              value='on'/&gt;     
+    
+    &lt;property file=&quot;../build.properties&quot;/&gt;
+    
+    &lt;property name=&quot;ENV_JAR_DIST&quot;  
+              location=&quot;${DIST_DIR}/${BUILD}.jar&quot; /&gt;
+    &lt;property name=&quot;ENV_JAR_LATEST&quot;  
+              location=&quot;${DIST_DIR}/${PROJECT}.jar&quot; /&gt;
+    &lt;!--
+        jar.jar: mainForEnvjs.jar
+        dist.name: mainforenvjs${version}
+        dist.dir: ${build.dir}/${dist.name}
+        
+        combined.jar: env.js.jar
+        rhino.jar: js.jar
+        combined.name: mainforenvjs${version}
+        combined.dir: ${build.dir}/${dist.name}
+        
+    --&gt;
+    &lt;target name='all' depends='jar'/&gt;
+
+    &lt;target name=&quot;init&quot;&gt;
+        &lt;mkdir dir=&quot;${BUILD_DIR}&quot;/&gt;
+        &lt;mkdir dir=&quot;${CLASS_DIR}&quot;/&gt;
+        &lt;mkdir dir=&quot;${DIST_DIR}&quot;/&gt;
+    &lt;/target&gt;
+
+    &lt;target name=&quot;compile&quot; depends=&quot;init&quot;&gt;
+        &lt;javac srcdir=&quot;${SRC_DIR}&quot;
+               destdir=&quot;${CLASS_DIR}&quot;
+               includes=&quot;**/*.java&quot;
+               deprecation=&quot;on&quot;
+               classpath=&quot;${RHINO_JAR}&quot;
+               debug=&quot;${JAVA_DEBUG}&quot;
+               target=&quot;${JAVA_TARGET}&quot;
+               source=&quot;${JAVA_SRC}&quot;&gt;
+        &lt;/javac&gt;
+    &lt;/target&gt;
+    
+    &lt;target name=&quot;jar&quot; depends=&quot;compile&quot;&gt;
+        &lt;copy file=&quot;${RHINO_JAR}&quot; tofile=&quot;${ENV_JAR_DIST}&quot;/&gt;
+        &lt;jar jarfile=&quot;${ENV_JAR_DIST}&quot;
+             update=&quot;true&quot;
+             basedir=&quot;${CLASS_DIR}&quot;
+             manifest=&quot;${SRC_DIR}/META-INF/MANIFEST.MF&quot;
+             compress=&quot;${JAR_COMPRESSION}&quot;&gt;
+             &lt;fileset dir=&quot;${CLASS_DIR}&quot; includes=&quot;**/*.class&quot;/&gt;
+             &lt;zipfileset src=&quot;${HTMLCLEANER_JAR}&quot; includes=&quot;**/*.class&quot;/&gt;
+         &lt;/jar&gt;
+        &lt;copy file=&quot;${ENV_JAR_DIST}&quot; tofile=&quot;${ENV_JAR_LATEST}&quot;/&gt;
+    &lt;/target&gt;
 &lt;/project&gt;</diff>
      <filename>rhino/build.xml</filename>
    </modified>
    <modified>
      <diff>@@ -30,61 +30,7 @@ var $handleEndOfNormalOrEmptyElement = function(node, doc, p){
         if (node.src &amp;&amp; node.src.length &gt; 0){
             $debug(&quot;getting content document for (i)frame from &quot; + node.src);
 
-            // create a new global/window object, such that its methods and
-            //   objects are defined within the scope of the new global.
-            //   Then load content from .src into it
-            try {
-
-        /* this code semi-duplicated in html/frame.js -- sorry */
-                // a blank object, pre-configured to inherit original global
-                //                   vvvv from EnvjsRhinoSupraGlobal.java
-                var frameWindow = createAGlobalObject();
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us a scope that's easy to change
-                var mkAndLoadNewWindow   = function(){
-                  localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                    localCopy_window, localCopy_window.top);
-                  node._content = frameWindow;
-                  frameWindow.location = node.src;
-                }
-
-
-
-                // change scope of window object creation functions, so that
-                //   functions/code they create will be scoped to new window
-                    // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                                        oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + node.src, e);
-            }
+            $env.loadFrame(node, $env.location(node.src));
 
             var event = doc.createEvent();
             event.initEvent(&quot;load&quot;);</diff>
      <filename>src/dom/implementation.js</filename>
    </modified>
    <modified>
      <diff>@@ -181,11 +181,11 @@ var __eval__ = function(script, startingNode){
         listOfScopes.push(window);
 
 
-        var oldScopesArray = configureFunctionObjectsScopeChain(
+        var oldScopesArray = $env.configureScope(
           doEval,        // the function whose scope chain to change
           listOfScopes); // last array element is &quot;head&quot; of new chain
         doEval.call(startingNode, script);
-        restoreScopeOfSetOfObjects(oldScopesArray);
+        $env.restoreScope(oldScopesArray);
                          // oldScopesArray is N-element array of two-element
                          // arrays.  First element is JS object whose scope
                          // was modified, second is original value to restore.</diff>
      <filename>src/html/element.js</filename>
    </modified>
    <modified>
      <diff>@@ -57,70 +57,8 @@ __extend__(HTMLFrameElement.prototype, {
         this.setAttribute('src', value);
 
         if (value &amp;&amp; value.length &gt; 0){
-            try {
-
-        /* this code semi-duplicated in dom/implementation.js -- sorry */
-                var frameWindow;
-                var makingNewWinFlag = !(this._content);
-                if (makingNewWinFlag)
-                            // a blank object, inherits from original global
-                                  //  v EnvjsRhinoSupraGlobal.java
-                    frameWindow = createAGlobalObject();
-                else
-                    frameWindow = this._content;
-
-
-                // define local variables with content of things that are
-                //   in current global/window, because when the following
-                //   function executes we'll have a new/blank
-                //   global/window and won't be able to get at them....
-                var localCopy_mkWinFn    = _$envjs$makeObjectIntoWindow$_;
-                var localCopy_$env       = $env;
-                var localCopy_window     = window;
-
-                // a local function gives us something whose scope
-                //   is easy to change
-                var mkAndLoadNewWindow   = function(){
-                    if (makingNewWinFlag){
-                        localCopy_mkWinFn(frameWindow, localCopy_$env,
-                                          localCopy_window,
-                                          localCopy_window.top);
-                    }
-
-                    frameWindow.location = value;
-                }
-
-
-                // change scope of window object creation
-                //   functions, so that functions/code they create
-                //   will be scoped to new window object
-        // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
-                var oldMalnwScope      = getFunctionObjectsScope(
-                  mkAndLoadNewWindow);
-                var oldMkWinScope      = getFunctionObjectsScope(
-                  localCopy_mkWinFn);
-                var oldLoadScope       = getFunctionObjectsScope(load);
-                var oldLoadScriptScope = getFunctionObjectsScope(
-                  $env.loadLocalScript);
-
-                setFunctionObjectsScope(mkAndLoadNewWindow,    frameWindow);
-                setFunctionObjectsScope(localCopy_mkWinFn,     frameWindow);
-                setFunctionObjectsScope(load,                  frameWindow);
-                setFunctionObjectsScope($env.loadLocalScript,  frameWindow);
-
-                mkAndLoadNewWindow();
-                this._content = frameWindow;
-
-                // now restore the scope
-                setFunctionObjectsScope(mkAndLoadNewWindow, oldMalnwScope);
-                setFunctionObjectsScope(localCopy_mkWinFn, oldMkWinScope);
-                setFunctionObjectsScope(load, oldLoadScope);
-                setFunctionObjectsScope($env.loadLocalScript,
-                  oldLoadScriptScope);
-            } catch(e){
-                $error(&quot;failed to load frame content: from &quot; + value, e);
-            }
-
+            $env.loadFrame(this, $env.location(value));
+            
             var event = document.createEvent();
             event.initEvent(&quot;load&quot;);
             this.dispatchEvent( event, false );</diff>
      <filename>src/html/frame.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,16 @@
-/*
- * Pure JavaScript Browser Environment
- *   By John Resig &lt;http://ejohn.org/&gt;
- * Copyright 2008 John Resig, under the MIT License
- */
+
 
 
 try {
-        // this goes into the global namespace, but less likely to collide with
-        //   client JS code than methods in Rhino shell (load, print, etc.)
-    this.__proto__._$envjs$makeObjectIntoWindow$_ = function($w, $env,
-                                                             $parentWindow,
-                                                             $initTop){
+        
+    Envjs.window = function($w, 
+                            $env,
+                            $parentWindow,
+                            $initTop){
 
-        // The Window Object
-        var __this__ = $w;
-        $w.__defineGetter__('window', function(){
-            return __this__;
-        });
+    // The Window Object
+    var __this__ = $w;
+    $w.__defineGetter__('window', function(){
+        return __this__;
+    });
 </diff>
      <filename>src/intro.js</filename>
    </modified>
    <modified>
      <diff>@@ -3,12 +3,12 @@
 */
 
 
-    };        // close function definition begun in 'intro.js'
+    };// close function definition begun in 'intro.js'
 
 
-        // turn &quot;original&quot; JS interpreter global object into the
-        //   &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
-    _$envjs$makeObjectIntoWindow$_(this, Envjs, null, this);
+    // turn &quot;original&quot; JS interpreter global object into the
+    // &quot;root&quot; window object; third param value for new window's &quot;parent&quot;
+    Envjs.window(this, Envjs, null, this);
 
 } catch(e){
     Envjs.error(&quot;ERROR LOADING ENV : &quot; + e + &quot;\nLINE SOURCE:\n&quot; +</diff>
      <filename>src/outro.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+
 /**
  * @author thatcher
  */
@@ -92,6 +93,8 @@ var Envjs = function(){
     $env.lang           = ''; 
     $env.platform       = &quot;Rhino &quot;;//how do we get the version
     
+    $env.load = function(){};
+    
     $env.safeScript = function(){
       //do nothing  
     };
@@ -160,4 +163,77 @@ var Envjs = function(){
     
     $env.loadInlineScript = function(script){};
     
+    
+    $env.globalize = function(){};
+    $env.getScope = function(){};
+    $env.setScope = function(){};
+    $env.configureScope = function(){};
+    $env.restoreScope = function(){};
+    $env.loadFrame = function(frame, url){
+        try {
+
+            /* this code semi-duplicated in dom/implementation.js -- sorry */
+            var frameWindow,
+            	makingNewWinFlag = !(frame._content);
+            if (makingNewWinFlag)
+                // a blank object, inherits from original global
+                // see org.mozilla.javascript.tools.envjs.Window.java
+                frameWindow = $env.globalize();
+            else
+                frameWindow = frame._content;
+
+
+            // define local variables with content of things that are
+            // in current global/window, because when the following
+            // function executes we'll have a new/blank
+            // global/window and won't be able to get at them....
+            var local__window__    = $env.window,
+            	local_env          = $env,
+            	local_window       = window;
+
+            // a local function gives us something whose scope
+            // is easy to change
+            var __frame__   = function(){
+                if (makingNewWinFlag){
+                    local__window__(frameWindow, 
+                                    local_env,
+                                    local_window,
+                                    local_window.top);
+                }
+
+                frameWindow.location = url;
+            }
+
+
+            // change scope of window object creation
+            //   functions, so that functions/code they create
+            //   will be scoped to new window object
+            // *FunctionObjectsScope() from EnvjsRhinoSupraGlobal.java
+            var scopes = {
+                frame : $env.getScope(__frame__),
+                window : $env.getScope(local__window__),
+                global_load: $env.getScope(load),
+                local_load: $env.getScope($env.loadLocalScript)
+            };
+
+            $env.setScope(__frame__,             frameWindow);
+            $env.setScope(local__window__,       frameWindow);
+            $env.setScope($env.load,             frameWindow);
+            $env.setScope($env.loadLocalScript,  frameWindow);
+
+            __frame__();
+            frame._content = frameWindow;
+
+            // now restore the scope
+            $env.setScope(__frame__, scopes.frame);
+            $env.setScope(local__window__, scopes.window);
+            $env.setScope($env.load, scopes.global_load);
+            $env.setScope($env.loadLocalScript, scopes.local_load);
+            
+        } catch(e){
+            $env.error(&quot;failed to load frame content: from &quot; + url, e);
+        }
+
+    };
+    
 })(Envjs);
\ No newline at end of file</diff>
      <filename>src/platform/core.js</filename>
    </modified>
    <modified>
      <diff>@@ -37,60 +37,60 @@
     var timers = [];
 
     $env.timer = function(fn, interval){
-	this.fn = fn;
-	this.interval = interval;
-	this.at = Date.now() + interval;
-	this.index = timers.length;
-	timers[this.index] = this;
+    	this.fn = fn;
+    	this.interval = interval;
+    	this.at = Date.now() + interval;
+    	this.index = timers.length;
+    	timers[this.index] = this;
     };	
 
     $env.timer.prototype.start = function(){};
     $env.timer.prototype.stop = function(){
-	delete timers[this.index];
+	    delete timers[this.index];
     };
 
     // wait === null: execute any immediately runnable timers and return
     // wait(n) (n &gt; 0): execute any timers as they fire but no longer than n ms
     // wait(0): execute any timers as they fire, waiting until there are none left
     $env.wait = function(wait) {
-	var i;
-	var empty;
-	var after;
-	var now;
-	var timer;
-	var sleep;
-	if (wait !== 0 &amp;&amp; wait !== null &amp;&amp; wait !== undefined){
-	    wait += Date.now();
-	}
-	for (;;) {
-	    for (i in timers){
-		timer = timers[i];
-		now = Date.now();
-		if (timer.at &lt;= now){
-		    f = timer.fn;
-		    f();
-		    timer.at += timer.interval;
-		}
-	    }
-	    empty = true;
-	    sleep = null;
-	    now = Date.now();
-	    for (i in timers){
-		empty = false;
-		timer = timers[i];
-		after = timer.at - now
-		sleep = (sleep === null || after &lt; sleep) ? after : sleep;
-	    }
-	    sleep = sleep &lt; 0 ? 0 : sleep;
-	    if (empty ||
-                ( wait !== 0 ) &amp;&amp;
-                 ( ( sleep &gt; 0 &amp;&amp; !wait ) || ( Date.now() + sleep &gt; wait ) ) ) {
-		break;
-	    }
-	    if (sleep) {
-		java.lang.Thread.currentThread().sleep(sleep);
-	    }
-	}
+    	var i;
+    	var empty;
+    	var after;
+    	var now;
+    	var timer;
+    	var sleep;
+    	if (wait !== 0 &amp;&amp; wait !== null &amp;&amp; wait !== undefined){
+    	    wait += Date.now();
+    	}
+    	for (;;) {
+    	    for (i in timers){
+        		timer = timers[i];
+        		now = Date.now();
+        		if (timer.at &lt;= now){
+        		    f = timer.fn;
+        		    f();
+        		    timer.at += timer.interval;
+        		}
+    	    }
+    	    empty = true;
+    	    sleep = null;
+    	    now = Date.now();
+    	    for (i in timers){
+        		empty = false;
+        		timer = timers[i];
+        		after = timer.at - now
+        		sleep = (sleep === null || after &lt; sleep) ? after : sleep;
+	        }
+    	    sleep = sleep &lt; 0 ? 0 : sleep;
+    	    if (empty ||
+                    ( wait !== 0 ) &amp;&amp;
+                     ( ( sleep &gt; 0 &amp;&amp; !wait ) || ( Date.now() + sleep &gt; wait ) ) ) {
+    		    break;
+    	    }
+    	    if (sleep) {
+    		    java.lang.Thread.currentThread().sleep(sleep);
+    	    }
+    	}
     };
 
     //Since we're running in rhino I guess we can safely assume
@@ -220,7 +220,7 @@
                 
         }
         if(responseHandler){
-          responseHandler();
+            responseHandler();
         }
     };
     
@@ -228,27 +228,66 @@
     htmlDocBuilder.setNamespaceAware(false);
     htmlDocBuilder.setValidating(false);
     
+    var htmlCleaner,
+        cleanDomSerializer,
+        cleanProperties;
     $env.parseHTML = function(htmlstring){
-        return htmlDocBuilder.newDocumentBuilder().parse(
+        var domdoc;//what's up dom doc?
+        if($env.cleanHTML){
+            htmlCleaner = htmlCleaner||new org.htmlcleaner.HtmlCleaner();
+            cleanDomSerializer = cleanDomSerializer||new org.htmlcleaner.DomSerializer();
+            cleanProperties = cleanProperties||new org.htmlcleaner.CleanerProperties();
+            domdoc = org.htmlcleaner.DomSerializer.createDOM(htmlCleaner.clean(htmlstring));
+        }else{
+            domdoc =  htmlDocBuilder.newDocumentBuilder().parse(
                   new java.io.ByteArrayInputStream(
-                        (new java.lang.String(htmlstring)).getBytes(&quot;UTF8&quot;)))+&quot;&quot;;
+                        (new java.lang.String(htmlstring)).getBytes(&quot;UTF8&quot;)));
+        }
+        return domdoc;
     };
     
     var xmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
     xmlDocBuilder.setNamespaceAware(true);
-    xmlDocBuilder.setValidating(true);
+    xmlDocBuilder.setValidating(false);
     
     $env.parseXML = function(xmlstring){
         return xmlDocBuilder.newDocumentBuilder().parse(
                   new java.io.ByteArrayInputStream(
-                        (new java.lang.String(xmlstring)).getBytes(&quot;UTF8&quot;)))+&quot;&quot;;
+                        (new java.lang.String(xmlstring)).getBytes(&quot;UTF8&quot;)));
     };
     
     
     $env.xpath = function(expression, doc){
-    return Packages.javax.xml.xpath.
-      XPathFactory.newInstance().newXPath().
-        evaluate(expression, doc, javax.xml.xpath.XPathConstants.NODESET);
+        return Packages.javax.xml.xpath.
+          XPathFactory.newInstance().newXPath().
+            evaluate(expression, doc, javax.xml.xpath.XPathConstants.NODESET);
+    };
+    
+    var jsonmlxslt;
+    $env.jsonml = function(xmlstring){
+        jsonmlxslt = jsonmlxslt||$env.xslt($env.xml2jsonml.toXMLString());
+        var jsonml = $env.xslttransform(jsonmlxslt, xmlstring);
+        //$env.debug('jsonml :\n'+jsonml);
+        return eval(jsonml);
+    };
+    var transformerFactory;
+    $env.xslt = function(xsltstring){
+        transformerFactory = transformerFactory||
+            Packages.javax.xml.transform.TransformerFactory.newInstance();
+        return transformerFactory.newTransformer(
+              new javax.xml.transform.dom.DOMSource(
+                  $env.parseXML(xsltstring)
+              )
+          );
+    };
+    $env.xslttransform = function(xslt, xmlstring){
+        var baos = new java.io.ByteArrayOutputStream();
+        xslt.transform(
+            new javax.xml.transform.dom.DOMSource($env.parseHTML(xmlstring)),
+            new javax.xml.transform.stream.StreamResult(baos)
+        );
+        return java.nio.charset.Charset.forName(&quot;UTF-8&quot;).
+            decode(java.nio.ByteBuffer.wrap(baos.toByteArray())).toString()+&quot;&quot;;
     };
     
     $env.tmpdir         = java.lang.System.getProperty(&quot;java.io.tmpdir&quot;); 
@@ -257,7 +296,10 @@
     $env.os_version     = java.lang.System.getProperty(&quot;os.version&quot;); 
     $env.lang           = java.lang.System.getProperty(&quot;user.lang&quot;); 
     $env.platform       = &quot;Rhino &quot;;//how do we get the version
-    
+
+    //injected by org.mozilla.javascript.tools.envjs.
+    $env.load = load;
+
     $env.safeScript = function(){
       //do nothing  
     };
@@ -272,7 +314,14 @@
         $env.debug(&quot;loading inline script :&quot; + script.text);
         var tmpFile = $env.writeToTempFile(script.text, 'js') ;
         $env.debug(&quot;loading &quot; + tmpFile);
-        load(tmpFile);
+        $env.load(tmpFile);
     };
     
+    //injected by org.mozilla.javascript.tools.envjs.
+    $env.globalize = globalize;
+    $env.getScope = getScope;
+    $env.setScope = setScope;
+    $env.configureScope = configureScope;
+    $env.restoreScope = restoreScope;
+    
 })(Envjs);
\ No newline at end of file</diff>
      <filename>src/platform/rhino.js</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>rhino/build.properties</filename>
    </removed>
    <removed>
      <filename>rhino/env.js.jar</filename>
    </removed>
    <removed>
      <filename>rhino/src/build.xml</filename>
    </removed>
    <removed>
      <filename>rhino/src/manifest</filename>
    </removed>
    <removed>
      <filename>rhino/src/org/wontology/floss/rhino/envjs/EnvjsRhinoGlobal.java</filename>
    </removed>
    <removed>
      <filename>rhino/src/org/wontology/floss/rhino/envjs/EnvjsRhinoMain.java</filename>
    </removed>
    <removed>
      <filename>rhino/src/org/wontology/floss/rhino/envjs/EnvjsRhinoSupraGlobal.java</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>404b1be31cbaed0ebfa0e7c86596c48b044c7870</id>
    </parent>
  </parents>
  <author>
    <name>thatcher</name>
    <email>thatcher@christopher-thatchers-macbook-air.local</email>
  </author>
  <url>http://github.com/thatcher/env-js/commit/cb6d649149173d77aa274d4b53c66990e904a5a2</url>
  <id>cb6d649149173d77aa274d4b53c66990e904a5a2</id>
  <committed-date>2009-08-16T18:02:09-07:00</committed-date>
  <authored-date>2009-08-16T18:02:09-07:00</authored-date>
  <message>did some refactoring of Glen E. Iveys substantial iframe contributions to follow the env practices for isolating platform implementation details to the rhino.js source.  I also did a little clean up to simplify the repackaging of rhino he worked out, mostly to simplify naming conventions.  Great work glen, im push this out as the first 1.0 release candidate.  stay tuned for the addition of the html cleaner...</message>
  <tree>c1d8a4866578a868b45bcd46acfb345ffc4fa264</tree>
  <committer>
    <name>thatcher</name>
    <email>thatcher@christopher-thatchers-macbook-air.local</email>
  </committer>
</commit>
