Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1372 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.io.ScriptSrcIO");
13
dojo.provide("dojo.io.ScriptSrcIO");
12
dojo.require("dojo.io.BrowserIO");
14
dojo.require("dojo.io.BrowserIO");
13
dojo.require("dojo.undo.browser");
15
dojo.require("dojo.undo.browser");
14
dojo.io.ScriptSrcTransport = new function () {
16
dojo.io.ScriptSrcTransport = new function () {
15
	this.preventCache = false;
17
	this.preventCache = false;
16
	this.maxUrlLength = 1000;
18
	this.maxUrlLength = 1000;
17
	this.inFlightTimer = null;
19
	this.inFlightTimer = null;
18
	this.DsrStatusCodes = {Continue:100, Ok:200, Error:500};
20
	this.DsrStatusCodes = {Continue:100, Ok:200, Error:500};
19
	this.startWatchingInFlight = function () {
21
	this.startWatchingInFlight = function () {
20
		if (!this.inFlightTimer) {
22
		if (!this.inFlightTimer) {
21
			this.inFlightTimer = setInterval("dojo.io.ScriptSrcTransport.watchInFlight();", 100);
23
			this.inFlightTimer = setInterval("dojo.io.ScriptSrcTransport.watchInFlight();", 100);
22
		}
24
		}
23
	};
25
	};
24
	this.watchInFlight = function () {
26
	this.watchInFlight = function () {
25
		var totalCount = 0;
27
		var totalCount = 0;
26
		var doneCount = 0;
28
		var doneCount = 0;
27
		for (var param in this._state) {
29
		for (var param in this._state) {
28
			totalCount++;
30
			totalCount++;
29
			var currentState = this._state[param];
31
			var currentState = this._state[param];
30
			if (currentState.isDone) {
32
			if (currentState.isDone) {
31
				doneCount++;
33
				doneCount++;
32
				delete this._state[param];
34
				delete this._state[param];
33
			} else {
35
			} else {
34
				if (!currentState.isFinishing) {
36
				if (!currentState.isFinishing) {
35
					var listener = currentState.kwArgs;
37
					var listener = currentState.kwArgs;
36
					try {
38
					try {
37
						if (currentState.checkString && eval("typeof(" + currentState.checkString + ") != 'undefined'")) {
39
						if (currentState.checkString && eval("typeof(" + currentState.checkString + ") != 'undefined'")) {
38
							currentState.isFinishing = true;
40
							currentState.isFinishing = true;
39
							this._finish(currentState, "load");
41
							this._finish(currentState, "load");
40
							doneCount++;
42
							doneCount++;
41
							delete this._state[param];
43
							delete this._state[param];
42
						} else {
44
						} else {
43
							if (listener.timeoutSeconds && listener.timeout) {
45
							if (listener.timeoutSeconds && listener.timeout) {
44
								if (currentState.startTime + (listener.timeoutSeconds * 1000) < (new Date()).getTime()) {
46
								if (currentState.startTime + (listener.timeoutSeconds * 1000) < (new Date()).getTime()) {
45
									currentState.isFinishing = true;
47
									currentState.isFinishing = true;
46
									this._finish(currentState, "timeout");
48
									this._finish(currentState, "timeout");
47
									doneCount++;
49
									doneCount++;
48
									delete this._state[param];
50
									delete this._state[param];
49
								}
51
								}
50
							} else {
52
							} else {
51
								if (!listener.timeoutSeconds) {
53
								if (!listener.timeoutSeconds) {
52
									doneCount++;
54
									doneCount++;
53
								}
55
								}
54
							}
56
							}
55
						}
57
						}
56
					}
58
					}
57
					catch (e) {
59
					catch (e) {
58
						currentState.isFinishing = true;
60
						currentState.isFinishing = true;
59
						this._finish(currentState, "error", {status:this.DsrStatusCodes.Error, response:e});
61
						this._finish(currentState, "error", {status:this.DsrStatusCodes.Error, response:e});
60
					}
62
					}
61
				}
63
				}
62
			}
64
			}
63
		}
65
		}
64
		if (doneCount >= totalCount) {
66
		if (doneCount >= totalCount) {
65
			clearInterval(this.inFlightTimer);
67
			clearInterval(this.inFlightTimer);
66
			this.inFlightTimer = null;
68
			this.inFlightTimer = null;
67
		}
69
		}
68
	};
70
	};
69
	this.canHandle = function (kwArgs) {
71
	this.canHandle = function (kwArgs) {
70
		return dojo.lang.inArray(["text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase())) && (kwArgs["method"].toLowerCase() == "get") && !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"])) && (!kwArgs["sync"] || kwArgs["sync"] == false) && !kwArgs["file"] && !kwArgs["multipart"];
72
		return dojo.lang.inArray(["text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase())) && (kwArgs["method"].toLowerCase() == "get") && !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"])) && (!kwArgs["sync"] || kwArgs["sync"] == false) && !kwArgs["file"] && !kwArgs["multipart"];
71
	};
73
	};
72
	this.removeScripts = function () {
74
	this.removeScripts = function () {
73
		var scripts = document.getElementsByTagName("script");
75
		var scripts = document.getElementsByTagName("script");
74
		for (var i = 0; scripts && i < scripts.length; i++) {
76
		for (var i = 0; scripts && i < scripts.length; i++) {
75
			var scriptTag = scripts[i];
77
			var scriptTag = scripts[i];
76
			if (scriptTag.className == "ScriptSrcTransport") {
78
			if (scriptTag.className == "ScriptSrcTransport") {
77
				var parent = scriptTag.parentNode;
79
				var parent = scriptTag.parentNode;
78
				parent.removeChild(scriptTag);
80
				parent.removeChild(scriptTag);
79
				i--;
81
				i--;
80
			}
82
			}
81
		}
83
		}
82
	};
84
	};
83
	this.bind = function (kwArgs) {
85
	this.bind = function (kwArgs) {
84
		var url = kwArgs.url;
86
		var url = kwArgs.url;
85
		var query = "";
87
		var query = "";
86
		if (kwArgs["formNode"]) {
88
		if (kwArgs["formNode"]) {
87
			var ta = kwArgs.formNode.getAttribute("action");
89
			var ta = kwArgs.formNode.getAttribute("action");
88
			if ((ta) && (!kwArgs["url"])) {
90
			if ((ta) && (!kwArgs["url"])) {
89
				url = ta;
91
				url = ta;
90
			}
92
			}
91
			var tp = kwArgs.formNode.getAttribute("method");
93
			var tp = kwArgs.formNode.getAttribute("method");
92
			if ((tp) && (!kwArgs["method"])) {
94
			if ((tp) && (!kwArgs["method"])) {
93
				kwArgs.method = tp;
95
				kwArgs.method = tp;
94
			}
96
			}
95
			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
97
			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
96
		}
98
		}
97
		if (url.indexOf("#") > -1) {
99
		if (url.indexOf("#") > -1) {
98
			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
100
			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
99
			url = url.split("#")[0];
101
			url = url.split("#")[0];
100
		}
102
		}
101
		var urlParts = url.split("?");
103
		var urlParts = url.split("?");
102
		if (urlParts && urlParts.length == 2) {
104
		if (urlParts && urlParts.length == 2) {
103
			url = urlParts[0];
105
			url = urlParts[0];
104
			query += (query ? "&" : "") + urlParts[1];
106
			query += (query ? "&" : "") + urlParts[1];
105
		}
107
		}
106
		if (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]) {
108
		if (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]) {
107
			dojo.undo.browser.addToHistory(kwArgs);
109
			dojo.undo.browser.addToHistory(kwArgs);
108
		}
110
		}
109
		var id = kwArgs["apiId"] ? kwArgs["apiId"] : "id" + this._counter++;
111
		var id = kwArgs["apiId"] ? kwArgs["apiId"] : "id" + this._counter++;
110
		var content = kwArgs["content"];
112
		var content = kwArgs["content"];
111
		var jsonpName = kwArgs.jsonParamName;
113
		var jsonpName = kwArgs.jsonParamName;
112
		if (kwArgs.sendTransport || jsonpName) {
114
		if (kwArgs.sendTransport || jsonpName) {
113
			if (!content) {
115
			if (!content) {
114
				content = {};
116
				content = {};
115
			}
117
			}
116
			if (kwArgs.sendTransport) {
118
			if (kwArgs.sendTransport) {
117
				content["dojo.transport"] = "scriptsrc";
119
				content["dojo.transport"] = "scriptsrc";
118
			}
120
			}
119
			if (jsonpName) {
121
			if (jsonpName) {
120
				content[jsonpName] = "dojo.io.ScriptSrcTransport._state." + id + ".jsonpCall";
122
				content[jsonpName] = "dojo.io.ScriptSrcTransport._state." + id + ".jsonpCall";
121
			}
123
			}
122
		}
124
		}
123
		if (kwArgs.postContent) {
125
		if (kwArgs.postContent) {
124
			query = kwArgs.postContent;
126
			query = kwArgs.postContent;
125
		} else {
127
		} else {
126
			if (content) {
128
			if (content) {
127
				query += ((query) ? "&" : "") + dojo.io.argsFromMap(content, kwArgs.encoding, jsonpName);
129
				query += ((query) ? "&" : "") + dojo.io.argsFromMap(content, kwArgs.encoding, jsonpName);
128
			}
130
			}
129
		}
131
		}
130
		if (kwArgs["apiId"]) {
132
		if (kwArgs["apiId"]) {
131
			kwArgs["useRequestId"] = true;
133
			kwArgs["useRequestId"] = true;
132
		}
134
		}
133
		var state = {"id":id, "idParam":"_dsrid=" + id, "url":url, "query":query, "kwArgs":kwArgs, "startTime":(new Date()).getTime(), "isFinishing":false};
135
		var state = {"id":id, "idParam":"_dsrid=" + id, "url":url, "query":query, "kwArgs":kwArgs, "startTime":(new Date()).getTime(), "isFinishing":false};
134
		if (!url) {
136
		if (!url) {
135
			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.none"});
137
			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.none"});
136
			return;
138
			return;
137
		}
139
		}
138
		if (content && content[jsonpName]) {
140
		if (content && content[jsonpName]) {
139
			state.jsonp = content[jsonpName];
141
			state.jsonp = content[jsonpName];
140
			state.jsonpCall = function (data) {
142
			state.jsonpCall = function (data) {
141
				if (data["Error"] || data["error"]) {
143
				if (data["Error"] || data["error"]) {
142
					if (dojo["json"] && dojo["json"]["serialize"]) {
144
					if (dojo["json"] && dojo["json"]["serialize"]) {
143
						dojo.debug(dojo.json.serialize(data));
145
						dojo.debug(dojo.json.serialize(data));
144
					}
146
					}
145
					dojo.io.ScriptSrcTransport._finish(this, "error", data);
147
					dojo.io.ScriptSrcTransport._finish(this, "error", data);
146
				} else {
148
				} else {
147
					dojo.io.ScriptSrcTransport._finish(this, "load", data);
149
					dojo.io.ScriptSrcTransport._finish(this, "load", data);
148
				}
150
				}
149
			};
151
			};
150
		}
152
		}
151
		if (kwArgs["useRequestId"] || kwArgs["checkString"] || state["jsonp"]) {
153
		if (kwArgs["useRequestId"] || kwArgs["checkString"] || state["jsonp"]) {
152
			this._state[id] = state;
154
			this._state[id] = state;
153
		}
155
		}
154
		if (kwArgs["checkString"]) {
156
		if (kwArgs["checkString"]) {
155
			state.checkString = kwArgs["checkString"];
157
			state.checkString = kwArgs["checkString"];
156
		}
158
		}
157
		state.constantParams = (kwArgs["constantParams"] == null ? "" : kwArgs["constantParams"]);
159
		state.constantParams = (kwArgs["constantParams"] == null ? "" : kwArgs["constantParams"]);
158
		if (kwArgs["preventCache"] || (this.preventCache == true && kwArgs["preventCache"] != false)) {
160
		if (kwArgs["preventCache"] || (this.preventCache == true && kwArgs["preventCache"] != false)) {
159
			state.nocacheParam = "dojo.preventCache=" + new Date().valueOf();
161
			state.nocacheParam = "dojo.preventCache=" + new Date().valueOf();
160
		} else {
162
		} else {
161
			state.nocacheParam = "";
163
			state.nocacheParam = "";
162
		}
164
		}
163
		var urlLength = state.url.length + state.query.length + state.constantParams.length + state.nocacheParam.length + this._extraPaddingLength;
165
		var urlLength = state.url.length + state.query.length + state.constantParams.length + state.nocacheParam.length + this._extraPaddingLength;
164
		if (kwArgs["useRequestId"]) {
166
		if (kwArgs["useRequestId"]) {
165
			urlLength += state.idParam.length;
167
			urlLength += state.idParam.length;
166
		}
168
		}
167
		if (!kwArgs["checkString"] && kwArgs["useRequestId"] && !state["jsonp"] && !kwArgs["forceSingleRequest"] && urlLength > this.maxUrlLength) {
169
		if (!kwArgs["checkString"] && kwArgs["useRequestId"] && !state["jsonp"] && !kwArgs["forceSingleRequest"] && urlLength > this.maxUrlLength) {
168
			if (url > this.maxUrlLength) {
170
			if (url > this.maxUrlLength) {
169
				this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.tooBig"});
171
				this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.tooBig"});
170
				return;
172
				return;
171
			} else {
173
			} else {
172
				this._multiAttach(state, 1);
174
				this._multiAttach(state, 1);
173
			}
175
			}
174
		} else {
176
		} else {
175
			var queryParams = [state.constantParams, state.nocacheParam, state.query];
177
			var queryParams = [state.constantParams, state.nocacheParam, state.query];
176
			if (kwArgs["useRequestId"] && !state["jsonp"]) {
178
			if (kwArgs["useRequestId"] && !state["jsonp"]) {
177
				queryParams.unshift(state.idParam);
179
				queryParams.unshift(state.idParam);
178
			}
180
			}
179
			var finalUrl = this._buildUrl(state.url, queryParams);
181
			var finalUrl = this._buildUrl(state.url, queryParams);
180
			state.finalUrl = finalUrl;
182
			state.finalUrl = finalUrl;
181
			this._attach(state.id, finalUrl);
183
			this._attach(state.id, finalUrl);
182
		}
184
		}
183
		this.startWatchingInFlight();
185
		this.startWatchingInFlight();
184
	};
186
	};
185
	this._counter = 1;
187
	this._counter = 1;
186
	this._state = {};
188
	this._state = {};
187
	this._extraPaddingLength = 16;
189
	this._extraPaddingLength = 16;
188
	this._buildUrl = function (url, nameValueArray) {
190
	this._buildUrl = function (url, nameValueArray) {
189
		var finalUrl = url;
191
		var finalUrl = url;
190
		var joiner = "?";
192
		var joiner = "?";
191
		for (var i = 0; i < nameValueArray.length; i++) {
193
		for (var i = 0; i < nameValueArray.length; i++) {
192
			if (nameValueArray[i]) {
194
			if (nameValueArray[i]) {
193
				finalUrl += joiner + nameValueArray[i];
195
				finalUrl += joiner + nameValueArray[i];
194
				joiner = "&";
196
				joiner = "&";
195
			}
197
			}
196
		}
198
		}
197
		return finalUrl;
199
		return finalUrl;
198
	};
200
	};
199
	this._attach = function (id, url) {
201
	this._attach = function (id, url) {
200
		var element = document.createElement("script");
202
		var element = document.createElement("script");
201
		element.type = "text/javascript";
203
		element.type = "text/javascript";
202
		element.src = url;
204
		element.src = url;
203
		element.id = id;
205
		element.id = id;
204
		element.className = "ScriptSrcTransport";
206
		element.className = "ScriptSrcTransport";
205
		document.getElementsByTagName("head")[0].appendChild(element);
207
		document.getElementsByTagName("head")[0].appendChild(element);
206
	};
208
	};
207
	this._multiAttach = function (state, part) {
209
	this._multiAttach = function (state, part) {
208
		if (state.query == null) {
210
		if (state.query == null) {
209
			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"query.null"});
211
			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"query.null"});
210
			return;
212
			return;
211
		}
213
		}
212
		if (!state.constantParams) {
214
		if (!state.constantParams) {
213
			state.constantParams = "";
215
			state.constantParams = "";
214
		}
216
		}
215
		var queryMax = this.maxUrlLength - state.idParam.length - state.constantParams.length - state.url.length - state.nocacheParam.length - this._extraPaddingLength;
217
		var queryMax = this.maxUrlLength - state.idParam.length - state.constantParams.length - state.url.length - state.nocacheParam.length - this._extraPaddingLength;
216
		var isDone = state.query.length < queryMax;
218
		var isDone = state.query.length < queryMax;
217
		var currentQuery;
219
		var currentQuery;
218
		if (isDone) {
220
		if (isDone) {
219
			currentQuery = state.query;
221
			currentQuery = state.query;
220
			state.query = null;
222
			state.query = null;
221
		} else {
223
		} else {
222
			var ampEnd = state.query.lastIndexOf("&", queryMax - 1);
224
			var ampEnd = state.query.lastIndexOf("&", queryMax - 1);
223
			var eqEnd = state.query.lastIndexOf("=", queryMax - 1);
225
			var eqEnd = state.query.lastIndexOf("=", queryMax - 1);
224
			if (ampEnd > eqEnd || eqEnd == queryMax - 1) {
226
			if (ampEnd > eqEnd || eqEnd == queryMax - 1) {
225
				currentQuery = state.query.substring(0, ampEnd);
227
				currentQuery = state.query.substring(0, ampEnd);
226
				state.query = state.query.substring(ampEnd + 1, state.query.length);
228
				state.query = state.query.substring(ampEnd + 1, state.query.length);
227
			} else {
229
			} else {
228
				currentQuery = state.query.substring(0, queryMax);
230
				currentQuery = state.query.substring(0, queryMax);
229
				var queryName = currentQuery.substring((ampEnd == -1 ? 0 : ampEnd + 1), eqEnd);
231
				var queryName = currentQuery.substring((ampEnd == -1 ? 0 : ampEnd + 1), eqEnd);
230
				state.query = queryName + "=" + state.query.substring(queryMax, state.query.length);
232
				state.query = queryName + "=" + state.query.substring(queryMax, state.query.length);
231
			}
233
			}
232
		}
234
		}
233
		var queryParams = [currentQuery, state.idParam, state.constantParams, state.nocacheParam];
235
		var queryParams = [currentQuery, state.idParam, state.constantParams, state.nocacheParam];
234
		if (!isDone) {
236
		if (!isDone) {
235
			queryParams.push("_part=" + part);
237
			queryParams.push("_part=" + part);
236
		}
238
		}
237
		var url = this._buildUrl(state.url, queryParams);
239
		var url = this._buildUrl(state.url, queryParams);
238
		this._attach(state.id + "_" + part, url);
240
		this._attach(state.id + "_" + part, url);
239
	};
241
	};
240
	this._finish = function (state, callback, event) {
242
	this._finish = function (state, callback, event) {
241
		if (callback != "partOk" && !state.kwArgs[callback] && !state.kwArgs["handle"]) {
243
		if (callback != "partOk" && !state.kwArgs[callback] && !state.kwArgs["handle"]) {
242
			if (callback == "error") {
244
			if (callback == "error") {
243
				state.isDone = true;
245
				state.isDone = true;
244
				throw event;
246
				throw event;
245
			}
247
			}
246
		} else {
248
		} else {
247
			switch (callback) {
249
			switch (callback) {
248
			  case "load":
250
			  case "load":
249
				var response = event ? event.response : null;
251
				var response = event ? event.response : null;
250
				if (!response) {
252
				if (!response) {
251
					response = event;
253
					response = event;
252
				}
254
				}
253
				state.kwArgs[(typeof state.kwArgs.load == "function") ? "load" : "handle"]("load", response, event, state.kwArgs);
255
				state.kwArgs[(typeof state.kwArgs.load == "function") ? "load" : "handle"]("load", response, event, state.kwArgs);
254
				state.isDone = true;
256
				state.isDone = true;
255
				break;
257
				break;
256
			  case "partOk":
258
			  case "partOk":
257
				var part = parseInt(event.response.part, 10) + 1;
259
				var part = parseInt(event.response.part, 10) + 1;
258
				if (event.response.constantParams) {
260
				if (event.response.constantParams) {
259
					state.constantParams = event.response.constantParams;
261
					state.constantParams = event.response.constantParams;
260
				}
262
				}
261
				this._multiAttach(state, part);
263
				this._multiAttach(state, part);
262
				state.isDone = false;
264
				state.isDone = false;
263
				break;
265
				break;
264
			  case "error":
266
			  case "error":
265
				state.kwArgs[(typeof state.kwArgs.error == "function") ? "error" : "handle"]("error", event.response, event, state.kwArgs);
267
				state.kwArgs[(typeof state.kwArgs.error == "function") ? "error" : "handle"]("error", event.response, event, state.kwArgs);
266
				state.isDone = true;
268
				state.isDone = true;
267
				break;
269
				break;
268
			  default:
270
			  default:
269
				state.kwArgs[(typeof state.kwArgs[callback] == "function") ? callback : "handle"](callback, event, event, state.kwArgs);
271
				state.kwArgs[(typeof state.kwArgs[callback] == "function") ? callback : "handle"](callback, event, event, state.kwArgs);
270
				state.isDone = true;
272
				state.isDone = true;
271
			}
273
			}
272
		}
274
		}
273
	};
275
	};
274
	dojo.io.transports.addTransport("ScriptSrcTransport");
276
	dojo.io.transports.addTransport("ScriptSrcTransport");
275
};
277
};
276
window.onscriptload = function (event) {
278
window.onscriptload = function (event) {
277
	var state = null;
279
	var state = null;
278
	var transport = dojo.io.ScriptSrcTransport;
280
	var transport = dojo.io.ScriptSrcTransport;
279
	if (transport._state[event.id]) {
281
	if (transport._state[event.id]) {
280
		state = transport._state[event.id];
282
		state = transport._state[event.id];
281
	} else {
283
	} else {
282
		var tempState;
284
		var tempState;
283
		for (var param in transport._state) {
285
		for (var param in transport._state) {
284
			tempState = transport._state[param];
286
			tempState = transport._state[param];
285
			if (tempState.finalUrl && tempState.finalUrl == event.id) {
287
			if (tempState.finalUrl && tempState.finalUrl == event.id) {
286
				state = tempState;
288
				state = tempState;
287
				break;
289
				break;
288
			}
290
			}
289
		}
291
		}
290
		if (state == null) {
292
		if (state == null) {
291
			var scripts = document.getElementsByTagName("script");
293
			var scripts = document.getElementsByTagName("script");
292
			for (var i = 0; scripts && i < scripts.length; i++) {
294
			for (var i = 0; scripts && i < scripts.length; i++) {
293
				var scriptTag = scripts[i];
295
				var scriptTag = scripts[i];
294
				if (scriptTag.getAttribute("class") == "ScriptSrcTransport" && scriptTag.src == event.id) {
296
				if (scriptTag.getAttribute("class") == "ScriptSrcTransport" && scriptTag.src == event.id) {
295
					state = transport._state[scriptTag.id];
297
					state = transport._state[scriptTag.id];
296
					break;
298
					break;
297
				}
299
				}
298
			}
300
			}
299
		}
301
		}
300
		if (state == null) {
302
		if (state == null) {
301
			throw "No matching state for onscriptload event.id: " + event.id;
303
			throw "No matching state for onscriptload event.id: " + event.id;
302
		}
304
		}
303
	}
305
	}
304
	var callbackName = "error";
306
	var callbackName = "error";
305
	switch (event.status) {
307
	switch (event.status) {
306
	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
308
	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
307
		callbackName = "partOk";
309
		callbackName = "partOk";
308
		break;
310
		break;
309
	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
311
	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
310
		callbackName = "load";
312
		callbackName = "load";
311
		break;
313
		break;
312
	}
314
	}
313
	transport._finish(state, callbackName, event);
315
	transport._finish(state, callbackName, event);
314
};
316
};
315
 
317