old_contents: /*
   * Paper.js
   *
   * This file is part of Paper.js, a JavaScript Vector Graphics Library,
   * based on Scriptographer.org and designed to be largely API compatible.
   * http://paperjs.org/
   * http://scriptographer.org/
   *
   * Distributed under the MIT license. See LICENSE file for details.
   *
   * Copyright (c) 2011, Juerg Lehni & Jonathan Puckey
   * http://lehni.org/ & http://jonathanpuckey.com/
   *
   * All rights reserved.
   */
  
  /**
   * Define internal PaperScope class that handles all the fields available on the
   * global paper object, which simply is a pointer to the currently active scope.
   */
  var PaperScope = this.PaperScope = Base.extend({
  
  	initialize: function(id) {
  		this.project = null;
  		this.projects = [];
  		this.view = null;
  		this.views = [];
  		this.tool = null;
  		this.tools = [];
  		this.id = id;
  		PaperScope._scopes[id] = this;
  	},
  
  	evaluate: function(code) {
  		return PaperScript.evaluate(code, this);
  	},
  
  	/**
  	 * Installs the paper scope into any other given scope. Can be used for
  	 * examle to inject the currently active PaperScope into the window's global
  	 * scope, to emulate PaperScript-style globally accessible Paper classes:
  	 *
  	 * paper.install(window);
  	 */
  	install: function(scope) {
  		// Use scope as side-car (= 'this' inside iterator), and have it
  		// returned at the end.
  		return Base.each(this, function(value, key) {
  			this[key] = value;
  		}, scope);
  	},
  
  	clear: function() {
  		// Remove all projects, views and tools.
  		for (var i = this.projects.length - 1; i >= 0; i--)
  			this.projects[i].remove();
  		// This also removes the installed event handlers.
  		for (var i = this.views.length - 1; i >= 0; i--)
  			this.views[i].remove();
  		for (var i = this.tools.length - 1; i >= 0; i--)
  			this.tools[i].remove();
  	},
  
  	remove: function() {
  		this.clear();
  		delete PaperScope._scopes[this.id];
  	},
  
  	statics: {
  		_scopes: {},
  
  		get: function(id) {
  			// If a script tag is passed, get the id from it.
  			if (typeof id === 'object')
  				id = id.getAttribute('id');
  			return this._scopes[id] || null;
  		}
  	}
  });
  
new_contents: /*
   * Paper.js
   *
   * This file is part of Paper.js, a JavaScript Vector Graphics Library,
   * based on Scriptographer.org and designed to be largely API compatible.
   * http://paperjs.org/
   * http://scriptographer.org/
   *
   * Distributed under the MIT license. See LICENSE file for details.
   *
   * Copyright (c) 2011, Juerg Lehni & Jonathan Puckey
   * http://lehni.org/ & http://jonathanpuckey.com/
   *
   * All rights reserved.
   */
  
  /**
   * Define internal PaperScope class that handles all the fields available on the
   * global paper object, which simply is a pointer to the currently active scope.
   * @ignore
   */
  var PaperScope = this.PaperScope = Base.extend({
  
  	initialize: function(id) {
  		/** @lends _global_# */
  		
  		/**
  		 * The global active project.
  		 * @type Project
  		 */
  		this.project = null;
  
  		/**
  		 * The global projects array.
  		 * @type Project[]
  		 */
  		this.projects = [];
  
  		/**
  		 * The active view of the active project.
  		 * @type View
  		 */
  		this.view = null;
  		this.views = [];
  
  		/**
  		 * The reference to the tool object.
  		 * @type Tool
  		 */
  		this.tool = null;
  		this.tools = [];
  		this.id = id;
  		PaperScope._scopes[id] = this;
  
  		// DOCS: should the different event handlers be in here?
  		/**
  		 * {@grouptitle View Event Handlers}
  		 * A reference to the {@link View#onFrame} handler function.
  		 * 
  		 * @name onFrame
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * A reference to the {@link View#onResize} handler function.
  		 * 
  		 * @name onResize
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * {@grouptitle Mouse Event Handlers}
  		 * A reference to the {@link Tool#onMouseDown} handler function.
  		 * @name onMouseDown
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * A reference to the {@link Tool#onMouseDrag} handler function.
  		 * 
  		 * @name onMouseDrag
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * A reference to the {@link Tool#onMouseMove} handler function.
  		 * 
  		 * @name onMouseMove
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * A reference to the {@link Tool#onMouseUp} handler function.
  		 * 
  		 * @name onMouseUp
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * {@grouptitle Keyboard Event Handlers}
  		 * A reference to the {@link Tool#onKeyDown} handler function.
  		 * 
  		 * @name onKeyDown
  		 * @property
  		 * @type Function
  		 */
  
  		/**
  		 * A reference to the {@link Tool#onKeyUp} handler function.
  		 * 
  		 * @name onKeyUp
  		 * @property
  		 * @type Function
  		 */
  	},
  
  	evaluate: function(code) {
  		return PaperScript.evaluate(code, this);
  	},
  
  	/**
  	 * Installs the paper scope into any other given scope. Can be used for
  	 * examle to inject the currently active PaperScope into the window's global
  	 * scope, to emulate PaperScript-style globally accessible Paper classes:
  	 *
  	 * paper.install(window);
  	 * @ignore
  	 */
  	install: function(scope) {
  		// Use scope as side-car (= 'this' inside iterator), and have it
  		// returned at the end.
  		return Base.each(this, function(value, key) {
  			this[key] = value;
  		}, scope);
  	},
  
  	clear: function() {
  		// Remove all projects, views and tools.
  		for (var i = this.projects.length - 1; i >= 0; i--)
  			this.projects[i].remove();
  		// This also removes the installed event handlers.
  		for (var i = this.views.length - 1; i >= 0; i--)
  			this.views[i].remove();
  		for (var i = this.tools.length - 1; i >= 0; i--)
  			this.tools[i].remove();
  	},
  
  	remove: function() {
  		this.clear();
  		delete PaperScope._scopes[this.id];
  	},
  
  	statics: {
  		_scopes: {},
  
  		get: function(id) {
  			// If a script tag is passed, get the id from it.
  			if (typeof id === 'object')
  				id = id.getAttribute('id');
  			return this._scopes[id] || null;
  		}
  	}
  });
  
subject: Document the properties of PaperScope to be global.