/*
 *  Aquilegia ECMAScript Library 0.4.0
 *  
 *  Copyright(C) 2007-2009 Futoshi Takeo.
 *  http://www.aquilegia.info/ael/wiki/license
 */


var Ael;Ael=(function(){var A={instanceOf:function(value,clazz){return value!==void 0&&value!==null&&value.constructor===clazz;},isString:function(value){return A.instanceOf(value,String);},isFunction:function(value){return typeof value==="function";},isArray:function(value){return A.instanceOf(value,Array)||A.isArguments(value);},isArguments:function(value){return(A.instanceOf(value,Object)||A.instanceOf(value,Array))&&A.isFunction(value.callee)&&A.instanceOf(value.length,Number);},isNoU:function(value){return value===void 0||value===null;}};(function(public_,core){public_.apply(core,public_);core.Class=core.Class(core);var clazz=core.class_();core.root=function(value,option){if(this.constructor===core.Class)
return core.call(clazz,arguments,this);if(!arguments.length)
return public_;return A.instanceOf(value,core.root)?value:core.make(value,option);};A=core.apply(core.node(core.root),A,clazz);if(RegExp.prototype.constructor!==RegExp)
RegExp.prototype.constructor=RegExp;A.package_("lang").class_("Class").prototype.initialize=core.Class;core.Class=A.lang.Class;A.constructor=core.Class.constructor=core.Class;A.lang.class_("Property").prototype.initialize=core.Property;A.lang.Property.class_("Method").prototype.initialize=core.Method;A.lang.class_("Package").prototype.initialize=core.Package;A.lang.constructor=core.Package=A.lang.Package;})({version:"0.4.0",global:this,fns:{},print:function(string){if(A().WSH){WScript.StdOut.Write(string);}else if(A().Rhino){print(string);}else{alert(string);}},inspect:function(value){if(value!==void 0&&value!==null){for(var name in value)
this.print(name+"\n");}},apply:function(value){if(!A.isNoU(value)){for(var i=1,a=arguments;i<a.length;i++){var o=a[i];if(!A.isNoU(o)){for(var p in o)
value[p]=o[p];}}}
return value;},call:function(fn,args,scope){if(A.isNoU(scope))
scope=this.global;var result;if(A.isFunction(fn.apply)){result=A.isArray(args)?fn.apply(scope,args):fn.apply(scope);}else{switch(typeof scope){case"string":case"number":case"boolean":scope=new scope.constructor(scope);}
var methodName=null;for(var i=0;void 0!==scope[(methodName="$ael"+i)];i++);scope[methodName]=fn;var code=[];if(A.isArray(args)){for(var i=0;i<args.length;i++)
code[code.length]="args["+i+"]";}
result=eval("scope[methodName]("+code.join(",")+");");if(scope===this.global||A.isNoU(scope.constructor)){scope[methodName]=void 0;}else{delete scope[methodName];}}
return result;},type:function(value){return value===void 0?void 0:value===null?null:value.constructor;},privileged:function(value){return function(v){return arguments.length?value=v:value;};}},{get:function(){var list=[];return function(id){if(!arguments.length)
return list;for(var i=0;i<list.length;i++){var c=list[i];if(c.id===id)
return c.superclass;}};}(),set:function(id,superclass){if(A.isFunction(superclass)){var c=this.get(id);if(!c){var l=this.get();c=l[l.length]={"id":id};}
c.superclass=superclass;}},chain:function(clazz,superclass){if(A.isFunction(clazz)&&A.isFunction(superclass)){if(clazz.prototype.__proto__){clazz.prototype.__proto__=superclass.prototype;}else{var f=function(){};f.prototype=superclass.prototype;clazz.prototype=new f;}
clazz.prototype.constructor=clazz;}
return clazz;},make:function(v,option){option=option||{};var core=this,c=function(){},a=core.root.metadata().ael,t=core.get(option.type===void 0?core.type(v):option.type)||a,r=new(core.chain(c,t))();r.val=function(value){if(!arguments.length)
return v;v=value;var type=core.type(v);if(type===core.root){this.val(v.val());}else if(t!==type){t=core.get(type)||a;if(c.prototype.__proto__){core.chain(c,t);}else{var proto=c.prototype;for(var p in proto)
delete proto[p];core.apply(c.prototype,t.prototype);}}
return this;};r.constructor=core.root;return r;},node:function(target,parent){var core=this;target.class_=function(option){option=A.isString(option)?{name:option}:option||{};var clazz=core.node(core.class_(option,target[option.name],target),target);for(var i=1,a=arguments,m=a.length,c=A(clazz);i<m;i++)
c.properties(a[i]);return target[option.name]=clazz;};target.package_=function(option){option=A.isString(option)?{name:option}:option||{};var r=target[option.name];if(typeof r!=="object"){r=core.node(target[option.name]=option.value||new core.Package(),target);r.constructor=core.Package;}
return r;};target.parent=function(){return parent;};return target;},class_:function(option,clazz,node){option=option||{};if(!A.instanceOf(clazz,this.Class))
clazz=new this.Class();var metadata=clazz.metadata();metadata.type=clazz;for(var p in option){if(p==="type"){metadata.type=option.type;break;}}
var superclass=this.root,ael=superclass&&superclass.metadata().ael;do{if(A.instanceOf(node,this.Class)){superclass=node;ael=this.get(node.metadata().type);break;}}while(node&&node.parent&&(node=node.parent()));var aelClass=this.chain(metadata.ael,ael),aliases=option.aliases;this.set(metadata.type,aelClass);if(A.isArray(aliases)){for(var i=0,m=aliases.length;i<m;i++)
this.set(aliases[i],aelClass);}
return this.chain(clazz,metadata.superclass=superclass);},Class:function(core){var makeProps=function(target,metadata,args){var supermeta=metadata&&metadata.superclass&&metadata.superclass.metadata();if(supermeta)
makeProps(target,supermeta,args);var props=metadata.seq,core=A();for(var i=0,m=props.length;i<m;i++){var f=props[i].val(),v=f.value;target[f.name]=A.isFunction(v)?f.keywords.init?core.call(v,args,target):v:A(v).clone(true);}};var makeClass=function(metadata){return function(){var self=this,init;if(A.isFunction(self.constructor.metadata)&&metadata===self.constructor.metadata()){makeProps(self,metadata,arguments);init=self.initialize;}else if(self.prototype){init=self.prototype.initialize;}
return init?A().call(init,arguments,self):self;};};return function(){var metadata={properties:{},seq:[],ael:function(){}},clazz=makeClass(metadata);clazz.metadata=core.privileged(metadata);clazz.constructor=core.Class;return clazz;};},Property:function(clazz,expr,value){this.clazz=clazz;this.expr=expr;this.value=value;var tokens=expr.replace(/\([^)]*\)/g,"").match(/([\w_]+)/g),len=tokens.length;this.name=tokens[len-1];tokens.length=len-1;var k=this.keywords={};for(var i=0;i<len;i++)
k[tokens[i]]=true;var prop=A(this);for(var p in k){if(A.isFunction(prop[p]))
prop[p]();}},Method:function(){return A().call(A.lang.Property.prototype.initialize,arguments,this);},Package:function(){}});(function(){var core=A(),ua=typeof navigator==="object"&&typeof navigator.userAgent==="string"?navigator.userAgent:"";core.apply(core,{IE4:ua.indexOf("MSIE 4.")!==-1,KJS:ua.indexOf("KHTML")!==-1||ua.indexOf("Safari")!==-1,AIR:ua.indexOf("AdobeAIR")!==-1,Rhino:typeof Packages==="function"&&(""+Packages).indexOf("JavaPackage")!==-1,WSH:typeof WScript==="object"});})();A.lang.Class.metadata().ael.prototype.properties=function(){var clazz=this.val(),a=arguments;if(a.length){var metadata=clazz.metadata();for(var i=0,m=a.length;i<m;i++){var props=a[i]||{};for(var expr in props){var value=props[expr];var fc=A.lang.Property;if(A.isFunction(value))
fc=fc.Method;var f=A(new fc(clazz,expr,value));if(f.val().keywords["instance"])
metadata.seq[metadata.seq.length]=f;metadata.properties[expr]=f;}}}
return clazz.metadata().properties;};A.lang.Property.metadata().ael.prototype.ael=function(){var v=this.val(),fn=v.value,n=v.name,k=v.keywords,p=v.clazz.metadata().ael.prototype,core=A();k.ael=true;if(A.isFunction(fn)){p[n]=fn;if(!k["void"]){p["_"+v.name]=function(){return this.val(core.call(fn,arguments,this));}}
if(!k["return"]){p["$"+v.name]=function(){core.call(fn,arguments,this);return this;}}}else{p[n]=fn;}};A(A.lang.Property.Method).properties({"ael void void":function(){var v=this.val(),k=v.keywords,p=v.clazz.metadata().ael.prototype,n="_"+v.name;k["void"]=true;if(k.ael&&p[n])
delete p[n];},"ael void return":function(){var v=this.val(),k=v.keywords,p=v.clazz.metadata().ael.prototype,n="$"+v.name;k["return"]=true;if(k.ael&&p[n])
delete p[n];}},{"ael void init":function(){this.val().keywords.init=true;},"ael return isInit":function(){return!!this.val().keywords.init;},"ael return isVoid":function(){return!!this.val().keywords["void"];},"ael return isReturn":function(){return!!this.val().keywords["return"];}});A(A.lang.Class).properties({"ael properties":A.lang.Class.metadata().ael.prototype.properties,"ael void inherit":function(superclass){A(this).chain(this.metadata().superclass=A(superclass));},"ael superclass":function(){return this.val().metadata().superclass;},"ael ael":function(expr){var pl=this.properties();for(var n in pl){var p=pl[n];if(p.isAel()&&p.name()===expr)
return p;}},"ael instance":function(expr){var pl=this.properties();for(var n in pl){var p=pl[n];if(p.isInstance()&&p.name()===expr)
return p;}},"ael prototype":function(expr){var pl=this.properties();for(var n in pl){var p=pl[n];if(p.isPrototype()&&p.name()===expr)
return p;}},"ael static_":function(expr){var pl=this.properties();for(var n in pl){var p=pl[n];if(p.isStatic()&&p.name()===expr)
return p;}}});A(A.lang.Property).properties({"ael void ael":A.lang.Property.metadata().ael.prototype.ael,"ael void instance":function(){this.val().keywords.instance=true;},"ael void prototype":function(){var v=this.val();v.keywords.prototype=true;v.clazz.prototype[v.name]=v.value;},"ael void static":function(){var v=this.val();v.keywords["static"]=true;v.clazz[v.name]=v.value;},"ael void get":function(){var v=this.val(),k=v.keywords,n=v.name,gn="get"+n.charAt(0).toUpperCase()+n.substring(1),c=v.clazz;k.get=true;if(k.ael){c.metadata().ael.prototype[gn]=function(v){return this.val()[n];}}
if(k.instance||k.prototype){c.prototype[gn]=function(v){return this.val()[n];}}
if(k["static"]){c[gn]=function(v){return this[n];}}},"ael void set":function(){var v=this.val(),k=v.keywords,n=v.name,sn="set"+n.charAt(0).toUpperCase()+n.substring(1),c=v.clazz;k.set=true;if(k.ael){c.metadata().ael.prototype[sn]=function(v){this.val()[n]=v;return this;}}
if(k.instance||k.prototype){c.prototype[sn]=function(v){this.val()[n]=v;return this;}}
if(k["static"]){c[sn]=function(v){this[n]=v;return this;}}},"ael name":function(){return this.val().name;},"ael return hasKeyword":function(name){return!!this.val().keywords[name];},"ael return isAel":function(){return!!this.val().keywords.ael;},"ael return isInstance":function(){return!!this.val().keywords.instance;},"ael return isPrototype":function(){return!!this.val().keywords.prototype;},"ael return isStatic":function(){return!!this.val().keywords["static"];}});A(A).properties({"static instanceOf":A.instanceOf,"static isObject":function(value){var t=typeof value;return value!==null&&(t==="object"||t==="function");},"static isBoolean":function(value){return A.instanceOf(value,Boolean);},"static isNumber":function(value){return A.instanceOf(value,Number);},"static isRegExp":function(value){return A.instanceOf(value,RegExp);},"static isString":A.isString,"static isFunction":A.isFunction,"static isNative":function(value){return A.isFunction(value)&&(value.toString().indexOf("[native code")!==-1||value.toString()==="[function]");},"static isArray":A.isArray,"static isArguments":A.isArguments,"static isNaN":function(value){return A.isNumber(value)&&isNaN(value);},"static isNull":function(value){return value===null;},"static isUndefined":function(value){return value===void 0;},"static isNoU":A.isNoU,"static namespace":arguments.callee,"prototype val":function(){return this;},"ael void apply":function(){var to=this.val();if(!A.isNoU(to)){for(var i=0,a=arguments;i<a.length;i++){var o=a[i];if(!A.isNoU(o)){for(var p in o)
to[p]=o[p];}}}
return to;},"ael void clear":function(){var v=this.val();if(A.isObject(v)){for(var p in v)
delete v[p];}},"ael clone":function(){var cloneFunction=function(fn){var src=fn.toString(),args=src.substring(src.indexOf("(")+1,src.indexOf(")")),body=src.substring(src.indexOf("{")+1,src.lastIndexOf("}"));args=args.length?args.split(","):[];body=A(body).trim("\n\r ");if(A(fn).name()==="anonymous"){args[args.length]=body;return A().call(Function,args);}
return new Function("return function("+args.join(",")+"){"+body+"};")();};return function(deep){var value=this.val(),type=typeof value;if((type!=="object"&&type!=="function")||(A().AIR&&type==="function"))
return value;var c=value.constructor,cp=c.prototype,v=value.valueOf,t=value.toString;if(value.valueOf!==cp.valueOf)
delete value.valueOf;if(value.toString!==cp.toString)
delete value.toString;var clone=null;switch(c){case Object:clone={};break;case Array:clone=[];break;case Function:if(A.isNative(value))
return value;clone=cloneFunction(value);break;case Boolean:case Number:case String:clone=new c(value.valueOf());break;default:if(type==="object"){clone={};}else{if(A.isNative(value))
return value;clone=cloneFunction(value);A(clone).chain(value);}
clone.constructor=A(c).clone();}
if(deep!=true){A().apply(clone,value);}else if(A.isFunction(value)){for(var p in value)
clone[p]=A(value[p]).clone(p!=="prototype");}else{for(var p in value)
clone[p]=A(value[p]).clone(true);}
if(t!==value.toString){value.toString=t;clone.toString=A(t).clone(true);}
if(v!==value.valueOf){value.valueOf=v;clone.valueOf=A(v).clone(true);}
return clone;};}(),"ael compare":function(value2){var value1=this.val(),type1=typeof value1,type2=typeof value2;if(type1<type2){return-1;}else if(type1>type2){return 1;}
switch(type1){case"undefined":return 0;case"object":var isNull1=A.isNull(value1),isNull2=A.isNull(value2);if(isNull1||isNull2)
return isNull1===isNull2?0:isNull1?-1:1;var result=A(value1.constructor).compare(value2.constructor);if(result!==0)return result;break;case"function":value1=value1.toString();value2=value2.toString();break;case"number":var isNaN1=isNaN(value1),isNaN2=isNaN(value2);if(isNaN1||isNaN2)
return isNaN1===isNaN2?0:isNaN1?1:-1;break;}
return value1<value2?-1:value1>value2?1:0;},"ael copy":function(){return A(this.val());},"ael void each":function(fn){var i=0,v=this.val(),core=A();if(!A.isNoU(v)&&A.isFunction(fn)){for(var p in v){if(fn(v[p],i,p))
break;i++;}}},"ael equals":function(value2){var value1=this.val();return value1===value2||(A.isNaN(value1)&&A.isNaN(value2));},"ael keys":function(){var r=[],v=this.val();if(!A.isNoU(v)){for(var p in v)
r[r.length]=p;}
return r;},"ael hasOwn":function(name){var object=this.val(),KJS=A().KJS;if(A.isNoU(object)||!A.isString(name))return false;if(A.isFunction(object.hasOwnProperty)&&(!KJS||(KJS&&!A.isArray(object))))
return object.hasOwnProperty(name);var c=object.constructor;if(A.isNoU(c))
return!A.isNoU(object[name]);if(object[name]!==c.prototype[name])
return true;var p=c.prototype;c.prototype=void 0;for(var p in object){if(p===name){c.prototype=p;return true;}}
c.prototype=p;return KJS&&A.isArray(object)&&this.within(parseInt(name));},"ael return toArray":function(include){var v=this.val(),a=[],i=0;if(A.instanceOf(v,Array)){for(m=v.length;i<m;i++)
a[i]=v[i];}else if(include){a[i]=v;}else if(A.isObject(v)){for(var p in v)
a[i++]=v[p];}
return a;},"ael return toBoolean":function(){return!!this.val();},"ael return toJSONString":function(partial){var r=[],v=this.val();for(var p in v){if(A(v).hasOwn(p)){var fragment=A(v[p]).toJSONString(partial);if(typeof fragment==="string"&&fragment.length!==0)
r[r.length]='"'+p+'":'+fragment;}}
return"{"+A(r).join(",")+"}";},"ael return toNumber":function(){return Number(this.val());},"ael return toString":function(){return String(this.val());}});A.lang.class_({name:"Array",type:Array},{"ael arraycopy":function(fstart,to,tstart,length){var from=this.val();if(A.isArray(to)&&A.isNumber(fstart)&&0<=fstart&&A.isNumber(tstart)&&0<=tstart&&A.isNumber(length)&&0<=length){fstart+=length;tstart+=length;for(var i=0;i<length;i++)
to[--tstart]=from[--fstart];}
return to;},"ael void clear":function(){this.val().length=0;},"ael concat":A().global.opera?function(){for(var i=0,a=arguments;i<a.length;i++){var v=a[i];if(v===null||v===void 0)
a[i]=[v];}
return A().call(Array.prototype.concat,arguments,this.val());}:function(){return A().call(Array.prototype.concat,arguments,this.val());},"ael contains":function(value){return this.indexOf(value)!==-1;},"ael every":function(fn,scope){if(!A.isFunction(fn))
return this.length>0;fn=A(fn);var array=this.val();for(var i=0,m=array.length;i<m;i++){if(!fn.call([array[i],i,array],scope))
return false;}
return true;},"ael filter":function(fn,scope){var r=[];if(A.isFunction(fn)){fn=A(fn);var array=this.val();for(var i=0,m=array.length;i<m;i++){var v=array[i];if(fn.call([v,i,array],scope))
r[r.length]=v;}}
return r;},"ael void each":function(fn){var v=this.val();for(var i=0,m=v.length;i<m&&!fn(v[i],i);i++);},"ael boolean equals":function(array){var v=this.val();if(A.isArray(array)&&v.length===array.length){for(var i=0,m=v.length;i<m;i++){if(v[i]!==array[i])
return false;}
return true;}
return false;},"ael indexOf":function(value,from){var v=this.val(),len=v.length;from=Number(from);if(from){from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0)
from+=len;if(from<0)
from=0;}else{from=0;}
for(;from<len;from++){if(v[from]===value)
return from;}
return-1;},"ael join":Array.prototype.join?function(separator){if(separator===void 0)
separator=",";return this.val().join(separator);}:function(separator){separator=separator===void 0?",":separator===null?"null":separator.toString();var r="",v=this.val();for(var i=0;i<v.length;i++){if(0<i)r+=separator;r+=v[i];}
return r;},"ael lastIndexOf":function(value,from){var v=this.val(),len=v.length;if(arguments.length<2){from=len-1;}else if(A.isNumber(from)&&!isNaN(from)){from=(0<from)?Math.ceil(from):Math.floor(from);if(from<0){from+=len;}else if(from>=len){from=len-1;}}else{from=0;}
for(;-1<from;from--){if(v[from]===value)
return from;}
return-1;},"ael map":function(fn,scope){var r=[];if(A.isFunction(fn)){fn=A(fn);var v=this.val();for(var i=0,m=v.length;i<m;i++)
r[r.length]=fn.call([v[i],i,v],scope);}
return r;},"ael pop":function(){var v=this.val()
if(!v.length)return;var last=v[v.length-1];v.length--;return last;},"ael push":function(){var v=this.val();for(var i=0,a=arguments;i<a.length;i++)
v[v.length]=a[i];return v.length;},"ael remove":function(index){var v=this.val();if(!this.within(index))return;var result=v[index];for(var i=index+1;i<v.length;i++)
v[i-1]=v[i];v.length--;return result;},"ael reverse":function(){var v=this.val();for(var i=0,b=v.length-1;i<b;i++,b--){var f=v[i];v[i]=v[b];v[b]=f;}
return v;},"ael size":function(){return this.val().length;},"ael shift":function(){var result,v=this.val();if(v.length){result=v[0];for(var i=1;i<v.length;i++)
v[i-1]=v[i];v.length--;}
return result;},"ael slice":function(start,end){var result=[],v=this.val();if(v.length){if(!A.isNumber(start)){start=0;}else if(start<0){start=v.length+start;}
if(!A.isNumber(end)){end=v.length;}else if(end<0){end=v.length+end;}
for(var i=start;i<end;i++)
result[result.length]=v[i];}
return result;},"ael some":function(fn,scope){if(A.isFunction(fn)){fn=A(fn);var array=this.val();for(var i=0,m=array.length;i<m;i++){if(fn.call([array[i],i,array],scope))
return true;}}
return false;},"ael sort":Array.prototype.sort?function(comparator){var v=this.val();if(v.length){if(A.isFunction(comparator)){v.sort(comparator);}else{v.sort();}}
return v;}:function(comparator){if(!A.isFunction(comparator))
comparator=new Function("v1","v2","return v1 - v2;");var array=this.val();for(var i=1;i<array.length;i++){for(var k=i;0<k&&0<comparator(array[k-1],array[k]);k--){var v=array[k];array[k]=array[k-1];array[k-1]=v;}}
return array;},"ael splice":function(start,deleteCount){var result=[],v=this.val(),c=0,a=arguments;if(!A.isNumber(start)||start<0)
start=v.length;if(!A.isNumber(deleteCount))
deleteCount=v.length;for(var i=start;i<v.length&&c<deleteCount;i++,c++)
result[result.length]=v[i];for(var i=start+c;i<v.length;i++)
v[i-c]=v[i];v.length-=c;for(var i=3;i<a.length;i++)
v[v.length]=a[i];return result;},"ael return toJSONString":function(partial){var r=[],v=this.val();for(var i=0;i<v.length;i++){var fragment=A(v[i]).toJSONString(partial);if(typeof fragment==="string"&&fragment.length!==0)
r[r.length]=fragment;}
return"["+A(r).join(",")+"]";},"ael unshift":function(){var a=arguments,v=this.val(),l=v.length+a.length;for(var i=v.length-1,m=a.length;0<=i;i--)
v[i+m]=v[i];for(var i=0;i<a.length;i++)
v[i]=a[i];return v.length=l;},"ael within":function(index){return A.isNumber(index)&&0<=index&&index<this.val().length;}});A.lang.class_({name:"Boolean",type:Boolean},{"ael return toJSONString":function(){return this.val()==true?"true":"false";}});A.lang.class_({name:"Date",type:Date},{"ael void clear":function(){this.val().setTime(0);},"ael return toJSONString":function(){return'"'+this.val().toUTCString()+'"';}});A.lang.class_("Error",{"prototype initialize":function(e){e=e||{};this.name=e.name||"Error";this.message=e.message||e.description||"";this.line=e.line||e.lineNumber||-1;this.url=e.fileName||e.sourceURL||"";this.stack=e.stack||"";},"ael void clear":function(){}});A.lang.class_({name:"Function",type:Function,aliases:[(function(){}).constructor]},{"ael call":function(args,scope){return A().call(this.val(),args,scope);},"ael chain":function(fn){var v=this.val();if(!A.instanceOf(v,fn)){var proto=A.isFunction(fn)?fn.prototype:fn;if(A.isObject(v.prototype.__proto__)){v.prototype.__proto__=proto;}else{var f=A().AIR?function(){}:new Function();f.prototype=proto;v.prototype=new f();}
v.prototype.constructor=v;}
return v;},"ael void clear":function(){var v=this.val();for(var p in v){if(p!=="prototype")
delete v[p];}},"ael comment":function(){var src=this.val().toString(),r="",i=0;while(true){var s=i=src.indexOf("/*",i);if(s==-1)
break;var e=i=src.indexOf("*/",i);if(e==-1)
break;r+=src.substring(s+2,e);}
return r;},"ael curry":function(args,scope){var fn=A(this);if(!A.isObject(scope))
scope={};args=A.isArray(args)?args:[];return function(){var a=[];for(var i=0;i<arguments.length;i++)
a[a.length]=arguments[i];return fn.call(args.concat(a),scope);}},"ael defer":function(){var g=A().global,si=g.setInterval,ci=g.clearInterval;return A().IE4?function(options){options=options||{};var self=this,fns=A().fns,i=0,clear=options.original?ci:g.clearInterval;for(;fns[i]!==void 0;i++);fns[i]=function(){if(!A.isFunction(options.condition)||!!options.condition()){if(!options.interval){delete A().fns[i];clear(id);}
self.call(options.arguments,options.scope);}};var id=(options.original?si:g.setInterval)('Ael().fns['+i+']();',A.isNumber(options.ms)?options.ms:50);return id;}:function(options){options=options||{};var self=this,clear=options.original?ci:g.clearInterval,id=(options.original?si:g.setInterval)(function(){if(!A.isFunction(options.condition)||!!options.condition()){if(!options.interval)
clear(id);self.call(options.arguments,options.scope);}},A.isNumber(options.ms)?options.ms:50);return id;}}(),"ael interceptor":function(advices){var core=A(),clazz=A(function(){}).chain({fn:this.val(),proceed:function(args){return core.call(this.fn,args,this.scope);}}),ic=function(){var so=new clazz();so.scope=this;if(A.isFunction(ic.before))
core.call(ic.before,arguments,so);var r=A.isFunction(ic.around)?core.call(ic.around,arguments,so):core.call(so.fn,arguments,this);if(A.isFunction(ic.after))
core.call(ic.after,arguments,so);return r;};return A(ic).apply(advices);},"ael name":function(){var tokens=this.val().toString().match(/^[\r\n ]*function *([^(]*)\(/);return A.isNull(tokens)?"":tokens[1];},"ael try_":function(){var core=A(),fn=(!core.KJS&&A(core.global).hasOwn("onerror"))||core.IE4?function(fn,catch_,finally_,error){var g=core.global,eh=g.onerror||function(){return true;};g.onerror=function(msg,url,line){g.onerror=function(){g.onerror=eh;finally_();return true;};catch_(new error({name:"Error",message:msg,fileName:url||"",line:A.isNumber(line)?line:-1,stack:""}));g.onerror=eh;finally_();return true;};var r=fn();g.onerror=eh;finally_();return r;}:core.AIR?Ael?Ael().try_:core.try_=new Function("fn","catch_","finally_","error","try{return fn();}catch(e){catch_(new error(e));}finally{finally_();}"):function(fn,catch_,finally_,error){var r;eval("try{r=fn();}catch(e){catch_(new error(e));}finally{finally_();}");return r;};return function(o){if(!o)
return;o.arguments=[this.val(),A.isFunction(o.catch_)?o.catch_:function(){},A.isFunction(o.finally_)?o.finally_:function(){},A.lang.Error];return A(fn).defer(o);}}()});A.lang.class_("Task",{"prototype fn":function(){},"prototype start":0,"prototype initialize":function(options){A().apply(this,options);},"ael void resume":function(){this.val().pause=false;},"ael void suspend":function(){this.val().pause=true;}});(function(){var iid,count=0,entries={};A(A.lang.Task).properties({"ael void abort":function(){var id=this.val().id;delete entries[id];for(var p in entries)
return
if(A.isNumber(iid))
A().global.clearInterval(iid);}});A(A.lang.Function).properties({"ael timer":function(options){var exist=false;for(var p in entries){exist=true;break;}
if(!exist){iid=A(function(){var es=entries,c=new Date().getTime();for(var p in es){var e=es[p],o=e.options;if(!e.pause&&e.start<=c&&(!A.isFunction(o.start)||o.start())){if(!o.interval||(A.isFunction(o.end)&&o.end())){delete es[p];}else{e.start=(o.absolute?e.start:c)+o.ms;}
e.fn.call(o.arguments,o.scope);}}
for(var p in es)
return
A().global.clearInterval(iid);iid=void 0;}).defer({ms:10,interval:true,original:true});}
options=options||{};options.ms=options.ms||50;var id=count++;return A(entries[id]=new A.lang.Task({id:id,fn:this,start:new Date().getTime()+options.ms,options:options}));}});})();A.lang.class_({name:"Null",type:null},{"ael clone":function(){return null;},"ael return toJSONString":function(){return"null";}});A.lang.class_({name:"Number",type:Number},{"ael isInteger":function(){var v=this.val();return(v-Math.floor(v))===0;},"ael isDecimal":function(){var v=this.val();return isFinite(v)&&(v-Math.floor(v))!==0;},"ael return toJSONString":function(){var v=this.val();return!isFinite(v)?"":v.toString();}});A.lang.class_({name:"RegExp",type:RegExp},{"ael clone":function(){var v=this.val(),s=v.toString();return new RegExp(v.source,s.substring(s.lastIndexOf("/")+1));},"ael global":/_/g.global?function(){return this.val().global;}:function(){var s=this.val().toString();return s.indexOf("g",s.lastIndexOf("/")+1)!==-1;},"ael ignoreCase":/_/i.ignoreCase?function(){return this.val().ignoreCase;}:function(){var s=this.val().toString();return s.indexOf("i",s.lastIndexOf("/")+1)!==-1;},"ael test":function(string){return A.isString(string)?this.clone().test(string):false;}});A.lang.class_({name:"String",type:String},{"ael void each":function(fn){var i=0,v=this.val();if(A.isFunction(fn)){for(var i=0,m=v.length;i<m;i++){if(fn(v.charAt(i),i))
break;}}},"ael escapeHTML":function(){return this.replace(new RegExp("[<>&\"']","g"),function(s){switch(s){case"<":return"&lt;";case">":return"&gt;";case"&":return"&amp;";case"\"":return"&#34;";case"'":return"&#39;";}});},"ael endsWith":function(suffix){return A.isString(suffix)&&(!suffix.length||this.lastIndexOf(suffix)===(this.size()-suffix.length));},"ael format":function(){var a=arguments,v=this.val();return this.replace(/\{([0-9]+)\}/g,function(s,i){var v=a[i];return v===void 0?"undefined":v;});},"ael indexOf":function(string,from){if(string==""&&(!A.isNumber(from)||0<from))
return 0;var v=this.val();if(arguments.length<=1)
return v.indexOf(string);var f=Number(from);return v.length<=f&&f!==Number.POSITIVE_INFINITY?-1:v.indexOf(string,isFinite(f)?f:0);},"ael isEmpty":function(value){return this.val().length===0;},"ael lastIndexOf":function(string,from){if(string===""&&(!A.isNumber(from)||0<from))
return 0;return arguments.length===1?this.val().lastIndexOf(string):this.val().lastIndexOf(string,isFinite(from)?Number(from):0);},"ael print":function(){A().print(this.val());},"ael replace":"{0}".replace(/\{(0)\}/g,function(){return"";})===""?function(regexp,replacement){return this.val().replace(regexp,replacement);}:function(regexp,replacement){var value=this.val(),r="",start=0,t=value.match(regexp)||[],flag=A.isFunction(replacement);for(var i=0,index,v;i<t.length&&0<=(index=value.indexOf(v=t[i],start));i++){r+=value.substring(start,index);r+=flag?replacement(t[i],v.substring(1,v.length-1)):replacement;start=index+v.length;}
return r+value.substring(start);},"ael size":function(){return this.val().length;},"ael startsWith":function(prefix){return A.isString(prefix)&&(!prefix.length||this.indexOf(prefix)===0);},"ael return toJSONString":function(){var ccl={};for(var i=0;i<32;i++)
ccl[String.fromCharCode(i)]="\\u00"+(i<16?"0":"1")+(i%16).toString(16);for(var i=127;i<160;i++)
ccl[String.fromCharCode(i)]="\\u00"+Math.floor(i/16).toString(16)+(i%16).toString(16);A().apply(ccl,{"\"":"\\\"","\\":"\\\\","\/":"\\\/","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"});return function(partial){var v=this.val();var r="";for(var i=0,m=v.length;i<m;i++){var c=v.charAt(i);var cc=ccl[c];if(!A.isUndefined(cc)){r+=cc;}else if(partial){r+=c;}else{c="000"+c.charCodeAt(0).toString(16);r+="\\u"+c.substring(c.length-4);}}
return'"'+r+'"';}}(),"ael trim":function(chars){var v=this.val();if(v){if(!A.isString(chars))
chars=" ";var first=0;for(;first<v.length&&chars.indexOf(v.charAt(first))!=-1;first++);var last=v.length-1;for(;first<=last&&chars.indexOf(v.charAt(last))!=-1;last--);v=v.substring(first,last+1);}
return v;},"ael unescapeHTML":function(){return this.replace(new RegExp("&(lt|gt|amp|#34|#39);","g"),function(s){switch(s){case"&lt;":return"<";case"&gt;":return">";case"&amp;":return"&";case"&#34;":return"\"";case"&#39;":return"'";}});}});A.lang.class_({name:"Undefined",type:void 0},{"ael clone":function(){return void 0;},"ael return toJSONString":function(){return"";}});A.package_({name:"extend",value:function(eo){return eo.extend=function(){var a=arguments;if(a.length){var r=eo.registry,inc=eo.includes;for(var i=0,m=a.length;i<m;i++){var id=a[i],e=r.get(id);if(e&&!inc.some(function(v){return e.isHigh(v);})){inc.push(e);var d=e.dependencies;for(var i=0,m=d.length;i<m;i++)
eo.extend(d[i]);A(e.fn).call([A]);}}}
return eo;};}({includes:A([]),install:function(ext){ext=A(new A.extend.Extension()).apply(ext);var r=this.registry,e=r.get(ext.id);if(!e||!this.includes.some(function(v){return e.isHigh(v);}))
r.register(ext);return this;}})});A.extend.class_("Extension",{"prototype version":0,"instance dependencies":[],"prototype fn":function(){},"prototype isHigh":function(ext){return this.id===ext.id&&parseFloat(this.version)<parseFloat(ext.version);}});Ael||A.extend.class_("Registry",{"static extensions":{},"static register":function(ext){if(ext&&ext.id)
this.extensions[ext.id]=ext;},"static unregister":function(id){delete this.extensions[id];},"static get":function(id){return this.extensions[id];}});A.extend().registry=(Ael?Ael:A).extend.Registry;return A;})();

Ael.package_("env").class_("UserAgent",{"static sliceNumberString":function(lc,start){var lastIndex=lc.length;if(start<lc.length&&(lc.charCodeAt(start)<48||57<lc.charCodeAt(start)))
start++;for(var i=start;i<lc.length;i++){var code=lc.charCodeAt(i);if((48<=code&&code<=57)||code===32||code===46)
continue;lastIndex=i;break;}
return lc.substring(start,lastIndex);},"init instance userAgent":function(){var d=Ael().global.navigator;d=(d&&d.userAgent)||"";return function(ua){return Ael.isString(ua)?ua:d;};}()},{"init instance lowerCase":function(){return this.userAgent.toLowerCase();}},{"init instance versionString":function(){var lc=this.lowerCase;var index=-1;if(this.isIE()){index=lc.indexOf("msie")+4;}else if(this.isNN()||this.isSafari()||this.isNNCompatible()){index=lc.indexOf("mozilla")+7;}else if(this.isOpera()){index=lc.indexOf("opera")+5;}else{for(var i=0;i<lc.length;i++){var code=lc.charCodeAt(i);if(48<=code&&code<=57){index=i;break;}}}
var result;if(index===-1&&Ael.isObject(Ael().global.navigator)){result=navigator.appVersion;}else{result=Ael.env.UserAgent.sliceNumberString(this.lowerCase,index);if(this.isOpera()){var major=parseInt(result);result=(major>=7)?"6.0":"5.0";}}
return result;}},{"init instance version":function(){return parseFloat(this.versionString);},"init instance majorVersion":function(){return parseInt(this.versionString);},"init instance ownVersionString":function(){var index=-1;if(this.isSafari()){index=this.lowerCase.indexOf("safari")+6;}else if(this.isOpera()){index=this.lowerCase.indexOf("opera")+5;}else{return this.versionString;}
return Ael.env.UserAgent.sliceNumberString(this.lowerCase,index);}},{"init instance ownVersion":function(){return parseFloat(this.ownVersionString);},"init instance ownMajorVersion":function(){return parseInt(this.ownVersionString);},"prototype toString":function(){return this.userAgent;},"prototype isWin":function(){return(this.userAgent.indexOf("Win")!==-1)||(this.lowerCase.indexOf("windows")!==-1);},"prototype isMac":function(){return(this.userAgent.indexOf("Mac")!==-1);},"prototype isLinux":function(){return(this.lowerCase.indexOf("linux")!==-1);},"prototype getPlatformName":function(){return(this.isWin())?"Windows":(this.isMac())?"Mac":(this.isLinux())?"Linux":"Unknown";},"prototype isIE":function(){return!this.isOpera()&&(this.lowerCase.indexOf("msie")!==-1);},"prototype isNN":function(){return(this.lowerCase.indexOf("mozilla")!==-1)&&(this.lowerCase.indexOf("compatible")===-1)&&!this.isOpera()&&!this.isSafari()&&(this.lowerCase.indexOf("khtml")===-1);},"prototype isFirefox":function(){return this.userAgent.indexOf("Firefox")!==-1;},"prototype isSafari":function(){return(this.userAgent.indexOf("Safari")!==-1)&&(this.userAgent.indexOf("OmniWeb")===-1);},"prototype isOpera":function(){return(this.userAgent.indexOf("Opera")!==-1)&&(this.userAgent.indexOf("Operat")===-1);},"prototype isAIR":function(){return this.userAgent.indexOf("AdobeAIR")!==-1;},"prototype isDreamweaver":function(){return this.userAgent.indexOf("Dreamweaver")!==-1;},"prototype isJaxer":function(){return this.userAgent.indexOf("Jaxer")!==-1;},"prototype isChrome":function(){return this.userAgent.indexOf("Chrome")!==-1;},"prototype getBrowzerName":function(){return(this.isIE())?"IE":(this.isNN())?"NN":(this.isChrome())?"Chrome":(this.isSafari())?"Safari":(this.isOpera())?"Opera":"Unknown";},"prototype isGecko":function(){return(this.lowerCase.indexOf("gecko")!=-1);},"prototype isIECompatible":function(){return this.isIE()||this.isOpera();},"prototype isNNCompatible":function(){return this.isNN()||this.isGecko()||(!this.isIECompatible()&&(this.lowerCase.indexOf("mozilla")!=-1)&&(this.lowerCase.indexOf("compatible")!=-1));},"prototype isIE3":function(){return this.isIECompatible()&&this.majorVersion===3;},"prototype isIE4":function(){return this.isIECompatible()&&this.majorVersion===4;},"prototype isIE4Plus":function(){return this.isIECompatible()&&this.majorVersion>=4;},"prototype isIE5":function(){return this.isIECompatible()&&this.version>=5&&this.version<5.5;},"prototype isIE5Plus":function(){return this.isIECompatible()&&this.majorVersion>=5;},"prototype isIE5_5":function(){return this.isIECompatible()&&this.version>=5.5&&this.version<6;},"prototype isIE5_5Plus":function(){return this.isIECompatible()&&this.version>=5.5;},"prototype isIE6":function(){return this.isIECompatible()&&this.majorVersion===6;},"prototype isIE6Plus":function(){return this.isIECompatible()&&this.majorVersion>=6;},"prototype isIE7":function(){return this.isIECompatible()&&this.majorVersion===7;},"prototype isIE7Plus":function(){return this.isIECompatible()&&this.majorVersion>=7;},"prototype isNN3":function(){return this.isNNCompatible()&&this.majorVersion===3;},"prototype isNN4":function(){return this.isNNCompatible()&&this.majorVersion===4;},"prototype isNN4Plus":function(){return this.isNNCompatible()&&this.majorVersion>=4;},"prototype isNN6":function(){return this.isNNCompatible()&&this.majorVersion===5;},"prototype isNN6Plus":function(){return this.isNNCompatible()&&this.majorVersion>=5;}});

Ael.package_({name:"test",value:function(td){return td.test=function(testcases,options){options=Ael({}).$apply(td.options).apply(options);var r=td.runner;Ael(testcases||{}).each(function(v,i,n){r.add(n,v,options);});return td;};}({options:{element:typeof document==="object"?document.body:void 0,expect:{clearTimer:false},filter:new RegExp(".*"),ignore:null,listeners:[],sync:false,title:"Test Suite"},clear:function(){var r=this.runner;if(r)
r.clear();return this;},reset:function(){var r=this.runner;if(r)
r.reset();return this;},run:function(options){var self=this,d=Ael().global.document;if(typeof d==="object"&&Ael.isNull(d.body)){if(Ael.isNoU(window.onload)){var ol=window.onload;window.onload=function(){if(window.onload===arguments.callee)
window.onload=ol;self.run(options);}}
return;}
options=Ael({}).$apply(self.options).apply(options);self.runner.run(options);return this;}})});Ael.test.class_("Runner",{"instance testcases":[],"prototype add":function(name,fn,options){options=options||{};var t=this.testcases,c=options.testcase||Ael.test.TestCase;if(Ael.isFunction(c))
t[t.length]=new c(name,fn,options);},"prototype clear":function(){this.reset();this.testcases.length=0;delete this.counter;},"prototype reset":function(){Ael(this.testcases).each(function(v){v.reset();});},"prototype isRunning":function(){return Ael(this.testcases).every(function(v){return v.isStarted();});},"prototype run":function(options){if(this.isRunning())
return;options=options||{};var self=this,core=Ael(),output,d=core.global.document;if(!core.global.setTimeout)
options.sync=true;if(typeof d==="object"){var e=options.element;if(d.createElement&&d.createTextNode){e=e||d.getElementById("Ael.test")||(d.Ael&&d.Ael.test&&d.Ael.test)||d.body;output=e.tagName.toLowerCase()==="textarea"?new Ael.test.Listener.Console.TextArea(e,options):new Ael.test.Listener.HTML(e,options);}else{e=e||(d.Ael&&d.Ael.test&&d.Ael.test);if(!Ael.isObject(e)||e.tagName.toLowerCase()!=="textarea"){var html='<form name="Ael"><textarea name="test" rows="40" cols="100"></textarea></form>';e=d.body;if(Ael.isFunction(d.createRange)){var range=d.createRange();range.selectNodeContents(e);range.collapse(true);e.appendChild(range.createContextualFragment(html));}else if(Ael.isObject(e.insertAdjacentHTML)){e.insertAdjacentHTML("BeforeEnd",html);}else{e.innerHTML=html;}}
output=new Ael.test.Listener.Console.TextArea(d.Ael.test,options);}}else{output=new Ael.test.Listener.Console(options);}
var listeners=Ael([output])._concat(options.listeners||[]);if(!this.counter)
listeners.push(this.counter=new Ael.test.Listener.Counter("total"));options.listeners=listeners.val();listeners.each(function(v){v.onRunStarted(self);});var filter=Ael(Ael.isRegExp(options.filter)?options.filter:new RegExp(".*")),testcases=Ael(self.testcases)._filter(function(v){return filter.test(v.name);});if(Ael.isRegExp(options.ignore)){var ignore=Ael(options.ignore);testcases=testcases._filter(function(v){return!ignore.test(v.name);})}
if(options.sync){testcases.each(function(v){v.run(options);});listeners.each(function(v){v.onRunFinished(self);});}else{testcases.each(function(v,i){Ael(function(){v.run(options);}).defer({ms:200+(50*i),condition:function(){return testcases.every(function(v){return!v.isStarted();});},original:true});});Ael(function(){listeners.each(function(v){v.onRunFinished(self);});}).defer({ms:1000,condition:function(){return testcases.every(function(v){return v.isFinished();});},original:true});}}});Ael.test().runner=new Ael.test.Runner();Ael.test.class_("TestCase",{"instance state":0,"prototype initialize":function(name,fn,options){this.name=name;this.fn=fn;this.conditions=Ael([]);this.listeners=Ael([]);this.results=Ael([]);this.startTime=new Date(0);this.finishTime=new Date(0);this.timeoutIds={};this.intervalIds={};this.options=options||{};},"prototype reset":function(){this.state=0;this.startTime.setTime(0);this.finishTime.setTime(0);this.conditions.clear();this.listeners.clear();this.results.clear();this.clear();},"prototype clear":function(){var e=this.options.expect||{};if(e.clearTimer){var g=Ael().global,t=this.timeoutIds,i=this.intervalIds;for(var p in t)
g.clearTimeout(t[p]);for(var p in i)
g.clearInterval(i[p]);}},"prototype isInit":function(){return this.state===0;},"prototype isStarted":function(){return this.state===1;},"prototype isFinished":function(){return this.state===2;},"prototype run":function(options){if(!this.isInit())
return;options=Ael({listeners:[],expect:{}}).apply(options||{});var self=this,counter=new Ael.test.Listener.Counter("testcase"),listeners=self.listeners.$push(counter)._concat(options.listeners),assert=new Ael.test.Assert(self,options);self.state=1;var try_=function(){listeners.each(function(v){v.onStarted(self);});self.startTime.setTime(new Date().getTime());if(Ael.isFunction(self.fn))
Ael().call(self.fn,[],assert);var hn=assert.successful?"onSuccessful":"onFailure";listeners.each(function(v){v[hn](self);});},catch_=function(e){listeners.each(function(v){v.onError(self,e);});},terminate=function(){self.state=2;self.finishTime.setTime(new Date().getTime());listeners.each(function(v){v.onFinished(self);});self.listeners.remove(counter);};if(options.sync){eval("try{try_()}catch(e){catch_(new Ael.lang.Error(e))}");terminate();}else{var g=Ael().global,finished=false,oSetTimeout=g.setTimeout,oSetInterval=g.setInterval,oClearTimeout=g.clearTimeout,oClearInterval=g.clearInterval;try_=Ael(try_)._interceptor({before:function(){g.setTimeout=function(fn,delay){if(Ael.isString(fn))
fn=new Function(fn);fn=Ael(fn).interceptor({before:function(){delete self.timeoutIds[String(id)];}});var id=Ael(fn).try_({catch_:catch_,ms:delay,original:true});return self.timeoutIds[String(id)]=id;};g.clearTimeout=function(id){var string=String(id);if(self.timeoutIds[string]){Ael().call(oClearTimeout,arguments);delete self.timeoutIds[string];}};g.setInterval=function(){var id=Ael().call(oSetInterval,arguments);return self.intervalIds[String(id)]=id;};g.clearInterval=function(id){var string=String(id);if(self.intervalIds[string]){Ael().call(oClearInterval,arguments);delete self.intervalIds[string];}};},after:function(){finished=true;}});catch_=Ael(catch_).interceptor({before:function(){finished=true;self.clear();}});terminate=Ael(terminate)._interceptor({before:function(){g.setTimeout=oSetTimeout;g.clearTimeout=oClearTimeout;g.setInterval=oSetInterval;g.clearInterval=oClearInterval;}});try_.try_({catch_:catch_,ms:0});terminate.timer({ms:20,start:function(){var p,te=false,ie=false,r=finished&&self.conditions.every(function(condition){return condition();});if(options.expect.clearTimer){for(p in self.timeoutIds){te=true;break;}
for(p in self.intervalIds){ie=true;break;}}
return r&&!te&&!ie;}});}}});Ael.test.class_("Listener",{"prototype onRunStarted":function(){},"prototype onRunFinished":function(){},"prototype onStarted":function(){},"prototype onFinished":function(){},"prototype onSuccessful":function(){},"prototype onFailure":function(){},"prototype onError":function(){},"prototype onAssertSuccessful":function(){},"prototype onAssertFailure":function(){}});Ael.test.Listener.class_("Counter",{"init instance name":function(name){return name;},"instance runs":0,"instance successes":0,"instance failures":0,"instance errors":0,"instance assertSuccesses":0,"instance assertFailures":0,"prototype onStarted":function(){this.runs++;},"prototype onSuccessful":function(){this.successes++;},"prototype onFailure":function(){this.failures++;},"prototype onError":function(){this.errors++;},"prototype onAssertSuccessful":function(){this.assertSuccesses++;},"prototype onAssertFailure":function(){this.assertFailures++;}});Ael.test.Listener.class_("HTML",{"prototype initialize":function(element,options){this.element=element;this.options=options||{};},"prototype onRunStarted":function(){this.runnerStart=new Date();var n=Ael().global.navigator,ua=typeof n==="object"&&Ael.isString(n.userAgent)?n.userAgent:"",e=this.element;this.write('<div class="Ael_test_Listener_HTML_header">'+(this.options.title||"Test Suite")+'</div>');var bar=this.bar=document.createElement("div");bar.className="Ael_test_Listener_HTML_bar_success";e.appendChild(bar);this.write('<div class="Ael_test_Listener_HTML_userAgent">'+ua+'</div>');var list=this.list=document.createElement("ol");list.className="Ael_test_Listener_HTML_list";e.appendChild(list);},"prototype onRunFinished":function(runner){var c=runner.counter;this.write(Ael('<div class="Ael_test_Listener_HTML_footer">Tests completed in {0} milliseconds.<br/>{1} tests of {2} failed.</div>').format(new Date()-this.runnerStart,c.assertFailures,c.assertSuccesses+c.assertFailures));},"prototype onFinished":function(testcase){var clazz=Ael.test.Listener.Counter,counter=testcase.listeners.filter(function(v){return Ael.instanceOf(v,clazz)&&v.name==="testcase";})[0]||new clazz(),successes=counter.assertSuccesses,failures=counter.assertFailures,total=successes+failures,li=document.createElement("li"),li_className="Ael_test_Listener_HTML_item_success",item=document.createElement("div");item.innerHTML=Ael('{0}&nbsp;<span class="Ael_test_Listener_HTML_count">(<span class="Ael_test_Listener_HTML_failure">{1}</span>, <span class="Ael_test_Listener_HTML_success">{2}</span>, <span class="Ael_test_Listener_HTML_total">{3}</span>)</span> <span class="Ael_test_Listener_HTML_time">[{4} ms]</span>').format(Ael(testcase.name).escapeHTML(),failures,successes,total,testcase.finishTime-testcase.startTime);item.onclick=function(){if(testcase.results.val().length){var s=alist.style;s.display=s.display!=="block"?"block":"none";}};var alist=document.createElement("ol");alist.className="Ael_test_Listener_HTML_alist";testcase.results.each(function(result,i){var aitem=document.createElement("li");aitem.className="Ael_test_Listener_HTML_aitem_"+(result.ok?"success":"failure");if(!result.ok)
li_className="Ael_test_Listener_HTML_item_failure";aitem.innerHTML=result.message;alist.appendChild(aitem);});li.className=li_className;li.appendChild(item);li.appendChild(alist);this.list.appendChild(li);},"prototype onError":function(testcase,error){testcase.results.push({ok:false,message:Ael("{0}: {1} ({2}:{3})").format(error.name,error.message,error.url,error.line)});this.bar.className="Ael_test_Listener_HTML_bar_failure";},"prototype onAssertSuccessful":function(testcase,message){message=Ael.isString(message)?Ael(message).escapeHTML():"";testcase.results.push({ok:true,message:message?message:"(no message)"});},"prototype onAssertFailure":function(testcase,message,failureMessage){message=Ael.isString(message)?Ael(message).escapeHTML():"";failureMessage=Ael.isString(failureMessage)?Ael(failureMessage).escapeHTML():"";testcase.results.push({ok:false,message:(message?message+"<br>":"")+failureMessage});this.bar.className="Ael_test_Listener_HTML_bar_failure";},"prototype write":function(html){html=String(html);var d=document,e=this.element;if(Ael.isFunction(d.createRange)){var range=d.createRange();range.selectNodeContents(e);range.collapse(true);e.appendChild(range.createContextualFragment(html));}else if(Ael.isObject(e.insertAdjacentHTML)){e.insertAdjacentHTML("BeforeEnd",html);}}});Ael.test.Listener.class_("Console",{"instance count":0,"prototype initialize":function(options){this.options=options||{};},"prototype onRunStarted":function(){this.runnerStart=new Date();var n=Ael().global.navigator,ua=typeof n==="object"&&Ael.isString(n.userAgent)?n.userAgent:Ael().WSH?Ael("{0} {1}.{2} Build {3} ({4} {5})").format(ScriptEngine(),ScriptEngineMajorVersion(),ScriptEngineMinorVersion(),ScriptEngineBuildVersion(),WScript,WScript.Version):Ael().Rhino?typeof engine==="object"?Ael("Language {0} {1} implemention \"{2}\" {3}").format(engine.factory.languageName,engine.factory.languageVersion,engine.factory.engineName,engine.factory.engineVersion):"Rhino":"";this.write(Ael("{0}\n{1}\n\n").format(this.options.title||"Test Suite",ua));},"prototype onRunFinished":function(runner){var c=runner.counter;this.write(Ael("\nTests completed in {0} milliseconds.\n{1} tests of {2} failed.\n").format(new Date()-this.runnerStart,c.assertFailures,c.assertSuccesses+c.assertFailures));},"prototype onFinished":function(testcase){var self=this,clazz=Ael.test.Listener.Counter,counter=testcase.listeners.filter(function(v){return Ael.instanceOf(v,clazz)&&v.name==="testcase";})[0]||new clazz(),successes=counter.assertSuccesses,failures=counter.assertFailures,total=successes+failures,formatter=Ael("   +--- {0}. {1}\n");self.write(Ael("{0}. {1} ({2}, {3}, {4}) [{5} ms]\n").format(++self.count,testcase.name,failures,successes,total,testcase.finishTime-testcase.startTime));testcase.results.each(function(v,i){self.write(formatter.format(i+1,v));});},"prototype onError":function(testcase,error){testcase.results.push(Ael("{0}: {1} ({2}:{3})").format(error.name,error.message,error.url,error.line));},"prototype onAssertSuccessful":function(testcase,message){},"prototype onAssertFailure":function(testcase,message,failureMessage){testcase.results.push(Ael("{0}{1}").format(message?message+"\n           ":"",failureMessage));},"prototype write":Ael().Rhino?typeof engine==="object"?function(string){print(String(string));}:function(){var out=Packages.java.lang.System.out;return function(string){out.print(String(string));}}():function(string){WScript.StdOut.Write(String(string));}});Ael.test.Listener.Console.class_("TextArea",{"prototype initialize":function(element,options){element.value="";this.element=element;this.options=options||{};},"prototype write":function(string){this.element.value+=string;}});(function(props,factory,asserts){Ael(asserts).each(function(v,i,p){props["prototype "+p]=factory(v);});Ael.test.class_("Assert",props);})({"instance successful":true,"prototype initialize":function(testcase,options){this.testcase=testcase;this.options=options||{};},"prototype expect":function(options){if(!arguments.length)
return;var self=this,testcase=self.testcase,counter=testcase.listeners.filter(function(v){return Ael.instanceOf(v,Ael.test.Listener.Counter)&&v.name==="testcase";})[0]||new Ael.test.Listener.Counter(),cd=Ael({amount:-1,timeout:-1}).$apply(self.options.expect).apply(Ael.isNumber(options)?{amount:options}:options);if(!self.expectedValues){self.expectedValues=cd;testcase.conditions.push(function(){var amount=counter.assertSuccesses+counter.assertFailures,td=self.expectedValues;if(0<=td.timeout){var time=new Date()-testcase.startTime;if(td.timeout<time){testcase.clear();var fm=Ael("test timed out: limit({0})").format(td.timeout);testcase.listeners.each(function(v){v.onAssertFailure(testcase,void 0,fm);});return true;}}
if(0<=td.amount){return td.amount<=amount;}
return true;});}else{Ael(self.expectedValues).$clear().apply(cd);}},"prototype fail":function(message){var self=this;self.successful=false;self.testcase.listeners.each(function(v){v.onAssertFailure(self.testcase,void 0,message);});}},function(assert){return function(){var self=this,a=arguments,message=a[assert.index||2],r=Ael(assert.fn).call(a,assert);self.successful&=r;if(r){self.testcase.listeners.each(function(v){v.onAssertSuccessful(self.testcase,message);});}else{var s=Ael(assert.message),fm=Ael(s.format).call(a,s);self.testcase.listeners.each(function(v){v.onAssertFailure(self.testcase,message,fm);});}
return r;};},{assertTrue:{index:1,message:"assertTrue failed: ({0}) is not true.",fn:function(actual){return true===actual;}},assertFalse:{index:1,message:"assertFalse failed: ({0}) is not false.",fn:function(actual){return false===actual;}},assertNaN:{index:1,message:"assertNaN failed: ({0}) is not NaN.",fn:function(actual){return actual!==void 0&&actual!==null&&actual.constructor===Number&&isNaN(actual);}},assertEquals:{message:"assertEquals failed: expected({0}) actual({1})",fn:function(expected,actual){return expected===actual;}},assertNotEquals:{message:"assertNotEquals failed: expected({0}) actual({1})",fn:function(expected,actual){return expected!==actual;}},assertWith:{index:3,message:"assertWith failed: {0} <= {2} <= {1}",fn:function(expectedMin,expectedMax,actual){return expectedMin<=actual&&actual<=expectedMax;}},assertArrayEquals:{message:"assertArrayEquals failed: expected({0}) actual({1})",fn:function(expected,actual){if(!Ael.isArray(expected)||!Ael.isArray(actual))
return false;if(expected.length!=actual.length)
return false;for(var i=0;i<expected.length;i++){if(!Ael(expected[i]).equals(actual[i]))
return false;}
return true;}},assertPropertiesEquals:{message:"assertPropertiesEquals failed: expected({0}) actual({1})",fn:function(expected,actual){if(!Ael.isObject(expected)||!Ael.isObject(actual))
return false;var keys1=Ael(expected).keys();var keys2=Ael(actual).keys();if(keys1.length!=keys2.length)
return false;for(var i=0;i<keys1.length;i++){if(keys1[i]!==keys2[i])
return false;}
return true;}}});
