Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 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.event.common");
13
dojo.provide("dojo.event.common");
12
dojo.require("dojo.lang.array");
14
dojo.require("dojo.lang.array");
13
dojo.require("dojo.lang.extras");
15
dojo.require("dojo.lang.extras");
14
dojo.require("dojo.lang.func");
16
dojo.require("dojo.lang.func");
15
dojo.event = new function () {
17
dojo.event = new function () {
16
	this._canTimeout = dojo.lang.isFunction(dj_global["setTimeout"]) || dojo.lang.isAlien(dj_global["setTimeout"]);
18
	this._canTimeout = dojo.lang.isFunction(dj_global["setTimeout"]) || dojo.lang.isAlien(dj_global["setTimeout"]);
17
	function interpolateArgs(args, searchForNames) {
19
	function interpolateArgs(args, searchForNames) {
18
		var dl = dojo.lang;
20
		var dl = dojo.lang;
19
		var ao = {srcObj:dj_global, srcFunc:null, adviceObj:dj_global, adviceFunc:null, aroundObj:null, aroundFunc:null, adviceType:(args.length > 2) ? args[0] : "after", precedence:"last", once:false, delay:null, rate:0, adviceMsg:false, maxCalls:-1};
21
		var ao = {srcObj:dj_global, srcFunc:null, adviceObj:dj_global, adviceFunc:null, aroundObj:null, aroundFunc:null, adviceType:(args.length > 2) ? args[0] : "after", precedence:"last", once:false, delay:null, rate:0, adviceMsg:false, maxCalls:-1};
20
		switch (args.length) {
22
		switch (args.length) {
21
		  case 0:
23
		  case 0:
22
			return;
24
			return;
23
		  case 1:
25
		  case 1:
24
			return;
26
			return;
25
		  case 2:
27
		  case 2:
26
			ao.srcFunc = args[0];
28
			ao.srcFunc = args[0];
27
			ao.adviceFunc = args[1];
29
			ao.adviceFunc = args[1];
28
			break;
30
			break;
29
		  case 3:
31
		  case 3:
30
			if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isString(args[2]))) {
32
			if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isString(args[2]))) {
31
				ao.adviceType = "after";
33
				ao.adviceType = "after";
32
				ao.srcObj = args[0];
34
				ao.srcObj = args[0];
33
				ao.srcFunc = args[1];
35
				ao.srcFunc = args[1];
34
				ao.adviceFunc = args[2];
36
				ao.adviceFunc = args[2];
35
			} else {
37
			} else {
36
				if ((dl.isString(args[1])) && (dl.isString(args[2]))) {
38
				if ((dl.isString(args[1])) && (dl.isString(args[2]))) {
37
					ao.srcFunc = args[1];
39
					ao.srcFunc = args[1];
38
					ao.adviceFunc = args[2];
40
					ao.adviceFunc = args[2];
39
				} else {
41
				} else {
40
					if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isFunction(args[2]))) {
42
					if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isFunction(args[2]))) {
41
						ao.adviceType = "after";
43
						ao.adviceType = "after";
42
						ao.srcObj = args[0];
44
						ao.srcObj = args[0];
43
						ao.srcFunc = args[1];
45
						ao.srcFunc = args[1];
44
						var tmpName = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
46
						var tmpName = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
45
						ao.adviceFunc = tmpName;
47
						ao.adviceFunc = tmpName;
46
					} else {
48
					} else {
47
						if ((dl.isFunction(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2]))) {
49
						if ((dl.isFunction(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2]))) {
48
							ao.adviceType = "after";
50
							ao.adviceType = "after";
49
							ao.srcObj = dj_global;
51
							ao.srcObj = dj_global;
50
							var tmpName = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
52
							var tmpName = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
51
							ao.srcFunc = tmpName;
53
							ao.srcFunc = tmpName;
52
							ao.adviceObj = args[1];
54
							ao.adviceObj = args[1];
53
							ao.adviceFunc = args[2];
55
							ao.adviceFunc = args[2];
54
						}
56
						}
55
					}
57
					}
56
				}
58
				}
57
			}
59
			}
58
			break;
60
			break;
59
		  case 4:
61
		  case 4:
60
			if ((dl.isObject(args[0])) && (dl.isObject(args[2]))) {
62
			if ((dl.isObject(args[0])) && (dl.isObject(args[2]))) {
61
				ao.adviceType = "after";
63
				ao.adviceType = "after";
62
				ao.srcObj = args[0];
64
				ao.srcObj = args[0];
63
				ao.srcFunc = args[1];
65
				ao.srcFunc = args[1];
64
				ao.adviceObj = args[2];
66
				ao.adviceObj = args[2];
65
				ao.adviceFunc = args[3];
67
				ao.adviceFunc = args[3];
66
			} else {
68
			} else {
67
				if ((dl.isString(args[0])) && (dl.isString(args[1])) && (dl.isObject(args[2]))) {
69
				if ((dl.isString(args[0])) && (dl.isString(args[1])) && (dl.isObject(args[2]))) {
68
					ao.adviceType = args[0];
70
					ao.adviceType = args[0];
69
					ao.srcObj = dj_global;
71
					ao.srcObj = dj_global;
70
					ao.srcFunc = args[1];
72
					ao.srcFunc = args[1];
71
					ao.adviceObj = args[2];
73
					ao.adviceObj = args[2];
72
					ao.adviceFunc = args[3];
74
					ao.adviceFunc = args[3];
73
				} else {
75
				} else {
74
					if ((dl.isString(args[0])) && (dl.isFunction(args[1])) && (dl.isObject(args[2]))) {
76
					if ((dl.isString(args[0])) && (dl.isFunction(args[1])) && (dl.isObject(args[2]))) {
75
						ao.adviceType = args[0];
77
						ao.adviceType = args[0];
76
						ao.srcObj = dj_global;
78
						ao.srcObj = dj_global;
77
						var tmpName = dl.nameAnonFunc(args[1], dj_global, searchForNames);
79
						var tmpName = dl.nameAnonFunc(args[1], dj_global, searchForNames);
78
						ao.srcFunc = tmpName;
80
						ao.srcFunc = tmpName;
79
						ao.adviceObj = args[2];
81
						ao.adviceObj = args[2];
80
						ao.adviceFunc = args[3];
82
						ao.adviceFunc = args[3];
81
					} else {
83
					} else {
82
						if ((dl.isString(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2])) && (dl.isFunction(args[3]))) {
84
						if ((dl.isString(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2])) && (dl.isFunction(args[3]))) {
83
							ao.srcObj = args[1];
85
							ao.srcObj = args[1];
84
							ao.srcFunc = args[2];
86
							ao.srcFunc = args[2];
85
							var tmpName = dl.nameAnonFunc(args[3], dj_global, searchForNames);
87
							var tmpName = dl.nameAnonFunc(args[3], dj_global, searchForNames);
86
							ao.adviceObj = dj_global;
88
							ao.adviceObj = dj_global;
87
							ao.adviceFunc = tmpName;
89
							ao.adviceFunc = tmpName;
88
						} else {
90
						} else {
89
							if (dl.isObject(args[1])) {
91
							if (dl.isObject(args[1])) {
90
								ao.srcObj = args[1];
92
								ao.srcObj = args[1];
91
								ao.srcFunc = args[2];
93
								ao.srcFunc = args[2];
92
								ao.adviceObj = dj_global;
94
								ao.adviceObj = dj_global;
93
								ao.adviceFunc = args[3];
95
								ao.adviceFunc = args[3];
94
							} else {
96
							} else {
95
								if (dl.isObject(args[2])) {
97
								if (dl.isObject(args[2])) {
96
									ao.srcObj = dj_global;
98
									ao.srcObj = dj_global;
97
									ao.srcFunc = args[1];
99
									ao.srcFunc = args[1];
98
									ao.adviceObj = args[2];
100
									ao.adviceObj = args[2];
99
									ao.adviceFunc = args[3];
101
									ao.adviceFunc = args[3];
100
								} else {
102
								} else {
101
									ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
103
									ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
102
									ao.srcFunc = args[1];
104
									ao.srcFunc = args[1];
103
									ao.adviceFunc = args[2];
105
									ao.adviceFunc = args[2];
104
									ao.aroundFunc = args[3];
106
									ao.aroundFunc = args[3];
105
								}
107
								}
106
							}
108
							}
107
						}
109
						}
108
					}
110
					}
109
				}
111
				}
110
			}
112
			}
111
			break;
113
			break;
112
		  case 6:
114
		  case 6:
113
			ao.srcObj = args[1];
115
			ao.srcObj = args[1];
114
			ao.srcFunc = args[2];
116
			ao.srcFunc = args[2];
115
			ao.adviceObj = args[3];
117
			ao.adviceObj = args[3];
116
			ao.adviceFunc = args[4];
118
			ao.adviceFunc = args[4];
117
			ao.aroundFunc = args[5];
119
			ao.aroundFunc = args[5];
118
			ao.aroundObj = dj_global;
120
			ao.aroundObj = dj_global;
119
			break;
121
			break;
120
		  default:
122
		  default:
121
			ao.srcObj = args[1];
123
			ao.srcObj = args[1];
122
			ao.srcFunc = args[2];
124
			ao.srcFunc = args[2];
123
			ao.adviceObj = args[3];
125
			ao.adviceObj = args[3];
124
			ao.adviceFunc = args[4];
126
			ao.adviceFunc = args[4];
125
			ao.aroundObj = args[5];
127
			ao.aroundObj = args[5];
126
			ao.aroundFunc = args[6];
128
			ao.aroundFunc = args[6];
127
			ao.once = args[7];
129
			ao.once = args[7];
128
			ao.delay = args[8];
130
			ao.delay = args[8];
129
			ao.rate = args[9];
131
			ao.rate = args[9];
130
			ao.adviceMsg = args[10];
132
			ao.adviceMsg = args[10];
131
			ao.maxCalls = (!isNaN(parseInt(args[11]))) ? args[11] : -1;
133
			ao.maxCalls = (!isNaN(parseInt(args[11]))) ? args[11] : -1;
132
			break;
134
			break;
133
		}
135
		}
134
		if (dl.isFunction(ao.aroundFunc)) {
136
		if (dl.isFunction(ao.aroundFunc)) {
135
			var tmpName = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
137
			var tmpName = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
136
			ao.aroundFunc = tmpName;
138
			ao.aroundFunc = tmpName;
137
		}
139
		}
138
		if (dl.isFunction(ao.srcFunc)) {
140
		if (dl.isFunction(ao.srcFunc)) {
139
			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
141
			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
140
		}
142
		}
141
		if (dl.isFunction(ao.adviceFunc)) {
143
		if (dl.isFunction(ao.adviceFunc)) {
142
			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
144
			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
143
		}
145
		}
144
		if ((ao.aroundObj) && (dl.isFunction(ao.aroundFunc))) {
146
		if ((ao.aroundObj) && (dl.isFunction(ao.aroundFunc))) {
145
			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
147
			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
146
		}
148
		}
147
		if (!ao.srcObj) {
149
		if (!ao.srcObj) {
148
			dojo.raise("bad srcObj for srcFunc: " + ao.srcFunc);
150
			dojo.raise("bad srcObj for srcFunc: " + ao.srcFunc);
149
		}
151
		}
150
		if (!ao.adviceObj) {
152
		if (!ao.adviceObj) {
151
			dojo.raise("bad adviceObj for adviceFunc: " + ao.adviceFunc);
153
			dojo.raise("bad adviceObj for adviceFunc: " + ao.adviceFunc);
152
		}
154
		}
153
		if (!ao.adviceFunc) {
155
		if (!ao.adviceFunc) {
154
			dojo.debug("bad adviceFunc for srcFunc: " + ao.srcFunc);
156
			dojo.debug("bad adviceFunc for srcFunc: " + ao.srcFunc);
155
			dojo.debugShallow(ao);
157
			dojo.debugShallow(ao);
156
		}
158
		}
157
		return ao;
159
		return ao;
158
	}
160
	}
159
	this.connect = function () {
161
	this.connect = function () {
160
		if (arguments.length == 1) {
162
		if (arguments.length == 1) {
161
			var ao = arguments[0];
163
			var ao = arguments[0];
162
		} else {
164
		} else {
163
			var ao = interpolateArgs(arguments, true);
165
			var ao = interpolateArgs(arguments, true);
164
		}
166
		}
-
 
167
		if (dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey")) {
-
 
168
			if (dojo.render.html.ie) {
-
 
169
				ao.srcFunc = "onkeydown";
-
 
170
				this.connect(ao);
-
 
171
			}
-
 
172
			ao.srcFunc = "onkeypress";
-
 
173
		}
165
		if (dojo.lang.isArray(ao.srcObj) && ao.srcObj != "") {
174
		if (dojo.lang.isArray(ao.srcObj) && ao.srcObj != "") {
166
			var tmpAO = {};
175
			var tmpAO = {};
167
			for (var x in ao) {
176
			for (var x in ao) {
168
				tmpAO[x] = ao[x];
177
				tmpAO[x] = ao[x];
169
			}
178
			}
170
			var mjps = [];
179
			var mjps = [];
171
			dojo.lang.forEach(ao.srcObj, function (src) {
180
			dojo.lang.forEach(ao.srcObj, function (src) {
172
				if ((dojo.render.html.capable) && (dojo.lang.isString(src))) {
181
				if ((dojo.render.html.capable) && (dojo.lang.isString(src))) {
173
					src = dojo.byId(src);
182
					src = dojo.byId(src);
174
				}
183
				}
175
				tmpAO.srcObj = src;
184
				tmpAO.srcObj = src;
176
				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
185
				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
177
			});
186
			});
178
			return mjps;
187
			return mjps;
179
		}
188
		}
180
		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
189
		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
181
		if (ao.adviceFunc) {
190
		if (ao.adviceFunc) {
182
			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
191
			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
183
		}
192
		}
184
		mjp.kwAddAdvice(ao);
193
		mjp.kwAddAdvice(ao);
185
		return mjp;
194
		return mjp;
186
	};
195
	};
187
	this.log = function (a1, a2) {
196
	this.log = function (a1, a2) {
188
		var kwArgs;
197
		var kwArgs;
189
		if ((arguments.length == 1) && (typeof a1 == "object")) {
198
		if ((arguments.length == 1) && (typeof a1 == "object")) {
190
			kwArgs = a1;
199
			kwArgs = a1;
191
		} else {
200
		} else {
192
			kwArgs = {srcObj:a1, srcFunc:a2};
201
			kwArgs = {srcObj:a1, srcFunc:a2};
193
		}
202
		}
194
		kwArgs.adviceFunc = function () {
203
		kwArgs.adviceFunc = function () {
195
			var argsStr = [];
204
			var argsStr = [];
196
			for (var x = 0; x < arguments.length; x++) {
205
			for (var x = 0; x < arguments.length; x++) {
197
				argsStr.push(arguments[x]);
206
				argsStr.push(arguments[x]);
198
			}
207
			}
199
			dojo.debug("(" + kwArgs.srcObj + ")." + kwArgs.srcFunc, ":", argsStr.join(", "));
208
			dojo.debug("(" + kwArgs.srcObj + ")." + kwArgs.srcFunc, ":", argsStr.join(", "));
200
		};
209
		};
201
		this.kwConnect(kwArgs);
210
		this.kwConnect(kwArgs);
202
	};
211
	};
203
	this.connectBefore = function () {
212
	this.connectBefore = function () {
204
		var args = ["before"];
213
		var args = ["before"];
205
		for (var i = 0; i < arguments.length; i++) {
214
		for (var i = 0; i < arguments.length; i++) {
206
			args.push(arguments[i]);
215
			args.push(arguments[i]);
207
		}
216
		}
208
		return this.connect.apply(this, args);
217
		return this.connect.apply(this, args);
209
	};
218
	};
210
	this.connectAround = function () {
219
	this.connectAround = function () {
211
		var args = ["around"];
220
		var args = ["around"];
212
		for (var i = 0; i < arguments.length; i++) {
221
		for (var i = 0; i < arguments.length; i++) {
213
			args.push(arguments[i]);
222
			args.push(arguments[i]);
214
		}
223
		}
215
		return this.connect.apply(this, args);
224
		return this.connect.apply(this, args);
216
	};
225
	};
217
	this.connectOnce = function () {
226
	this.connectOnce = function () {
218
		var ao = interpolateArgs(arguments, true);
227
		var ao = interpolateArgs(arguments, true);
219
		ao.once = true;
228
		ao.once = true;
220
		return this.connect(ao);
229
		return this.connect(ao);
221
	};
230
	};
222
	this.connectRunOnce = function () {
231
	this.connectRunOnce = function () {
223
		var ao = interpolateArgs(arguments, true);
232
		var ao = interpolateArgs(arguments, true);
224
		ao.maxCalls = 1;
233
		ao.maxCalls = 1;
225
		return this.connect(ao);
234
		return this.connect(ao);
226
	};
235
	};
227
	this._kwConnectImpl = function (kwArgs, disconnect) {
236
	this._kwConnectImpl = function (kwArgs, disconnect) {
228
		var fn = (disconnect) ? "disconnect" : "connect";
237
		var fn = (disconnect) ? "disconnect" : "connect";
229
		if (typeof kwArgs["srcFunc"] == "function") {
238
		if (typeof kwArgs["srcFunc"] == "function") {
230
			kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
239
			kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
231
			var tmpName = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
240
			var tmpName = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
232
			kwArgs.srcFunc = tmpName;
241
			kwArgs.srcFunc = tmpName;
233
		}
242
		}
234
		if (typeof kwArgs["adviceFunc"] == "function") {
243
		if (typeof kwArgs["adviceFunc"] == "function") {
235
			kwArgs.adviceObj = kwArgs["adviceObj"] || dj_global;
244
			kwArgs.adviceObj = kwArgs["adviceObj"] || dj_global;
236
			var tmpName = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
245
			var tmpName = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
237
			kwArgs.adviceFunc = tmpName;
246
			kwArgs.adviceFunc = tmpName;
238
		}
247
		}
239
		kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
248
		kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
240
		kwArgs.adviceObj = kwArgs["adviceObj"] || kwArgs["targetObj"] || dj_global;
249
		kwArgs.adviceObj = kwArgs["adviceObj"] || kwArgs["targetObj"] || dj_global;
241
		kwArgs.adviceFunc = kwArgs["adviceFunc"] || kwArgs["targetFunc"];
250
		kwArgs.adviceFunc = kwArgs["adviceFunc"] || kwArgs["targetFunc"];
242
		return dojo.event[fn](kwArgs);
251
		return dojo.event[fn](kwArgs);
243
	};
252
	};
244
	this.kwConnect = function (kwArgs) {
253
	this.kwConnect = function (kwArgs) {
245
		return this._kwConnectImpl(kwArgs, false);
254
		return this._kwConnectImpl(kwArgs, false);
246
	};
255
	};
247
	this.disconnect = function () {
256
	this.disconnect = function () {
248
		if (arguments.length == 1) {
257
		if (arguments.length == 1) {
249
			var ao = arguments[0];
258
			var ao = arguments[0];
250
		} else {
259
		} else {
251
			var ao = interpolateArgs(arguments, true);
260
			var ao = interpolateArgs(arguments, true);
252
		}
261
		}
253
		if (!ao.adviceFunc) {
262
		if (!ao.adviceFunc) {
254
			return;
263
			return;
255
		}
264
		}
256
		if (dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey")) {
265
		if (dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey")) {
257
			if (dojo.render.html.ie) {
266
			if (dojo.render.html.ie) {
258
				ao.srcFunc = "onkeydown";
267
				ao.srcFunc = "onkeydown";
259
				this.disconnect(ao);
268
				this.disconnect(ao);
260
			}
269
			}
261
			ao.srcFunc = "onkeypress";
270
			ao.srcFunc = "onkeypress";
262
		}
271
		}
263
		if (!ao.srcObj[ao.srcFunc]) {
272
		if (!ao.srcObj[ao.srcFunc]) {
264
			return null;
273
			return null;
265
		}
274
		}
266
		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc, true);
275
		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc, true);
267
		mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
276
		mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
268
		return mjp;
277
		return mjp;
269
	};
278
	};
270
	this.kwDisconnect = function (kwArgs) {
279
	this.kwDisconnect = function (kwArgs) {
271
		return this._kwConnectImpl(kwArgs, true);
280
		return this._kwConnectImpl(kwArgs, true);
272
	};
281
	};
273
};
282
};
274
dojo.event.MethodInvocation = function (join_point, obj, args) {
283
dojo.event.MethodInvocation = function (join_point, obj, args) {
275
	this.jp_ = join_point;
284
	this.jp_ = join_point;
276
	this.object = obj;
285
	this.object = obj;
277
	this.args = [];
286
	this.args = [];
278
	for (var x = 0; x < args.length; x++) {
287
	for (var x = 0; x < args.length; x++) {
279
		this.args[x] = args[x];
288
		this.args[x] = args[x];
280
	}
289
	}
281
	this.around_index = -1;
290
	this.around_index = -1;
282
};
291
};
283
dojo.event.MethodInvocation.prototype.proceed = function () {
292
dojo.event.MethodInvocation.prototype.proceed = function () {
284
	this.around_index++;
293
	this.around_index++;
285
	if (this.around_index >= this.jp_.around.length) {
294
	if (this.around_index >= this.jp_.around.length) {
286
		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
295
		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
287
	} else {
296
	} else {
288
		var ti = this.jp_.around[this.around_index];
297
		var ti = this.jp_.around[this.around_index];
289
		var mobj = ti[0] || dj_global;
298
		var mobj = ti[0] || dj_global;
290
		var meth = ti[1];
299
		var meth = ti[1];
291
		return mobj[meth].call(mobj, this);
300
		return mobj[meth].call(mobj, this);
292
	}
301
	}
293
};
302
};
294
dojo.event.MethodJoinPoint = function (obj, funcName) {
303
dojo.event.MethodJoinPoint = function (obj, funcName) {
295
	this.object = obj || dj_global;
304
	this.object = obj || dj_global;
296
	this.methodname = funcName;
305
	this.methodname = funcName;
297
	this.methodfunc = this.object[funcName];
306
	this.methodfunc = this.object[funcName];
298
	this.squelch = false;
307
	this.squelch = false;
299
};
308
};
300
dojo.event.MethodJoinPoint.getForMethod = function (obj, funcName) {
309
dojo.event.MethodJoinPoint.getForMethod = function (obj, funcName) {
301
	if (!obj) {
310
	if (!obj) {
302
		obj = dj_global;
311
		obj = dj_global;
303
	}
312
	}
304
	var ofn = obj[funcName];
313
	var ofn = obj[funcName];
305
	if (!ofn) {
314
	if (!ofn) {
306
		ofn = obj[funcName] = function () {
315
		ofn = obj[funcName] = function () {
307
		};
316
		};
308
		if (!obj[funcName]) {
317
		if (!obj[funcName]) {
309
			dojo.raise("Cannot set do-nothing method on that object " + funcName);
318
			dojo.raise("Cannot set do-nothing method on that object " + funcName);
310
		}
319
		}
311
	} else {
320
	} else {
312
		if ((typeof ofn != "function") && (!dojo.lang.isFunction(ofn)) && (!dojo.lang.isAlien(ofn))) {
321
		if ((typeof ofn != "function") && (!dojo.lang.isFunction(ofn)) && (!dojo.lang.isAlien(ofn))) {
313
			return null;
322
			return null;
314
		}
323
		}
315
	}
324
	}
316
	var jpname = funcName + "$joinpoint";
325
	var jpname = funcName + "$joinpoint";
317
	var jpfuncname = funcName + "$joinpoint$method";
326
	var jpfuncname = funcName + "$joinpoint$method";
318
	var joinpoint = obj[jpname];
327
	var joinpoint = obj[jpname];
319
	if (!joinpoint) {
328
	if (!joinpoint) {
320
		var isNode = false;
329
		var isNode = false;
321
		if (dojo.event["browser"]) {
330
		if (dojo.event["browser"]) {
322
			if ((obj["attachEvent"]) || (obj["nodeType"]) || (obj["addEventListener"])) {
331
			if ((obj["attachEvent"]) || (obj["nodeType"]) || (obj["addEventListener"])) {
323
				isNode = true;
332
				isNode = true;
324
				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, funcName]);
333
				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, funcName]);
325
			}
334
			}
326
		}
335
		}
327
		var origArity = ofn.length;
336
		var origArity = ofn.length;
328
		obj[jpfuncname] = ofn;
337
		obj[jpfuncname] = ofn;
329
		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
338
		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
330
		if (!isNode) {
339
		if (!isNode) {
331
			obj[funcName] = function () {
340
			obj[funcName] = function () {
332
				return joinpoint.run.apply(joinpoint, arguments);
341
				return joinpoint.run.apply(joinpoint, arguments);
333
			};
342
			};
334
		} else {
343
		} else {
335
			obj[funcName] = function () {
344
			obj[funcName] = function () {
336
				var args = [];
345
				var args = [];
337
				if (!arguments.length) {
346
				if (!arguments.length) {
338
					var evt = null;
347
					var evt = null;
339
					try {
348
					try {
340
						if (obj.ownerDocument) {
349
						if (obj.ownerDocument) {
341
							evt = obj.ownerDocument.parentWindow.event;
350
							evt = obj.ownerDocument.parentWindow.event;
342
						} else {
351
						} else {
343
							if (obj.documentElement) {
352
							if (obj.documentElement) {
344
								evt = obj.documentElement.ownerDocument.parentWindow.event;
353
								evt = obj.documentElement.ownerDocument.parentWindow.event;
345
							} else {
354
							} else {
346
								if (obj.event) {
355
								if (obj.event) {
347
									evt = obj.event;
356
									evt = obj.event;
348
								} else {
357
								} else {
349
									evt = window.event;
358
									evt = window.event;
350
								}
359
								}
351
							}
360
							}
352
						}
361
						}
353
					}
362
					}
354
					catch (e) {
363
					catch (e) {
355
						evt = window.event;
364
						evt = window.event;
356
					}
365
					}
357
					if (evt) {
366
					if (evt) {
358
						args.push(dojo.event.browser.fixEvent(evt, this));
367
						args.push(dojo.event.browser.fixEvent(evt, this));
359
					}
368
					}
360
				} else {
369
				} else {
361
					for (var x = 0; x < arguments.length; x++) {
370
					for (var x = 0; x < arguments.length; x++) {
362
						if ((x == 0) && (dojo.event.browser.isEvent(arguments[x]))) {
371
						if ((x == 0) && (dojo.event.browser.isEvent(arguments[x]))) {
363
							args.push(dojo.event.browser.fixEvent(arguments[x], this));
372
							args.push(dojo.event.browser.fixEvent(arguments[x], this));
364
						} else {
373
						} else {
365
							args.push(arguments[x]);
374
							args.push(arguments[x]);
366
						}
375
						}
367
					}
376
					}
368
				}
377
				}
369
				return joinpoint.run.apply(joinpoint, args);
378
				return joinpoint.run.apply(joinpoint, args);
370
			};
379
			};
371
		}
380
		}
372
		obj[funcName].__preJoinArity = origArity;
381
		obj[funcName].__preJoinArity = origArity;
373
	}
382
	}
374
	return joinpoint;
383
	return joinpoint;
375
};
384
};
376
dojo.lang.extend(dojo.event.MethodJoinPoint, {squelch:false, unintercept:function () {
385
dojo.lang.extend(dojo.event.MethodJoinPoint, {squelch:false, unintercept:function () {
377
	this.object[this.methodname] = this.methodfunc;
386
	this.object[this.methodname] = this.methodfunc;
378
	this.before = [];
387
	this.before = [];
379
	this.after = [];
388
	this.after = [];
380
	this.around = [];
389
	this.around = [];
381
}, disconnect:dojo.lang.forward("unintercept"), run:function () {
390
}, disconnect:dojo.lang.forward("unintercept"), run:function () {
382
	var obj = this.object || dj_global;
391
	var obj = this.object || dj_global;
383
	var args = arguments;
392
	var args = arguments;
384
	var aargs = [];
393
	var aargs = [];
385
	for (var x = 0; x < args.length; x++) {
394
	for (var x = 0; x < args.length; x++) {
386
		aargs[x] = args[x];
395
		aargs[x] = args[x];
387
	}
396
	}
388
	var unrollAdvice = function (marr) {
397
	var unrollAdvice = function (marr) {
389
		if (!marr) {
398
		if (!marr) {
390
			dojo.debug("Null argument to unrollAdvice()");
399
			dojo.debug("Null argument to unrollAdvice()");
391
			return;
400
			return;
392
		}
401
		}
393
		var callObj = marr[0] || dj_global;
402
		var callObj = marr[0] || dj_global;
394
		var callFunc = marr[1];
403
		var callFunc = marr[1];
395
		if (!callObj[callFunc]) {
404
		if (!callObj[callFunc]) {
396
			dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
405
			dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
397
		}
406
		}
398
		var aroundObj = marr[2] || dj_global;
407
		var aroundObj = marr[2] || dj_global;
399
		var aroundFunc = marr[3];
408
		var aroundFunc = marr[3];
400
		var msg = marr[6];
409
		var msg = marr[6];
401
		var maxCount = marr[7];
410
		var maxCount = marr[7];
402
		if (maxCount > -1) {
411
		if (maxCount > -1) {
403
			if (maxCount == 0) {
412
			if (maxCount == 0) {
404
				return;
413
				return;
405
			}
414
			}
406
			marr[7]--;
415
			marr[7]--;
407
		}
416
		}
408
		var undef;
417
		var undef;
409
		var to = {args:[], jp_:this, object:obj, proceed:function () {
418
		var to = {args:[], jp_:this, object:obj, proceed:function () {
410
			return callObj[callFunc].apply(callObj, to.args);
419
			return callObj[callFunc].apply(callObj, to.args);
411
		}};
420
		}};
412
		to.args = aargs;
421
		to.args = aargs;
413
		var delay = parseInt(marr[4]);
422
		var delay = parseInt(marr[4]);
414
		var hasDelay = ((!isNaN(delay)) && (marr[4] !== null) && (typeof marr[4] != "undefined"));
423
		var hasDelay = ((!isNaN(delay)) && (marr[4] !== null) && (typeof marr[4] != "undefined"));
415
		if (marr[5]) {
424
		if (marr[5]) {
416
			var rate = parseInt(marr[5]);
425
			var rate = parseInt(marr[5]);
417
			var cur = new Date();
426
			var cur = new Date();
418
			var timerSet = false;
427
			var timerSet = false;
419
			if ((marr["last"]) && ((cur - marr.last) <= rate)) {
428
			if ((marr["last"]) && ((cur - marr.last) <= rate)) {
420
				if (dojo.event._canTimeout) {
429
				if (dojo.event._canTimeout) {
421
					if (marr["delayTimer"]) {
430
					if (marr["delayTimer"]) {
422
						clearTimeout(marr.delayTimer);
431
						clearTimeout(marr.delayTimer);
423
					}
432
					}
424
					var tod = parseInt(rate * 2);
433
					var tod = parseInt(rate * 2);
425
					var mcpy = dojo.lang.shallowCopy(marr);
434
					var mcpy = dojo.lang.shallowCopy(marr);
426
					marr.delayTimer = setTimeout(function () {
435
					marr.delayTimer = setTimeout(function () {
427
						mcpy[5] = 0;
436
						mcpy[5] = 0;
428
						unrollAdvice(mcpy);
437
						unrollAdvice(mcpy);
429
					}, tod);
438
					}, tod);
430
				}
439
				}
431
				return;
440
				return;
432
			} else {
441
			} else {
433
				marr.last = cur;
442
				marr.last = cur;
434
			}
443
			}
435
		}
444
		}
436
		if (aroundFunc) {
445
		if (aroundFunc) {
437
			aroundObj[aroundFunc].call(aroundObj, to);
446
			aroundObj[aroundFunc].call(aroundObj, to);
438
		} else {
447
		} else {
439
			if ((hasDelay) && ((dojo.render.html) || (dojo.render.svg))) {
448
			if ((hasDelay) && ((dojo.render.html) || (dojo.render.svg))) {
440
				dj_global["setTimeout"](function () {
449
				dj_global["setTimeout"](function () {
441
					if (msg) {
450
					if (msg) {
442
						callObj[callFunc].call(callObj, to);
451
						callObj[callFunc].call(callObj, to);
443
					} else {
452
					} else {
444
						callObj[callFunc].apply(callObj, args);
453
						callObj[callFunc].apply(callObj, args);
445
					}
454
					}
446
				}, delay);
455
				}, delay);
447
			} else {
456
			} else {
448
				if (msg) {
457
				if (msg) {
449
					callObj[callFunc].call(callObj, to);
458
					callObj[callFunc].call(callObj, to);
450
				} else {
459
				} else {
451
					callObj[callFunc].apply(callObj, args);
460
					callObj[callFunc].apply(callObj, args);
452
				}
461
				}
453
			}
462
			}
454
		}
463
		}
455
	};
464
	};
456
	var unRollSquelch = function () {
465
	var unRollSquelch = function () {
457
		if (this.squelch) {
466
		if (this.squelch) {
458
			try {
467
			try {
459
				return unrollAdvice.apply(this, arguments);
468
				return unrollAdvice.apply(this, arguments);
460
			}
469
			}
461
			catch (e) {
470
			catch (e) {
462
				dojo.debug(e);
471
				dojo.debug(e);
463
			}
472
			}
464
		} else {
473
		} else {
465
			return unrollAdvice.apply(this, arguments);
474
			return unrollAdvice.apply(this, arguments);
466
		}
475
		}
467
	};
476
	};
468
	if ((this["before"]) && (this.before.length > 0)) {
477
	if ((this["before"]) && (this.before.length > 0)) {
469
		dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
478
		dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
470
	}
479
	}
471
	var result;
480
	var result;
472
	try {
481
	try {
473
		if ((this["around"]) && (this.around.length > 0)) {
482
		if ((this["around"]) && (this.around.length > 0)) {
474
			var mi = new dojo.event.MethodInvocation(this, obj, args);
483
			var mi = new dojo.event.MethodInvocation(this, obj, args);
475
			result = mi.proceed();
484
			result = mi.proceed();
476
		} else {
485
		} else {
477
			if (this.methodfunc) {
486
			if (this.methodfunc) {
478
				result = this.object[this.methodname].apply(this.object, args);
487
				result = this.object[this.methodname].apply(this.object, args);
479
			}
488
			}
480
		}
489
		}
481
	}
490
	}
482
	catch (e) {
491
	catch (e) {
483
		if (!this.squelch) {
492
		if (!this.squelch) {
484
			dojo.debug(e, "when calling", this.methodname, "on", this.object, "with arguments", args);
493
			dojo.debug(e, "when calling", this.methodname, "on", this.object, "with arguments", args);
485
			dojo.raise(e);
494
			dojo.raise(e);
486
		}
495
		}
487
	}
496
	}
488
	if ((this["after"]) && (this.after.length > 0)) {
497
	if ((this["after"]) && (this.after.length > 0)) {
489
		dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
498
		dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
490
	}
499
	}
491
	return (this.methodfunc) ? result : null;
500
	return (this.methodfunc) ? result : null;
492
}, getArr:function (kind) {
501
}, getArr:function (kind) {
493
	var type = "after";
502
	var type = "after";
494
	if ((typeof kind == "string") && (kind.indexOf("before") != -1)) {
503
	if ((typeof kind == "string") && (kind.indexOf("before") != -1)) {
495
		type = "before";
504
		type = "before";
496
	} else {
505
	} else {
497
		if (kind == "around") {
506
		if (kind == "around") {
498
			type = "around";
507
			type = "around";
499
		}
508
		}
500
	}
509
	}
501
	if (!this[type]) {
510
	if (!this[type]) {
502
		this[type] = [];
511
		this[type] = [];
503
	}
512
	}
504
	return this[type];
513
	return this[type];
505
}, kwAddAdvice:function (args) {
514
}, kwAddAdvice:function (args) {
506
	this.addAdvice(args["adviceObj"], args["adviceFunc"], args["aroundObj"], args["aroundFunc"], args["adviceType"], args["precedence"], args["once"], args["delay"], args["rate"], args["adviceMsg"], args["maxCalls"]);
515
	this.addAdvice(args["adviceObj"], args["adviceFunc"], args["aroundObj"], args["aroundFunc"], args["adviceType"], args["precedence"], args["once"], args["delay"], args["rate"], args["adviceMsg"], args["maxCalls"]);
507
}, addAdvice:function (thisAdviceObj, thisAdvice, thisAroundObj, thisAround, adviceType, precedence, once, delay, rate, asMessage, maxCalls) {
516
}, addAdvice:function (thisAdviceObj, thisAdvice, thisAroundObj, thisAround, adviceType, precedence, once, delay, rate, asMessage, maxCalls) {
508
	var arr = this.getArr(adviceType);
517
	var arr = this.getArr(adviceType);
509
	if (!arr) {
518
	if (!arr) {
510
		dojo.raise("bad this: " + this);
519
		dojo.raise("bad this: " + this);
511
	}
520
	}
512
	var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage, maxCalls];
521
	var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage, maxCalls];
513
	if (once) {
522
	if (once) {
514
		if (this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0) {
523
		if (this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0) {
515
			return;
524
			return;
516
		}
525
		}
517
	}
526
	}
518
	if (precedence == "first") {
527
	if (precedence == "first") {
519
		arr.unshift(ao);
528
		arr.unshift(ao);
520
	} else {
529
	} else {
521
		arr.push(ao);
530
		arr.push(ao);
522
	}
531
	}
523
}, hasAdvice:function (thisAdviceObj, thisAdvice, adviceType, arr) {
532
}, hasAdvice:function (thisAdviceObj, thisAdvice, adviceType, arr) {
524
	if (!arr) {
533
	if (!arr) {
525
		arr = this.getArr(adviceType);
534
		arr = this.getArr(adviceType);
526
	}
535
	}
527
	var ind = -1;
536
	var ind = -1;
528
	for (var x = 0; x < arr.length; x++) {
537
	for (var x = 0; x < arr.length; x++) {
529
		var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
538
		var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
530
		var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
539
		var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
531
		if ((arr[x][0] == thisAdviceObj) && (a1o == aao)) {
540
		if ((arr[x][0] == thisAdviceObj) && (a1o == aao)) {
532
			ind = x;
541
			ind = x;
533
		}
542
		}
534
	}
543
	}
535
	return ind;
544
	return ind;
536
}, removeAdvice:function (thisAdviceObj, thisAdvice, adviceType, once) {
545
}, removeAdvice:function (thisAdviceObj, thisAdvice, adviceType, once) {
537
	var arr = this.getArr(adviceType);
546
	var arr = this.getArr(adviceType);
538
	var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
547
	var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
539
	if (ind == -1) {
548
	if (ind == -1) {
540
		return false;
549
		return false;
541
	}
550
	}
542
	while (ind != -1) {
551
	while (ind != -1) {
543
		arr.splice(ind, 1);
552
		arr.splice(ind, 1);
544
		if (once) {
553
		if (once) {
545
			break;
554
			break;
546
		}
555
		}
547
		ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
556
		ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
548
	}
557
	}
549
	return true;
558
	return true;
550
}});
559
}});
551
 
560