You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/11/04 05:39:55 UTC

svn commit: r471116 [15/31] - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/services/impl/ js/dojo/ js/dojo/nls/ js/dojo/src/ js/dojo/src/animation/ js/dojo/src/cal/ js/dojo/src/charting/ js/dojo/src/charting/svg/ js/doj...

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html Fri Nov  3 20:39:29 2006
@@ -0,0 +1,200 @@
+<!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" xml:lang="en" lang="en">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<script type="text/javascript">
+	// <!--
+	/*
+	This file is really focused on just sending one message to the server, and
+	receiving one response. The code does not expect to be re-used for multiple messages.
+	This might be reworked later if performance indicates a need for it.
+	
+	xip fragment identifier/hash values have the form:
+	#id:cmd:realUrlEncodedMessage
+
+	id: some ID that should be unique among messages. No inherent meaning,
+	        just something to make sure the hash value is unique so the message
+	        receiver knows a new message is available.
+	        
+	cmd: command to the receiver. Valid values are:
+	         - loaded: the remote frame is loaded. Only sent from server to client.
+	         - ok: the message that this page sent was received OK. The next message may
+	               now be sent.
+	         - start: the start message of a block of messages (a complete message may
+	                  need to be segmented into many messages to get around the limitiations
+	                  of the size of an URL that a browser accepts.
+	         - part: indicates this is a part of a message.
+	         - end: the end message of a block of messages. The message can now be acted upon.
+	                If the message is small enough that it doesn't need to be segmented, then
+	                just one hash value message can be sent with "end" as the command.
+	
+	To reassemble a segmented message, the realUrlEncodedMessage parts just have to be concatenated
+	together.
+	*/
+
+	//Choosing 1024 as an arbitrary limit for the URL sizes.
+	//Anecdotal info seems to indicate this is safe to use in all
+	//modern browsers.
+	xipUrlLimit = 1024;
+	xipIdCounter = 1;
+
+	function xipInit(){
+		xipIsSending = false;
+		xipServerUrl = null;
+		xipStateId = null;
+		xipRequestData = null;
+		xipCurrentHash = "";
+		xipResponseMessage = "";
+		xipRequestParts = [];
+		xipPartIndex = 0;
+		xipServerWindow = null;
+	}
+	xipInit();
+	
+	function send(stateId, ifpServerUrl, urlEncodedData){
+		if(!xipIsSending){
+			xipIsSending = true;
+
+			xipStateId = stateId;
+			xipRequestData = urlEncodedData || "";
+
+			//Modify the server URL if it is a local path and 
+			//This is done for local/same domain testing.
+			xipServerUrl = ifpServerUrl;
+			if(ifpServerUrl.indexOf("..") == 0){
+				var parts = ifpServerUrl.split("/");
+				xipServerUrl = parts[parts.length - 1];
+			}
+
+			//Fix server URL to tell it about this page's URL. So that it can call us
+			//back correctly. Use the fragment identifier to allow for caching of the server
+			//page, and hey, we're using the fragment identifier for everything else.
+			ifpServerUrl += "#" + encodeURIComponent(window.location);	
+
+			//Start counter to inspect hash value.
+			setInterval(pollHash, 10);
+
+			//Loader server iframe, then wait for the server page to call us back.
+			xipServerWindow = frames["xipServerFrame"];
+			if (!xipServerWindow){
+				xipServerWindow = document.getElementById("xipServerFrame").contentWindow;
+			}
+
+			xipServerWindow.location.replace(ifpServerUrl);
+		}
+	}
+
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					messageReceived(newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function messageReceived(urlEncodedMessage){
+		//Split off xip header.
+		var parts = urlEncodedMessage.split(":");
+		var command = parts[1];
+		urlEncodedMessage = parts[2] || "";
+		
+		switch(command){
+			case "loaded":
+				sendRequestStart();
+				break;
+			case "ok":
+				sendRequestPart();
+				break;
+			case "start":
+				xipResponseMessage = "";
+				xipResponseMessage += urlEncodedMessage;
+				setServerUrl("ok");
+				break;
+			case "part":
+				xipResponseMessage += urlEncodedMessage;			
+				setServerUrl("ok");
+				break;
+			case "end":
+				setServerUrl("ok");
+				xipResponseMessage += urlEncodedMessage;
+				parent.dojo.io.XhrIframeProxy.receive(xipStateId, xipResponseMessage);
+				break;
+		}
+	}
+	
+	function sendRequestStart(){
+		//Break the message into parts, if necessary.
+		xipRequestParts = [];
+		var reqData = xipRequestData;
+		var urlLength = xipServerUrl.length;
+		var partLength = xipUrlLimit - urlLength;
+		var reqIndex = 0;
+
+		while((reqData.length - reqIndex) + urlLength > xipUrlLimit){
+			xipRequestParts.push(reqData.substring(reqIndex, reqIndex + partLength));
+			reqIndex += partLength;
+		}
+		xipRequestParts.push(reqData.substring(reqIndex, reqData.length));
+		
+		xipPartIndex = 0;
+		sendRequestPart();
+		
+	}
+	
+	function sendRequestPart(){
+		if(xipPartIndex < xipRequestParts.length){
+			//Get the message part.
+			var partData = xipRequestParts[xipPartIndex];
+
+			//Get the command.
+			var cmd = "part";
+			if(xipPartIndex + 1 == xipRequestParts.length){
+				cmd = "end";
+			}else if (xipPartIndex == 0){
+				cmd = "start";
+			}
+			
+			setServerUrl(cmd, partData);
+			xipPartIndex++;
+		}
+	}
+	
+	function setServerUrl(cmd, message){
+		var serverUrl = xipServerUrl + "#" + (xipIdCounter++) + ":" + cmd;
+		if(message){
+			serverUrl += ":" + message;
+		}
+
+		//Safari won't let us replace across domains.
+		if(navigator.userAgent.indexOf("Safari") == -1){
+			xipServerWindow.location.replace(serverUrl);
+		}else{
+			xipServerWindow.location = serverUrl;
+		}
+
+	}
+	// -->
+	</script>
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_client.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the "client" file used
+	internally by dojo.io.XhrIframeProxy.</p>
+	
+	<iframe id="xipServerFrame"></iframe>
+</body>
+</html>

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html Fri Nov  3 20:39:29 2006
@@ -0,0 +1,337 @@
+<!--
+	/*
+		Copyright (c) 2004-2006, The Dojo Foundation
+		All Rights Reserved.
+	
+		Licensed under the Academic Free License version 2.1 or above OR the
+		modified BSD license. For more information on Dojo licensing, see:
+	
+			http://dojotoolkit.org/community/licensing.shtml
+	*/
+	Pieces taken from Dojo source to make this file stand-alone
+-->
+<html>
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<script type="text/javascript" src="isAllowed.js"></script>
+	<!--
+	BY DEFAULT THIS FILE DOES NOT WORK SO THAT YOU DON'T ACCIDENTALLY EXPOSE
+	ALL OF YOUR XHR-ENABLED SERVICES ON YOUR SITE. 
+	
+	In order for this file to work, you should define a function with the following signature:
+	
+	function isAllowedRequest(request){
+		return false;	
+	}
+	
+	Return true out of the function if you want to allow the cross-domain request.
+	
+	DON'T DEFINE THIS FUNCTION IN THIS FILE! Define it in a separate file called isAllowed.js
+	and include it in this page with a script tag that has a src attribute pointing to the file.
+	See the very first script tag in this file for an example. You do not have to place the
+	script file in the same directory as this file, just update the path above if you move it
+	somewhere else.
+	
+	Customize the isAllowedRequest function to restrict what types of requests are allowed
+	for this server. The request object has the following properties:
+	- requestHeaders: an object with the request headers that are to be added to
+	                  the XHR request.
+	- method: the HTTP method (GET, POST, etc...)
+	- uri: The URI for the request.
+	- data: The URL-encoded data for the request. For a GET request, this would
+	        be the querystring parameters. For a POST request, it wll be the
+	        body data.
+	-->
+	<script type="text/javascript">
+	// <!--
+	/*
+	See xip_client.html for more info on the xip fragment identifier protocol.
+	
+	This page uses Dojo to do the actual XMLHttpRequest (XHR) to the server, but you could
+	replace the Dojo references with your own XHR code if you like. But keep the other xip
+	code to communicate back to the xip client frame.
+	*/
+	djConfig = {
+		parseWidgets: false,
+		baseScriptUri: "./"
+	}
+	// -->
+	</script>
+	<script type="text/javascript">
+		dojo = {};
+		dojo.hostenv = {};
+		// These are in order of decreasing likelihood; this will change in time.
+		dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+		
+		dojo.hostenv.getXmlhttpObject = function(){
+				var http = null;
+			var last_e = null;
+			try{ http = new XMLHttpRequest(); }catch(e){}
+				if(!http){
+				for(var i=0; i<3; ++i){
+					var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
+					try{
+						http = new ActiveXObject(progid);
+					}catch(e){
+						last_e = e;
+					}
+		
+					if(http){
+						dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
+						break;
+					}
+				}
+		
+				/*if(http && !http.toString) {
+					http.toString = function() { "[object XMLHttpRequest]"; }
+				}*/
+			}
+		
+			if(!http){
+				throw "xip_server.html: XMLHTTP not available: " + last_e;
+			}
+		
+			return http;
+		}
+
+		dojo.setHeaders = function(http, headers){
+			if(headers) {
+				for(var header in headers) {
+					var headerValue = headers[header];
+					http.setRequestHeader(header, headerValue);
+				}
+			}
+		}
+
+	//Choosing 1024 as an arbitrary limit for the URL sizes.
+	//Anecdotal info seems to indicate this is safe to use in all
+	//modern browsers.
+	xipUrlLimit = 1024;
+	xipIdCounter = 1;
+
+	function xipServerInit(){
+		xipCurrentHash = "";
+		xipRequestMessage = "";
+		xipResponseParts = [];
+		xipPartIndex = 0;
+	}
+
+	function xipServerLoaded(){
+		xipServerInit();
+		xipClientUrl = decodeURIComponent(window.location.hash.substring(1, window.location.hash.length));
+		
+		setInterval(pollHash, 10);
+		setClientUrl("loaded");
+	}
+
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					messageReceived(newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function messageReceived(urlEncodedMessage){
+		//Split off xip header.
+		var parts = urlEncodedMessage.split(":");
+		var command = parts[1];
+		urlEncodedMessage = parts[2] || "";
+		
+		switch(command){
+			case "ok":
+				sendResponsePart();
+				break;
+			case "start":
+				xipRequestMessage = "";
+				xipRequestMessage += urlEncodedMessage;
+				setClientUrl("ok");
+				break;
+			case "part":
+				xipRequestMessage += urlEncodedMessage;			
+				setClientUrl("ok");
+				break;
+			case "end":
+				setClientUrl("ok");
+				xipRequestMessage += urlEncodedMessage;
+				sendXhr();
+				break;
+		}
+	}
+
+	function sendResponse(urlEncodedData){
+		//Break the message into parts, if necessary.
+		xipResponseParts = [];
+		var resData = urlEncodedData;
+		var urlLength = xipClientUrl.length;
+		var partLength = xipUrlLimit - urlLength;
+		var resIndex = 0;
+
+		while((resData.length - resIndex) + urlLength > xipUrlLimit){
+			xipResponseParts.push(resData.substring(resIndex, resIndex + partLength));
+			resIndex += partLength;
+		}
+		xipResponseParts.push(resData.substring(resIndex, resData.length));
+		
+		xipPartIndex = 0;
+		sendResponsePart();
+	}
+	
+	function sendResponsePart(){
+		if(xipPartIndex < xipResponseParts.length){
+			//Get the message part.
+			var partData = xipResponseParts[xipPartIndex];
+			
+			//Get the command.
+			var cmd = "part";
+			if(xipPartIndex + 1 == xipResponseParts.length){
+				cmd = "end";
+			}else if (xipPartIndex == 0){
+				cmd = "start";
+			}
+
+			setClientUrl(cmd, partData);
+			xipPartIndex++;
+		}else{
+			xipServerInit();
+		}
+	}
+
+	function setClientUrl(cmd, message){
+		var clientUrl = xipClientUrl + "#" + (xipIdCounter++) + ":" + cmd;
+		if(message){
+			clientUrl += ":" + message;
+		}
+
+		//Safari won't let us replace across domains.
+		if(navigator.userAgent.indexOf("Safari") == -1){
+			parent.location.replace(clientUrl);
+		}else{
+			parent.location = clientUrl;
+		}
+	}
+
+	function xhrDone(xhr){
+		/* Need to pull off and return the following data:
+			- responseHeaders
+			- status
+			- statusText
+			- responseText
+		*/
+		var response = {};
+	
+		if(typeof(xhr.getAllResponseHeaders) != "undefined"){
+			var allHeaders = xhr.getAllResponseHeaders();
+			if(allHeaders){
+				response.responseHeaders = allHeaders;
+			}
+		}
+		
+		if(xhr.status == 0 || xhr.status){
+			response.status = xhr.status;
+		}
+		
+		if(xhr.statusText){
+			response.statusText = xhr.statusText;
+		}
+		
+		if(xhr.responseText){
+			response.responseText = xhr.responseText;
+		}
+	
+		//Build a string of the response object.
+		var result = "";
+		var isFirst = true;
+		for (var param in response){
+			if(isFirst){
+				isFirst = false;
+			}else{
+				result += "&";
+			}
+			result += param + "=" + encodeURIComponent(response[param]);
+		}
+		sendResponse(result);
+	}
+
+	function sendXhr(){
+		var request = {};
+		var nvPairs = xipRequestMessage.split("&");
+		var i = 0;
+		var nameValue = null;
+		for(i = 0; i < nvPairs.length; i++){
+			if(nvPairs[i]){
+				var nameValue = nvPairs[i].split("=");
+				request[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+			}
+		}
+
+		//Split up the request headers, if any.
+		var headers = {};
+		if(request.requestHeaders){
+			nvPairs = request.requestHeaders.split("\r\n");
+			for(i = 0; i < nvPairs.length; i++){
+				if(nvPairs[i]){
+					nameValue = nvPairs[i].split(": ");
+					headers[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+				}
+			}
+
+			request.requestHeaders = headers;
+		}
+		
+		if(isAllowedRequest(request)){
+		
+			//The request is allowed, so set up the XHR object.
+			var xhr = dojo.hostenv.getXmlhttpObject();
+			
+			//Start timer to look for readyState.
+			var xhrIntervalId = setInterval(function(){
+			
+				if(xhr.readyState == 4){
+					clearInterval(xhrIntervalId);
+					xhrDone(xhr);
+				}
+			}, 10);
+
+			//Actually start up the XHR request.
+			xhr.open(request.method, request.uri, true);
+			dojo.setHeaders(xhr, request.requestHeaders);
+			
+			var content = "";
+			if(request.data){
+				content = request.data;
+			}
+
+			try{
+				xhr.send(content);
+			}catch(e){
+				if(typeof xhr.abort == "function"){
+					xhr.abort();
+					xhrDone({status: 404, statusText: "xip_server.html error: " + e});
+				}
+			}
+		}
+	}
+
+	window.onload = xipServerLoaded;
+	// -->
+	</script>
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_server.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the the file
+	that should go on the server that will actually be doing the XHR request.</p>
+</body>
+</html>

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,14 @@
+
+dojo.provide("dojo.json");dojo.require("dojo.lang.func");dojo.require("dojo.string.extras");dojo.require("dojo.AdapterRegistry");dojo.json = {jsonRegistry: new dojo.AdapterRegistry(),register: function(			name,check,wrap,override){dojo.json.jsonRegistry.register(name, check, wrap, override);},evalJson: function( json){try {return eval("(" + json + ")");}catch(e){dojo.debug(e);return json;}},serialize: function( o){var objtype = typeof(o);if(objtype == "undefined"){return "undefined";}else if((objtype == "number")||(objtype == "boolean")){return o + "";}else if(o === null){return "null";}
+if (objtype == "string") { return dojo.string.escapeString(o); }
+var me = arguments.callee;var newObj;if(typeof(o.__json__) == "function"){newObj = o.__json__();if(o !== newObj){return me(newObj);}}
+if(typeof(o.json) == "function"){newObj = o.json();if (o !== newObj) {return me(newObj);}}
+if(objtype != "function" && typeof(o.length) == "number"){var res = [];for(var i = 0; i < o.length; i++){var val = me(o[i]);if(typeof(val) != "string"){val = "undefined";}
+res.push(val);}
+return "[" + res.join(",") + "]";}
+try {window.o = o;newObj = dojo.json.jsonRegistry.match(o);return me(newObj);}catch(e){}
+if(objtype == "function"){return null;}
+res = [];for (var k in o){var useKey;if (typeof(k) == "number"){useKey = '"' + k + '"';}else if (typeof(k) == "string"){useKey = dojo.string.escapeString(k);}else{continue;}
+val = me(o[k]);if(typeof(val) != "string"){continue;}
+res.push(useKey + ":" + val);}
+return "{" + res.join(",") + "}";}};
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,2 @@
+
+dojo.provide("dojo.lang");dojo.require("dojo.lang.common");dojo.deprecated("dojo.lang", "replaced by dojo.lang.common", "0.5");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,4 @@
+
+dojo.kwCompoundRequire({common: [
+"dojo.lang.common","dojo.lang.assert","dojo.lang.array","dojo.lang.type","dojo.lang.func","dojo.lang.extras","dojo.lang.repr","dojo.lang.declare"
+]});dojo.provide("dojo.lang.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,28 @@
+
+dojo.provide("dojo.lang.array");dojo.require("dojo.lang.common");dojo.lang.has = function(obj, name){try{return typeof obj[name] != "undefined";}catch(e){ return false; }}
+dojo.lang.isEmpty = function(obj){if(dojo.lang.isObject(obj)){var tmp = {};var count = 0;for(var x in obj){if(obj[x] && (!tmp[x])){count++;break;}}
+return count == 0;}else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)){return obj.length == 0;}}
+dojo.lang.map = function(arr, obj, unary_func){var isString = dojo.lang.isString(arr);if(isString){arr = arr.split("");}
+if(dojo.lang.isFunction(obj)&&(!unary_func)){unary_func = obj;obj = dj_global;}else if(dojo.lang.isFunction(obj) && unary_func){var tmpObj = obj;obj = unary_func;unary_func = tmpObj;}
+if(Array.map){var outArr = Array.map(arr, unary_func, obj);}else{var outArr = [];for(var i=0;i<arr.length;++i){outArr.push(unary_func.call(obj, arr[i]));}}
+if(isString) {return outArr.join("");} else {return outArr;}}
+dojo.lang.reduce = function(arr, initialValue, obj, binary_func){var reducedValue = initialValue;var ob = obj ? obj : dj_global;dojo.lang.map(arr,function(val){reducedValue = binary_func.call(ob, reducedValue, val);}
+);return reducedValue;}
+dojo.lang.forEach = function(anArray, callback, thisObject){if(dojo.lang.isString(anArray)){anArray = anArray.split("");}
+if(Array.forEach){Array.forEach(anArray, callback, thisObject);}else{if(!thisObject){thisObject=dj_global;}
+for(var i=0,l=anArray.length; i<l; i++){callback.call(thisObject, anArray[i], i, anArray);}}}
+dojo.lang._everyOrSome = function(every, arr, callback, thisObject){if(dojo.lang.isString(arr)){arr = arr.split("");}
+if(Array.every){return Array[ every ? "every" : "some" ](arr, callback, thisObject);}else{if(!thisObject){thisObject = dj_global;}
+for(var i=0,l=arr.length; i<l; i++){var result = callback.call(thisObject, arr[i], i, arr);if(every && !result){return false;}else if((!every)&&(result)){return true;}}
+return Boolean(every);}}
+dojo.lang.every = function(arr, callback, thisObject){return this._everyOrSome(true, arr, callback, thisObject);}
+dojo.lang.some = function(arr, callback, thisObject){return this._everyOrSome(false, arr, callback, thisObject);}
+dojo.lang.filter = function(arr, callback, thisObject){var isString = dojo.lang.isString(arr);if(isString){ arr = arr.split(""); }
+var outArr;if(Array.filter){outArr = Array.filter(arr, callback, thisObject);} else {if(!thisObject){if(arguments.length >= 3){ dojo.raise("thisObject doesn't exist!"); }
+thisObject = dj_global;}
+outArr = [];for(var i = 0; i < arr.length; i++){if(callback.call(thisObject, arr[i], i, arr)){outArr.push(arr[i]);}}}
+if(isString){return outArr.join("");} else {return outArr;}}
+dojo.lang.unnest = function(){var out = [];for(var i = 0; i < arguments.length; i++){if(dojo.lang.isArrayLike(arguments[i])){var add = dojo.lang.unnest.apply(this, arguments[i]);out = out.concat(add);}else{out.push(arguments[i]);}}
+return out;}
+dojo.lang.toArray = function(arrayLike, startOffset){var array = [];for(var i = startOffset||0; i < arrayLike.length; i++){array.push(arrayLike[i]);}
+return array;}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,10 @@
+
+dojo.provide("dojo.lang.assert");dojo.require("dojo.lang.common");dojo.require("dojo.lang.array");dojo.require("dojo.lang.type");dojo.lang.assert = function( booleanValue,  message){if(!booleanValue){var errorMessage = "An assert statement failed.\n" +
+"The method dojo.lang.assert() was called with a 'false' value.\n";if(message){errorMessage += "Here's the assert message:\n" + message + "\n";}
+throw new Error(errorMessage);}}
+dojo.lang.assertType = function( value,  type,  keywordParameters){if (dojo.lang.isString(keywordParameters)) {dojo.deprecated('dojo.lang.assertType(value, type, "message")', 'use dojo.lang.assertType(value, type) instead', "0.5");}
+if(!dojo.lang.isOfType(value, type, keywordParameters)){if(!dojo.lang.assertType._errorMessage){dojo.lang.assertType._errorMessage = "Type mismatch: dojo.lang.assertType() failed.";}
+dojo.lang.assert(false, dojo.lang.assertType._errorMessage);}}
+dojo.lang.assertValidKeywords = function( object,  expectedProperties,  message){var key;if(!message){if(!dojo.lang.assertValidKeywords._errorMessage){dojo.lang.assertValidKeywords._errorMessage = "In dojo.lang.assertValidKeywords(), found invalid keyword:";}
+message = dojo.lang.assertValidKeywords._errorMessage;}
+if(dojo.lang.isArray(expectedProperties)){for(key in object){if(!dojo.lang.inArray(expectedProperties, key)){dojo.lang.assert(false, message + " " + key);}}}else{for(key in object){if(!(key in expectedProperties)){dojo.lang.assert(false, message + " " + key);}}}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,42 @@
+
+dojo.provide("dojo.lang.common");dojo.lang.inherits = function( subclass,  superclass){if(typeof superclass != 'function'){dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: ["+subclass+"']");}
+subclass.prototype = new superclass();subclass.prototype.constructor = subclass;subclass.superclass = superclass.prototype;subclass['super'] = superclass.prototype;}
+dojo.lang._mixin = function( obj,  props){var tobj = {};for(var x in props){if((typeof tobj[x] == "undefined") || (tobj[x] != props[x])){obj[x] = props[x];}}
+if(dojo.render.html.ie
+&& (typeof(props["toString"]) == "function")
+&& (props["toString"] != obj["toString"])
+&& (props["toString"] != tobj["toString"]))
+{obj.toString = props.toString;}
+return obj;}
+dojo.lang.mixin = function( obj, props){for(var i=1, l=arguments.length; i<l; i++){dojo.lang._mixin(obj, arguments[i]);}
+return obj;}
+dojo.lang.extend = function( constructor,  props){for(var i=1, l=arguments.length; i<l; i++){dojo.lang._mixin(constructor.prototype, arguments[i]);}
+return constructor;}
+dojo.inherits = dojo.lang.inherits;dojo.mixin = dojo.lang.mixin;dojo.extend = dojo.lang.extend;dojo.lang.find = function(			array,value,identity,findLast){if(!dojo.lang.isArrayLike(array) && dojo.lang.isArrayLike(value)) {dojo.deprecated('dojo.lang.find(value, array)', 'use dojo.lang.find(array, value) instead', "0.5");var temp = array;array = value;value = temp;}
+var isString = dojo.lang.isString(array);if(isString) { array = array.split(""); }
+if(findLast) {var step = -1;var i = array.length - 1;var end = -1;} else {var step = 1;var i = 0;var end = array.length;}
+if(identity){while(i != end) {if(array[i] === value){ return i; }
+i += step;}}else{while(i != end) {if(array[i] == value){ return i; }
+i += step;}}
+return -1;}
+dojo.lang.indexOf = dojo.lang.find;dojo.lang.findLast = function( array,  value,  identity){return dojo.lang.find(array, value, identity, true);}
+dojo.lang.lastIndexOf = dojo.lang.findLast;dojo.lang.inArray = function(array , value ){return dojo.lang.find(array, value) > -1;}
+dojo.lang.isObject = function( it){if(typeof it == "undefined"){ return false; }
+return (typeof it == "object" || it === null || dojo.lang.isArray(it) || dojo.lang.isFunction(it));}
+dojo.lang.isArray = function( it){return (it && it instanceof Array || typeof it == "array");}
+dojo.lang.isArrayLike = function( it){if((!it)||(dojo.lang.isUndefined(it))){ return false; }
+if(dojo.lang.isString(it)){ return false; }
+if(dojo.lang.isFunction(it)){ return false; }
+if(dojo.lang.isArray(it)){ return true; }
+if((it.tagName)&&(it.tagName.toLowerCase()=='form')){ return false; }
+if(dojo.lang.isNumber(it.length) && isFinite(it.length)){ return true; }
+return false;}
+dojo.lang.isFunction = function( it){if(!it){ return false; }
+if((typeof(it) == "function") && (it == "[object NodeList]")) { return false; }
+return (it instanceof Function || typeof it == "function");}
+dojo.lang.isString = function( it){return (typeof it == "string" || it instanceof String);}
+dojo.lang.isAlien = function( it){if(!it){ return false; }
+return !dojo.lang.isFunction() && /\{\s*\[native code\]\s*\}/.test(String(it));}
+dojo.lang.isBoolean = function( it){return (it instanceof Boolean || typeof it == "boolean");}
+dojo.lang.isNumber = function( it){return (it instanceof Number || typeof it == "number");}
+dojo.lang.isUndefined = function( it){return ((typeof(it) == "undefined")&&(it == undefined));}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,17 @@
+
+dojo.provide("dojo.lang.declare");dojo.require("dojo.lang.common");dojo.require("dojo.lang.extras");dojo.lang.declare = function( className,  superclass,  init,  props){if((dojo.lang.isFunction(props))||((!props)&&(!dojo.lang.isFunction(init)))){var temp = props;props = init;init = temp;}
+var mixins = [ ];if(dojo.lang.isArray(superclass)){mixins = superclass;superclass = mixins.shift();}
+if(!init){init = dojo.evalObjPath(className, false);if((init)&&(!dojo.lang.isFunction(init))){ init = null };}
+var ctor = dojo.lang.declare._makeConstructor();var scp = (superclass ? superclass.prototype : null);if(scp){scp.prototyping = true;ctor.prototype = new superclass();scp.prototyping = false;}
+ctor.superclass = scp;ctor.mixins = mixins;for(var i=0,l=mixins.length; i<l; i++){dojo.lang.extend(ctor, mixins[i].prototype);}
+ctor.prototype.initializer = null;ctor.prototype.declaredClass = className;if(dojo.lang.isArray(props)){dojo.lang.extend.apply(dojo.lang, [ctor].concat(props));}else{dojo.lang.extend(ctor, (props)||{});}
+dojo.lang.extend(ctor, dojo.lang.declare._common);ctor.prototype.constructor = ctor;ctor.prototype.initializer = (ctor.prototype.initializer)||(init)||(function(){});dojo.lang.setObjPathValue(className, ctor, null, true);return ctor;}
+dojo.lang.declare._makeConstructor = function() {return function(){var self = this._getPropContext();var s = self.constructor.superclass;if((s)&&(s.constructor)){if(s.constructor==arguments.callee){this._inherited("constructor", arguments);}else{this._contextMethod(s, "constructor", arguments);}}
+var ms = (self.constructor.mixins)||([]);for(var i=0, m; (m=ms[i]); i++) {(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this, arguments);}
+if((!this.prototyping)&&(self.initializer)){self.initializer.apply(this, arguments);}}}
+dojo.lang.declare._common = {_getPropContext: function() { return (this.___proto||this); },_contextMethod: function(ptype, method, args){var result, stack = this.___proto;this.___proto = ptype;try { result = ptype[method].apply(this,(args||[])); }
+catch(e) { throw e; }
+finally { this.___proto = stack; }
+return result;},_inherited: function(prop, args){var p = this._getPropContext();do{if((!p.constructor)||(!p.constructor.superclass)){return;}
+p = p.constructor.superclass;}while(!(prop in p));return (dojo.lang.isFunction(p[prop]) ? this._contextMethod(p, prop, args) : p[prop]);}}
+dojo.declare = dojo.lang.declare;
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,17 @@
+
+dojo.provide("dojo.lang.extras");dojo.require("dojo.lang.common");dojo.lang.setTimeout = function(func, delay ){var context = window, argsStart = 2;if(!dojo.lang.isFunction(func)){context = func;func = delay;delay = arguments[2];argsStart++;}
+if(dojo.lang.isString(func)){func = context[func];}
+var args = [];for (var i = argsStart; i < arguments.length; i++){args.push(arguments[i]);}
+return dojo.global().setTimeout(function () { func.apply(context, args); }, delay);}
+dojo.lang.clearTimeout = function(timer){dojo.global().clearTimeout(timer);}
+dojo.lang.getNameInObj = function(ns, item){if(!ns){ ns = dj_global; }
+for(var x in ns){if(ns[x] === item){return new String(x);}}
+return null;}
+dojo.lang.shallowCopy = function(obj, deep){var i, ret;if(obj === null){  return null; }
+if(dojo.lang.isObject(obj)){ret = new obj.constructor();for(i in obj){if(dojo.lang.isUndefined(ret[i])){ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];}}} else if(dojo.lang.isArray(obj)){ret = [];for(i=0; i<obj.length; i++){ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];}} else {ret = obj;}
+return ret;}
+dojo.lang.firstValued = function(){for(var i = 0; i < arguments.length; i++){if(typeof arguments[i] != "undefined"){return arguments[i];}}
+return undefined;}
+dojo.lang.getObjPathValue = function(objpath, context, create){with(dojo.parseObjPath(objpath, context, create)){return dojo.evalProp(prop, obj, create);}}
+dojo.lang.setObjPathValue = function(objpath, value, context, create){if(arguments.length < 4){create = true;}
+with(dojo.parseObjPath(objpath, context, create)){if(obj && (create || (prop in obj))){obj[prop] = value;}}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,19 @@
+
+dojo.provide("dojo.lang.func");dojo.require("dojo.lang.common");dojo.lang.hitch = function(thisObject, method){var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function(){};return function() {return fcn.apply(thisObject, arguments);};}
+dojo.lang.anonCtr = 0;dojo.lang.anon = {};dojo.lang.nameAnonFunc = function(anonFuncPtr, namespaceObj, searchForNames){var nso = (namespaceObj || dojo.lang.anon);if( (searchForNames) ||
+((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)) ){for(var x in nso){try{if(nso[x] === anonFuncPtr){return x;}}catch(e){}}}
+var ret = "__"+dojo.lang.anonCtr++;while(typeof nso[ret] != "undefined"){ret = "__"+dojo.lang.anonCtr++;}
+nso[ret] = anonFuncPtr;return ret;}
+dojo.lang.forward = function(funcName){return function(){return this[funcName].apply(this, arguments);};}
+dojo.lang.curry = function(ns, func ){var outerArgs = [];ns = ns||dj_global;if(dojo.lang.isString(func)){func = ns[func];}
+for(var x=2; x<arguments.length; x++){outerArgs.push(arguments[x]);}
+var ecount = (func["__preJoinArity"]||func.length) - outerArgs.length;function gather(nextArgs, innerArgs, expected){var texpected = expected;var totalArgs = innerArgs.slice(0);for(var x=0; x<nextArgs.length; x++){totalArgs.push(nextArgs[x]);}
+expected = expected-nextArgs.length;if(expected<=0){var res = func.apply(ns, totalArgs);expected = texpected;return res;}else{return function(){return gather(arguments,totalArgs,expected);};}}
+return gather([], outerArgs, ecount);}
+dojo.lang.curryArguments = function(ns, func, args, offset){var targs = [];var x = offset||0;for(x=offset; x<args.length; x++){targs.push(args[x]);}
+return dojo.lang.curry.apply(dojo.lang, [ns, func].concat(targs));}
+dojo.lang.tryThese = function(){for(var x=0; x<arguments.length; x++){try{if(typeof arguments[x] == "function"){var ret = (arguments[x]());if(ret){return ret;}}}catch(e){dojo.debug(e);}}}
+dojo.lang.delayThese = function(farr, cb, delay, onend){if(!farr.length){if(typeof onend == "function"){onend();}
+return;}
+if((typeof delay == "undefined")&&(typeof cb == "number")){delay = cb;cb = function(){};}else if(!cb){cb = function(){};if(!delay){ delay = 0; }}
+setTimeout(function(){(farr.shift())();cb();dojo.lang.delayThese(farr, cb, delay, onend);}, delay);}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,10 @@
+
+dojo.provide("dojo.lang.repr");dojo.require("dojo.lang.common");dojo.require("dojo.AdapterRegistry");dojo.require("dojo.string.extras");dojo.lang.reprRegistry = new dojo.AdapterRegistry();dojo.lang.registerRepr = function(name, check, wrap, override){dojo.lang.reprRegistry.register(name, check, wrap, override);};dojo.lang.repr = function(obj){if(typeof(obj) == "undefined"){return "undefined";}else if(obj === null){return "null";}
+try{if(typeof(obj["__repr__"]) == 'function'){return obj["__repr__"]();}else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){return obj["repr"]();}
+return dojo.lang.reprRegistry.match(obj);}catch(e){if(typeof(obj.NAME) == 'string' && (
+obj.toString == Function.prototype.toString ||
+obj.toString == Object.prototype.toString
+)){return obj.NAME;}}
+if(typeof(obj) == "function"){obj = (obj + "").replace(/^\s+/, "");var idx = obj.indexOf("{");if(idx != -1){obj = obj.substr(0, idx) + "{...}";}}
+return obj + "";}
+dojo.lang.reprArrayLike = function(arr){try{var na = dojo.lang.map(arr, dojo.lang.repr);return "[" + na.join(", ") + "]";}catch(e){ }};(function(){var m = dojo.lang;m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);m.registerRepr("string", m.isString, m.reprString);m.registerRepr("numbers", m.isNumber, m.reprNumber);m.registerRepr("boolean", m.isBoolean, m.reprNumber);})();
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,8 @@
+
+dojo.provide("dojo.lang.timing.Streamer");dojo.require("dojo.lang.timing.Timer");dojo.lang.timing.Streamer = function(
+input,output,interval,minimum,initialData
+){var self = this;var queue = [];this.interval = interval || 1000;this.minimumSize = minimum || 10;this.inputFunction = input || function(q){ };this.outputFunction = output || function(point){ };var timer = new dojo.lang.timing.Timer(this.interval);var tick = function(){self.onTick(self);if(queue.length < self.minimumSize){self.inputFunction(queue);}
+var obj = queue.shift();while(typeof(obj) == "undefined" && queue.length > 0){obj = queue.shift();}
+if(typeof(obj) == "undefined"){self.stop();return;}
+self.outputFunction(obj);};this.setInterval = function(ms){this.interval = ms;timer.setInterval(ms);};this.onTick = function(obj){ };this.start = function(){if(typeof(this.inputFunction) == "function" && typeof(this.outputFunction) == "function"){timer.start();return;}
+dojo.raise("You cannot start a Streamer without an input and an output function.");};this.onStart = function(){ };this.stop = function(){timer.stop();};this.onStop = function(){ };timer.onTick = this.tick;timer.onStart = this.onStart;timer.onStop = this.onStop;if(initialData){queue.concat(initialData);}};
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,5 @@
+
+dojo.provide("dojo.lang.timing.Timer");dojo.require("dojo.lang.func");dojo.lang.timing.Timer = function( interval){this.timer = null;this.isRunning = false;this.interval = interval;this.onStart = null;this.onStop = null;};dojo.extend(dojo.lang.timing.Timer, {onTick : function(){},setInterval : function(interval){if (this.isRunning){dj_global.clearInterval(this.timer);}
+this.interval = interval;if (this.isRunning){this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);}},start : function(){if (typeof this.onStart == "function"){this.onStart();}
+this.isRunning = true;this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);},stop : function(){if (typeof this.onStop == "function"){this.onStop();}
+this.isRunning = false;dj_global.clearInterval(this.timer);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,2 @@
+
+dojo.provide("dojo.lang.timing.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,61 @@
+
+dojo.provide("dojo.lang.type");dojo.require("dojo.lang.common");dojo.lang.whatAmI = function(value) {dojo.deprecated("dojo.lang.whatAmI", "use dojo.lang.getType instead", "0.5");return dojo.lang.getType(value);}
+dojo.lang.whatAmI.custom = {};dojo.lang.getType = function( value){try {if(dojo.lang.isArray(value)) {return "array";}
+if(dojo.lang.isFunction(value)) {return "function";}
+if(dojo.lang.isString(value)) {return "string";}
+if(dojo.lang.isNumber(value)) {return "number";}
+if(dojo.lang.isBoolean(value)) {return "boolean";}
+if(dojo.lang.isAlien(value)) {return "alien";}
+if(dojo.lang.isUndefined(value)) {return "undefined";}
+for(var name in dojo.lang.whatAmI.custom) {if(dojo.lang.whatAmI.custom[name](value)) {return name;}}
+if(dojo.lang.isObject(value)) {return "object";}} catch(e) {}
+return "unknown";}
+dojo.lang.isNumeric = function( value){return (!isNaN(value)
+&& isFinite(value)
+&& (value != null)
+&& !dojo.lang.isBoolean(value)
+&& !dojo.lang.isArray(value)
+&& !/^\s*$/.test(value)
+);}
+dojo.lang.isBuiltIn = function( value){return (dojo.lang.isArray(value)
+|| dojo.lang.isFunction(value)
+|| dojo.lang.isString(value)
+|| dojo.lang.isNumber(value)
+|| dojo.lang.isBoolean(value)
+|| (value == null)
+|| (value instanceof Error)
+|| (typeof value == "error")
+);}
+dojo.lang.isPureObject = function( value){return ((value != null)
+&& dojo.lang.isObject(value)
+&& value.constructor == Object
+);}
+dojo.lang.isOfType = function( value,  type,  keywordParameters) {var optional = false;if (keywordParameters) {optional = keywordParameters["optional"];}
+if (optional && ((value === null) || dojo.lang.isUndefined(value))) {return true;}
+if(dojo.lang.isArray(type)){var arrayOfTypes = type;for(var i in arrayOfTypes){var aType = arrayOfTypes[i];if(dojo.lang.isOfType(value, aType)) {return true;}}
+return false;}else{if(dojo.lang.isString(type)){type = type.toLowerCase();}
+switch (type) {case Array:
+case "array":
+return dojo.lang.isArray(value);case Function:
+case "function":
+return dojo.lang.isFunction(value);case String:
+case "string":
+return dojo.lang.isString(value);case Number:
+case "number":
+return dojo.lang.isNumber(value);case "numeric":
+return dojo.lang.isNumeric(value);case Boolean:
+case "boolean":
+return dojo.lang.isBoolean(value);case Object:
+case "object":
+return dojo.lang.isObject(value);case "pureobject":
+return dojo.lang.isPureObject(value);case "builtin":
+return dojo.lang.isBuiltIn(value);case "alien":
+return dojo.lang.isAlien(value);case "undefined":
+return dojo.lang.isUndefined(value);case null:
+case "null":
+return (value === null);case "optional":
+dojo.deprecated('dojo.lang.isOfType(value, [type, "optional"])', 'use dojo.lang.isOfType(value, type, {optional: true} ) instead', "0.5");return ((value === null) || dojo.lang.isUndefined(value));default:
+if (dojo.lang.isFunction(type)) {return (value instanceof type);} else {dojo.raise("dojo.lang.isOfType() was passed an invalid type");}}}
+dojo.raise("If we get here, it means a bug was introduced above.");}
+dojo.lang.getObject=function( str){var parts=str.split("."), i=0, obj=dj_global;do{obj=obj[parts[i++]];}while(i<parts.length&&obj);return (obj!=dj_global)?obj:null;}
+dojo.lang.doesObjectExist=function( str){var parts=str.split("."), i=0, obj=dj_global;do{obj=obj[parts[i++]];}while(i<parts.length&&obj);return (obj&&obj!=dj_global);}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/Animation.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/Animation.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/Animation.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/Animation.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,58 @@
+
+dojo.provide("dojo.lfx.Animation");dojo.require("dojo.lang.func");dojo.lfx.Line = function( start,  end){this.start = start;this.end = end;if(dojo.lang.isArray(start)){var diff = [];dojo.lang.forEach(this.start, function(s,i){diff[i] = this.end[i] - s;}, this);this.getValue = function( n){var res = [];dojo.lang.forEach(this.start, function(s, i){res[i] = (diff[i] * n) + s;}, this);return res;}}else{var diff = end - start;this.getValue = function( n){return (diff * n) + this.start;}}}
+dojo.lfx.easeDefault = function( n){if(dojo.render.html.khtml){return (parseFloat("0.5")+((Math.sin( (n+parseFloat("1.5")) * Math.PI))/2));}else{return (0.5+((Math.sin( (n+1.5) * Math.PI))/2));}}
+dojo.lfx.easeIn = function( n){return Math.pow(n, 3);}
+dojo.lfx.easeOut = function( n){return ( 1 - Math.pow(1 - n, 3) );}
+dojo.lfx.easeInOut = function( n){return ( (3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3)) );}
+dojo.lfx.IAnimation = function(){}
+dojo.lang.extend(dojo.lfx.IAnimation, {curve: null,duration: 1000,easing: null,repeatCount: 0,rate: 25,handler: null,beforeBegin: null,onBegin: null,onAnimate: null,onEnd: null,onPlay: null,onPause: null,onStop: null,play: null,pause: null,stop: null,connect: function( evt,  scope,  newFunc){if(!newFunc){newFunc = scope;scope = this;}
+newFunc = dojo.lang.hitch(scope, newFunc);var oldFunc = this[evt]||function(){};this[evt] = function(){var ret = oldFunc.apply(this, arguments);newFunc.apply(this, arguments);return ret;}
+return this;},fire: function( evt,  args){if(this[evt]){this[evt].apply(this, (args||[]));}
+return this;},repeat: function( count){this.repeatCount = count;return this;},_active: false,_paused: false});dojo.lfx.Animation = function(	 handlers,duration,curve,easing,repeatCount,rate){dojo.lfx.IAnimation.call(this);if(dojo.lang.isNumber(handlers)||(!handlers && duration.getValue)){rate = repeatCount;repeatCount = easing;easing = curve;curve = duration;duration = handlers;handlers = null;}else if(handlers.getValue||dojo.lang.isArray(handlers)){rate = easing;repeatCount = curve;easing = duration;curve = handlers;duration = null;handlers = null;}
+if(dojo.lang.isArray(curve)){this.curve = new dojo.lfx.Line(curve[0], curve[1]);}else{this.curve = curve;}
+if(duration != null && duration > 0){ this.duration = duration; }
+if(repeatCount){ this.repeatCount = repeatCount; }
+if(rate){ this.rate = rate; }
+if(handlers){dojo.lang.forEach([
+"handler", "beforeBegin", "onBegin","onEnd", "onPlay", "onStop", "onAnimate"
+], function(item){if(handlers[item]){this.connect(item, handlers[item]);}}, this);}
+if(easing && dojo.lang.isFunction(easing)){this.easing=easing;}}
+dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation);dojo.lang.extend(dojo.lfx.Animation, {_startTime: null,_endTime: null,_timer: null,_percent: 0,_startRepeatCount: 0,play: function( delay,  gotoStart){if(gotoStart){clearTimeout(this._timer);this._active = false;this._paused = false;this._percent = 0;}else if(this._active && !this._paused){return this;}
+this.fire("handler", ["beforeBegin"]);this.fire("beforeBegin");if(delay > 0){setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);return this;}
+this._startTime = new Date().valueOf();if(this._paused){this._startTime -= (this.duration * this._percent / 100);}
+this._endTime = this._startTime + this.duration;this._active = true;this._paused = false;var step = this._percent / 100;var value = this.curve.getValue(step);if(this._percent == 0 ){if(!this._startRepeatCount){this._startRepeatCount = this.repeatCount;}
+this.fire("handler", ["begin", value]);this.fire("onBegin", [value]);}
+this.fire("handler", ["play", value]);this.fire("onPlay", [value]);this._cycle();return this;},pause: function(){clearTimeout(this._timer);if(!this._active){ return this; }
+this._paused = true;var value = this.curve.getValue(this._percent / 100);this.fire("handler", ["pause", value]);this.fire("onPause", [value]);return this;},gotoPercent: function( pct,  andPlay){clearTimeout(this._timer);this._active = true;this._paused = true;this._percent = pct;if(andPlay){ this.play(); }
+return this;},stop: function( gotoEnd){clearTimeout(this._timer);var step = this._percent / 100;if(gotoEnd){step = 1;}
+var value = this.curve.getValue(step);this.fire("handler", ["stop", value]);this.fire("onStop", [value]);this._active = false;this._paused = false;return this;},status: function(){if(this._active){return this._paused ? "paused" : "playing";}else{return "stopped";}
+return this;},_cycle: function(){clearTimeout(this._timer);if(this._active){var curr = new Date().valueOf();var step = (curr - this._startTime) / (this._endTime - this._startTime);if(step >= 1){step = 1;this._percent = 100;}else{this._percent = step * 100;}
+if((this.easing)&&(dojo.lang.isFunction(this.easing))){step = this.easing(step);}
+var value = this.curve.getValue(step);this.fire("handler", ["animate", value]);this.fire("onAnimate", [value]);if( step < 1 ){this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);}else{this._active = false;this.fire("handler", ["end"]);this.fire("onEnd");if(this.repeatCount > 0){this.repeatCount--;this.play(null, true);}else if(this.repeatCount == -1){this.play(null, true);}else{if(this._startRepeatCount){this.repeatCount = this._startRepeatCount;this._startRepeatCount = 0;}}}}
+return this;}});dojo.lfx.Combine = function( animations){dojo.lfx.IAnimation.call(this);this._anims = [];this._animsEnded = 0;var anims = arguments;if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){anims = anims[0];}
+dojo.lang.forEach(anims, function(anim){this._anims.push(anim);anim.connect("onEnd", dojo.lang.hitch(this, "_onAnimsEnded"));}, this);}
+dojo.inherits(dojo.lfx.Combine, dojo.lfx.IAnimation);dojo.lang.extend(dojo.lfx.Combine, {_animsEnded: 0,play: function( delay,  gotoStart){if( !this._anims.length ){ return this; }
+this.fire("beforeBegin");if(delay > 0){setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);return this;}
+if(gotoStart || this._anims[0].percent == 0){this.fire("onBegin");}
+this.fire("onPlay");this._animsCall("play", null, gotoStart);return this;},pause: function(){this.fire("onPause");this._animsCall("pause");return this;},stop: function( gotoEnd){this.fire("onStop");this._animsCall("stop", gotoEnd);return this;},_onAnimsEnded: function(){this._animsEnded++;if(this._animsEnded >= this._anims.length){this.fire("onEnd");}
+return this;},_animsCall: function( funcName){var args = [];if(arguments.length > 1){for(var i = 1 ; i < arguments.length ; i++){args.push(arguments[i]);}}
+var _this = this;dojo.lang.forEach(this._anims, function(anim){anim[funcName](args);}, _this);return this;}});dojo.lfx.Chain = function( animations) {dojo.lfx.IAnimation.call(this);this._anims = [];this._currAnim = -1;var anims = arguments;if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){anims = anims[0];}
+var _this = this;dojo.lang.forEach(anims, function(anim, i, anims_arr){this._anims.push(anim);if(i < anims_arr.length - 1){anim.connect("onEnd", dojo.lang.hitch(this, "_playNext") );}else{anim.connect("onEnd", dojo.lang.hitch(this, function(){ this.fire("onEnd"); }) );}}, this);}
+dojo.inherits(dojo.lfx.Chain, dojo.lfx.IAnimation);dojo.lang.extend(dojo.lfx.Chain, {_currAnim: -1,play: function( delay,  gotoStart){if( !this._anims.length ) { return this; }
+if( gotoStart || !this._anims[this._currAnim] ) {this._currAnim = 0;}
+var currentAnimation = this._anims[this._currAnim];this.fire("beforeBegin");if(delay > 0){setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);return this;}
+if(currentAnimation){if(this._currAnim == 0){this.fire("handler", ["begin", this._currAnim]);this.fire("onBegin", [this._currAnim]);}
+this.fire("onPlay", [this._currAnim]);currentAnimation.play(null, gotoStart);}
+return this;},pause: function(){if( this._anims[this._currAnim] ) {this._anims[this._currAnim].pause();this.fire("onPause", [this._currAnim]);}
+return this;},playPause: function(){if(this._anims.length == 0){ return this; }
+if(this._currAnim == -1){ this._currAnim = 0; }
+var currAnim = this._anims[this._currAnim];if( currAnim ) {if( !currAnim._active || currAnim._paused ) {this.play();} else {this.pause();}}
+return this;},stop: function(){var currAnim = this._anims[this._currAnim];if(currAnim){currAnim.stop();this.fire("onStop", [this._currAnim]);}
+return currAnim;},_playNext: function(){if( this._currAnim == -1 || this._anims.length == 0 ) { return this; }
+this._currAnim++;if( this._anims[this._currAnim] ){this._anims[this._currAnim].play(null, true);}
+return this;}});dojo.lfx.combine = function( animations){var anims = arguments;if(dojo.lang.isArray(arguments[0])){anims = arguments[0];}
+if(anims.length == 1){ return anims[0]; }
+return new dojo.lfx.Combine(anims);}
+dojo.lfx.chain = function( animations){var anims = arguments;if(dojo.lang.isArray(arguments[0])){anims = arguments[0];}
+if(anims.length == 1){ return anims[0]; }
+return new dojo.lfx.Chain(anims);}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/Animation.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/__package__.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/__package__.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,2 @@
+
+dojo.kwCompoundRequire({browser: ["dojo.lfx.html"],dashboard: ["dojo.lfx.html"]});dojo.provide("dojo.lfx.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/extras.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/extras.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/extras.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/extras.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,16 @@
+
+dojo.provide("dojo.lfx.extras");dojo.require("dojo.lfx.html");dojo.require("dojo.lfx.Animation");dojo.lfx.html.fadeWipeIn = function( nodes,  duration,  easing,  callback){nodes = dojo.lfx.html._byId(nodes);var anim = dojo.lfx.combine(
+dojo.lfx.fadeIn(nodes, duration, easing),dojo.lfx.wipeIn(nodes, duration, easing)
+);if(callback){anim.connect("onEnd", function(){callback(nodes, anim);});}
+return anim;}
+dojo.lfx.html.fadeWipeOut = function( nodes,  duration,  easing,  callback){nodes = dojo.lfx.html._byId(nodes);var anim = dojo.lfx.combine(
+dojo.lfx.fadeOut(nodes, duration, easing),dojo.lfx.wipeOut(nodes, duration, easing)
+);if(callback){anim.connect("onEnd", function(){callback(nodes, anim);});}
+return anim;}
+dojo.lfx.html.scale = function(nodes,percentage,scaleContent,fromCenter,duration,easing,callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];dojo.lang.forEach(nodes, function(node){var outer = dojo.html.getMarginBox(node);var actualPct = percentage/100.0;var props = [
+{	property: "width",start: outer.width,end: outer.width * actualPct},{	property: "height",start: outer.height,end: outer.height * actualPct}];if(scaleContent){var fontSize = dojo.html.getStyle(node, 'font-size');var fontSizeType = null;if(!fontSize){fontSize = parseFloat('100%');fontSizeType = '%';}else{dojo.lang.some(['em','px','%'], function(item, index, arr){if(fontSize.indexOf(item)>0){fontSize = parseFloat(fontSize);fontSizeType = item;return true;}});}
+props.push({property: "font-size",start: fontSize,end: fontSize * actualPct,units: fontSizeType });}
+if(fromCenter){var positioning = dojo.html.getStyle(node, "position");var originalTop = node.offsetTop;var originalLeft = node.offsetLeft;var endTop = ((outer.height * actualPct) - outer.height)/2;var endLeft = ((outer.width * actualPct) - outer.width)/2;props.push({property: "top",start: originalTop,end: (positioning == "absolute" ? originalTop - endTop : (-1*endTop))});props.push({property: "left",start: originalLeft,end: (positioning == "absolute" ? originalLeft - endLeft : (-1*endLeft))});}
+var anim = dojo.lfx.propertyAnimation(node, props, duration, easing);if(callback){anim.connect("onEnd", function(){callback(node, anim);});}
+anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/extras.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/html.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/html.js?view=auto&rev=471116
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/html.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/html.js Fri Nov  3 20:39:29 2006
@@ -0,0 +1,67 @@
+
+dojo.provide("dojo.lfx.html");dojo.require("dojo.gfx.color");dojo.require("dojo.lfx.Animation");dojo.require("dojo.lang.array");dojo.require("dojo.html.display");dojo.require("dojo.html.color");dojo.require("dojo.html.layout");dojo.lfx.html._byId = function(nodes){if(!nodes){ return []; }
+if(dojo.lang.isArrayLike(nodes)){if(!nodes.alreadyChecked){var n = [];dojo.lang.forEach(nodes, function(node){n.push(dojo.byId(node));});n.alreadyChecked = true;return n;}else{return nodes;}}else{var n = [];n.push(dojo.byId(nodes));n.alreadyChecked = true;return n;}}
+dojo.lfx.html.propertyAnimation = function(	 nodes,propertyMap,duration,easing,handlers){nodes = dojo.lfx.html._byId(nodes);var targs = {"propertyMap": propertyMap,"nodes": nodes,"duration": duration,"easing": easing||dojo.lfx.easeDefault};var setEmUp = function(args){if(args.nodes.length==1){var pm = args.propertyMap;if(!dojo.lang.isArray(args.propertyMap)){var parr = [];for(var pname in pm){pm[pname].property = pname;parr.push(pm[pname]);}
+pm = args.propertyMap = parr;}
+dojo.lang.forEach(pm, function(prop){if(dj_undef("start", prop)){if(prop.property != "opacity"){prop.start = parseInt(dojo.html.getComputedStyle(args.nodes[0], prop.property));}else{prop.start = dojo.html.getOpacity(args.nodes[0]);}}});}}
+var coordsAsInts = function(coords){var cints = [];dojo.lang.forEach(coords, function(c){cints.push(Math.round(c));});return cints;}
+var setStyle = function(n, style){n = dojo.byId(n);if(!n || !n.style){ return; }
+for(var s in style){if(s == "opacity"){dojo.html.setOpacity(n, style[s]);}else{n.style[s] = style[s];}}}
+var propLine = function(properties){this._properties = properties;this.diffs = new Array(properties.length);dojo.lang.forEach(properties, function(prop, i){if(dojo.lang.isFunction(prop.start)){prop.start = prop.start(prop, i);}
+if(dojo.lang.isFunction(prop.end)){prop.end = prop.end(prop, i);}
+if(dojo.lang.isArray(prop.start)){this.diffs[i] = null;}else if(prop.start instanceof dojo.gfx.color.Color){prop.startRgb = prop.start.toRgb();prop.endRgb = prop.end.toRgb();}else{this.diffs[i] = prop.end - prop.start;}}, this);this.getValue = function(n){var ret = {};dojo.lang.forEach(this._properties, function(prop, i){var value = null;if(dojo.lang.isArray(prop.start)){}else if(prop.start instanceof dojo.gfx.color.Color){value = (prop.units||"rgb") + "(";for(var j = 0 ; j < prop.startRgb.length ; j++){value += Math.round(((prop.endRgb[j] - prop.startRgb[j]) * n) + prop.startRgb[j]) + (j < prop.startRgb.length - 1 ? "," : "");}
+value += ")";}else{value = ((this.diffs[i]) * n) + prop.start + (prop.property != "opacity" ? prop.units||"px" : "");}
+ret[dojo.html.toCamelCase(prop.property)] = value;}, this);return ret;}}
+var anim = new dojo.lfx.Animation({beforeBegin: function(){setEmUp(targs);anim.curve = new propLine(targs.propertyMap);},onAnimate: function(propValues){dojo.lang.forEach(targs.nodes, function(node){setStyle(node, propValues);});}},targs.duration,null,targs.easing
+);if(handlers){for(var x in handlers){if(dojo.lang.isFunction(handlers[x])){anim.connect(x, anim, handlers[x]);}}}
+return anim;}
+dojo.lfx.html._makeFadeable = function(nodes){var makeFade = function(node){if(dojo.render.html.ie){if( (node.style.zoom.length == 0) &&
+(dojo.html.getStyle(node, "zoom") == "normal") ){node.style.zoom = "1";}
+if(	(node.style.width.length == 0) &&
+(dojo.html.getStyle(node, "width") == "auto") ){node.style.width = "auto";}}}
+if(dojo.lang.isArrayLike(nodes)){dojo.lang.forEach(nodes, makeFade);}else{makeFade(nodes);}}
+dojo.lfx.html.fade = function( nodes,values,duration,easing,callback){nodes = dojo.lfx.html._byId(nodes);var props = { property: "opacity" };if(!dj_undef("start", values)){props.start = values.start;}else{props.start = function(){ return dojo.html.getOpacity(nodes[0]); };}
+if(!dj_undef("end", values)){props.end = values.end;}else{dojo.raise("dojo.lfx.html.fade needs an end value");}
+var anim = dojo.lfx.propertyAnimation(nodes, [ props ], duration, easing);anim.connect("beforeBegin", function(){dojo.lfx.html._makeFadeable(nodes);});if(callback){anim.connect("onEnd", function(){ callback(nodes, anim); });}
+return anim;}
+dojo.lfx.html.fadeIn = function( nodes,  duration,  easing,  callback){return dojo.lfx.html.fade(nodes, { end: 1 }, duration, easing, callback);}
+dojo.lfx.html.fadeOut = function( nodes,  duration,  easing,  callback){return dojo.lfx.html.fade(nodes, { end: 0 }, duration, easing, callback);}
+dojo.lfx.html.fadeShow = function( nodes,  duration,  easing,  callback){nodes=dojo.lfx.html._byId(nodes);dojo.lang.forEach(nodes, function(node){dojo.html.setOpacity(node, 0.0);});var anim = dojo.lfx.html.fadeIn(nodes, duration, easing, callback);anim.connect("beforeBegin", function(){if(dojo.lang.isArrayLike(nodes)){dojo.lang.forEach(nodes, dojo.html.show);}else{dojo.html.show(nodes);}});return anim;}
+dojo.lfx.html.fadeHide = function( nodes,  duration,  easing,  callback){var anim = dojo.lfx.html.fadeOut(nodes, duration, easing, function(){if(dojo.lang.isArrayLike(nodes)){dojo.lang.forEach(nodes, dojo.html.hide);}else{dojo.html.hide(nodes);}
+if(callback){ callback(nodes, anim); }});return anim;}
+dojo.lfx.html.wipeIn = function( nodes,  duration,  easing,  callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];dojo.lang.forEach(nodes, function(node){var oprop = {  };dojo.html.show(node);var height = dojo.html.getBorderBox(node).height;dojo.html.hide(node);var anim = dojo.lfx.propertyAnimation(node,{	"height": {start: 1,end: function(){ return height; }}},duration,easing);anim.connect("beforeBegin", function(){oprop.overflow = node.style.overflow;oprop.height = node.style.height;with(node.style){overflow = "hidden";height = "1px";}
+dojo.html.show(node);});anim.connect("onEnd", function(){with(node.style){overflow = oprop.overflow;height = oprop.height;}
+if(callback){ callback(node, anim); }});anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lfx.html.wipeOut = function( nodes,  duration,  easing,  callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];dojo.lang.forEach(nodes, function(node){var oprop = {  };var anim = dojo.lfx.propertyAnimation(node,{	"height": {start: function(){ return dojo.html.getContentBox(node).height; },end: 1}},duration,easing,{"beforeBegin": function(){oprop.overflow = node.style.overflow;oprop.height = node.style.height;with(node.style){overflow = "hidden";}
+dojo.html.show(node);},"onEnd": function(){dojo.html.hide(node);with(node.style){overflow = oprop.overflow;height = oprop.height;}
+if(callback){ callback(node, anim); }}}
+);anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lfx.html.slideTo = function( nodes,coords,duration,easing,callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];var compute = dojo.html.getComputedStyle;if(dojo.lang.isArray(coords)){dojo.deprecated('dojo.lfx.html.slideTo(node, array)', 'use dojo.lfx.html.slideTo(node, {top: value, left: value});', '0.5');coords = { top: coords[0], left: coords[1] };}
+dojo.lang.forEach(nodes, function(node){var top = null;var left = null;var init = (function(){var innerNode = node;return function(){var pos = compute(innerNode, 'position');top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {var ret = dojo.html.abs(innerNode, true);dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");top = ret.y;left = ret.x;}}})();init();var anim = dojo.lfx.propertyAnimation(node,{	"top": { start: top, end: (coords.top||0) },"left": { start: left, end: (coords.left||0)  }},duration,easing,{ "beforeBegin": init }
+);if(callback){anim.connect("onEnd", function(){ callback(nodes, anim); });}
+anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lfx.html.slideBy = function( nodes,  coords,  duration,  easing,  callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];var compute = dojo.html.getComputedStyle;if(dojo.lang.isArray(coords)){dojo.deprecated('dojo.lfx.html.slideBy(node, array)', 'use dojo.lfx.html.slideBy(node, {top: value, left: value});', '0.5');coords = { top: coords[0], left: coords[1] };}
+dojo.lang.forEach(nodes, function(node){var top = null;var left = null;var init = (function(){var innerNode = node;return function(){var pos = compute(innerNode, 'position');top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {var ret = dojo.html.abs(innerNode, true);dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");top = ret.y;left = ret.x;}}})();init();var anim = dojo.lfx.propertyAnimation(node,{"top": { start: top, end: top+(coords.top||0) },"left": { start: left, end: left+(coords.left||0) }},duration,easing).connect("beforeBegin", init);if(callback){anim.connect("onEnd", function(){ callback(nodes, anim); });}
+anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lfx.html.explode = function( start,endNode,duration,easing,callback){var h = dojo.html;start = dojo.byId(start);endNode = dojo.byId(endNode);var startCoords = h.toCoordinateObject(start, true);var outline = document.createElement("div");h.copyStyle(outline, endNode);if (endNode.explodeClassName) { outline.className = endNode.explodeClassName; }
+with(outline.style){position = "absolute";display = "none";}
+dojo.body().appendChild(outline);with(endNode.style){visibility = "hidden";display = "block";}
+var endCoords = h.toCoordinateObject(endNode, true);with(endNode.style){display = "none";visibility = "visible";}
+var props = { opacity: { start: 0.5, end: 1.0 }};dojo.lang.forEach(["height", "width", "top", "left"], function(type){props[type] = { start: startCoords[type], end: endCoords[type] }});var anim = new dojo.lfx.propertyAnimation(outline,props,duration,easing,{"beforeBegin": function(){h.setDisplay(outline, "block");},"onEnd": function(){h.setDisplay(endNode, "block");outline.parentNode.removeChild(outline);}}
+);if(callback){anim.connect("onEnd", function(){ callback(endNode, anim); });}
+return anim;}
+dojo.lfx.html.implode = function( startNode,end,duration,easing,callback){var h = dojo.html;startNode = dojo.byId(startNode);end = dojo.byId(end);var startCoords = dojo.html.toCoordinateObject(startNode, true);var endCoords = dojo.html.toCoordinateObject(end, true);var outline = document.createElement("div");dojo.html.copyStyle(outline, startNode);if (startNode.explodeClassName) { outline.className = startNode.explodeClassName; }
+dojo.html.setOpacity(outline, 0.3);with(outline.style){position = "absolute";display = "none";backgroundColor = h.getStyle(startNode, "background-color").toLowerCase();}
+dojo.body().appendChild(outline);var props = { opacity: { start: 1.0, end: 0.5 }};dojo.lang.forEach(["height", "width", "top", "left"], function(type){props[type] = { start: startCoords[type], end: endCoords[type] }});var anim = new dojo.lfx.propertyAnimation(outline,props,duration,easing,{"beforeBegin": function(){dojo.html.hide(startNode);dojo.html.show(outline);},"onEnd": function(){outline.parentNode.removeChild(outline);}}
+);if(callback){anim.connect("onEnd", function(){ callback(startNode, anim); });}
+return anim;}
+dojo.lfx.html.highlight = function( nodes,startColor,duration,easing,callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];dojo.lang.forEach(nodes, function(node){var color = dojo.html.getBackgroundColor(node);var bg = dojo.html.getStyle(node, "background-color").toLowerCase();var bgImage = dojo.html.getStyle(node, "background-image");var wasTransparent = (bg == "transparent" || bg == "rgba(0, 0, 0, 0)");while(color.length > 3) { color.pop(); }
+var rgb = new dojo.gfx.color.Color(startColor);var endRgb = new dojo.gfx.color.Color(color);var anim = dojo.lfx.propertyAnimation(node,{ "background-color": { start: rgb, end: endRgb }},duration,easing,{"beforeBegin": function(){if(bgImage){node.style.backgroundImage = "none";}
+node.style.backgroundColor = "rgb(" + rgb.toRgb().join(",") + ")";},"onEnd": function(){if(bgImage){node.style.backgroundImage = bgImage;}
+if(wasTransparent){node.style.backgroundColor = "transparent";}
+if(callback){callback(node, anim);}}}
+);anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lfx.html.unhighlight = function( nodes,endColor,duration,easing,callback){nodes = dojo.lfx.html._byId(nodes);var anims = [];dojo.lang.forEach(nodes, function(node){var color = new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));var rgb = new dojo.gfx.color.Color(endColor);var bgImage = dojo.html.getStyle(node, "background-image");var anim = dojo.lfx.propertyAnimation(node,{ "background-color": { start: color, end: rgb }},duration,easing,{"beforeBegin": function(){if(bgImage){node.style.backgroundImage = "none";}
+node.style.backgroundColor = "rgb(" + color.toRgb().join(",") + ")";},"onEnd": function(){if(callback){callback(node, anim);}}}
+);anims.push(anim);});return dojo.lfx.combine(anims);}
+dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lfx/html.js
------------------------------------------------------------------------------
    svn:eol-style = native