(function($){
var _2=function(){
var _3;
var _4=[];
function hoozit(o){
if(typeof o==="string"){
return "string";
}else{
if(typeof o==="boolean"){
return "boolean";
}else{
if(typeof o==="number"){
if(isNaN(o)){
return "nan";
}else{
return "number";
}
}else{
if(typeof o==="undefined"){
return "undefined";
}else{
if(o===null){
return "null";
}else{
if(o instanceof Array){
return "array";
}else{
if(o instanceof Date){
return "date";
}else{
if(o instanceof RegExp){
return "regexp";
}else{
if(typeof o==="object"){
return "object";
}else{
if(o instanceof Function){
return "function";
}
}
}
}
}
}
}
}
}
}
}
function bindCallbacks(o,_7,_8){
var _9=hoozit(o);
if(_9){
if(hoozit(_7[_9])==="function"){
return _7[_9].apply(_7,_8);
}else{
return _7[_9];
}
}
}
var _a=function(){
function useStrictEquality(b,a){
return a===b;
}
return {"string":useStrictEquality,"boolean":useStrictEquality,"number":useStrictEquality,"null":useStrictEquality,"undefined":useStrictEquality,"nan":function(b){
return isNaN(b);
},"date":function(b,a){
return hoozit(b)==="date"&&a.valueOf()===b.valueOf();
},"regexp":function(b,a){
return hoozit(b)==="regexp"&&a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;
},"function":function(){
var _12=_4[_4.length-1];
return _12!==Object&&typeof _12!=="undefined";
},"array":function(b,a){
var i;
var len;
if(!(hoozit(b)==="array")){
return false;
}
len=a.length;
if(len!==b.length){
return false;
}
for(i=0;i<len;i++){
if(!_3(a[i],b[i])){
return false;
}
}
return true;
},"object":function(b,a){
var i;
var eq=true;
var _1b=[],_1c=[];
if(a.constructor!==b.constructor){
return false;
}
_4.push(a.constructor);
for(i in a){
_1b.push(i);
if(!_3(a[i],b[i])){
eq=false;
}
}
_4.pop();
for(i in b){
_1c.push(i);
}
return eq&&_3(_1b.sort(),_1c.sort());
}};
}();
_3=function(){
var _1d=Array.prototype.slice.apply(arguments);
if(_1d.length<2){
return true;
}
return (function(a,b){
if(a===b){
return true;
}else{
if(typeof a!==typeof b||a===null||b===null||typeof a==="undefined"||typeof b==="undefined"){
return false;
}else{
return bindCallbacks(a,_a,[b,a]);
}
}
})(_1d[0],_1d[1])&&arguments.callee.apply(this,_1d.splice(1,_1d.length-1));
};
return _3;
}();
var _20=$.map(location.search.slice(1).split("&"),decodeURIComponent),_21=$.inArray("noglobals",_20),_22=_21!==-1;
if(_22){
_20.splice(_21,1);
}
var _23={stats:{all:0,bad:0},queue:[],blocking:true,filters:_20,isLocal:!!(window.location.protocol=="file:")};
$.extend(window,{test:test,module:module,expect:expect,ok:ok,equals:equals,start:start,stop:stop,reset:reset,isLocal:_23.isLocal,same:function(a,b,_26){
push(_2(a,b),a,b,_26);
},QUnit:{equiv:_2,ok:ok,done:function(_27,_28){
},log:function(_29,_2a){
}},isSet:isSet,isObj:isObj,compare:function(){
throw "compare is deprecated - use same() instead";
},compare2:function(){
throw "compare2 is deprecated - use same() instead";
},serialArray:function(){
throw "serialArray is deprecated - use jsDump.parse() instead";
},q:q,t:t,url:url,triggerEvent:triggerEvent});
$(window).load(function(){
if(!$("#header, #banner, #userAgent, #tests").length){
$("body").prepend("<h1 id=\"header\">"+document.title+"</h1>"+"<h2 id=\"banner\"></h2>"+"<h2 id=\"userAgent\"></h2>"+"<ol id=\"tests\"></ol>");
}
$("#userAgent").html(navigator.userAgent);
var _2b=$("<div class=\"testrunner-toolbar\"><label for=\"filter-pass\">Hide passed tests</label></div>").insertAfter("#userAgent");
$("<input type=\"checkbox\" id=\"filter-pass\" />").attr("disabled",true).prependTo(_2b).click(function(){
$("li.pass")[this.checked?"hide":"show"]();
});
$("<input type=\"checkbox\" id=\"filter-missing\">").attr("disabled",true).appendTo(_2b).click(function(){
$("li.fail:contains('missing test - untested code is broken code')").parent("ol").parent("li.fail")[this.checked?"hide":"show"]();
});
$("#filter-missing").after("<label for=\"filter-missing\">Hide missing tests (untested code is broken code)</label>");
runTest();
});
function synchronize(_2c){
_23.queue.push(_2c);
if(!_23.blocking){
process();
}
}
function process(){
while(_23.queue.length&&!_23.blocking){
_23.queue.shift()();
}
}
function stop(_2d){
_23.blocking=true;
if(_2d){
_23.timeout=setTimeout(function(){
QUnit.ok(false,"Test timed out");
start();
},_2d);
}
}
function start(){
setTimeout(function(){
if(_23.timeout){
clearTimeout(_23.timeout);
}
_23.blocking=false;
process();
},13);
}
function validTest(_2e){
var i=_23.filters.length,run=false;
if(!i){
return true;
}
while(i--){
var _31=_23.filters[i],not=_31.charAt(0)=="!";
if(not){
_31=_31.slice(1);
}
if(_2e.indexOf(_31)!=-1){
return !not;
}
if(not){
run=true;
}
}
return run;
}
function runTest(){
_23.blocking=false;
var _33=+new Date;
_23.fixture=document.getElementById("main").innerHTML;
_23.ajaxSettings=$.ajaxSettings;
synchronize(function(){
$("<p id=\"testresult\" class=\"result\"/>").html(["Tests completed in ",+new Date-_33," milliseconds.<br/>","<span class=\"bad\">",_23.stats.bad,"</span> tests of <span class=\"all\">",_23.stats.all,"</span> failed."].join("")).appendTo("body");
$("#banner").addClass(_23.stats.bad?"fail":"pass");
QUnit.done(_23.stats.bad,_23.stats.all);
});
}
var _34;
function saveGlobal(){
_34=[];
if(_22){
for(var key in window){
_34.push(key);
}
}
}
function checkPollution(_36){
var old=_34;
saveGlobal();
if(_34.length>old.length){
ok(false,"Introduced global variable(s): "+diff(old,_34).join(", "));
_23.expected++;
}
}
function diff(_38,_39){
return $.grep(_39,function(_3a){
return $.inArray(_3a,_38)==-1;
});
}
function test(_3b,_3c){
if(_23.currentModule){
_3b=_23.currentModule+" module: <span>"+_3b+"</span>";
}
var _3d=$.extend({setup:function(){
},teardown:function(){
}},_23.moduleLifecycle);
if(!validTest(_3b)){
return;
}
synchronize(function(){
_23.assertions=[];
_23.expected=null;
try{
if(!_34){
saveGlobal();
}
_3d.setup();
}
catch(e){
QUnit.ok(false,"Setup failed on "+_3b+": "+e.message);
}
});
synchronize(function(){
try{
_3c();
}
catch(e){
if(typeof console!="undefined"&&console.error&&console.warn){
console.error("Test "+_3b+" died, exception and test follows");
console.error(e);
console.warn(_3c.toString());
}
QUnit.ok(false,"Died on test #"+(_23.assertions.length+1)+": "+e.message);
saveGlobal();
}
});
synchronize(function(){
try{
checkPollution();
_3d.teardown();
}
catch(e){
QUnit.ok(false,"Teardown failed on "+_3b+": "+e.message);
}
});
synchronize(function(){
try{
reset();
}
catch(e){
if(typeof console!="undefined"&&console.error&&console.warn){
console.error("reset() failed, following Test "+_3b+", exception and reset fn follows");
console.error(e);
console.warn(reset.toString());
}
}
if(_23.expected&&_23.expected!=_23.assertions.length){
QUnit.ok(false,"Expected "+_23.expected+" assertions, but "+_23.assertions.length+" were run");
}
var _3e=0,bad=0;
var ol=$("<ol/>").hide();
_23.stats.all+=_23.assertions.length;
for(var i=0;i<_23.assertions.length;i++){
var _42=_23.assertions[i];
$("<li/>").addClass(_42.result?"pass":"fail").text(_42.message||"(no message)").appendTo(ol);
_42.result?_3e++:bad++;
}
_23.stats.bad+=bad;
var b=$("<strong/>").html(_3b+" <b style='color:black;'>(<b class='fail'>"+bad+"</b>, <b class='pass'>"+_3e+"</b>, "+_23.assertions.length+")</b>").click(function(){
$(this).next().toggle();
}).dblclick(function(_44){
var _45=$(_44.target).filter("strong").clone();
if(_45.length){
_45.children().remove();
location.href=location.href.match(/^(.+?)(\?.*)?$/)[1]+"?"+encodeURIComponent($.trim(_45.text()));
}
});
$("<li/>").addClass(bad?"fail":"pass").append(b).append(ol).appendTo("#tests");
if(bad){
$("#filter-pass").attr("disabled",null);
$("#filter-missing").attr("disabled",null);
}
});
}
function module(_46,_47){
_23.currentModule=_46;
_23.moduleLifecycle=_47;
}
function expect(_48){
_23.expected=_48;
}
function reset(){
$("#main").html(_23.fixture);
$.event.global={};
$.ajaxSettings=$.extend({},_23.ajaxSettings);
}
function ok(a,msg){
QUnit.log(a,msg);
_23.assertions.push({result:!!a,message:msg});
}
function isSet(a,b,msg){
function serialArray(a){
var r=[];
if(a&&a.length){
for(var i=0;i<a.length;i++){
var str=a[i].nodeName;
if(str){
str=str.toLowerCase();
if(a[i].id){
str+="#"+a[i].id;
}
}else{
str=a[i];
}
r.push(str);
}
}
return "[ "+r.join(", ")+" ]";
}
var ret=true;
if(a&&b&&a.length!=undefined&&a.length==b.length){
for(var i=0;i<a.length;i++){
if(a[i]!=b[i]){
ret=false;
}
}
}else{
ret=false;
}
QUnit.ok(ret,!ret?(msg+" expected: "+serialArray(b)+" result: "+serialArray(a)):msg);
}
function isObj(a,b,msg){
var ret=true;
if(a&&b){
for(var i in a){
if(a[i]!=b[i]){
ret=false;
}
}
for(i in b){
if(a[i]!=b[i]){
ret=false;
}
}
}else{
ret=false;
}
QUnit.ok(ret,msg);
}
function q(){
var r=[];
for(var i=0;i<arguments.length;i++){
r.push(document.getElementById(arguments[i]));
}
return r;
}
function t(a,b,c){
var f=$(b);
var s="";
for(var i=0;i<f.length;i++){
s+=(s&&",")+"\""+f[i].id+"\"";
}
isSet(f,q.apply(q,c),a+" ("+b+")");
}
function url(_61){
return _61+(/\?/.test(_61)?"&":"?")+new Date().getTime()+""+parseInt(Math.random()*100000);
}
function equals(_62,_63,_64){
push(_63==_62,_62,_63,_64);
}
function push(_65,_66,_67,_68){
_68=_68||(_65?"okay":"failed");
QUnit.ok(_65,_65?_68+": "+_67:_68+", expected: "+jsDump.parse(_67)+" result: "+jsDump.parse(_66));
}
function triggerEvent(_69,_6a,_6b){
if($.browser.mozilla||$.browser.opera){
_6b=document.createEvent("MouseEvents");
_6b.initMouseEvent(_6a,true,true,_69.ownerDocument.defaultView,0,0,0,0,0,false,false,false,false,0,null);
_69.dispatchEvent(_6b);
}else{
if($.browser.msie){
_69.fireEvent("on"+_6a);
}
}
}
})(jQuery);
(function(){
function quote(str){
return "\""+str.toString().replace(/"/g,"\\\"")+"\"";
}
function literal(o){
return o+"";
}
function join(pre,arr,_70){
var s=_72.separator(),_73=_72.indent();
inner=_72.indent(1);
if(arr.join){
arr=arr.join(","+s+inner);
}
if(!arr){
return pre+_70;
}
return [pre,inner+arr,_73+_70].join(s);
}
function array(arr){
var i=arr.length,ret=Array(i);
this.up();
while(i--){
ret[i]=this.parse(arr[i]);
}
this.down();
return join("[",ret,"]");
}
var _77=/^function (\w+)/;
var _72=window.jsDump={parse:function(obj,_79){
var _7a=this.parsers[_79||this.typeOf(obj)];
_79=typeof _7a;
return _79=="function"?_7a.call(this,obj):_79=="string"?_7a:this.parsers.error;
},typeOf:function(obj){
var _7c=typeof obj,f="function";
return _7c!="object"&&_7c!=f?_7c:!obj?"null":obj.exec?"regexp":obj.getHours?"date":obj.scrollBy?"window":obj.nodeName=="#document"?"document":obj.nodeName?"node":obj.item?"nodelist":obj.callee?"arguments":obj.call||obj.constructor!=Array&&(obj+"").indexOf(f)!=-1?f:"length" in obj?"array":_7c;
},separator:function(){
return this.multiline?this.HTML?"<br />":"\n":this.HTML?"&nbsp;":" ";
},indent:function(_7e){
if(!this.multiline){
return "";
}
var chr=this.indentChar;
if(this.HTML){
chr=chr.replace(/\t/g,"   ").replace(/ /g,"&nbsp;");
}
return Array(this._depth_+(_7e||0)).join(chr);
},up:function(a){
this._depth_+=a||1;
},down:function(a){
this._depth_-=a||1;
},setParser:function(_82,_83){
this.parsers[_82]=_83;
},quote:quote,literal:literal,join:join,_depth_:1,parsers:{window:"[Window]",document:"[Document]",error:"[ERROR]",unknown:"[Unknown]","null":"null",undefined:"undefined","function":function(fn){
var ret="function",_86="name" in fn?fn.name:(_77.exec(fn)||[])[1];
if(_86){
ret+=" "+_86;
}
ret+="(";
ret=[ret,this.parse(fn,"functionArgs"),"){"].join("");
return join(ret,this.parse(fn,"functionCode"),"}");
},array:array,nodelist:array,arguments:array,object:function(map){
var ret=[];
this.up();
for(var key in map){
ret.push(this.parse(key,"key")+": "+this.parse(map[key]));
}
this.down();
return join("{",ret,"}");
},node:function(_8a){
var _8b=this.HTML?"&lt;":"<",_8c=this.HTML?"&gt;":">";
var tag=_8a.nodeName.toLowerCase(),ret=_8b+tag;
for(var a in this.DOMAttrs){
var val=_8a[this.DOMAttrs[a]];
if(val){
ret+=" "+a+"="+this.parse(val,"attribute");
}
}
return ret+_8c+_8b+"/"+tag+_8c;
},functionArgs:function(fn){
var l=fn.length;
if(!l){
return "";
}
var _93=Array(l);
while(l--){
_93[l]=String.fromCharCode(97+l);
}
return " "+_93.join(", ")+" ";
},key:quote,functionCode:"[code]",attribute:quote,string:quote,date:quote,regexp:literal,number:literal,"boolean":literal},DOMAttrs:{id:"id",name:"name","class":"className"},HTML:false,indentChar:"   ",multiline:true};
})();


