(function(){var isCommonJS=typeof window=="undefined"&&typeof exports=="object";var jasmine={};if(isCommonJS)exports.jasmine=jasmine;jasmine.unimplementedMethod_=function(){throw new Error("unimplemented method");};jasmine.undefined=jasmine.___undefined___;jasmine.VERBOSE=false;jasmine.DEFAULT_UPDATE_INTERVAL=250;jasmine.MAX_PRETTY_PRINT_DEPTH=40;jasmine.DEFAULT_TIMEOUT_INTERVAL=5000;jasmine.CATCH_EXCEPTIONS=true;jasmine.getGlobal=function(){function getGlobal(){return this;}
return getGlobal();};jasmine.bindOriginal_=function(base,name){var original=base[name];if(original.apply){return function(){return original.apply(base,arguments);};}else{ return jasmine.getGlobal()[name];}};jasmine.setTimeout=jasmine.bindOriginal_(jasmine.getGlobal(),'setTimeout');jasmine.clearTimeout=jasmine.bindOriginal_(jasmine.getGlobal(),'clearTimeout');jasmine.setInterval=jasmine.bindOriginal_(jasmine.getGlobal(),'setInterval');jasmine.clearInterval=jasmine.bindOriginal_(jasmine.getGlobal(),'clearInterval');jasmine.MessageResult=function(values){this.type='log';this.values=values;this.trace=new Error();};jasmine.MessageResult.prototype.toString=function(){var text="";for(var i=0;i<this.values.length;i++){if(i>0)text+=" ";if(jasmine.isString_(this.values[i])){text+=this.values[i];}else{text+=jasmine.pp(this.values[i]);}}
return text;};jasmine.ExpectationResult=function(params){this.type='expect';this.matcherName=params.matcherName;this.passed_=params.passed;this.expected=params.expected;this.actual=params.actual;this.message=this.passed_?'Passed.':params.message;var trace=(params.trace||new Error(this.message));this.trace=this.passed_?'':trace;};jasmine.ExpectationResult.prototype.toString=function(){return this.message;};jasmine.ExpectationResult.prototype.passed=function(){return this.passed_;};jasmine.getEnv=function(){var env=jasmine.currentEnv_=jasmine.currentEnv_||new jasmine.Env();return env;};jasmine.isArray_=function(value){return jasmine.isA_("Array",value);};jasmine.isString_=function(value){return jasmine.isA_("String",value);};jasmine.isNumber_=function(value){return jasmine.isA_("Number",value);};jasmine.isA_=function(typeName,value){return Object.prototype.toString.apply(value)==='[object '+typeName+']';};jasmine.pp=function(value){var stringPrettyPrinter=new jasmine.StringPrettyPrinter();stringPrettyPrinter.format(value);return stringPrettyPrinter.string;};jasmine.isDomNode=function(obj){return obj.nodeType>0;};jasmine.any=function(clazz){return new jasmine.Matchers.Any(clazz);};jasmine.objectContaining=function(sample){return new jasmine.Matchers.ObjectContaining(sample);};jasmine.Spy=function(name){this.identity=name||'unknown';this.isSpy=true;this.plan=function(){};this.mostRecentCall={};this.argsForCall=[];this.calls=[];};jasmine.Spy.prototype.andCallThrough=function(){this.plan=this.originalValue;return this;};jasmine.Spy.prototype.andReturn=function(value){this.plan=function(){return value;};return this;};jasmine.Spy.prototype.andThrow=function(exceptionMsg){this.plan=function(){throw exceptionMsg;};return this;};jasmine.Spy.prototype.andCallFake=function(fakeFunc){this.plan=fakeFunc;return this;};jasmine.Spy.prototype.reset=function(){this.wasCalled=false;this.callCount=0;this.argsForCall=[];this.calls=[];this.mostRecentCall={};};jasmine.createSpy=function(name){var spyObj=function(){spyObj.wasCalled=true;spyObj.callCount++;var args=jasmine.util.argsToArray(arguments);spyObj.mostRecentCall.object=this;spyObj.mostRecentCall.args=args;spyObj.argsForCall.push(args);spyObj.calls.push({object:this,args:args});return spyObj.plan.apply(this,arguments);};var spy=new jasmine.Spy(name);for(var prop in spy){spyObj[prop]=spy[prop];}
spyObj.reset();return spyObj;};jasmine.isSpy=function(putativeSpy){return putativeSpy&&putativeSpy.isSpy;};jasmine.createSpyObj=function(baseName,methodNames){if(!jasmine.isArray_(methodNames)||methodNames.length===0){throw new Error('createSpyObj requires a non-empty array of method names to create spies for');}
var obj={};for(var i=0;i<methodNames.length;i++){obj[methodNames[i]]=jasmine.createSpy(baseName+'.'+methodNames[i]);}
return obj;};jasmine.log=function(){var spec=jasmine.getEnv().currentSpec;spec.log.apply(spec,arguments);};var spyOn=function(obj,methodName){return jasmine.getEnv().currentSpec.spyOn(obj,methodName);};if(isCommonJS)exports.spyOn=spyOn;var it=function(desc,func){return jasmine.getEnv().it(desc,func);};if(isCommonJS)exports.it=it;var xit=function(desc,func){return jasmine.getEnv().xit(desc,func);};if(isCommonJS)exports.xit=xit;var expect=function(actual){return jasmine.getEnv().currentSpec.expect(actual);};if(isCommonJS)exports.expect=expect;var runs=function(func){jasmine.getEnv().currentSpec.runs(func);};if(isCommonJS)exports.runs=runs;var waits=function(timeout){jasmine.getEnv().currentSpec.waits(timeout);};if(isCommonJS)exports.waits=waits;var waitsFor=function(latchFunction,optional_timeoutMessage,optional_timeout){jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec,arguments);};if(isCommonJS)exports.waitsFor=waitsFor;var beforeEach=function(beforeEachFunction){jasmine.getEnv().beforeEach(beforeEachFunction);};if(isCommonJS)exports.beforeEach=beforeEach;var afterEach=function(afterEachFunction){jasmine.getEnv().afterEach(afterEachFunction);};if(isCommonJS)exports.afterEach=afterEach;var describe=function(description,specDefinitions){return jasmine.getEnv().describe(description,specDefinitions);};if(isCommonJS)exports.describe=describe;var xdescribe=function(description,specDefinitions){return jasmine.getEnv().xdescribe(description,specDefinitions);};if(isCommonJS)exports.xdescribe=xdescribe;jasmine.XmlHttpRequest=(typeof XMLHttpRequest=="undefined")?function(){function tryIt(f){try{return f();}catch(e){}
return null;}
var xhr=tryIt(function(){return new ActiveXObject("Msxml2.XMLHTTP.6.0");})||tryIt(function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0");})||tryIt(function(){return new ActiveXObject("Msxml2.XMLHTTP");})||tryIt(function(){return new ActiveXObject("Microsoft.XMLHTTP");});if(!xhr)throw new Error("This browser does not support XMLHttpRequest.");return xhr;}:XMLHttpRequest;jasmine.util={};jasmine.util.inherit=function(childClass,parentClass){var subclass=function(){};subclass.prototype=parentClass.prototype;childClass.prototype=new subclass();};jasmine.util.formatException=function(e){var lineNumber;if(e.line){lineNumber=e.line;}
else if(e.lineNumber){lineNumber=e.lineNumber;}
var file;if(e.sourceURL){file=e.sourceURL;}
else if(e.fileName){file=e.fileName;}
var message=(e.name&&e.message)?(e.name+': '+e.message):e.toString();if(file&&lineNumber){message+=' in '+file+' (line '+lineNumber+')';}
return message;};jasmine.util.htmlEscape=function(str){if(!str)return str;return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');};jasmine.util.argsToArray=function(args){var arrayOfArgs=[];for(var i=0;i<args.length;i++)arrayOfArgs.push(args[i]);return arrayOfArgs;};jasmine.util.extend=function(destination,source){for(var property in source)destination[property]=source[property];return destination;};jasmine.Env=function(){this.currentSpec=null;this.currentSuite=null;this.currentRunner_=new jasmine.Runner(this);this.reporter=new jasmine.MultiReporter();this.updateInterval=jasmine.DEFAULT_UPDATE_INTERVAL;this.defaultTimeoutInterval=jasmine.DEFAULT_TIMEOUT_INTERVAL;this.lastUpdate=0;this.specFilter=function(){return true;};this.nextSpecId_=0;this.nextSuiteId_=0;this.equalityTesters_=[]; this.matchersClass=function(){jasmine.Matchers.apply(this,arguments);};jasmine.util.inherit(this.matchersClass,jasmine.Matchers);jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype,this.matchersClass);};jasmine.Env.prototype.setTimeout=jasmine.setTimeout;jasmine.Env.prototype.clearTimeout=jasmine.clearTimeout;jasmine.Env.prototype.setInterval=jasmine.setInterval;jasmine.Env.prototype.clearInterval=jasmine.clearInterval;jasmine.Env.prototype.version=function(){if(jasmine.version_){return jasmine.version_;}else{throw new Error('Version not set');}};jasmine.Env.prototype.versionString=function(){if(!jasmine.version_){return"version unknown";}
var version=this.version();var versionString=version.major+"."+version.minor+"."+version.build;if(version.release_candidate){versionString+=".rc"+version.release_candidate;}
versionString+=" revision "+version.revision;return versionString;};jasmine.Env.prototype.nextSpecId=function(){return this.nextSpecId_++;};jasmine.Env.prototype.nextSuiteId=function(){return this.nextSuiteId_++;};jasmine.Env.prototype.addReporter=function(reporter){this.reporter.addReporter(reporter);};jasmine.Env.prototype.execute=function(){this.currentRunner_.execute();};jasmine.Env.prototype.describe=function(description,specDefinitions){var suite=new jasmine.Suite(this,description,specDefinitions,this.currentSuite);var parentSuite=this.currentSuite;if(parentSuite){parentSuite.add(suite);}else{this.currentRunner_.add(suite);}
this.currentSuite=suite;var declarationError=null;try{specDefinitions.call(suite);}catch(e){declarationError=e;}
if(declarationError){this.it("encountered a declaration exception",function(){throw declarationError;});}
this.currentSuite=parentSuite;return suite;};jasmine.Env.prototype.beforeEach=function(beforeEachFunction){if(this.currentSuite){this.currentSuite.beforeEach(beforeEachFunction);}else{this.currentRunner_.beforeEach(beforeEachFunction);}};jasmine.Env.prototype.currentRunner=function(){return this.currentRunner_;};jasmine.Env.prototype.afterEach=function(afterEachFunction){if(this.currentSuite){this.currentSuite.afterEach(afterEachFunction);}else{this.currentRunner_.afterEach(afterEachFunction);}};jasmine.Env.prototype.xdescribe=function(desc,specDefinitions){return{execute:function(){}};};jasmine.Env.prototype.it=function(description,func){var spec=new jasmine.Spec(this,this.currentSuite,description);this.currentSuite.add(spec);this.currentSpec=spec;if(func){spec.runs(func);}
return spec;};jasmine.Env.prototype.xit=function(desc,func){return{id:this.nextSpecId(),runs:function(){}};};jasmine.Env.prototype.compareRegExps_=function(a,b,mismatchKeys,mismatchValues){if(a.source!=b.source)
mismatchValues.push("expected pattern /"+b.source+"/ is not equal to the pattern /"+a.source+"/");if(a.ignoreCase!=b.ignoreCase)
mismatchValues.push("expected modifier i was"+(b.ignoreCase?" ":" not ")+"set and does not equal the origin modifier");if(a.global!=b.global)
mismatchValues.push("expected modifier g was"+(b.global?" ":" not ")+"set and does not equal the origin modifier");if(a.multiline!=b.multiline)
mismatchValues.push("expected modifier m was"+(b.multiline?" ":" not ")+"set and does not equal the origin modifier");if(a.sticky!=b.sticky)
mismatchValues.push("expected modifier y was"+(b.sticky?" ":" not ")+"set and does not equal the origin modifier");return(mismatchValues.length===0);};jasmine.Env.prototype.compareObjects_=function(a,b,mismatchKeys,mismatchValues){if(a.__Jasmine_been_here_before__===b&&b.__Jasmine_been_here_before__===a){return true;}
a.__Jasmine_been_here_before__=b;b.__Jasmine_been_here_before__=a;var hasKey=function(obj,keyName){return obj!==null&&obj[keyName]!==jasmine.undefined;};for(var property in b){if(!hasKey(a,property)&&hasKey(b,property)){mismatchKeys.push("expected has key '"+property+"', but missing from actual.");}}
for(property in a){if(!hasKey(b,property)&&hasKey(a,property)){mismatchKeys.push("expected missing key '"+property+"', but present in actual.");}}
for(property in b){if(property=='__Jasmine_been_here_before__')continue;if(!this.equals_(a[property],b[property],mismatchKeys,mismatchValues)){mismatchValues.push("'"+property+"' was '"+(b[property]?jasmine.util.htmlEscape(b[property].toString()):b[property])+"' in expected, but was '"+(a[property]?jasmine.util.htmlEscape(a[property].toString()):a[property])+"' in actual.");}}
if(jasmine.isArray_(a)&&jasmine.isArray_(b)&&a.length!=b.length){mismatchValues.push("arrays were not the same length");}
delete a.__Jasmine_been_here_before__;delete b.__Jasmine_been_here_before__;return(mismatchKeys.length===0&&mismatchValues.length===0);};jasmine.Env.prototype.equals_=function(a,b,mismatchKeys,mismatchValues){mismatchKeys=mismatchKeys||[];mismatchValues=mismatchValues||[];for(var i=0;i<this.equalityTesters_.length;i++){var equalityTester=this.equalityTesters_[i];var result=equalityTester(a,b,this,mismatchKeys,mismatchValues);if(result!==jasmine.undefined)return result;}
if(a===b)return true;if(a===jasmine.undefined||a===null||b===jasmine.undefined||b===null){return(a==jasmine.undefined&&b==jasmine.undefined);}
if(jasmine.isDomNode(a)&&jasmine.isDomNode(b)){return a===b;}
if(a instanceof Date&&b instanceof Date){return a.getTime()==b.getTime();}
if(a.jasmineMatches){return a.jasmineMatches(b);}
if(b.jasmineMatches){return b.jasmineMatches(a);}
if(a instanceof jasmine.Matchers.ObjectContaining){return a.matches(b);}
if(b instanceof jasmine.Matchers.ObjectContaining){return b.matches(a);}
if(jasmine.isString_(a)&&jasmine.isString_(b)){return(a==b);}
if(jasmine.isNumber_(a)&&jasmine.isNumber_(b)){return(a==b);}
if(a instanceof RegExp&&b instanceof RegExp){return this.compareRegExps_(a,b,mismatchKeys,mismatchValues);}
if(typeof a==="object"&&typeof b==="object"){return this.compareObjects_(a,b,mismatchKeys,mismatchValues);} 
return(a===b);};jasmine.Env.prototype.contains_=function(haystack,needle){if(jasmine.isArray_(haystack)){for(var i=0;i<haystack.length;i++){if(this.equals_(haystack[i],needle))return true;}
return false;}
return haystack.indexOf(needle)>=0;};jasmine.Env.prototype.addEqualityTester=function(equalityTester){this.equalityTesters_.push(equalityTester);};jasmine.Reporter=function(){};jasmine.Reporter.prototype.reportRunnerStarting=function(runner){};jasmine.Reporter.prototype.reportRunnerResults=function(runner){};jasmine.Reporter.prototype.reportSuiteResults=function(suite){};jasmine.Reporter.prototype.reportSpecStarting=function(spec){};jasmine.Reporter.prototype.reportSpecResults=function(spec){};jasmine.Reporter.prototype.log=function(str){};jasmine.Block=function(env,func,spec){this.env=env;this.func=func;this.spec=spec;};jasmine.Block.prototype.execute=function(onComplete){if(!jasmine.CATCH_EXCEPTIONS){this.func.apply(this.spec);}
else{try{this.func.apply(this.spec);}catch(e){this.spec.fail(e);}}
onComplete();};jasmine.JsApiReporter=function(){this.started=false;this.finished=false;this.suites_=[];this.results_={};};jasmine.JsApiReporter.prototype.reportRunnerStarting=function(runner){this.started=true;var suites=runner.topLevelSuites();for(var i=0;i<suites.length;i++){var suite=suites[i];this.suites_.push(this.summarize_(suite));}};jasmine.JsApiReporter.prototype.suites=function(){return this.suites_;};jasmine.JsApiReporter.prototype.summarize_=function(suiteOrSpec){var isSuite=suiteOrSpec instanceof jasmine.Suite;var summary={id:suiteOrSpec.id,name:suiteOrSpec.description,type:isSuite?'suite':'spec',children:[]};if(isSuite){var children=suiteOrSpec.children();for(var i=0;i<children.length;i++){summary.children.push(this.summarize_(children[i]));}}
return summary;};jasmine.JsApiReporter.prototype.results=function(){return this.results_;};jasmine.JsApiReporter.prototype.resultsForSpec=function(specId){return this.results_[specId];};jasmine.JsApiReporter.prototype.reportRunnerResults=function(runner){this.finished=true;};jasmine.JsApiReporter.prototype.reportSuiteResults=function(suite){};jasmine.JsApiReporter.prototype.reportSpecResults=function(spec){this.results_[spec.id]={messages:spec.results().getItems(),result:spec.results().failedCount>0?"failed":"passed"};};jasmine.JsApiReporter.prototype.log=function(str){};jasmine.JsApiReporter.prototype.resultsForSpecs=function(specIds){var results={};for(var i=0;i<specIds.length;i++){var specId=specIds[i];results[specId]=this.summarizeResult_(this.results_[specId]);}
return results;};jasmine.JsApiReporter.prototype.summarizeResult_=function(result){var summaryMessages=[];var messagesLength=result.messages.length;for(var messageIndex=0;messageIndex<messagesLength;messageIndex++){var resultMessage=result.messages[messageIndex];summaryMessages.push({text:resultMessage.type=='log'?resultMessage.toString():jasmine.undefined,passed:resultMessage.passed?resultMessage.passed():true,type:resultMessage.type,message:resultMessage.message,trace:{stack:resultMessage.passed&&!resultMessage.passed()?resultMessage.trace.stack:jasmine.undefined}});}
return{result:result.result,messages:summaryMessages};};jasmine.Matchers=function(env,actual,spec,opt_isNot){this.env=env;this.actual=actual;this.spec=spec;this.isNot=opt_isNot||false;this.reportWasCalled_=false;};jasmine.Matchers.pp=function(str){throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");};jasmine.Matchers.prototype.report=function(result,failing_message,details){throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");};jasmine.Matchers.wrapInto_=function(prototype,matchersClass){for(var methodName in prototype){if(methodName=='report')continue;var orig=prototype[methodName];matchersClass.prototype[methodName]=jasmine.Matchers.matcherFn_(methodName,orig);}};jasmine.Matchers.matcherFn_=function(matcherName,matcherFunction){return function(){var matcherArgs=jasmine.util.argsToArray(arguments);var result=matcherFunction.apply(this,arguments);if(this.isNot){result=!result;}
if(this.reportWasCalled_)return result;var message;if(!result){if(this.message){message=this.message.apply(this,arguments);if(jasmine.isArray_(message)){message=message[this.isNot?1:0];}}else{var englishyPredicate=matcherName.replace(/[A-Z]/g,function(s){return' '+s.toLowerCase();});message="Expected "+jasmine.pp(this.actual)+(this.isNot?" not ":" ")+englishyPredicate;if(matcherArgs.length>0){for(var i=0;i<matcherArgs.length;i++){if(i>0)message+=",";message+=" "+jasmine.pp(matcherArgs[i]);}}
message+=".";}}
var expectationResult=new jasmine.ExpectationResult({matcherName:matcherName,passed:result,expected:matcherArgs.length>1?matcherArgs:matcherArgs[0],actual:this.actual,message:message});this.spec.addMatcherResult(expectationResult);return jasmine.undefined;};};jasmine.Matchers.prototype.toBe=function(expected){return this.actual===expected;};jasmine.Matchers.prototype.toNotBe=function(expected){return this.actual!==expected;};jasmine.Matchers.prototype.toEqual=function(expected){return this.env.equals_(this.actual,expected);};jasmine.Matchers.prototype.toNotEqual=function(expected){return!this.env.equals_(this.actual,expected);};jasmine.Matchers.prototype.toMatch=function(expected){return new RegExp(expected).test(this.actual);};jasmine.Matchers.prototype.toNotMatch=function(expected){return!(new RegExp(expected).test(this.actual));};jasmine.Matchers.prototype.toBeDefined=function(){return(this.actual!==jasmine.undefined);};jasmine.Matchers.prototype.toBeUndefined=function(){return(this.actual===jasmine.undefined);};jasmine.Matchers.prototype.toBeNull=function(){return(this.actual===null);};jasmine.Matchers.prototype.toBeNaN=function(){this.message=function(){return["Expected "+jasmine.pp(this.actual)+" to be NaN."];};return(this.actual!==this.actual);};jasmine.Matchers.prototype.toBeTruthy=function(){return!!this.actual;};jasmine.Matchers.prototype.toBeFalsy=function(){return!this.actual;};jasmine.Matchers.prototype.toHaveBeenCalled=function(){if(arguments.length>0){throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');}
if(!jasmine.isSpy(this.actual)){throw new Error('Expected a spy, but got '+jasmine.pp(this.actual)+'.');}
this.message=function(){return["Expected spy "+this.actual.identity+" to have been called.","Expected spy "+this.actual.identity+" not to have been called."];};return this.actual.wasCalled;};jasmine.Matchers.prototype.wasCalled=jasmine.Matchers.prototype.toHaveBeenCalled;jasmine.Matchers.prototype.wasNotCalled=function(){if(arguments.length>0){throw new Error('wasNotCalled does not take arguments');}
if(!jasmine.isSpy(this.actual)){throw new Error('Expected a spy, but got '+jasmine.pp(this.actual)+'.');}
this.message=function(){return["Expected spy "+this.actual.identity+" to not have been called.","Expected spy "+this.actual.identity+" to have been called."];};return!this.actual.wasCalled;};jasmine.Matchers.prototype.toHaveBeenCalledWith=function(){var expectedArgs=jasmine.util.argsToArray(arguments);if(!jasmine.isSpy(this.actual)){throw new Error('Expected a spy, but got '+jasmine.pp(this.actual)+'.');}
this.message=function(){var invertedMessage="Expected spy "+this.actual.identity+" not to have been called with "+jasmine.pp(expectedArgs)+" but it was.";var positiveMessage="";if(this.actual.callCount===0){positiveMessage="Expected spy "+this.actual.identity+" to have been called with "+jasmine.pp(expectedArgs)+" but it was never called.";}else{positiveMessage="Expected spy "+this.actual.identity+" to have been called with "+jasmine.pp(expectedArgs)+" but actual calls were "+jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g,'')}
return[positiveMessage,invertedMessage];};return this.env.contains_(this.actual.argsForCall,expectedArgs);};jasmine.Matchers.prototype.wasCalledWith=jasmine.Matchers.prototype.toHaveBeenCalledWith;jasmine.Matchers.prototype.wasNotCalledWith=function(){var expectedArgs=jasmine.util.argsToArray(arguments);if(!jasmine.isSpy(this.actual)){throw new Error('Expected a spy, but got '+jasmine.pp(this.actual)+'.');}
this.message=function(){return["Expected spy not to have been called with "+jasmine.pp(expectedArgs)+" but it was","Expected spy to have been called with "+jasmine.pp(expectedArgs)+" but it was"];};return!this.env.contains_(this.actual.argsForCall,expectedArgs);};jasmine.Matchers.prototype.toContain=function(expected){return this.env.contains_(this.actual,expected);};jasmine.Matchers.prototype.toNotContain=function(expected){return!this.env.contains_(this.actual,expected);};jasmine.Matchers.prototype.toBeLessThan=function(expected){return this.actual<expected;};jasmine.Matchers.prototype.toBeGreaterThan=function(expected){return this.actual>expected;};jasmine.Matchers.prototype.toBeCloseTo=function(expected,precision){if(!(precision===0)){precision=precision||2;}
return Math.abs(expected-this.actual)<(Math.pow(10,-precision)/2);};jasmine.Matchers.prototype.toThrow=function(expected){var result=false;var exception;if(typeof this.actual!='function'){throw new Error('Actual is not a function');}
try{this.actual();}catch(e){exception=e;}
if(exception){result=(expected===jasmine.undefined||this.env.equals_(exception.message||exception,expected.message||expected));}
var not=this.isNot?"not ":"";this.message=function(){if(exception&&(expected===jasmine.undefined||!this.env.equals_(exception.message||exception,expected.message||expected))){return["Expected function "+not+"to throw",expected?expected.message||expected:"an exception",", but it threw",exception.message||exception].join(' ');}else{return"Expected function to throw an exception.";}};return result;};jasmine.Matchers.Any=function(expectedClass){this.expectedClass=expectedClass;};jasmine.Matchers.Any.prototype.jasmineMatches=function(other){if(this.expectedClass==String){return typeof other=='string'||other instanceof String;}
if(this.expectedClass==Number){return typeof other=='number'||other instanceof Number;}
if(this.expectedClass==Function){return typeof other=='function'||other instanceof Function;}
if(this.expectedClass==Object){return typeof other=='object';}
return other instanceof this.expectedClass;};jasmine.Matchers.Any.prototype.jasmineToString=function(){return'<jasmine.any('+this.expectedClass+')>';};jasmine.Matchers.ObjectContaining=function(sample){this.sample=sample;};jasmine.Matchers.ObjectContaining.prototype.jasmineMatches=function(other,mismatchKeys,mismatchValues){mismatchKeys=mismatchKeys||[];mismatchValues=mismatchValues||[];var env=jasmine.getEnv();var hasKey=function(obj,keyName){return obj!=null&&obj[keyName]!==jasmine.undefined;};for(var property in this.sample){if(!hasKey(other,property)&&hasKey(this.sample,property)){mismatchKeys.push("expected has key '"+property+"', but missing from actual.");}
else if(!env.equals_(this.sample[property],other[property],mismatchKeys,mismatchValues)){mismatchValues.push("'"+property+"' was '"+(other[property]?jasmine.util.htmlEscape(other[property].toString()):other[property])+"' in expected, but was '"+(this.sample[property]?jasmine.util.htmlEscape(this.sample[property].toString()):this.sample[property])+"' in actual.");}}
return(mismatchKeys.length===0&&mismatchValues.length===0);};jasmine.Matchers.ObjectContaining.prototype.jasmineToString=function(){return"<jasmine.objectContaining("+jasmine.pp(this.sample)+")>";};jasmine.FakeTimer=function(){this.reset();var self=this;self.setTimeout=function(funcToCall,millis){self.timeoutsMade++;self.scheduleFunction(self.timeoutsMade,funcToCall,millis,false);return self.timeoutsMade;};self.setInterval=function(funcToCall,millis){self.timeoutsMade++;self.scheduleFunction(self.timeoutsMade,funcToCall,millis,true);return self.timeoutsMade;};self.clearTimeout=function(timeoutKey){self.scheduledFunctions[timeoutKey]=jasmine.undefined;};self.clearInterval=function(timeoutKey){self.scheduledFunctions[timeoutKey]=jasmine.undefined;};};jasmine.FakeTimer.prototype.reset=function(){this.timeoutsMade=0;this.scheduledFunctions={};this.nowMillis=0;};jasmine.FakeTimer.prototype.tick=function(millis){var oldMillis=this.nowMillis;var newMillis=oldMillis+millis;this.runFunctionsWithinRange(oldMillis,newMillis);this.nowMillis=newMillis;};jasmine.FakeTimer.prototype.runFunctionsWithinRange=function(oldMillis,nowMillis){var scheduledFunc;var funcsToRun=[];for(var timeoutKey in this.scheduledFunctions){scheduledFunc=this.scheduledFunctions[timeoutKey];if(scheduledFunc!=jasmine.undefined&&scheduledFunc.runAtMillis>=oldMillis&&scheduledFunc.runAtMillis<=nowMillis){funcsToRun.push(scheduledFunc);this.scheduledFunctions[timeoutKey]=jasmine.undefined;}}
if(funcsToRun.length>0){funcsToRun.sort(function(a,b){return a.runAtMillis-b.runAtMillis;});for(var i=0;i<funcsToRun.length;++i){try{var funcToRun=funcsToRun[i];this.nowMillis=funcToRun.runAtMillis;funcToRun.funcToCall();if(funcToRun.recurring){this.scheduleFunction(funcToRun.timeoutKey,funcToRun.funcToCall,funcToRun.millis,true);}}catch(e){}}
this.runFunctionsWithinRange(oldMillis,nowMillis);}};jasmine.FakeTimer.prototype.scheduleFunction=function(timeoutKey,funcToCall,millis,recurring){this.scheduledFunctions[timeoutKey]={runAtMillis:this.nowMillis+millis,funcToCall:funcToCall,recurring:recurring,timeoutKey:timeoutKey,millis:millis};};jasmine.Clock={defaultFakeTimer:new jasmine.FakeTimer(),reset:function(){jasmine.Clock.assertInstalled();jasmine.Clock.defaultFakeTimer.reset();},tick:function(millis){jasmine.Clock.assertInstalled();jasmine.Clock.defaultFakeTimer.tick(millis);},runFunctionsWithinRange:function(oldMillis,nowMillis){jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis,nowMillis);},scheduleFunction:function(timeoutKey,funcToCall,millis,recurring){jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey,funcToCall,millis,recurring);},useMock:function(){if(!jasmine.Clock.isInstalled()){var spec=jasmine.getEnv().currentSpec;spec.after(jasmine.Clock.uninstallMock);jasmine.Clock.installMock();}},installMock:function(){jasmine.Clock.installed=jasmine.Clock.defaultFakeTimer;},uninstallMock:function(){jasmine.Clock.assertInstalled();jasmine.Clock.installed=jasmine.Clock.real;},real:{setTimeout:jasmine.getGlobal().setTimeout,clearTimeout:jasmine.getGlobal().clearTimeout,setInterval:jasmine.getGlobal().setInterval,clearInterval:jasmine.getGlobal().clearInterval},assertInstalled:function(){if(!jasmine.Clock.isInstalled()){throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");}},isInstalled:function(){return jasmine.Clock.installed==jasmine.Clock.defaultFakeTimer;},installed:null};jasmine.Clock.installed=jasmine.Clock.real;jasmine.getGlobal().setTimeout=function(funcToCall,millis){if(jasmine.Clock.installed.setTimeout.apply){return jasmine.Clock.installed.setTimeout.apply(this,arguments);}else{return jasmine.Clock.installed.setTimeout(funcToCall,millis);}};jasmine.getGlobal().setInterval=function(funcToCall,millis){if(jasmine.Clock.installed.setInterval.apply){return jasmine.Clock.installed.setInterval.apply(this,arguments);}else{return jasmine.Clock.installed.setInterval(funcToCall,millis);}};jasmine.getGlobal().clearTimeout=function(timeoutKey){if(jasmine.Clock.installed.clearTimeout.apply){return jasmine.Clock.installed.clearTimeout.apply(this,arguments);}else{return jasmine.Clock.installed.clearTimeout(timeoutKey);}};jasmine.getGlobal().clearInterval=function(timeoutKey){if(jasmine.Clock.installed.clearTimeout.apply){return jasmine.Clock.installed.clearInterval.apply(this,arguments);}else{return jasmine.Clock.installed.clearInterval(timeoutKey);}};jasmine.MultiReporter=function(){this.subReporters_=[];};jasmine.util.inherit(jasmine.MultiReporter,jasmine.Reporter);jasmine.MultiReporter.prototype.addReporter=function(reporter){this.subReporters_.push(reporter);};(function(){var functionNames=["reportRunnerStarting","reportRunnerResults","reportSuiteResults","reportSpecStarting","reportSpecResults","log"];for(var i=0;i<functionNames.length;i++){var functionName=functionNames[i];jasmine.MultiReporter.prototype[functionName]=(function(functionName){return function(){for(var j=0;j<this.subReporters_.length;j++){var subReporter=this.subReporters_[j];if(subReporter[functionName]){subReporter[functionName].apply(subReporter,arguments);}}};})(functionName);}})();jasmine.NestedResults=function(){this.totalCount=0;this.passedCount=0;this.failedCount=0;this.skipped=false;this.items_=[];};jasmine.NestedResults.prototype.rollupCounts=function(result){this.totalCount+=result.totalCount;this.passedCount+=result.passedCount;this.failedCount+=result.failedCount;};jasmine.NestedResults.prototype.log=function(values){this.items_.push(new jasmine.MessageResult(values));};jasmine.NestedResults.prototype.getItems=function(){return this.items_;};jasmine.NestedResults.prototype.addResult=function(result){if(result.type!='log'){if(result.items_){this.rollupCounts(result);}else{this.totalCount++;if(result.passed()){this.passedCount++;}else{this.failedCount++;}}}
this.items_.push(result);};jasmine.NestedResults.prototype.passed=function(){return this.passedCount===this.totalCount;};jasmine.PrettyPrinter=function(){this.ppNestLevel_=0;};jasmine.PrettyPrinter.prototype.format=function(value){this.ppNestLevel_++;try{if(value===jasmine.undefined){this.emitScalar('undefined');}else if(value===null){this.emitScalar('null');}else if(value===jasmine.getGlobal()){this.emitScalar('<global>');}else if(value.jasmineToString){this.emitScalar(value.jasmineToString());}else if(typeof value==='string'){this.emitString(value);}else if(jasmine.isSpy(value)){this.emitScalar("spy on "+value.identity);}else if(value instanceof RegExp){this.emitScalar(value.toString());}else if(typeof value==='function'){this.emitScalar('Function');}else if(typeof value.nodeType==='number'){this.emitScalar('HTMLNode');}else if(value instanceof Date){this.emitScalar('Date('+value+')');}else if(value.__Jasmine_been_here_before__){this.emitScalar('<circular reference: '+(jasmine.isArray_(value)?'Array':'Object')+'>');}else if(jasmine.isArray_(value)||typeof value=='object'){value.__Jasmine_been_here_before__=true;if(jasmine.isArray_(value)){this.emitArray(value);}else{this.emitObject(value);}
delete value.__Jasmine_been_here_before__;}else{this.emitScalar(value.toString());}}finally{this.ppNestLevel_--;}};jasmine.PrettyPrinter.prototype.iterateObject=function(obj,fn){for(var property in obj){if(!obj.hasOwnProperty(property))continue;if(property=='__Jasmine_been_here_before__')continue;fn(property,obj.__lookupGetter__?(obj.__lookupGetter__(property)!==jasmine.undefined&&obj.__lookupGetter__(property)!==null):false);}};jasmine.PrettyPrinter.prototype.emitArray=jasmine.unimplementedMethod_;jasmine.PrettyPrinter.prototype.emitObject=jasmine.unimplementedMethod_;jasmine.PrettyPrinter.prototype.emitScalar=jasmine.unimplementedMethod_;jasmine.PrettyPrinter.prototype.emitString=jasmine.unimplementedMethod_;jasmine.StringPrettyPrinter=function(){jasmine.PrettyPrinter.call(this);this.string='';};jasmine.util.inherit(jasmine.StringPrettyPrinter,jasmine.PrettyPrinter);jasmine.StringPrettyPrinter.prototype.emitScalar=function(value){this.append(value);};jasmine.StringPrettyPrinter.prototype.emitString=function(value){this.append("'"+value+"'");};jasmine.StringPrettyPrinter.prototype.emitArray=function(array){if(this.ppNestLevel_>jasmine.MAX_PRETTY_PRINT_DEPTH){this.append("Array");return;}
this.append('[ ');for(var i=0;i<array.length;i++){if(i>0){this.append(', ');}
this.format(array[i]);}
this.append(' ]');};jasmine.StringPrettyPrinter.prototype.emitObject=function(obj){if(this.ppNestLevel_>jasmine.MAX_PRETTY_PRINT_DEPTH){this.append("Object");return;}
var self=this;this.append('{ ');var first=true;this.iterateObject(obj,function(property,isGetter){if(first){first=false;}else{self.append(', ');}
self.append(property);self.append(' : ');if(isGetter){self.append('<getter>');}else{self.format(obj[property]);}});this.append(' }');};jasmine.StringPrettyPrinter.prototype.append=function(value){this.string+=value;};jasmine.Queue=function(env){this.env=env; this.ensured=[];this.blocks=[];this.running=false;this.index=0;this.offset=0;this.abort=false;};jasmine.Queue.prototype.addBefore=function(block,ensure){if(ensure===jasmine.undefined){ensure=false;}
this.blocks.unshift(block);this.ensured.unshift(ensure);};jasmine.Queue.prototype.add=function(block,ensure){if(ensure===jasmine.undefined){ensure=false;}
this.blocks.push(block);this.ensured.push(ensure);};jasmine.Queue.prototype.insertNext=function(block,ensure){if(ensure===jasmine.undefined){ensure=false;}
this.ensured.splice((this.index+this.offset+1),0,ensure);this.blocks.splice((this.index+this.offset+1),0,block);this.offset++;};jasmine.Queue.prototype.start=function(onComplete){this.running=true;this.onComplete=onComplete;this.next_();};jasmine.Queue.prototype.isRunning=function(){return this.running;};jasmine.Queue.LOOP_DONT_RECURSE=true;jasmine.Queue.prototype.next_=function(){var self=this;var goAgain=true;while(goAgain){goAgain=false;if(self.index<self.blocks.length&&!(this.abort&&!this.ensured[self.index])){var calledSynchronously=true;var completedSynchronously=false;var onComplete=function(){if(jasmine.Queue.LOOP_DONT_RECURSE&&calledSynchronously){completedSynchronously=true;return;}
if(self.blocks[self.index].abort){self.abort=true;}
self.offset=0;self.index++;var now=new Date().getTime();if(self.env.updateInterval&&now-self.env.lastUpdate>self.env.updateInterval){self.env.lastUpdate=now;self.env.setTimeout(function(){self.next_();},0);}else{if(jasmine.Queue.LOOP_DONT_RECURSE&&completedSynchronously){goAgain=true;}else{self.next_();}}};self.blocks[self.index].execute(onComplete);calledSynchronously=false;if(completedSynchronously){onComplete();}}else{self.running=false;if(self.onComplete){self.onComplete();}}}};jasmine.Queue.prototype.results=function(){var results=new jasmine.NestedResults();for(var i=0;i<this.blocks.length;i++){if(this.blocks[i].results){results.addResult(this.blocks[i].results());}}
return results;};jasmine.Runner=function(env){var self=this;self.env=env;self.queue=new jasmine.Queue(env);self.before_=[];self.after_=[];self.suites_=[];};jasmine.Runner.prototype.execute=function(){var self=this;if(self.env.reporter.reportRunnerStarting){self.env.reporter.reportRunnerStarting(this);}
self.queue.start(function(){self.finishCallback();});};jasmine.Runner.prototype.beforeEach=function(beforeEachFunction){beforeEachFunction.typeName='beforeEach';this.before_.splice(0,0,beforeEachFunction);};jasmine.Runner.prototype.afterEach=function(afterEachFunction){afterEachFunction.typeName='afterEach';this.after_.splice(0,0,afterEachFunction);};jasmine.Runner.prototype.finishCallback=function(){this.env.reporter.reportRunnerResults(this);};jasmine.Runner.prototype.addSuite=function(suite){this.suites_.push(suite);};jasmine.Runner.prototype.add=function(block){if(block instanceof jasmine.Suite){this.addSuite(block);}
this.queue.add(block);};jasmine.Runner.prototype.specs=function(){var suites=this.suites();var specs=[];for(var i=0;i<suites.length;i++){specs=specs.concat(suites[i].specs());}
return specs;};jasmine.Runner.prototype.suites=function(){return this.suites_;};jasmine.Runner.prototype.topLevelSuites=function(){var topLevelSuites=[];for(var i=0;i<this.suites_.length;i++){if(!this.suites_[i].parentSuite){topLevelSuites.push(this.suites_[i]);}}
return topLevelSuites;};jasmine.Runner.prototype.results=function(){return this.queue.results();};jasmine.Spec=function(env,suite,description){if(!env){throw new Error('jasmine.Env() required');}
if(!suite){throw new Error('jasmine.Suite() required');}
var spec=this;spec.id=env.nextSpecId?env.nextSpecId():null;spec.env=env;spec.suite=suite;spec.description=description;spec.queue=new jasmine.Queue(env);spec.afterCallbacks=[];spec.spies_=[];spec.results_=new jasmine.NestedResults();spec.results_.description=description;spec.matchersClass=null;};jasmine.Spec.prototype.getFullName=function(){return this.suite.getFullName()+' '+this.description+'.';};jasmine.Spec.prototype.results=function(){return this.results_;};jasmine.Spec.prototype.log=function(){return this.results_.log(arguments);};jasmine.Spec.prototype.runs=function(func){var block=new jasmine.Block(this.env,func,this);this.addToQueue(block);return this;};jasmine.Spec.prototype.addToQueue=function(block){if(this.queue.isRunning()){this.queue.insertNext(block);}else{this.queue.add(block);}};jasmine.Spec.prototype.addMatcherResult=function(result){this.results_.addResult(result);};jasmine.Spec.prototype.expect=function(actual){var positive=new(this.getMatchersClass_())(this.env,actual,this);positive.not=new(this.getMatchersClass_())(this.env,actual,this,true);return positive;};jasmine.Spec.prototype.waits=function(timeout){var waitsFunc=new jasmine.WaitsBlock(this.env,timeout,this);this.addToQueue(waitsFunc);return this;};jasmine.Spec.prototype.waitsFor=function(latchFunction,optional_timeoutMessage,optional_timeout){var latchFunction_=null;var optional_timeoutMessage_=null;var optional_timeout_=null;for(var i=0;i<arguments.length;i++){var arg=arguments[i];switch(typeof arg){case'function':latchFunction_=arg;break;case'string':optional_timeoutMessage_=arg;break;case'number':optional_timeout_=arg;break;}}
var waitsForFunc=new jasmine.WaitsForBlock(this.env,optional_timeout_,latchFunction_,optional_timeoutMessage_,this);this.addToQueue(waitsForFunc);return this;};jasmine.Spec.prototype.fail=function(e){var expectationResult=new jasmine.ExpectationResult({passed:false,message:e?jasmine.util.formatException(e):'Exception',trace:{stack:e.stack}});this.results_.addResult(expectationResult);};jasmine.Spec.prototype.getMatchersClass_=function(){return this.matchersClass||this.env.matchersClass;};jasmine.Spec.prototype.addMatchers=function(matchersPrototype){var parent=this.getMatchersClass_();var newMatchersClass=function(){parent.apply(this,arguments);};jasmine.util.inherit(newMatchersClass,parent);jasmine.Matchers.wrapInto_(matchersPrototype,newMatchersClass);this.matchersClass=newMatchersClass;};jasmine.Spec.prototype.finishCallback=function(){this.env.reporter.reportSpecResults(this);};jasmine.Spec.prototype.finish=function(onComplete){this.removeAllSpies();this.finishCallback();if(onComplete){onComplete();}};jasmine.Spec.prototype.after=function(doAfter){if(this.queue.isRunning()){this.queue.add(new jasmine.Block(this.env,doAfter,this),true);}else{this.afterCallbacks.unshift(doAfter);}};jasmine.Spec.prototype.execute=function(onComplete){var spec=this;if(!spec.env.specFilter(spec)){spec.results_.skipped=true;spec.finish(onComplete);return;}
this.env.reporter.reportSpecStarting(this);spec.env.currentSpec=spec;spec.addBeforesAndAftersToQueue();spec.queue.start(function(){spec.finish(onComplete);});};jasmine.Spec.prototype.addBeforesAndAftersToQueue=function(){var runner=this.env.currentRunner();var i;for(var suite=this.suite;suite;suite=suite.parentSuite){for(i=0;i<suite.before_.length;i++){this.queue.addBefore(new jasmine.Block(this.env,suite.before_[i],this));}}
for(i=0;i<runner.before_.length;i++){this.queue.addBefore(new jasmine.Block(this.env,runner.before_[i],this));}
for(i=0;i<this.afterCallbacks.length;i++){this.queue.add(new jasmine.Block(this.env,this.afterCallbacks[i],this),true);}
for(suite=this.suite;suite;suite=suite.parentSuite){for(i=0;i<suite.after_.length;i++){this.queue.add(new jasmine.Block(this.env,suite.after_[i],this),true);}}
for(i=0;i<runner.after_.length;i++){this.queue.add(new jasmine.Block(this.env,runner.after_[i],this),true);}};jasmine.Spec.prototype.explodes=function(){throw'explodes function should not have been called';};jasmine.Spec.prototype.spyOn=function(obj,methodName,ignoreMethodDoesntExist){if(obj==jasmine.undefined){throw"spyOn could not find an object to spy upon for "+methodName+"()";}
if(!ignoreMethodDoesntExist&&obj[methodName]===jasmine.undefined){throw methodName+'() method does not exist';}
if(!ignoreMethodDoesntExist&&obj[methodName]&&obj[methodName].isSpy){throw new Error(methodName+' has already been spied upon');}
var spyObj=jasmine.createSpy(methodName);this.spies_.push(spyObj);spyObj.baseObj=obj;spyObj.methodName=methodName;spyObj.originalValue=obj[methodName];obj[methodName]=spyObj;return spyObj;};jasmine.Spec.prototype.removeAllSpies=function(){for(var i=0;i<this.spies_.length;i++){var spy=this.spies_[i];spy.baseObj[spy.methodName]=spy.originalValue;}
this.spies_=[];};jasmine.Suite=function(env,description,specDefinitions,parentSuite){var self=this;self.id=env.nextSuiteId?env.nextSuiteId():null;self.description=description;self.queue=new jasmine.Queue(env);self.parentSuite=parentSuite;self.env=env;self.before_=[];self.after_=[];self.children_=[];self.suites_=[];self.specs_=[];};jasmine.Suite.prototype.getFullName=function(){var fullName=this.description;for(var parentSuite=this.parentSuite;parentSuite;parentSuite=parentSuite.parentSuite){fullName=parentSuite.description+' '+fullName;}
return fullName;};jasmine.Suite.prototype.finish=function(onComplete){this.env.reporter.reportSuiteResults(this);this.finished=true;if(typeof(onComplete)=='function'){onComplete();}};jasmine.Suite.prototype.beforeEach=function(beforeEachFunction){beforeEachFunction.typeName='beforeEach';this.before_.unshift(beforeEachFunction);};jasmine.Suite.prototype.afterEach=function(afterEachFunction){afterEachFunction.typeName='afterEach';this.after_.unshift(afterEachFunction);};jasmine.Suite.prototype.results=function(){return this.queue.results();};jasmine.Suite.prototype.add=function(suiteOrSpec){this.children_.push(suiteOrSpec);if(suiteOrSpec instanceof jasmine.Suite){this.suites_.push(suiteOrSpec);this.env.currentRunner().addSuite(suiteOrSpec);}else{this.specs_.push(suiteOrSpec);}
this.queue.add(suiteOrSpec);};jasmine.Suite.prototype.specs=function(){return this.specs_;};jasmine.Suite.prototype.suites=function(){return this.suites_;};jasmine.Suite.prototype.children=function(){return this.children_;};jasmine.Suite.prototype.execute=function(onComplete){var self=this;this.queue.start(function(){self.finish(onComplete);});};jasmine.WaitsBlock=function(env,timeout,spec){this.timeout=timeout;jasmine.Block.call(this,env,null,spec);};jasmine.util.inherit(jasmine.WaitsBlock,jasmine.Block);jasmine.WaitsBlock.prototype.execute=function(onComplete){if(jasmine.VERBOSE){this.env.reporter.log('>> Jasmine waiting for '+this.timeout+' ms...');}
this.env.setTimeout(function(){onComplete();},this.timeout);};jasmine.WaitsForBlock=function(env,timeout,latchFunction,message,spec){this.timeout=timeout||env.defaultTimeoutInterval;this.latchFunction=latchFunction;this.message=message;this.totalTimeSpentWaitingForLatch=0;jasmine.Block.call(this,env,null,spec);};jasmine.util.inherit(jasmine.WaitsForBlock,jasmine.Block);jasmine.WaitsForBlock.TIMEOUT_INCREMENT=10;jasmine.WaitsForBlock.prototype.execute=function(onComplete){if(jasmine.VERBOSE){this.env.reporter.log('>> Jasmine waiting for '+(this.message||'something to happen'));}
var latchFunctionResult;try{latchFunctionResult=this.latchFunction.apply(this.spec);}catch(e){this.spec.fail(e);onComplete();return;}
if(latchFunctionResult){onComplete();}else if(this.totalTimeSpentWaitingForLatch>=this.timeout){var message='timed out after '+this.timeout+' msec waiting for '+(this.message||'something to happen');this.spec.fail({name:'timeout',message:message});this.abort=true;onComplete();}else{this.totalTimeSpentWaitingForLatch+=jasmine.WaitsForBlock.TIMEOUT_INCREMENT;var self=this;this.env.setTimeout(function(){self.execute(onComplete);},jasmine.WaitsForBlock.TIMEOUT_INCREMENT);}};jasmine.version_={"major":1,"minor":3,"build":1,"revision":1354556913};jasmine.HtmlReporterHelpers={};jasmine.HtmlReporterHelpers.createDom=function(type,attrs,childrenVarArgs){var el=document.createElement(type);for(var i=2;i<arguments.length;i++){var child=arguments[i];if(typeof child==='string'){el.appendChild(document.createTextNode(child));}else{if(child){el.appendChild(child);}}}
for(var attr in attrs){if(attr=="className"){el[attr]=attrs[attr];}else{el.setAttribute(attr,attrs[attr]);}}
return el;};jasmine.HtmlReporterHelpers.getSpecStatus=function(child){var results=child.results();var status=results.passed()?'passed':'failed';if(results.skipped){status='skipped';}
return status;};jasmine.HtmlReporterHelpers.appendToSummary=function(child,childElement){var parentDiv=this.dom.summary;var parentSuite=(typeof child.parentSuite=='undefined')?'suite':'parentSuite';var parent=child[parentSuite];if(parent){if(typeof this.views.suites[parent.id]=='undefined'){this.views.suites[parent.id]=new jasmine.HtmlReporter.SuiteView(parent,this.dom,this.views);}
parentDiv=this.views.suites[parent.id].element;}
parentDiv.appendChild(childElement);};jasmine.HtmlReporterHelpers.addHelpers=function(ctor){for(var fn in jasmine.HtmlReporterHelpers){ctor.prototype[fn]=jasmine.HtmlReporterHelpers[fn];}};jasmine.HtmlReporter=function(_doc){var self=this;var doc=_doc||window.document;var reporterView;var dom={}; self.logRunningSpecs=false;self.reportRunnerStarting=function(runner){var specs=runner.specs()||[];if(specs.length==0){return;}
createReporterDom(runner.env.versionString());doc.body.appendChild(dom.reporter);setExceptionHandling();reporterView=new jasmine.HtmlReporter.ReporterView(dom);reporterView.addSpecs(specs,self.specFilter);};self.reportRunnerResults=function(runner){reporterView&&reporterView.complete();};self.reportSuiteResults=function(suite){reporterView.suiteComplete(suite);};self.reportSpecStarting=function(spec){if(self.logRunningSpecs){self.log('>> Jasmine Running '+spec.suite.description+' '+spec.description+'...');}};self.reportSpecResults=function(spec){reporterView.specComplete(spec);};self.log=function(){var console=jasmine.getGlobal().console;if(console&&console.log){if(console.log.apply){console.log.apply(console,arguments);}else{console.log(arguments);}}};self.specFilter=function(spec){if(!focusedSpecName()){return true;}
return spec.getFullName().indexOf(focusedSpecName())===0;};return self;function focusedSpecName(){var specName;(function memoizeFocusedSpec(){if(specName){return;}
var paramMap=[];var params=jasmine.HtmlReporter.parameters(doc);for(var i=0;i<params.length;i++){var p=params[i].split('=');paramMap[decodeURIComponent(p[0])]=decodeURIComponent(p[1]);}
specName=paramMap.spec;})();return specName;}
function createReporterDom(version){dom.reporter=self.createDom('div',{id:'HTMLReporter',className:'jasmine_reporter'},dom.banner=self.createDom('div',{className:'banner'},self.createDom('span',{className:'title'},"Jasmine "),self.createDom('span',{className:'version'},version)),dom.symbolSummary=self.createDom('ul',{className:'symbolSummary'}),dom.alert=self.createDom('div',{className:'alert'},self.createDom('span',{className:'exceptions'},self.createDom('label',{className:'label','for':'no_try_catch'},'No try/catch'),self.createDom('input',{id:'no_try_catch',type:'checkbox'}))),dom.results=self.createDom('div',{className:'results'},dom.summary=self.createDom('div',{className:'summary'}),dom.details=self.createDom('div',{id:'details'})));}
function noTryCatch(){return window.location.search.match(/catch=false/);}
function searchWithCatch(){var params=jasmine.HtmlReporter.parameters(window.document);var removed=false;var i=0;while(!removed&&i<params.length){if(params[i].match(/catch=/)){params.splice(i,1);removed=true;}
i++;}
if(jasmine.CATCH_EXCEPTIONS){params.push("catch=false");}
return params.join("&");}
function setExceptionHandling(){var chxCatch=document.getElementById('no_try_catch');if(noTryCatch()){chxCatch.setAttribute('checked',true);jasmine.CATCH_EXCEPTIONS=false;}
chxCatch.onclick=function(){window.location.search=searchWithCatch();};}};jasmine.HtmlReporter.parameters=function(doc){var paramStr=doc.location.search.substring(1);var params=[];if(paramStr.length>0){params=paramStr.split('&');}
return params;}
jasmine.HtmlReporter.sectionLink=function(sectionName){var link='?';var params=[];if(sectionName){params.push('spec='+encodeURIComponent(sectionName));}
if(!jasmine.CATCH_EXCEPTIONS){params.push("catch=false");}
if(params.length>0){link+=params.join("&");}
return link;};jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);jasmine.HtmlReporter.ReporterView=function(dom){this.startedAt=new Date();this.runningSpecCount=0;this.completeSpecCount=0;this.passedCount=0;this.failedCount=0;this.skippedCount=0;this.createResultsMenu=function(){this.resultsMenu=this.createDom('span',{className:'resultsMenu bar'},this.summaryMenuItem=this.createDom('a',{className:'summaryMenuItem',href:"#"},'0 specs'),' | ',this.detailsMenuItem=this.createDom('a',{className:'detailsMenuItem',href:"#"},'0 failing'));this.summaryMenuItem.onclick=function(){dom.reporter.className=dom.reporter.className.replace(/ showDetails/g,'');};this.detailsMenuItem.onclick=function(){showDetails();};};this.addSpecs=function(specs,specFilter){this.totalSpecCount=specs.length;this.views={specs:{},suites:{}};for(var i=0;i<specs.length;i++){var spec=specs[i];this.views.specs[spec.id]=new jasmine.HtmlReporter.SpecView(spec,dom,this.views);if(specFilter(spec)){this.runningSpecCount++;}}};this.specComplete=function(spec){this.completeSpecCount++;if(isUndefined(this.views.specs[spec.id])){this.views.specs[spec.id]=new jasmine.HtmlReporter.SpecView(spec,dom);}
var specView=this.views.specs[spec.id];switch(specView.status()){case'passed':this.passedCount++;break;case'failed':this.failedCount++;break;case'skipped':this.skippedCount++;break;}
specView.refresh();this.refresh();};this.suiteComplete=function(suite){var suiteView=this.views.suites[suite.id];if(isUndefined(suiteView)){return;}
suiteView.refresh();};this.refresh=function(){if(isUndefined(this.resultsMenu)){this.createResultsMenu();} 
if(isUndefined(this.runningAlert)){this.runningAlert=this.createDom('a',{href:jasmine.HtmlReporter.sectionLink(),className:"runningAlert bar"});dom.alert.appendChild(this.runningAlert);}
this.runningAlert.innerHTML="Running "+this.completeSpecCount+" of "+specPluralizedFor(this.totalSpecCount); if(isUndefined(this.skippedAlert)){this.skippedAlert=this.createDom('a',{href:jasmine.HtmlReporter.sectionLink(),className:"skippedAlert bar"});}
this.skippedAlert.innerHTML="Skipping "+this.skippedCount+" of "+specPluralizedFor(this.totalSpecCount)+" - run all";if(this.skippedCount===1&&isDefined(dom.alert)){dom.alert.appendChild(this.skippedAlert);} 
if(isUndefined(this.passedAlert)){this.passedAlert=this.createDom('span',{href:jasmine.HtmlReporter.sectionLink(),className:"passingAlert bar"});}
this.passedAlert.innerHTML="Passing "+specPluralizedFor(this.passedCount); if(isUndefined(this.failedAlert)){this.failedAlert=this.createDom('span',{href:"?",className:"failingAlert bar"});}
this.failedAlert.innerHTML="Failing "+specPluralizedFor(this.failedCount);if(this.failedCount===1&&isDefined(dom.alert)){dom.alert.appendChild(this.failedAlert);dom.alert.appendChild(this.resultsMenu);} 
this.summaryMenuItem.innerHTML=""+specPluralizedFor(this.runningSpecCount);this.detailsMenuItem.innerHTML=""+this.failedCount+" failing";};this.complete=function(){dom.alert.removeChild(this.runningAlert);this.skippedAlert.innerHTML="Ran "+this.runningSpecCount+" of "+specPluralizedFor(this.totalSpecCount)+" - run all";if(this.failedCount===0){dom.alert.appendChild(this.createDom('span',{className:'passingAlert bar'},"Passing "+specPluralizedFor(this.passedCount)));}else{showDetails();}
dom.banner.appendChild(this.createDom('span',{className:'duration'},"finished in "+((new Date().getTime()-this.startedAt.getTime())/1000)+"s"));};return this;function showDetails(){if(dom.reporter.className.search(/showDetails/)===-1){dom.reporter.className+=" showDetails";}}
function isUndefined(obj){return typeof obj==='undefined';}
function isDefined(obj){return!isUndefined(obj);}
function specPluralizedFor(count){var str=count+" spec";if(count>1){str+="s"}
return str;}};jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);jasmine.HtmlReporter.SpecView=function(spec,dom,views){this.spec=spec;this.dom=dom;this.views=views;this.symbol=this.createDom('li',{className:'pending'});this.dom.symbolSummary.appendChild(this.symbol);this.summary=this.createDom('div',{className:'specSummary'},this.createDom('a',{className:'description',href:jasmine.HtmlReporter.sectionLink(this.spec.getFullName()),title:this.spec.getFullName()},this.spec.description));this.detail=this.createDom('div',{className:'specDetail'},this.createDom('a',{className:'description',href:'?spec='+encodeURIComponent(this.spec.getFullName()),title:this.spec.getFullName()},this.spec.getFullName()));};jasmine.HtmlReporter.SpecView.prototype.status=function(){return this.getSpecStatus(this.spec);};jasmine.HtmlReporter.SpecView.prototype.refresh=function(){this.symbol.className=this.status();switch(this.status()){case'skipped':break;case'passed':this.appendSummaryToSuiteDiv();break;case'failed':this.appendSummaryToSuiteDiv();this.appendFailureDetail();break;}};jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv=function(){this.summary.className+=' '+this.status();this.appendToSummary(this.spec,this.summary);};jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail=function(){this.detail.className+=' '+this.status();var resultItems=this.spec.results().getItems();var messagesDiv=this.createDom('div',{className:'messages'});for(var i=0;i<resultItems.length;i++){var result=resultItems[i];if(result.type=='log'){messagesDiv.appendChild(this.createDom('div',{className:'resultMessage log'},result.toString()));}else if(result.type=='expect'&&result.passed&&!result.passed()){messagesDiv.appendChild(this.createDom('div',{className:'resultMessage fail'},result.message));if(result.trace.stack){messagesDiv.appendChild(this.createDom('div',{className:'stackTrace'},result.trace.stack));}}}
if(messagesDiv.childNodes.length>0){this.detail.appendChild(messagesDiv);this.dom.details.appendChild(this.detail);}};jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView=function(suite,dom,views){this.suite=suite;this.dom=dom;this.views=views;this.element=this.createDom('div',{className:'suite'},this.createDom('a',{className:'description',href:jasmine.HtmlReporter.sectionLink(this.suite.getFullName())},this.suite.description));this.appendToSummary(this.suite,this.element);};jasmine.HtmlReporter.SuiteView.prototype.status=function(){return this.getSpecStatus(this.suite);};jasmine.HtmlReporter.SuiteView.prototype.refresh=function(){this.element.className+=" "+this.status();};jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);jasmine.TrivialReporter=function(doc){this.document=doc||document;this.suiteDivs={};this.logRunningSpecs=false;};jasmine.TrivialReporter.prototype.createDom=function(type,attrs,childrenVarArgs){var el=document.createElement(type);for(var i=2;i<arguments.length;i++){var child=arguments[i];if(typeof child==='string'){el.appendChild(document.createTextNode(child));}else{if(child){el.appendChild(child);}}}
for(var attr in attrs){if(attr=="className"){el[attr]=attrs[attr];}else{el.setAttribute(attr,attrs[attr]);}}
return el;};jasmine.TrivialReporter.prototype.reportRunnerStarting=function(runner){var showPassed,showSkipped;this.outerDiv=this.createDom('div',{id:'TrivialReporter',className:'jasmine_reporter'},this.createDom('div',{className:'banner'},this.createDom('div',{className:'logo'},this.createDom('span',{className:'title'},"Jasmine"),this.createDom('span',{className:'version'},runner.env.versionString())),this.createDom('div',{className:'options'},"Show ",showPassed=this.createDom('input',{id:"__jasmine_TrivialReporter_showPassed__",type:'checkbox'}),this.createDom('label',{"for":"__jasmine_TrivialReporter_showPassed__"}," passed "),showSkipped=this.createDom('input',{id:"__jasmine_TrivialReporter_showSkipped__",type:'checkbox'}),this.createDom('label',{"for":"__jasmine_TrivialReporter_showSkipped__"}," skipped"))),this.runnerDiv=this.createDom('div',{className:'runner running'},this.createDom('a',{className:'run_spec',href:'?'},"run all"),this.runnerMessageSpan=this.createDom('span',{},"Running..."),this.finishedAtSpan=this.createDom('span',{className:'finished-at'},"")));this.document.body.appendChild(this.outerDiv);var suites=runner.suites();for(var i=0;i<suites.length;i++){var suite=suites[i];var suiteDiv=this.createDom('div',{className:'suite'},this.createDom('a',{className:'run_spec',href:'?spec='+encodeURIComponent(suite.getFullName())},"run"),this.createDom('a',{className:'description',href:'?spec='+encodeURIComponent(suite.getFullName())},suite.description));this.suiteDivs[suite.id]=suiteDiv;var parentDiv=this.outerDiv;if(suite.parentSuite){parentDiv=this.suiteDivs[suite.parentSuite.id];}
parentDiv.appendChild(suiteDiv);}
this.startedAt=new Date();var self=this;showPassed.onclick=function(evt){if(showPassed.checked){self.outerDiv.className+=' show-passed';}else{self.outerDiv.className=self.outerDiv.className.replace(/ show-passed/,'');}};showSkipped.onclick=function(evt){if(showSkipped.checked){self.outerDiv.className+=' show-skipped';}else{self.outerDiv.className=self.outerDiv.className.replace(/ show-skipped/,'');}};};jasmine.TrivialReporter.prototype.reportRunnerResults=function(runner){var results=runner.results();var className=(results.failedCount>0)?"runner failed":"runner passed";this.runnerDiv.setAttribute("class",className); this.runnerDiv.setAttribute("className",className);var specs=runner.specs();var specCount=0;for(var i=0;i<specs.length;i++){if(this.specFilter(specs[i])){specCount++;}}
var message=""+specCount+" spec"+(specCount==1?"":"s")+", "+results.failedCount+" failure"+((results.failedCount==1)?"":"s");message+=" in "+((new Date().getTime()-this.startedAt.getTime())/1000)+"s";this.runnerMessageSpan.replaceChild(this.createDom('a',{className:'description',href:'?'},message),this.runnerMessageSpan.firstChild);this.finishedAtSpan.appendChild(document.createTextNode("Finished at "+new Date().toString()));};jasmine.TrivialReporter.prototype.reportSuiteResults=function(suite){var results=suite.results();var status=results.passed()?'passed':'failed';if(results.totalCount===0){ status='skipped';}
this.suiteDivs[suite.id].className+=" "+status;};jasmine.TrivialReporter.prototype.reportSpecStarting=function(spec){if(this.logRunningSpecs){this.log('>> Jasmine Running '+spec.suite.description+' '+spec.description+'...');}};jasmine.TrivialReporter.prototype.reportSpecResults=function(spec){var results=spec.results();var status=results.passed()?'passed':'failed';if(results.skipped){status='skipped';}
var specDiv=this.createDom('div',{className:'spec '+status},this.createDom('a',{className:'run_spec',href:'?spec='+encodeURIComponent(spec.getFullName())},"run"),this.createDom('a',{className:'description',href:'?spec='+encodeURIComponent(spec.getFullName()),title:spec.getFullName()},spec.description));var resultItems=results.getItems();var messagesDiv=this.createDom('div',{className:'messages'});for(var i=0;i<resultItems.length;i++){var result=resultItems[i];if(result.type=='log'){messagesDiv.appendChild(this.createDom('div',{className:'resultMessage log'},result.toString()));}else if(result.type=='expect'&&result.passed&&!result.passed()){messagesDiv.appendChild(this.createDom('div',{className:'resultMessage fail'},result.message));if(result.trace.stack){messagesDiv.appendChild(this.createDom('div',{className:'stackTrace'},result.trace.stack));}}}
if(messagesDiv.childNodes.length>0){specDiv.appendChild(messagesDiv);}
this.suiteDivs[spec.suite.id].appendChild(specDiv);};jasmine.TrivialReporter.prototype.log=function(){var console=jasmine.getGlobal().console;if(console&&console.log){if(console.log.apply){console.log.apply(console,arguments);}else{console.log(arguments);}}};jasmine.TrivialReporter.prototype.getLocation=function(){return this.document.location;};jasmine.TrivialReporter.prototype.specFilter=function(spec){var paramMap={};var params=this.getLocation().search.substring(1).split('&');for(var i=0;i<params.length;i++){var p=params[i].split('=');paramMap[decodeURIComponent(p[0])]=decodeURIComponent(p[1]);}
if(!paramMap.spec){return true;}
return spec.getFullName().indexOf(paramMap.spec)===0;};describe('propertyUtils',function(){var model;beforeEach(function(){model=new Backbone.Model();});describe('$.fn.bindProperty',function(){var $el;beforeEach(function(){$el=$("<input type='checkbox'/>").appendTo(document.body);});afterEach(function(){$el.remove();});describe("Initial property values",function(){it("Setting element's property from model property's",function(){model.set('mybool',true);$el.bindProperty('checked',model,'mybool');expect($el.prop('checked')).toBe(true);});it("Setting element's property form model property's with "+"inverse=true",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool',{inverse:true});expect($el.prop('checked')).toBe(true);expect(model.get('mybool')).toBe(false);});it('No element changes with modelToElement=false',function(){model.set('mybool',true);$el.bindProperty('checked',model,'mybool',{modelToElement:false});expect($el.prop('checked')).toBe(false);});});describe("Model property changes",function(){it("Setting element's property",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool');expect($el.prop('checked')).toBe(false);model.set('mybool',true);expect($el.prop('checked')).toBe(true);});it("Setting element's property with inverse=true",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool',{inverse:true});expect($el.prop('checked')).toBe(true);model.set('mybool',true);expect($el.prop('checked')).toBe(false);expect(model.get('mybool')).toBe(true);});it('No element changes with modelToElement=false',function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool',{modelToElement:false});model.set('mybool',true);expect($el.prop('checked')).toBe(false);});});describe("Element property changes",function(){it("Setting model's property",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool');$el.click();expect($el.prop('checked')).toBe(true);expect(model.get('mybool')).toBe(true);});it("Setting model's property with inverse=true",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool',{inverse:true});$el.prop('checked',false);$el.click();expect($el.prop('checked')).toBe(true);expect(model.get('mybool')).toBe(false);});it("No model changes with elementToModel=false",function(){model.set('mybool',false);$el.bindProperty('checked',model,'mybool',{elementToModel:false});$el.click();expect($el.prop('checked')).toBe(true);expect(model.get('mybool')).toBe(false);});});});describe('$.fn.bindVisibility',function(){var $el;beforeEach(function(){$el=$('<div/>').appendTo(document.body);});afterEach(function(){$el.remove();});describe('Showing elements',function(){it('When property is initially true',function(){$el.hide();model.set('mybool',true);$el.bindVisibility(model,'mybool');expect($el.is(':visible')).toBe(true);});it('When property is initially false with inverse=true',function(){$el.hide();model.set('mybool',false);$el.bindVisibility(model,'mybool',{inverse:true});expect($el.is(':visible')).toBe(true);});it('When property is changed to true',function(){expect($el.is(':visible')).toBe(true);model.set('mybool',false);$el.bindVisibility(model,'mybool');model.set('mybool',true);expect($el.is(':visible')).toBe(true);});it('When property is changed to false with inverse=true',function(){$el.hide();model.set('mybool',true);$el.bindVisibility(model,'mybool',{inverse:true});model.set('mybool',false);expect($el.is(':visible')).toBe(true);});});describe('Hiding elements',function(){it('When property is initially false',function(){expect($el.is(':visible')).toBe(true);model.set('mybool',false);$el.bindVisibility(model,'mybool');expect($el.is(':visible')).toBe(false);});it('When property is initially true with inverse=true',function(){expect($el.is(':visible')).toBe(true);model.set('mybool',true);$el.bindVisibility(model,'mybool',{inverse:true});expect($el.is(':visible')).toBe(false);});it('When property is changed to false',function(){$el.hide();model.set('mybool',true);$el.bindVisibility(model,'mybool');model.set('mybool',false);expect($el.is(':visible')).toBe(false);});it('When property is changed to true with inverse=true',function(){expect($el.is(':visible')).toBe(true);model.set('mybool',false);$el.bindVisibility(model,'mybool',{inverse:true});model.set('mybool',true);expect($el.is(':visible')).toBe(false);});});});});}).call(this);