-/******************************************************************************\r
- * Copyright (c) 2007 java2script.org and others.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * Zhou Renjian - initial API and implementation\r
- *****************************************************************************/\r
-/*******\r
- * @author zhou renjian\r
- * @create March 10, 2006\r
- *******/\r
-\r
-if (window["Clazz"] == null || window["Clazz"].unloadClass == null) {\r
-/**\r
- * Once ClassExt.js is part of Class.js.\r
- * In order to make the Class.js as small as possible, part of its content\r
- * is moved into this ClassExt.js.\r
- *\r
- * See also http://j2s.sourceforge.net/j2sclazz/\r
- */\r
- \r
-/**\r
- * Clazz.MethodNotFoundException is used to notify the developer about calling\r
- * methods with incorrect parameters.\r
- */\r
-/* protected */\r
-// Override the Clazz.MethodNotFoundException in Class.js to give details\r
-Clazz.MethodNotFoundException = function (obj, clazz, method, params) {\r
- var paramStr = "";\r
- if (params != null) {\r
- paramStr = params.substring (1).replace (/\\/g, ",");\r
- }\r
- var leadingStr = "";\r
- if (method != null && method != "construct") {\r
- leadingStr = "Method";\r
- } else {\r
- leadingStr = "Constructor";\r
- }\r
- this.message = leadingStr + " " + Clazz.getClassName (clazz, true) + "." \r
- + method + "(" + paramStr + ") is not found!";\r
- this.toString = function () {\r
- return "MethodNotFoundException:" + this.message;\r
- }\r
-};\r
-\r
-/**\r
- * Prepare callback for instance of anonymous Class.\r
- * For example for the callback:\r
- * this.callbacks.MyEditor.sayHello();\r
- *\r
- * @param objThis the host object for callback\r
- * @param args arguments object. args[0] will be classThisObj -- the "this"\r
- * object to be hooked\r
- * \r
- * Attention: parameters should not be null!\r
- */\r
-/* protected */\r
-Clazz.prepareCallback = function (objThis, args) {\r
- var classThisObj = args[0];\r
- var cbName = "b$"; // "callbacks";\r
- if (objThis != null && classThisObj != null && classThisObj !== window) {\r
- var obs = new Array ();\r
- if (objThis[cbName] == null) {\r
- objThis[cbName] = obs;\r
- } else { // must make a copy!\r
- for (var s in objThis[cbName]) {\r
- if (s != "length") {\r
- obs[s] = objThis[cbName][s];\r
- }\r
- }\r
- objThis[cbName] = obs;\r
- }\r
- var className = Clazz.getClassName (classThisObj, true);\r
- //if (obs[className] == null) { /* == null make no sense! */\r
- //obs[className] = classThisObj;\r
- /*\r
- * TODO: the following line is SWT-specific! Try to move it out!\r
- */\r
- obs[className.replace (/org\.eclipse\.swt\./, "$wt.")] = classThisObj;\r
- var clazz = Clazz.getClass (classThisObj);\r
- while (clazz.superClazz != null) {\r
- clazz = clazz.superClazz;\r
- //obs[Clazz.getClassName (clazz)] = classThisObj;\r
- /*\r
- * TODO: the following line is SWT-specific! Try to move it out!\r
- */\r
- obs[Clazz.getClassName (clazz, true)\r
- .replace (/org\.eclipse\.swt\./, "$wt.")] = classThisObj;\r
- }\r
- //}\r
- var cbs = classThisObj[cbName];\r
- if (cbs != null && cbs instanceof Array) {\r
- for (var s in cbs) {\r
- if (s != "length") {\r
- obs[s] = cbs[s];\r
- }\r
- }\r
- }\r
- }\r
- // Shift the arguments\r
- for (var i = 0; i < args.length - 1; i++) {\r
- args[i] = args[i + 1];\r
- }\r
- args.length--;\r
- // arguments will be returned!\r
-};\r
-\r
-/**\r
- * Construct instance of the given inner class.\r
- *\r
- * @param classInner given inner class, alway with name like "*$*"\r
- * @param objThis this instance which can be used to call back.\r
- * @param finalVars final variables which the inner class may use\r
- * @return the constructed object\r
- *\r
- * @see Clazz#cloneFinals\r
- */\r
-/* public */\r
-Clazz.innerTypeInstance = function (clazzInner, objThis, finalVars) {\r
- if (clazzInner == null) {\r
- clazzInner = arguments.callee.caller;\r
- }\r
- var obj = null;\r
- /*if (arguments.length == 2) {\r
- obj = new clazzInner (objThis);\r
- } else */if (arguments.length == 3) {\r
- obj = new clazzInner (objThis);\r
- } else if (arguments.length == 4) {\r
- if (objThis.__CLASS_NAME__ == clazzInner.__CLASS_NAME__\r
- && arguments[3] === Clazz.inheritArgs) {\r
- obj = objThis;\r
- } else {\r
- obj = new clazzInner (objThis, arguments[3]);\r
- }\r
- } else if (arguments.length == 5) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4]);\r
- } else if (arguments.length == 6) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4], \r
- arguments[5]);\r
- } else if (arguments.length == 7) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4], \r
- arguments[5], arguments[6]);\r
- } else if (arguments.length == 8) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4], \r
- arguments[5], arguments[6], arguments[7]);\r
- } else if (arguments.length == 9) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4], \r
- arguments[5], arguments[6], arguments[7], arguments[8]);\r
- } else if (arguments.length == 10) {\r
- obj = new clazzInner (objThis, arguments[3], arguments[4], \r
- arguments[5], arguments[6], arguments[7], arguments[8],\r
- arguments[9]);\r
- } else {\r
- /*\r
- * Should construct instance manually.\r
- */\r
- obj = new clazzInner ();\r
- if (obj.construct == null) {\r
- throw new String ("No support anonymous class constructor with " \r
- + "more than 7 parameters.");\r
- }\r
- var args = new Array ();\r
- for (var i = 3; i < arguments.length; i++) {\r
- args[i - 3] = arguments[i];\r
- }\r
- obj.construct.apply (obj, args);\r
- }\r
- // f$ is short for the once choosen "$finals"\r
- if (finalVars != null && objThis.f$ == null) {\r
- obj.f$ = finalVars;\r
- } else if (finalVars == null && objThis.f$ != null) {\r
- obj.f$ = objThis.f$;\r
- } else if (finalVars != null && objThis.f$ != null) {\r
- var o = new Object ();\r
- for (var attr in objThis.f$) {\r
- o[attr] = objThis.f$[attr];\r
- }\r
- for (var attr in finalVars) {\r
- o[attr] = finalVars[attr];\r
- }\r
- obj.f$ = o;\r
- }\r
- /*\r
- if (finalVars != null && objThis.$finals == null) {\r
- obj.$finals = finalVars;\r
- } else if (finalVars == null && objThis.$finals != null) {\r
- obj.$finals = objThis.$finals;\r
- } else if (finalVars != null && objThis.$finals != null) {\r
- var o = new Object ();\r
- for (var attr in objThis.$finals) {\r
- o[attr] = objThis.$finals[attr];\r
- }\r
- for (var attr in finalVars) {\r
- o[attr] = finalVars[attr];\r
- }\r
- obj.$finals = o;\r
- }\r
- */\r
- //Clazz.prepareCallback (obj, objThis);\r
- return obj;\r
-};\r
-\r
-/**\r
- * Clone variables whose modifier is "final".\r
- * Usage: var o = Clazz.cloneFinals ("name", name, "age", age);\r
- *\r
- * @return Object with all final variables\r
- */\r
-/* protected */\r
-Clazz.cloneFinals = function () {\r
- var o = new Object ();\r
- var length = arguments.length / 2;\r
- for (var i = 0; i < length; i++) {\r
- o[arguments[i + i]] = arguments[i + i + 1];\r
- }\r
- return o;\r
-};\r
-\r
-/* public */\r
-Clazz.isClassDefined = Clazz.isDefinedClass = function (clazzName) {\r
- if (clazzName != null && clazzName.length != 0) {\r
- if (Clazz.allClasses[clazzName]) {\r
- return true;\r
- }\r
- var pkgFrags = clazzName.split (/\./);\r
- var pkg = null;\r
- for (var i = 0; i < pkgFrags.length; i++) {\r
- if (pkg == null) {\r
- if (Clazz.allPackage[pkgFrags[0]] == null) {\r
- //error (clazzName + " / " + false);\r
- return false;\r
- }\r
- pkg = Clazz.allPackage[pkgFrags[0]];\r
- } else {\r
- if (pkg[pkgFrags[i]] == null) {\r
- //error (clazzName + " / " + false);\r
- return false;\r
- }\r
- pkg = pkg[pkgFrags[i]]\r
- }\r
- }\r
- //error (clazzName + " / " + (pkg != null));\r
- //return pkg != null;\r
- if (pkg != null) {\r
- Clazz.allClasses[clazzName] = true;\r
- return true;\r
- } else {\r
- return false;\r
- }\r
- } else {\r
- /* consider null or empty name as non-defined class */\r
- return false;\r
- }\r
-};\r
-/**\r
- * Define the enum constant.\r
- * @param classEnum enum type\r
- * @param enumName enum constant\r
- * @param enumOrdinal enum ordinal\r
- * @param initialParams enum constant constructor parameters\r
- * @return return defined enum constant\r
- */\r
-/* public */\r
-Clazz.defineEnumConstant = function (clazzEnum, enumName, enumOrdinal, initialParams, clazzEnumExt) {\r
- var o = null;\r
- if (clazzEnumExt != null) {\r
- o = new clazzEnumExt ();\r
- } else {\r
- o = new clazzEnum ();\r
- }\r
- Clazz.superConstructor (o, clazzEnum, [enumName, enumOrdinal]);\r
- if (initialParams != null && initialParams.length != 0) {\r
- o.construct.apply (o, initialParams);\r
- }\r
- clazzEnum[enumName] = o;\r
- clazzEnum.prototype[enumName] = o;\r
- return o;\r
-};\r
-\r
-/**\r
- * Make arrays.\r
- *\r
- * @return the created Array object\r
- */\r
-/* public */\r
-Clazz.newArray = function () {\r
- var args = arguments;\r
- if (arguments.length == 1) {\r
- if (arguments[0] instanceof Array) {\r
- args = arguments[0];\r
- }\r
- }\r
- if (args.length <= 1) {\r
- return new Array ();\r
- } else if (args.length == 2) {\r
- var dim = args[0];\r
- if (typeof dim == "string") {\r
- dim = dim.charCodeAt (0); // char\r
- }\r
- var val = args[1];\r
- var arr = new Array (dim);\r
- for (var i = 0; i < dim; i++) {\r
- arr[i] = val;\r
- }\r
- return arr;\r
- } else {\r
- var dim = args[0];\r
- if (typeof dim == "string") {\r
- dim = dim.charCodeAt (0); // char\r
- }\r
- var len = args.length - 1;\r
- var xargs = new Array (len);\r
- for (var i = 0; i < len; i++) {\r
- xargs[i] = args[i + 1];\r
- }\r
- var arr = new Array (dim);\r
- for (var i = 0; i < dim; i++) {\r
- // Call recursively!\r
- arr[i] = Clazz.newArray (xargs);\r
- }\r
- return arr;\r
- }\r
-};\r
-\r
-/**\r
- * Make the RunnableCompatiability instance as a JavaScript function.\r
- *\r
- * @param jsr Instance of RunnableCompatiability\r
- * @return JavaScript function instance represents the method run of jsr.\r
- */\r
-/* public */\r
-Clazz.makeFunction = function (jsr) {\r
- return function (e) {\r
- if (e == null) {\r
- e = window.event;\r
- }\r
- if (jsr.setEvent != null) {\r
- jsr.setEvent (e);\r
- }\r
- jsr.run ();\r
- /*\r
- if (e != null && jsr.isReturned != null && jsr.isReturned()) {\r
- // Is it correct to stopPropagation here? --Feb 19, 2006\r
- e.cancelBubble = true;\r
- if (e.stopPropagation) {\r
- e.stopPropagation();\r
- }\r
- }\r
- */\r
- if (jsr.returnSet == 1) {\r
- return jsr.returnNumber;\r
- } else if (jsr.returnSet == 2) {\r
- return jsr.returnBoolean;\r
- } else if (jsr.returnSet == 3) {\r
- return jsr.returnObject;\r
- }\r
- };\r
-};\r
-\r
-/* protected */\r
-Clazz.defineStatics = function (clazz) {\r
- for (var i = 0; i < (arguments.length - 1) / 2; i++) {\r
- var name = arguments[i + i + 1];\r
- clazz[name] = clazz.prototype[name] = arguments[i + i + 2];\r
- }\r
-};\r
-\r
-/* protected */\r
-Clazz.prepareFields = function (clazz, fieldsFun) {\r
- var stacks = new Array ();\r
- if (clazz.con$truct != null) {\r
- var ss = clazz.con$truct.stacks;\r
- var idx = clazz.con$truct.index;\r
- for (var i = idx; i < ss.length; i++) {\r
- stacks[i] = ss[i];\r
- }\r
- }\r
- clazz.con$truct = clazz.prototype.con$truct = function () {\r
- var stacks = arguments.callee.stacks;\r
- if (stacks != null) {\r
- for (var i = 0; i < stacks.length; i++) {\r
- stacks[i].apply (this, []);\r
- }\r
- }\r
- };\r
- stacks[stacks.length] = fieldsFun;\r
- clazz.con$truct.stacks = stacks;\r
- clazz.con$truct.index = 0;\r
-};\r
-\r
-/*\r
- * Serialize those public or protected fields in class \r
- * net.sf.j2s.ajax.SimpleSerializable.\r
- */\r
-/* protected */\r
-Clazz.registerSerializableFields = function (clazz) {\r
- var args = arguments;\r
- var length = args.length;\r
- var newArr = new Array ();\r
- if (clazz.declared$Fields != null) {\r
- for (var i = 0; i < clazz.declared$Fields.length; i++) {\r
- newArr[i] = clazz.declared$Fields[i];\r
- }\r
- }\r
- clazz.declared$Fields = newArr;\r
- \r
- if (length > 0 && length % 2 == 1) {\r
- var fs = clazz.declared$Fields;\r
- for (var i = 1; i <= (length - 1) / 2; i++) {\r
- var o = { name : args[i + i - 1], type : args[i + i] };\r
- var existed = false;\r
- for (var j = 0; j < fs.length; j++) {\r
- if (fs[j].name == o.name) { // reloaded classes\r
- fs[j].type = o.type; // update type\r
- existed = true;\r
- break;\r
- }\r
- }\r
- if (!existed) {\r
- fs[fs.length] = o;\r
- }\r
- }\r
- }\r
-};\r
-\r
-/*\r
- * Get the caller method for those methods that are wrapped by \r
- * Clazz.searchAndExecuteMethod.\r
- *\r
- * @param args caller method's arguments\r
- * @return caller method, null if there is not wrapped by \r
- * Clazz.searchAndExecuteMethod or is called directly.\r
- */\r
-/* protected */\r
-/*-# getMixedCallerMethod -> gMCM #-*/\r
-Clazz.getMixedCallerMethod = function (args) {\r
- var o = new Object ();\r
- var argc = args.callee.caller; // Clazz.tryToSearchAndExecute\r
- if (argc == null) return null;\r
- if (argc !== Clazz.tryToSearchAndExecute) { // inherited method's apply\r
- argc = argc.arguments.callee.caller;\r
- if (argc == null) return null;\r
- }\r
- if (argc !== Clazz.tryToSearchAndExecute) return null;\r
- argc = argc.arguments.callee.caller; // Clazz.searchAndExecuteMethod\r
- if (argc == null || argc !== Clazz.searchAndExecuteMethod) return null;\r
- o.claxxRef = argc.arguments[1];\r
- o.fxName = argc.arguments[2];\r
- o.paramTypes = Clazz.getParamsType (argc.arguments[3]);\r
- argc = argc.arguments.callee.caller; // Clazz.generateDelegatingMethod\r
- if (argc == null) return null;\r
- argc = argc.arguments.callee.caller; // the private method's caller\r
- if (argc == null) return null;\r
- o.caller = argc;\r
- return o;\r
-};\r
-\r
-/*\r
- * Check and return super private method.\r
- * In order make private methods be executed correctly, some extra javascript\r
- * must be inserted into the beggining of the method body of the non-private \r
- * methods that with the same method signature as following:\r
- * <code>\r
- * var $private = Clazz.checkPrivateMethod (arguments);\r
- * if ($private != null) {\r
- * return $private.apply (this, arguments);\r
- * }\r
- * </code>\r
- * Be cautious about this. The above codes should be insert by Java2Script\r
- * compiler or with double checks to make sure things work correctly.\r
- *\r
- * @param args caller method's arguments\r
- * @return private method if there are private method fitted for the current \r
- * calling environment\r
- */\r
-/* public */\r
-Clazz.checkPrivateMethod = function (args) {\r
- var m = Clazz.getMixedCallerMethod (args);\r
- if (m == null) return null;\r
- var callerFx = m.claxxRef.prototype[m.caller.exName];\r
- if (callerFx == null) return null; // may not be in the class hierarchies\r
- var ppFun = null;\r
- if (callerFx.claxxOwner != null) {\r
- ppFun = callerFx.claxxOwner.prototype[m.fxName];\r
- } else {\r
- var stacks = callerFx.stacks;\r
- for (var i = stacks.length - 1; i >= 0; i--) {\r
- var fx = stacks[i].prototype[m.caller.exName];\r
- if (fx === m.caller) {\r
- ppFun = stacks[i].prototype[m.fxName];\r
- } else if (fx != null) {\r
- for (var fn in fx) {\r
- if (fn.indexOf ('\\') == 0 && fx[fn] === m.caller) {\r
- ppFun = stacks[i].prototype[m.fxName];\r
- break;\r
- }\r
- }\r
- }\r
- if (ppFun != null) {\r
- break;\r
- }\r
- }\r
- }\r
- if (ppFun != null && ppFun.claxxOwner == null) {\r
- ppFun = ppFun["\\" + m.paramTypes];\r
- }\r
- if (ppFun != null && ppFun.isPrivate && ppFun !== args.callee) {\r
- return ppFun;\r
- }\r
- return null;\r
-};\r
-var $fz = null; // for private method declaration\r
-//var cla$$ = null;\r
-var c$ = null;\r
-/*-# cla$$$tack -> cst #-*/\r
-Clazz.cla$$$tack = new Array ();\r
-Clazz.pu$h = function () {\r
- if (c$ != null) { // if (cla$$ != null) {\r
- Clazz.cla$$$tack[Clazz.cla$$$tack.length] = c$; // cla$$;\r
- }\r
-};\r
-Clazz.p0p = function () {\r
- if (Clazz.cla$$$tack.length > 0) {\r
- var clazz = Clazz.cla$$$tack[Clazz.cla$$$tack.length - 1];\r
- Clazz.cla$$$tack.length--;\r
- return clazz;\r
- } else {\r
- return null;\r
- }\r
-};\r
-\r
-/*# {$no.debug.support} >>x #*/\r
-/*\r
- * Option to switch on/off of stack traces.\r
- */\r
-/* protect */\r
-Clazz.tracingCalling = false;\r
-\r
-/*\r
- * Use to mark that the Throwable instance is created or not.\r
- */\r
-/* private */\r
-Clazz.initializingException = false;\r
-\r
-/* private */\r
-Clazz.callingStack = function (caller, owner) {\r
- this.caller = caller;\r
- this.owner = owner;\r
-};\r
-Clazz.callingStackTraces = new Array ();\r
-Clazz.pu$hCalling = function (stack) {\r
- Clazz.callingStackTraces[Clazz.callingStackTraces.length] = stack;\r
-};\r
-Clazz.p0pCalling = function () {\r
- var length = Clazz.callingStackTraces.length;\r
- if (length > 0) {\r
- var stack = Clazz.callingStackTraces[length - 1];\r
- Clazz.callingStackTraces.length--;\r
- return stack;\r
- } else {\r
- return null;\r
- }\r
-};\r
-/*# x<< #*/\r
-\r
-/**\r
- * The first folder is considered as the primary folder.\r
- * And try to be compatiable with ClazzLoader system.\r
- */\r
-/* private */\r
-if (window["ClazzLoader"] != null && ClazzLoader.binaryFolders != null) {\r
- Clazz.binaryFolders = ClazzLoader.binaryFolders;\r
-} else {\r
- Clazz.binaryFolders = ["bin/", "", "j2slib/"];\r
-}\r
-\r
-Clazz.addBinaryFolder = function (bin) {\r
- if (bin != null) {\r
- var bins = Clazz.binaryFolders;\r
- for (var i = 0; i < bins.length; i++) {\r
- if (bins[i] == bin) {\r
- return ;\r
- }\r
- }\r
- bins[bins.length] = bin;\r
- }\r
-};\r
-Clazz.removeBinaryFolder = function (bin) {\r
- if (bin != null) {\r
- var bins = Clazz.binaryFolders;\r
- for (var i = 0; i < bins.length; i++) {\r
- if (bins[i] == bin) {\r
- for (var j = i; j < bins.length - 1; j++) {\r
- bins[j] = bins[j + 1];\r
- }\r
- bins.length--;\r
- return bin;\r
- }\r
- }\r
- }\r
- return null;\r
-};\r
-Clazz.setPrimaryFolder = function (bin) {\r
- if (bin != null) {\r
- Clazz.removeBinaryFolder (bin);\r
- var bins = Clazz.binaryFolders;\r
- for (var i = bins.length - 1; i >= 0; i--) {\r
- bins[i + 1] = bins[i];\r
- }\r
- bins[0] = bin;\r
- }\r
-};\r
-\r
-/**\r
- * This is a simple implementation for Clazz#load. It just ignore dependencies\r
- * of the class. This will be fine for jar *.z.js file.\r
- * It will be overriden by ClazzLoader#load.\r
- * For more details, see ClazzLoader.js\r
- */\r
-/* protected */\r
-Clazz.load = function (musts, clazz, optionals, declaration) {\r
- if (declaration != null) {\r
- declaration ();\r
- }\r
-};\r
-\r
-/*\r
- * Invade the Object prototype!\r
- * TODO: make sure that invading Object prototype does not affect other\r
- * existed library, such as Dojo, YUI, Prototype, ...\r
- */\r
-java.lang.Object = Clazz._O;\r
-\r
-JavaObject.getName = Clazz.innerFunctions.getName;\r
-\r
-w$ = window; // Short for browser's window object\r
-d$ = document; // Short for browser's document object\r
-System = {\r
- currentTimeMillis : function () {\r
- return new Date ().getTime ();\r
- },\r
- props : null, //new java.util.Properties (),\r
- getProperties : function () {\r
- return System.props;\r
- },\r
- setProperties : function (props) {\r
- System.props = props;\r
- },\r
- getProperty : function (key, def) {\r
- if (System.props != null) {\r
- return System.props.getProperty (key, def);\r
- }\r
- if (def != null) {\r
- return def;\r
- }\r
- return key;\r
- },\r
- setProperty : function (key, val) {\r
- if (System.props == null) {\r
- return ;\r
- }\r
- System.props.setProperty (key, val);\r
- },\r
- currentTimeMillis : function () {\r
- return new Date ().getTime ();\r
- },\r
- arraycopy : function (src, srcPos, dest, destPos, length) {\r
- if (src !== dest) {\r
- for (var i = 0; i < length; i++) {\r
- dest[destPos + i] = src[srcPos + i];\r
- }\r
- } else {\r
- var swap = [];\r
- for (var i = 0; i < length; i++) {\r
- swap[i] = src[srcPos + i];\r
- }\r
- for (var i = 0; i < length; i++) {\r
- dest[destPos + i] = swap[i];\r
- }\r
- }\r
- }\r
-};\r
-System.out = new Clazz._O ();\r
-System.out.__CLASS_NAME__ = "java.io.PrintStream";\r
-System.out.print = function () {};\r
-System.out.printf = function () {};\r
-System.out.println = function () {};\r
-\r
-System.err = new Clazz._O ();\r
-System.err.__CLASS_NAME__ = "java.io.PrintStream";\r
-System.err.print = function () {};\r
-System.err.printf = function () {};\r
-System.err.println = function () {};\r
-\r
-popup = assert = log = error = window.alert;\r
-\r
-Thread = function () {};\r
-Thread.J2S_THREAD = Thread.prototype.J2S_THREAD = new Thread ();\r
-Thread.currentThread = Thread.prototype.currentThread = function () {\r
- return this.J2S_THREAD;\r
-};\r
-\r
-/* public */\r
-Clazz.intCast = function (n) { // 32bit\r
- var b1 = (n & 0xff000000) >> 24;\r
- var b2 = (n & 0xff0000) >> 16;\r
- var b3 = (n & 0xff00) >> 8;\r
- var b4 = n & 0xff;\r
- if ((b1 & 0x80) != 0) {\r
- return -(((b1 & 0x7f) << 24) + (b2 << 16) + (b3 << 8) + b4 + 1);\r
- } else {\r
- return (b1 << 24) + (b2 << 16) + (b3 << 8) + b4;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.shortCast = function (s) { // 16bit\r
- var b1 = (n & 0xff00) >> 8;\r
- var b2 = n & 0xff;\r
- if ((b1 & 0x80) != 0) {\r
- return -(((b1 & 0x7f) << 8) + b2 + 1);\r
- } else {\r
- return (b1 << 8) + b4;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.byteCast = function (b) { // 8bit\r
- if ((b & 0x80) != 0) {\r
- return -((b & 0x7f) + 1);\r
- } else {\r
- return b & 0xff;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.charCast = function (c) { // 8bit\r
- return String.fromCharCode (c & 0xff).charAt (0);\r
-};\r
-\r
-/**\r
- * Warning: Unsafe conversion!\r
- */\r
-/* public */\r
-Clazz.floatCast = function (f) { // 32bit\r
- return f;\r
-};\r
-\r
-/*\r
- * Try to fix JavaScript's shift operator defects on long type numbers.\r
- */\r
-\r
-Clazz.longMasks = [];\r
-\r
-Clazz.longReverseMasks = [];\r
-\r
-Clazz.longBits = [];\r
-\r
-(function () {\r
- var arr = [1];\r
- for (var i = 1; i < 53; i++) {\r
- arr[i] = arr[i - 1] + arr[i - 1]; // * 2 or << 1\r
- }\r
- Clazz.longBits = arr;\r
- Clazz.longMasks[52] = arr[52];\r
- for (var i = 51; i >= 0; i--) {\r
- Clazz.longMasks[i] = Clazz.longMasks[i + 1] + arr[i];\r
- }\r
- Clazz.longReverseMasks[0] = arr[0];\r
- for (var i = 1; i < 52; i++) {\r
- Clazz.longReverseMasks[i] = Clazz.longReverseMasks[i - 1] + arr[i];\r
- }\r
-}) ();\r
-\r
-/* public */\r
-Clazz.longLeftShift = function (l, o) { // 64bit\r
- if (o == 0) return l;\r
- if (o >= 64) return 0;\r
- if (o > 52) {\r
- error ("[Java2Script] Error : JavaScript does not support long shift!");\r
- return l;\r
- }\r
- if ((l & Clazz.longMasks[o - 1]) != 0) {\r
- error ("[Java2Script] Error : Such shift operator results in wrong calculation!");\r
- return l;\r
- }\r
- var high = l & Clazz.longMasks[52 - 32 + o];\r
- if (high != 0) {\r
- return high * Clazz.longBits[o] + (l & Clazz.longReverseMasks[32 - o]) << 0;\r
- } else {\r
- return l << o;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.intLeftShift = function (n, o) { // 32bit\r
- return (n << o) & 0xffffffff;\r
-};\r
-\r
-/* public */\r
-Clazz.longRightShift = function (l, o) { // 64bit\r
- if ((l & Clazz.longMasks[52 - 32]) != 0) {\r
- return Math.round((l & Clazz.longMasks[52 - 32]) / Clazz.longBits[32 - o]) + (l & Clazz.longReverseMasks[o]) >> o;\r
- } else {\r
- return l >> o;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.intRightShift = function (n, o) { // 32bit\r
- return n >> o; // no needs for this shifting wrapper\r
-};\r
-\r
-/* public */\r
-Clazz.long0RightShift = function (l, o) { // 64bit\r
- return l >>> o;\r
-};\r
-\r
-/* public */\r
-Clazz.int0RightShift = function (n, o) { // 64bit\r
- return n >>> o; // no needs for this shifting wrapper\r
-};\r
-\r
-// Compress the common public API method in shorter name\r
-$_L=Clazz.load;$_W=Clazz.declareAnonymous;$_T=Clazz.declareType;$_J=Clazz.declarePackage;$_C=Clazz.decorateAsClass;$_Z=Clazz.instantialize;$_I=Clazz.declareInterface;$_D=Clazz.isClassDefined;$_H=Clazz.pu$h;$_P=Clazz.p0p;$_B=Clazz.prepareCallback;$_N=Clazz.innerTypeInstance;$_K=Clazz.makeConstructor;$_U=Clazz.superCall;$_R=Clazz.superConstructor;$_M=Clazz.defineMethod;$_V=Clazz.overrideMethod;$_S=Clazz.defineStatics;$_E=Clazz.defineEnumConstant;$_F=Clazz.cloneFinals;$_Y=Clazz.prepareFields;$_A=Clazz.newArray;$_O=Clazz.instanceOf;$_G=Clazz.inheritArgs;$_X=Clazz.checkPrivateMethod;$_Q=Clazz.makeFunction;$_s=Clazz.registerSerializableFields;\r
-\r
-\r
-var reflect = Clazz.declarePackage ("java.lang.reflect");\r
-Clazz.declarePackage ("java.security");\r
-\r
-Clazz.innerFunctionNames = Clazz.innerFunctionNames.concat (["getSuperclass",\r
- "isAssignableFrom", "getMethods", "getMethod", "getDeclaredMethods", \r
- "getDeclaredMethod", "getConstructor", "getModifiers", "isArray", "newInstance"]);\r
-\r
-Clazz.innerFunctions.getSuperclass = function () {\r
- return this.superClazz; \r
-};\r
-Clazz.innerFunctions.isAssignableFrom = function (clazz) {\r
- return Clazz.getInheritedLevel (clazz, this) >= 0; \r
-};\r
-Clazz.innerFunctions.getConstructor = function () {\r
- return new java.lang.reflect.Constructor (this, [], [], \r
- java.lang.reflect.Modifier.PUBLIC);\r
-};\r
-/**\r
- * TODO: fix bug for polymorphic methods!\r
- */\r
-Clazz.innerFunctions.getDeclaredMethods = Clazz.innerFunctions.getMethods = function () {\r
- var ms = new Array ();\r
- var p = this.prototype;\r
- for (var attr in p) {\r
- if (typeof p[attr] == "function" && p[attr].__CLASS_NAME__ == null) {\r
- /* there are polynormical methods. */\r
- ms[ms.length] = new java.lang.reflect.Method (this, attr,\r
- [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC);\r
- }\r
- }\r
- p = this;\r
- for (var attr in p) {\r
- if (typeof p[attr] == "function" && p[attr].__CLASS_NAME__ == null) {\r
- ms[ms.length] = new java.lang.reflect.Method (this, attr,\r
- [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC\r
- | java.lang.reflect.Modifier.STATIC);\r
- }\r
- }\r
- return ms;\r
-};\r
-Clazz.innerFunctions.getDeclaredMethod = Clazz.innerFunctions.getMethod = function (name, clazzes) {\r
- var p = this.prototype;\r
- for (var attr in p) {\r
- if (name == attr && typeof p[attr] == "function" \r
- && p[attr].__CLASS_NAME__ == null) {\r
- /* there are polynormical methods. */\r
- return new java.lang.reflect.Method (this, attr,\r
- [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC);\r
- }\r
- }\r
- p = this;\r
- for (var attr in p) {\r
- if (name == attr && typeof p[attr] == "function" \r
- && p[attr].__CLASS_NAME__ == null) {\r
- return new java.lang.reflect.Method (this, attr,\r
- [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC\r
- | java.lang.reflect.Modifier.STATIC);\r
- }\r
- }\r
- return null;\r
-};\r
-Clazz.innerFunctions.getModifiers = function () {\r
- return java.lang.reflect.Modifier.PUBLIC;\r
-};\r
-Clazz.innerFunctions.isArray = function () {\r
- return false;\r
-};\r
-Clazz.innerFunctions.newInstance = function () {\r
- var clz = this;\r
- return new clz ();\r
-};\r
-\r
-//Object.newInstance = Clazz.innerFunctions.newInstance;\r
-{\r
- var inF = Clazz.innerFunctionNames;\r
- for (var i = 0; i < inF.length; i++) {\r
- JavaObject[inF[i]] = Clazz.innerFunctions[inF[i]];\r
- Array[inF[i]] = Clazz.innerFunctions[inF[i]];\r
- }\r
- Array["isArray"] = function () {\r
- return true;\r
- };\r
-}\r
-\r
-/* public */\r
-Clazz.forName = function (clazzName) {\r
- if (Clazz.isClassDefined (clazzName)) {\r
- return Clazz.evalType (clazzName);\r
- }\r
- if (window["ClazzLoader"] != null) {\r
- ClazzLoader.setLoadingMode ("xhr.sync");\r
- ClazzLoader.loadClass (clazzName);\r
- return Clazz.evalType (clazzName);\r
- } else {\r
- alert ("[Java2Script] Error: No ClassLoader!");\r
- }\r
-};\r
-\r
-/* For hotspot and unloading */\r
-\r
-/* private */\r
-Clazz.cleanDelegateMethod = function (m) {\r
- if (m == null) return;\r
- if (typeof m == "function" && m.lastMethod != null\r
- && m.lastParams != null && m.lastClaxxRef != null) {\r
- m.lastMethod = null;\r
- m.lastParams = null;\r
- m.lastClaxxRef = null;\r
- }\r
-};\r
-\r
-/* public */\r
-Clazz.unloadClass = function (qClazzName) {\r
- var cc = Clazz.evalType (qClazzName);\r
- if (cc != null) {\r
- Clazz.unloadedClasses[qClazzName] = cc;\r
- var clazzName = qClazzName;\r
- var pkgFrags = clazzName.split (/\./);\r
- var pkg = null;\r
- for (var i = 0; i < pkgFrags.length - 1; i++) {\r
- if (pkg == null) {\r
- pkg = Clazz.allPackage[pkgFrags[0]];\r
- } else {\r
- pkg = pkg[pkgFrags[i]]\r
- }\r
- }\r
- if (pkg == null) {\r
- Clazz.allPackage[pkgFrags[0]] = null;\r
- window[pkgFrags[0]] = null;\r
- // also try to unload inner or anonymous classes\r
- for (var c in window) {\r
- if (c.indexOf (qClazzName + "$") == 0) {\r
- Clazz.unloadClass (c);\r
- window[c] = null;\r
- }\r
- }\r
- } else {\r
- pkg[pkgFrags[pkgFrags.length - 1]] = null;\r
- // also try to unload inner or anonymous classes\r
- for (var c in pkg) {\r
- if (c.indexOf (pkgFrags[pkgFrags.length - 1] + "$") == 0) {\r
- Clazz.unloadClass (pkg.__PKG_NAME__ + "." + c);\r
- pkg[c] = null;\r
- }\r
- }\r
- }\r
-\r
- if (Clazz.allClasses[qClazzName] == true) {\r
- Clazz.allClasses[qClazzName] = false;\r
- // also try to unload inner or anonymous classes\r
- for (var c in Clazz.allClasses) {\r
- if (c.indexOf (qClazzName + "$") == 0) {\r
- Clazz.allClasses[c] = false;\r
- }\r
- }\r
- }\r
- \r
- for (var m in cc) {\r
- Clazz.cleanDelegateMethod (cc[m]);\r
- }\r
- for (var m in cc.prototype) {\r
- Clazz.cleanDelegateMethod (cc.prototype[m]);\r
- }\r
-\r
- if (window["ClazzLoader"] != null) {\r
- ClazzLoader.unloadClassExt (qClazzName);\r
- }\r
- \r
- return true;\r
- }\r
- return false;\r
-};\r
-\r
-//written by Dean Edwards, 2005\r
-//with input from Tino Zijdel, Matthias Miller, Diego Perini\r
-\r
-//http://dean.edwards.name/weblog/2005/10/add-event/\r
-\r
-// Merge Dean Edwards' addEvent for Java2Script\r
-/* public */\r
-Clazz.addEvent = function (element, type, handler) {\r
- if (element.addEventListener) {\r
- element.addEventListener(type, handler, false);\r
- } else {\r
- // assign each event handler a unique ID\r
- if (!handler.$$guid) handler.$$guid = Clazz.addEvent.guid++;\r
- // create a hash table of event types for the element\r
- if (!element.events) element.events = {};\r
- // create a hash table of event handlers for each element/event pair\r
- var handlers = element.events[type];\r
- if (!handlers) {\r
- handlers = element.events[type] = {};\r
- // store the existing event handler (if there is one)\r
- if (element["on" + type]) {\r
- handlers[0] = element["on" + type];\r
- }\r
- }\r
- // store the event handler in the hash table\r
- handlers[handler.$$guid] = handler;\r
- // assign a global event handler to do all the work\r
- element["on" + type] = Clazz.handleEvent;\r
- }\r
-};\r
-/* private */\r
-//a counter used to create unique IDs\r
-Clazz.addEvent.guid = 1;\r
-\r
-/* public */\r
-Clazz.removeEvent = function (element, type, handler) {\r
- if (element.removeEventListener) {\r
- element.removeEventListener(type, handler, false);\r
- } else {\r
- // delete the event handler from the hash table\r
- if (element.events && element.events[type]) {\r
- delete element.events[type][handler.$$guid];\r
- }\r
- }\r
-};\r
-\r
-/* private */\r
-Clazz.isVeryOldIE = navigator.userAgent.indexOf("MSIE 6.0") != -1 || navigator.userAgent.indexOf("MSIE 5.5") != -1 || navigator.userAgent.indexOf("MSIE 5.0") != -1;\r
-\r
-/* protected */\r
-Clazz.handleEvent = function (event) {\r
- var returnValue = true;\r
- // grab the event object (IE uses a global event object)\r
- if (!Clazz.isVeryOldIE) {\r
- event = event || Clazz.fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);\r
- } else { // The above line is buggy in IE 6.0\r
- if (event == null) {\r
- var evt = null;\r
- try {\r
- var pWindow = (this.ownerDocument || this.document || this).parentWindow;\r
- if (pWindow != null) {\r
- evt = pWindow.event;\r
- }\r
- } catch (e) {\r
- evt = window.event;\r
- }\r
- event = Clazz.fixEvent(evt);\r
- }\r
- }\r
- // get a reference to the hash table of event handlers\r
- var handlers = this.events[event.type];\r
- // execute each event handler\r
- for (var i in handlers) {\r
- if (isNaN (i)) {\r
- continue;\r
- }\r
- this.$$handleEvent = handlers[i];\r
- if (typeof this.$$handleEvent != "function") {\r
- continue;\r
- }\r
- if (this.$$handleEvent(event) === false) {\r
- returnValue = false;\r
- }\r
- }\r
- return returnValue;\r
-};\r
-\r
-/* private */\r
-Clazz.fixEvent = function (event) {\r
- // add W3C standard event methods\r
- event.preventDefault = Clazz.fixEvent.preventDefault;\r
- event.stopPropagation = Clazz.fixEvent.stopPropagation;\r
- return event;\r
-};\r
-Clazz.fixEvent.preventDefault = function() {\r
- this.returnValue = false;\r
-};\r
-Clazz.fixEvent.stopPropagation = function() {\r
- this.cancelBubble = true;\r
-};\r
-\r
-}\r
+/******************************************************************************
+ * Copyright (c) 2007 java2script.org and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Zhou Renjian - initial API and implementation
+ *****************************************************************************/
+/*******
+ * @author zhou renjian
+ * @create March 10, 2006
+ *******/
+
+if (window["Clazz"] == null || window["Clazz"].unloadClass == null) {
+/**
+ * Once ClassExt.js is part of Class.js.
+ * In order to make the Class.js as small as possible, part of its content
+ * is moved into this ClassExt.js.
+ *
+ * See also http://j2s.sourceforge.net/j2sclazz/
+ */
+
+/**
+ * Clazz.MethodNotFoundException is used to notify the developer about calling
+ * methods with incorrect parameters.
+ */
+/* protected */
+// Override the Clazz.MethodNotFoundException in Class.js to give details
+Clazz.MethodNotFoundException = function (obj, clazz, method, params) {
+ var paramStr = "";
+ if (params != null) {
+ paramStr = params.substring (1).replace (/\\/g, ",");
+ }
+ var leadingStr = "";
+ if (method != null && method != "construct") {
+ leadingStr = "Method";
+ } else {
+ leadingStr = "Constructor";
+ }
+ this.message = leadingStr + " " + Clazz.getClassName (clazz, true) + "."
+ + method + "(" + paramStr + ") is not found!";
+ this.toString = function () {
+ return "MethodNotFoundException:" + this.message;
+ }
+};
+
+/**
+ * Prepare callback for instance of anonymous Class.
+ * For example for the callback:
+ * this.callbacks.MyEditor.sayHello();
+ *
+ * @param objThis the host object for callback
+ * @param args arguments object. args[0] will be classThisObj -- the "this"
+ * object to be hooked
+ *
+ * Attention: parameters should not be null!
+ */
+/* protected */
+Clazz.prepareCallback = function (objThis, args) {
+ var classThisObj = args[0];
+ var cbName = "b$"; // "callbacks";
+ if (objThis != null && classThisObj != null && classThisObj !== window) {
+ var obs = new Array ();
+ if (objThis[cbName] == null) {
+ objThis[cbName] = obs;
+ } else { // must make a copy!
+ for (var s in objThis[cbName]) {
+ if (s != "length") {
+ obs[s] = objThis[cbName][s];
+ }
+ }
+ objThis[cbName] = obs;
+ }
+ var className = Clazz.getClassName (classThisObj, true);
+ //if (obs[className] == null) { /* == null make no sense! */
+ //obs[className] = classThisObj;
+ /*
+ * TODO: the following line is SWT-specific! Try to move it out!
+ */
+ obs[className.replace (/org\.eclipse\.swt\./, "$wt.")] = classThisObj;
+ var clazz = Clazz.getClass (classThisObj);
+ while (clazz.superClazz != null) {
+ clazz = clazz.superClazz;
+ //obs[Clazz.getClassName (clazz)] = classThisObj;
+ /*
+ * TODO: the following line is SWT-specific! Try to move it out!
+ */
+ obs[Clazz.getClassName (clazz, true)
+ .replace (/org\.eclipse\.swt\./, "$wt.")] = classThisObj;
+ }
+ //}
+ var cbs = classThisObj[cbName];
+ if (cbs != null && cbs instanceof Array) {
+ for (var s in cbs) {
+ if (s != "length") {
+ obs[s] = cbs[s];
+ }
+ }
+ }
+ }
+ // Shift the arguments
+ for (var i = 0; i < args.length - 1; i++) {
+ args[i] = args[i + 1];
+ }
+ args.length--;
+ // arguments will be returned!
+};
+
+/**
+ * Construct instance of the given inner class.
+ *
+ * @param classInner given inner class, alway with name like "*$*"
+ * @param objThis this instance which can be used to call back.
+ * @param finalVars final variables which the inner class may use
+ * @return the constructed object
+ *
+ * @see Clazz#cloneFinals
+ */
+/* public */
+Clazz.innerTypeInstance = function (clazzInner, objThis, finalVars) {
+ if (clazzInner == null) {
+ clazzInner = arguments.callee.caller;
+ }
+ var obj = null;
+ /*if (arguments.length == 2) {
+ obj = new clazzInner (objThis);
+ } else */if (arguments.length == 3) {
+ obj = new clazzInner (objThis);
+ } else if (arguments.length == 4) {
+ if (objThis.__CLASS_NAME__ == clazzInner.__CLASS_NAME__
+ && arguments[3] === Clazz.inheritArgs) {
+ obj = objThis;
+ } else {
+ obj = new clazzInner (objThis, arguments[3]);
+ }
+ } else if (arguments.length == 5) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4]);
+ } else if (arguments.length == 6) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4],
+ arguments[5]);
+ } else if (arguments.length == 7) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4],
+ arguments[5], arguments[6]);
+ } else if (arguments.length == 8) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4],
+ arguments[5], arguments[6], arguments[7]);
+ } else if (arguments.length == 9) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4],
+ arguments[5], arguments[6], arguments[7], arguments[8]);
+ } else if (arguments.length == 10) {
+ obj = new clazzInner (objThis, arguments[3], arguments[4],
+ arguments[5], arguments[6], arguments[7], arguments[8],
+ arguments[9]);
+ } else {
+ /*
+ * Should construct instance manually.
+ */
+ obj = new clazzInner ();
+ if (obj.construct == null) {
+ throw new String ("No support anonymous class constructor with "
+ + "more than 7 parameters.");
+ }
+ var args = new Array ();
+ for (var i = 3; i < arguments.length; i++) {
+ args[i - 3] = arguments[i];
+ }
+ obj.construct.apply (obj, args);
+ }
+ // f$ is short for the once choosen "$finals"
+ if (finalVars != null && objThis.f$ == null) {
+ obj.f$ = finalVars;
+ } else if (finalVars == null && objThis.f$ != null) {
+ obj.f$ = objThis.f$;
+ } else if (finalVars != null && objThis.f$ != null) {
+ var o = new Object ();
+ for (var attr in objThis.f$) {
+ o[attr] = objThis.f$[attr];
+ }
+ for (var attr in finalVars) {
+ o[attr] = finalVars[attr];
+ }
+ obj.f$ = o;
+ }
+ /*
+ if (finalVars != null && objThis.$finals == null) {
+ obj.$finals = finalVars;
+ } else if (finalVars == null && objThis.$finals != null) {
+ obj.$finals = objThis.$finals;
+ } else if (finalVars != null && objThis.$finals != null) {
+ var o = new Object ();
+ for (var attr in objThis.$finals) {
+ o[attr] = objThis.$finals[attr];
+ }
+ for (var attr in finalVars) {
+ o[attr] = finalVars[attr];
+ }
+ obj.$finals = o;
+ }
+ */
+ //Clazz.prepareCallback (obj, objThis);
+ return obj;
+};
+
+/**
+ * Clone variables whose modifier is "final".
+ * Usage: var o = Clazz.cloneFinals ("name", name, "age", age);
+ *
+ * @return Object with all final variables
+ */
+/* protected */
+Clazz.cloneFinals = function () {
+ var o = new Object ();
+ var length = arguments.length / 2;
+ for (var i = 0; i < length; i++) {
+ o[arguments[i + i]] = arguments[i + i + 1];
+ }
+ return o;
+};
+
+/* public */
+Clazz.isClassDefined = Clazz.isDefinedClass = function (clazzName) {
+ if (clazzName != null && clazzName.length != 0) {
+ if (Clazz.allClasses[clazzName]) {
+ return true;
+ }
+ var pkgFrags = clazzName.split (/\./);
+ var pkg = null;
+ for (var i = 0; i < pkgFrags.length; i++) {
+ if (pkg == null) {
+ if (Clazz.allPackage[pkgFrags[0]] == null) {
+ //error (clazzName + " / " + false);
+ return false;
+ }
+ pkg = Clazz.allPackage[pkgFrags[0]];
+ } else {
+ if (pkg[pkgFrags[i]] == null) {
+ //error (clazzName + " / " + false);
+ return false;
+ }
+ pkg = pkg[pkgFrags[i]]
+ }
+ }
+ //error (clazzName + " / " + (pkg != null));
+ //return pkg != null;
+ if (pkg != null) {
+ Clazz.allClasses[clazzName] = true;
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ /* consider null or empty name as non-defined class */
+ return false;
+ }
+};
+/**
+ * Define the enum constant.
+ * @param classEnum enum type
+ * @param enumName enum constant
+ * @param enumOrdinal enum ordinal
+ * @param initialParams enum constant constructor parameters
+ * @return return defined enum constant
+ */
+/* public */
+Clazz.defineEnumConstant = function (clazzEnum, enumName, enumOrdinal, initialParams, clazzEnumExt) {
+ var o = null;
+ if (clazzEnumExt != null) {
+ o = new clazzEnumExt ();
+ } else {
+ o = new clazzEnum ();
+ }
+ Clazz.superConstructor (o, clazzEnum, [enumName, enumOrdinal]);
+ if (initialParams != null && initialParams.length != 0) {
+ o.construct.apply (o, initialParams);
+ }
+ clazzEnum[enumName] = o;
+ clazzEnum.prototype[enumName] = o;
+ return o;
+};
+
+/**
+ * Make arrays.
+ *
+ * @return the created Array object
+ */
+/* public */
+Clazz.newArray = function () {
+ var args = arguments;
+ if (arguments.length == 1) {
+ if (arguments[0] instanceof Array) {
+ args = arguments[0];
+ }
+ }
+ if (args.length <= 1) {
+ return new Array ();
+ } else if (args.length == 2) {
+ var dim = args[0];
+ if (typeof dim == "string") {
+ dim = dim.charCodeAt (0); // char
+ }
+ var val = args[1];
+ var arr = new Array (dim);
+ for (var i = 0; i < dim; i++) {
+ arr[i] = val;
+ }
+ return arr;
+ } else {
+ var dim = args[0];
+ if (typeof dim == "string") {
+ dim = dim.charCodeAt (0); // char
+ }
+ var len = args.length - 1;
+ var xargs = new Array (len);
+ for (var i = 0; i < len; i++) {
+ xargs[i] = args[i + 1];
+ }
+ var arr = new Array (dim);
+ for (var i = 0; i < dim; i++) {
+ // Call recursively!
+ arr[i] = Clazz.newArray (xargs);
+ }
+ return arr;
+ }
+};
+
+/**
+ * Make the RunnableCompatiability instance as a JavaScript function.
+ *
+ * @param jsr Instance of RunnableCompatiability
+ * @return JavaScript function instance represents the method run of jsr.
+ */
+/* public */
+Clazz.makeFunction = function (jsr) {
+ return function (e) {
+ if (e == null) {
+ e = window.event;
+ }
+ if (jsr.setEvent != null) {
+ jsr.setEvent (e);
+ }
+ jsr.run ();
+ /*
+ if (e != null && jsr.isReturned != null && jsr.isReturned()) {
+ // Is it correct to stopPropagation here? --Feb 19, 2006
+ e.cancelBubble = true;
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
+ }
+ */
+ if (jsr.returnSet == 1) {
+ return jsr.returnNumber;
+ } else if (jsr.returnSet == 2) {
+ return jsr.returnBoolean;
+ } else if (jsr.returnSet == 3) {
+ return jsr.returnObject;
+ }
+ };
+};
+
+/* protected */
+Clazz.defineStatics = function (clazz) {
+ for (var i = 0; i < (arguments.length - 1) / 2; i++) {
+ var name = arguments[i + i + 1];
+ clazz[name] = clazz.prototype[name] = arguments[i + i + 2];
+ }
+};
+
+/* protected */
+Clazz.prepareFields = function (clazz, fieldsFun) {
+ var stacks = new Array ();
+ if (clazz.con$truct != null) {
+ var ss = clazz.con$truct.stacks;
+ var idx = clazz.con$truct.index;
+ for (var i = idx; i < ss.length; i++) {
+ stacks[i] = ss[i];
+ }
+ }
+ clazz.con$truct = clazz.prototype.con$truct = function () {
+ var stacks = arguments.callee.stacks;
+ if (stacks != null) {
+ for (var i = 0; i < stacks.length; i++) {
+ stacks[i].apply (this, []);
+ }
+ }
+ };
+ stacks[stacks.length] = fieldsFun;
+ clazz.con$truct.stacks = stacks;
+ clazz.con$truct.index = 0;
+};
+
+/*
+ * Serialize those public or protected fields in class
+ * net.sf.j2s.ajax.SimpleSerializable.
+ */
+/* protected */
+Clazz.registerSerializableFields = function (clazz) {
+ var args = arguments;
+ var length = args.length;
+ var newArr = new Array ();
+ if (clazz.declared$Fields != null) {
+ for (var i = 0; i < clazz.declared$Fields.length; i++) {
+ newArr[i] = clazz.declared$Fields[i];
+ }
+ }
+ clazz.declared$Fields = newArr;
+
+ if (length > 0 && length % 2 == 1) {
+ var fs = clazz.declared$Fields;
+ for (var i = 1; i <= (length - 1) / 2; i++) {
+ var o = { name : args[i + i - 1], type : args[i + i] };
+ var existed = false;
+ for (var j = 0; j < fs.length; j++) {
+ if (fs[j].name == o.name) { // reloaded classes
+ fs[j].type = o.type; // update type
+ existed = true;
+ break;
+ }
+ }
+ if (!existed) {
+ fs[fs.length] = o;
+ }
+ }
+ }
+};
+
+/*
+ * Get the caller method for those methods that are wrapped by
+ * Clazz.searchAndExecuteMethod.
+ *
+ * @param args caller method's arguments
+ * @return caller method, null if there is not wrapped by
+ * Clazz.searchAndExecuteMethod or is called directly.
+ */
+/* protected */
+/*-# getMixedCallerMethod -> gMCM #-*/
+Clazz.getMixedCallerMethod = function (args) {
+ var o = new Object ();
+ var argc = args.callee.caller; // Clazz.tryToSearchAndExecute
+ if (argc == null) return null;
+ if (argc !== Clazz.tryToSearchAndExecute) { // inherited method's apply
+ argc = argc.arguments.callee.caller;
+ if (argc == null) return null;
+ }
+ if (argc !== Clazz.tryToSearchAndExecute) return null;
+ argc = argc.arguments.callee.caller; // Clazz.searchAndExecuteMethod
+ if (argc == null || argc !== Clazz.searchAndExecuteMethod) return null;
+ o.claxxRef = argc.arguments[1];
+ o.fxName = argc.arguments[2];
+ o.paramTypes = Clazz.getParamsType (argc.arguments[3]);
+ argc = argc.arguments.callee.caller; // Clazz.generateDelegatingMethod
+ if (argc == null) return null;
+ argc = argc.arguments.callee.caller; // the private method's caller
+ if (argc == null) return null;
+ o.caller = argc;
+ return o;
+};
+
+/*
+ * Check and return super private method.
+ * In order make private methods be executed correctly, some extra javascript
+ * must be inserted into the beggining of the method body of the non-private
+ * methods that with the same method signature as following:
+ * <code>
+ * var $private = Clazz.checkPrivateMethod (arguments);
+ * if ($private != null) {
+ * return $private.apply (this, arguments);
+ * }
+ * </code>
+ * Be cautious about this. The above codes should be insert by Java2Script
+ * compiler or with double checks to make sure things work correctly.
+ *
+ * @param args caller method's arguments
+ * @return private method if there are private method fitted for the current
+ * calling environment
+ */
+/* public */
+Clazz.checkPrivateMethod = function (args) {
+ var m = Clazz.getMixedCallerMethod (args);
+ if (m == null) return null;
+ var callerFx = m.claxxRef.prototype[m.caller.exName];
+ if (callerFx == null) return null; // may not be in the class hierarchies
+ var ppFun = null;
+ if (callerFx.claxxOwner != null) {
+ ppFun = callerFx.claxxOwner.prototype[m.fxName];
+ } else {
+ var stacks = callerFx.stacks;
+ for (var i = stacks.length - 1; i >= 0; i--) {
+ var fx = stacks[i].prototype[m.caller.exName];
+ if (fx === m.caller) {
+ ppFun = stacks[i].prototype[m.fxName];
+ } else if (fx != null) {
+ for (var fn in fx) {
+ if (fn.indexOf ('\\') == 0 && fx[fn] === m.caller) {
+ ppFun = stacks[i].prototype[m.fxName];
+ break;
+ }
+ }
+ }
+ if (ppFun != null) {
+ break;
+ }
+ }
+ }
+ if (ppFun != null && ppFun.claxxOwner == null) {
+ ppFun = ppFun["\\" + m.paramTypes];
+ }
+ if (ppFun != null && ppFun.isPrivate && ppFun !== args.callee) {
+ return ppFun;
+ }
+ return null;
+};
+var $fz = null; // for private method declaration
+//var cla$$ = null;
+var c$ = null;
+/*-# cla$$$tack -> cst #-*/
+Clazz.cla$$$tack = new Array ();
+Clazz.pu$h = function () {
+ if (c$ != null) { // if (cla$$ != null) {
+ Clazz.cla$$$tack[Clazz.cla$$$tack.length] = c$; // cla$$;
+ }
+};
+Clazz.p0p = function () {
+ if (Clazz.cla$$$tack.length > 0) {
+ var clazz = Clazz.cla$$$tack[Clazz.cla$$$tack.length - 1];
+ Clazz.cla$$$tack.length--;
+ return clazz;
+ } else {
+ return null;
+ }
+};
+
+/*# {$no.debug.support} >>x #*/
+/*
+ * Option to switch on/off of stack traces.
+ */
+/* protect */
+Clazz.tracingCalling = false;
+
+/*
+ * Use to mark that the Throwable instance is created or not.
+ */
+/* private */
+Clazz.initializingException = false;
+
+/* private */
+Clazz.callingStack = function (caller, owner) {
+ this.caller = caller;
+ this.owner = owner;
+};
+Clazz.callingStackTraces = new Array ();
+Clazz.pu$hCalling = function (stack) {
+ Clazz.callingStackTraces[Clazz.callingStackTraces.length] = stack;
+};
+Clazz.p0pCalling = function () {
+ var length = Clazz.callingStackTraces.length;
+ if (length > 0) {
+ var stack = Clazz.callingStackTraces[length - 1];
+ Clazz.callingStackTraces.length--;
+ return stack;
+ } else {
+ return null;
+ }
+};
+/*# x<< #*/
+
+/**
+ * The first folder is considered as the primary folder.
+ * And try to be compatiable with ClazzLoader system.
+ */
+/* private */
+if (window["ClazzLoader"] != null && ClazzLoader.binaryFolders != null) {
+ Clazz.binaryFolders = ClazzLoader.binaryFolders;
+} else {
+ Clazz.binaryFolders = ["bin/", "", "j2slib/"];
+}
+
+Clazz.addBinaryFolder = function (bin) {
+ if (bin != null) {
+ var bins = Clazz.binaryFolders;
+ for (var i = 0; i < bins.length; i++) {
+ if (bins[i] == bin) {
+ return ;
+ }
+ }
+ bins[bins.length] = bin;
+ }
+};
+Clazz.removeBinaryFolder = function (bin) {
+ if (bin != null) {
+ var bins = Clazz.binaryFolders;
+ for (var i = 0; i < bins.length; i++) {
+ if (bins[i] == bin) {
+ for (var j = i; j < bins.length - 1; j++) {
+ bins[j] = bins[j + 1];
+ }
+ bins.length--;
+ return bin;
+ }
+ }
+ }
+ return null;
+};
+Clazz.setPrimaryFolder = function (bin) {
+ if (bin != null) {
+ Clazz.removeBinaryFolder (bin);
+ var bins = Clazz.binaryFolders;
+ for (var i = bins.length - 1; i >= 0; i--) {
+ bins[i + 1] = bins[i];
+ }
+ bins[0] = bin;
+ }
+};
+
+/**
+ * This is a simple implementation for Clazz#load. It just ignore dependencies
+ * of the class. This will be fine for jar *.z.js file.
+ * It will be overriden by ClazzLoader#load.
+ * For more details, see ClazzLoader.js
+ */
+/* protected */
+Clazz.load = function (musts, clazz, optionals, declaration) {
+ if (declaration != null) {
+ declaration ();
+ }
+};
+
+/*
+ * Invade the Object prototype!
+ * TODO: make sure that invading Object prototype does not affect other
+ * existed library, such as Dojo, YUI, Prototype, ...
+ */
+java.lang.Object = Clazz._O;
+
+JavaObject.getName = Clazz.innerFunctions.getName;
+
+w$ = window; // Short for browser's window object
+d$ = document; // Short for browser's document object
+System = {
+ currentTimeMillis : function () {
+ return new Date ().getTime ();
+ },
+ props : null, //new java.util.Properties (),
+ getProperties : function () {
+ return System.props;
+ },
+ setProperties : function (props) {
+ System.props = props;
+ },
+ getProperty : function (key, def) {
+ if (System.props != null) {
+ return System.props.getProperty (key, def);
+ }
+ if (def != null) {
+ return def;
+ }
+ return key;
+ },
+ setProperty : function (key, val) {
+ if (System.props == null) {
+ return ;
+ }
+ System.props.setProperty (key, val);
+ },
+ currentTimeMillis : function () {
+ return new Date ().getTime ();
+ },
+ arraycopy : function (src, srcPos, dest, destPos, length) {
+ if (src !== dest) {
+ for (var i = 0; i < length; i++) {
+ dest[destPos + i] = src[srcPos + i];
+ }
+ } else {
+ var swap = [];
+ for (var i = 0; i < length; i++) {
+ swap[i] = src[srcPos + i];
+ }
+ for (var i = 0; i < length; i++) {
+ dest[destPos + i] = swap[i];
+ }
+ }
+ }
+};
+System.out = new Clazz._O ();
+System.out.__CLASS_NAME__ = "java.io.PrintStream";
+System.out.print = function () {};
+System.out.printf = function () {};
+System.out.println = function () {};
+
+System.err = new Clazz._O ();
+System.err.__CLASS_NAME__ = "java.io.PrintStream";
+System.err.print = function () {};
+System.err.printf = function () {};
+System.err.println = function () {};
+
+popup = assert = log = error = window.alert;
+
+Thread = function () {};
+Thread.J2S_THREAD = Thread.prototype.J2S_THREAD = new Thread ();
+Thread.currentThread = Thread.prototype.currentThread = function () {
+ return this.J2S_THREAD;
+};
+
+/* public */
+Clazz.intCast = function (n) { // 32bit
+ var b1 = (n & 0xff000000) >> 24;
+ var b2 = (n & 0xff0000) >> 16;
+ var b3 = (n & 0xff00) >> 8;
+ var b4 = n & 0xff;
+ if ((b1 & 0x80) != 0) {
+ return -(((b1 & 0x7f) << 24) + (b2 << 16) + (b3 << 8) + b4 + 1);
+ } else {
+ return (b1 << 24) + (b2 << 16) + (b3 << 8) + b4;
+ }
+};
+
+/* public */
+Clazz.shortCast = function (s) { // 16bit
+ var b1 = (n & 0xff00) >> 8;
+ var b2 = n & 0xff;
+ if ((b1 & 0x80) != 0) {
+ return -(((b1 & 0x7f) << 8) + b2 + 1);
+ } else {
+ return (b1 << 8) + b4;
+ }
+};
+
+/* public */
+Clazz.byteCast = function (b) { // 8bit
+ if ((b & 0x80) != 0) {
+ return -((b & 0x7f) + 1);
+ } else {
+ return b & 0xff;
+ }
+};
+
+/* public */
+Clazz.charCast = function (c) { // 8bit
+ return String.fromCharCode (c & 0xff).charAt (0);
+};
+
+/**
+ * Warning: Unsafe conversion!
+ */
+/* public */
+Clazz.floatCast = function (f) { // 32bit
+ return f;
+};
+
+/*
+ * Try to fix JavaScript's shift operator defects on long type numbers.
+ */
+
+Clazz.longMasks = [];
+
+Clazz.longReverseMasks = [];
+
+Clazz.longBits = [];
+
+(function () {
+ var arr = [1];
+ for (var i = 1; i < 53; i++) {
+ arr[i] = arr[i - 1] + arr[i - 1]; // * 2 or << 1
+ }
+ Clazz.longBits = arr;
+ Clazz.longMasks[52] = arr[52];
+ for (var i = 51; i >= 0; i--) {
+ Clazz.longMasks[i] = Clazz.longMasks[i + 1] + arr[i];
+ }
+ Clazz.longReverseMasks[0] = arr[0];
+ for (var i = 1; i < 52; i++) {
+ Clazz.longReverseMasks[i] = Clazz.longReverseMasks[i - 1] + arr[i];
+ }
+}) ();
+
+/* public */
+Clazz.longLeftShift = function (l, o) { // 64bit
+ if (o == 0) return l;
+ if (o >= 64) return 0;
+ if (o > 52) {
+ error ("[Java2Script] Error : JavaScript does not support long shift!");
+ return l;
+ }
+ if ((l & Clazz.longMasks[o - 1]) != 0) {
+ error ("[Java2Script] Error : Such shift operator results in wrong calculation!");
+ return l;
+ }
+ var high = l & Clazz.longMasks[52 - 32 + o];
+ if (high != 0) {
+ return high * Clazz.longBits[o] + (l & Clazz.longReverseMasks[32 - o]) << 0;
+ } else {
+ return l << o;
+ }
+};
+
+/* public */
+Clazz.intLeftShift = function (n, o) { // 32bit
+ return (n << o) & 0xffffffff;
+};
+
+/* public */
+Clazz.longRightShift = function (l, o) { // 64bit
+ if ((l & Clazz.longMasks[52 - 32]) != 0) {
+ return Math.round((l & Clazz.longMasks[52 - 32]) / Clazz.longBits[32 - o]) + (l & Clazz.longReverseMasks[o]) >> o;
+ } else {
+ return l >> o;
+ }
+};
+
+/* public */
+Clazz.intRightShift = function (n, o) { // 32bit
+ return n >> o; // no needs for this shifting wrapper
+};
+
+/* public */
+Clazz.long0RightShift = function (l, o) { // 64bit
+ return l >>> o;
+};
+
+/* public */
+Clazz.int0RightShift = function (n, o) { // 64bit
+ return n >>> o; // no needs for this shifting wrapper
+};
+
+// Compress the common public API method in shorter name
+$_L=Clazz.load;$_W=Clazz.declareAnonymous;$_T=Clazz.declareType;$_J=Clazz.declarePackage;$_C=Clazz.decorateAsClass;$_Z=Clazz.instantialize;$_I=Clazz.declareInterface;$_D=Clazz.isClassDefined;$_H=Clazz.pu$h;$_P=Clazz.p0p;$_B=Clazz.prepareCallback;$_N=Clazz.innerTypeInstance;$_K=Clazz.makeConstructor;$_U=Clazz.superCall;$_R=Clazz.superConstructor;$_M=Clazz.defineMethod;$_V=Clazz.overrideMethod;$_S=Clazz.defineStatics;$_E=Clazz.defineEnumConstant;$_F=Clazz.cloneFinals;$_Y=Clazz.prepareFields;$_A=Clazz.newArray;$_O=Clazz.instanceOf;$_G=Clazz.inheritArgs;$_X=Clazz.checkPrivateMethod;$_Q=Clazz.makeFunction;$_s=Clazz.registerSerializableFields;
+
+
+var reflect = Clazz.declarePackage ("java.lang.reflect");
+Clazz.declarePackage ("java.security");
+
+Clazz.innerFunctionNames = Clazz.innerFunctionNames.concat (["getSuperclass",
+ "isAssignableFrom", "getMethods", "getMethod", "getDeclaredMethods",
+ "getDeclaredMethod", "getConstructor", "getModifiers", "isArray", "newInstance"]);
+
+Clazz.innerFunctions.getSuperclass = function () {
+ return this.superClazz;
+};
+Clazz.innerFunctions.isAssignableFrom = function (clazz) {
+ return Clazz.getInheritedLevel (clazz, this) >= 0;
+};
+Clazz.innerFunctions.getConstructor = function () {
+ return new java.lang.reflect.Constructor (this, [], [],
+ java.lang.reflect.Modifier.PUBLIC);
+};
+/**
+ * TODO: fix bug for polymorphic methods!
+ */
+Clazz.innerFunctions.getDeclaredMethods = Clazz.innerFunctions.getMethods = function () {
+ var ms = new Array ();
+ var p = this.prototype;
+ for (var attr in p) {
+ if (typeof p[attr] == "function" && p[attr].__CLASS_NAME__ == null) {
+ /* there are polynormical methods. */
+ ms[ms.length] = new java.lang.reflect.Method (this, attr,
+ [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC);
+ }
+ }
+ p = this;
+ for (var attr in p) {
+ if (typeof p[attr] == "function" && p[attr].__CLASS_NAME__ == null) {
+ ms[ms.length] = new java.lang.reflect.Method (this, attr,
+ [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC
+ | java.lang.reflect.Modifier.STATIC);
+ }
+ }
+ return ms;
+};
+Clazz.innerFunctions.getDeclaredMethod = Clazz.innerFunctions.getMethod = function (name, clazzes) {
+ var p = this.prototype;
+ for (var attr in p) {
+ if (name == attr && typeof p[attr] == "function"
+ && p[attr].__CLASS_NAME__ == null) {
+ /* there are polynormical methods. */
+ return new java.lang.reflect.Method (this, attr,
+ [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC);
+ }
+ }
+ p = this;
+ for (var attr in p) {
+ if (name == attr && typeof p[attr] == "function"
+ && p[attr].__CLASS_NAME__ == null) {
+ return new java.lang.reflect.Method (this, attr,
+ [], java.lang.Void, [], java.lang.reflect.Modifier.PUBLIC
+ | java.lang.reflect.Modifier.STATIC);
+ }
+ }
+ return null;
+};
+Clazz.innerFunctions.getModifiers = function () {
+ return java.lang.reflect.Modifier.PUBLIC;
+};
+Clazz.innerFunctions.isArray = function () {
+ return false;
+};
+Clazz.innerFunctions.newInstance = function () {
+ var clz = this;
+ return new clz ();
+};
+
+//Object.newInstance = Clazz.innerFunctions.newInstance;
+{
+ var inF = Clazz.innerFunctionNames;
+ for (var i = 0; i < inF.length; i++) {
+ JavaObject[inF[i]] = Clazz.innerFunctions[inF[i]];
+ Array[inF[i]] = Clazz.innerFunctions[inF[i]];
+ }
+ Array["isArray"] = function () {
+ return true;
+ };
+}
+
+/* public */
+Clazz.forName = function (clazzName) {
+ if (Clazz.isClassDefined (clazzName)) {
+ return Clazz.evalType (clazzName);
+ }
+ if (window["ClazzLoader"] != null) {
+ ClazzLoader.setLoadingMode ("xhr.sync");
+ ClazzLoader.loadClass (clazzName);
+ return Clazz.evalType (clazzName);
+ } else {
+ alert ("[Java2Script] Error: No ClassLoader!");
+ }
+};
+
+/* For hotspot and unloading */
+
+/* private */
+Clazz.cleanDelegateMethod = function (m) {
+ if (m == null) return;
+ if (typeof m == "function" && m.lastMethod != null
+ && m.lastParams != null && m.lastClaxxRef != null) {
+ m.lastMethod = null;
+ m.lastParams = null;
+ m.lastClaxxRef = null;
+ }
+};
+
+/* public */
+Clazz.unloadClass = function (qClazzName) {
+ var cc = Clazz.evalType (qClazzName);
+ if (cc != null) {
+ Clazz.unloadedClasses[qClazzName] = cc;
+ var clazzName = qClazzName;
+ var pkgFrags = clazzName.split (/\./);
+ var pkg = null;
+ for (var i = 0; i < pkgFrags.length - 1; i++) {
+ if (pkg == null) {
+ pkg = Clazz.allPackage[pkgFrags[0]];
+ } else {
+ pkg = pkg[pkgFrags[i]]
+ }
+ }
+ if (pkg == null) {
+ Clazz.allPackage[pkgFrags[0]] = null;
+ window[pkgFrags[0]] = null;
+ // also try to unload inner or anonymous classes
+ for (var c in window) {
+ if (c.indexOf (qClazzName + "$") == 0) {
+ Clazz.unloadClass (c);
+ window[c] = null;
+ }
+ }
+ } else {
+ pkg[pkgFrags[pkgFrags.length - 1]] = null;
+ // also try to unload inner or anonymous classes
+ for (var c in pkg) {
+ if (c.indexOf (pkgFrags[pkgFrags.length - 1] + "$") == 0) {
+ Clazz.unloadClass (pkg.__PKG_NAME__ + "." + c);
+ pkg[c] = null;
+ }
+ }
+ }
+
+ if (Clazz.allClasses[qClazzName] == true) {
+ Clazz.allClasses[qClazzName] = false;
+ // also try to unload inner or anonymous classes
+ for (var c in Clazz.allClasses) {
+ if (c.indexOf (qClazzName + "$") == 0) {
+ Clazz.allClasses[c] = false;
+ }
+ }
+ }
+
+ for (var m in cc) {
+ Clazz.cleanDelegateMethod (cc[m]);
+ }
+ for (var m in cc.prototype) {
+ Clazz.cleanDelegateMethod (cc.prototype[m]);
+ }
+
+ if (window["ClazzLoader"] != null) {
+ ClazzLoader.unloadClassExt (qClazzName);
+ }
+
+ return true;
+ }
+ return false;
+};
+
+//written by Dean Edwards, 2005
+//with input from Tino Zijdel, Matthias Miller, Diego Perini
+
+//http://dean.edwards.name/weblog/2005/10/add-event/
+
+// Merge Dean Edwards' addEvent for Java2Script
+/* public */
+Clazz.addEvent = function (element, type, handler) {
+ if (element.addEventListener) {
+ element.addEventListener(type, handler, false);
+ } else {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = Clazz.addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = Clazz.handleEvent;
+ }
+};
+/* private */
+//a counter used to create unique IDs
+Clazz.addEvent.guid = 1;
+
+/* public */
+Clazz.removeEvent = function (element, type, handler) {
+ if (element.removeEventListener) {
+ element.removeEventListener(type, handler, false);
+ } else {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+ }
+};
+
+/* private */
+Clazz.isVeryOldIE = navigator.userAgent.indexOf("MSIE 6.0") != -1 || navigator.userAgent.indexOf("MSIE 5.5") != -1 || navigator.userAgent.indexOf("MSIE 5.0") != -1;
+
+/* protected */
+Clazz.handleEvent = function (event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ if (!Clazz.isVeryOldIE) {
+ event = event || Clazz.fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
+ } else { // The above line is buggy in IE 6.0
+ if (event == null) {
+ var evt = null;
+ try {
+ var pWindow = (this.ownerDocument || this.document || this).parentWindow;
+ if (pWindow != null) {
+ evt = pWindow.event;
+ }
+ } catch (e) {
+ evt = window.event;
+ }
+ event = Clazz.fixEvent(evt);
+ }
+ }
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ if (isNaN (i)) {
+ continue;
+ }
+ this.$$handleEvent = handlers[i];
+ if (typeof this.$$handleEvent != "function") {
+ continue;
+ }
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+/* private */
+Clazz.fixEvent = function (event) {
+ // add W3C standard event methods
+ event.preventDefault = Clazz.fixEvent.preventDefault;
+ event.stopPropagation = Clazz.fixEvent.stopPropagation;
+ return event;
+};
+Clazz.fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+Clazz.fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+};
+
+}