2 // (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
3 // Underscore is freely distributable under the MIT license.
4 // Portions of Underscore are inspired or borrowed from Prototype,
5 // Oliver Steele's Functional, and John Resig's Micro-Templating.
6 // For all details and documentation:
7 // http://documentcloud.github.com/underscore
8 (function(){function r(a
,c
,d
){if(a
===c
)return a
!==0||1/a==1/c;if(a
==null||c
==null)return a
===c
;if(a
._chain
)a
=a
._wrapped
;if(c
._chain
)c
=c
._wrapped
;if(b
.isFunction(a
.isEqual
))return a
.isEqual(c
);if(b
.isFunction(c
.isEqual
))return c
.isEqual(a
);var e
=l
.call(a
);if(e
!=l
.call(c
))return false;switch(e
){case "[object String]":return String(a
)==String(c
);case "[object Number]":return a
=+a
,c
=+c
,a
!=a
?c
!=c
:a
==0?1/a==1/c:a
==c
;case "[object Date]":case "[object Boolean]":return+a
==+c
;case "[object RegExp]":return a
.source
==
9 c
.source
&&a
.global
==c
.global
&&a
.multiline
==c
.multiline
&&a
.ignoreCase
==c
.ignoreCase
}if(typeof a
!="object"||typeof c
!="object")return false;for(var f
=d
.length
;f
--;)if(d
[f
]==a
)return true;d
.push(a
);var f
=0,g
=true;if(e
=="[object Array]"){if(f
=a
.length
,g
=f
==c
.length
)for(;f
--;)if(!(g
=f
in a
==f
in c
&&r(a
[f
],c
[f
],d
)))break}else{if("constructor"in a
!="constructor"in c
||a
.constructor!=c
.constructor)return false;for(var h
in a
)if(m
.call(a
,h
)&&(f
++,!(g
=m
.call(c
,h
)&&r(a
[h
],c
[h
],d
))))break;if(g
){for(h
in c
)if(m
.call(c
,
10 h
)&&!f
--)break;g
=!f
}}d
.pop();return g
}var s
=this,F
=s
._
,o
={},k
=Array
.prototype,p
=Object
.prototype,i
=k
.slice
,G
=k
.unshift
,l
=p
.toString
,m
=p
.hasOwnProperty
,v
=k
.forEach
,w
=k
.map
,x
=k
.reduce
,y
=k
.reduceRight
,z
=k
.filter
,A
=k
.every
,B
=k
.some
,q
=k
.indexOf
,C
=k
.lastIndexOf
,p
=Array
.isArray
,H
=Object
.keys
,t
=Function
.prototype.bind
,b=function(a
){return new n(a
)};if(typeof exports
!=="undefined"){if(typeof module
!=="undefined"&&module
.exports
)exports
=module
.exports
=b
;exports
._
=b
}else typeof define
==="function"&&define
.amd
?
11 define("underscore",function(){return b
}):s
._
=b
;b
.VERSION
="1.2.2";var j
=b
.each
=b
.forEach=function(a
,c
,b
){if(a
!=null)if(v
&&a
.forEach
===v
)a
.forEach(c
,b
);else if(a
.length
===+a
.length
)for(var e
=0,f
=a
.length
;e
<f
;e
++){if(e
in a
&&c
.call(b
,a
[e
],e
,a
)===o
)break}else for(e
in a
)if(m
.call(a
,e
)&&c
.call(b
,a
[e
],e
,a
)===o
)break};b
.map=function(a
,c
,b
){var e
=[];if(a
==null)return e
;if(w
&&a
.map
===w
)return a
.map(c
,b
);j(a
,function(a
,g
,h
){e
[e
.length
]=c
.call(b
,a
,g
,h
)});return e
};b
.reduce
=b
.foldl
=b
.inject=function(a
,c
,d
,e
){var f
=
12 d
!==void 0;a
==null&&(a
=[]);if(x
&&a
.reduce
===x
)return e
&&(c
=b
.bind(c
,e
)),f
?a
.reduce(c
,d
):a
.reduce(c
);j(a
,function(a
,b
,i
){f
?d
=c
.call(e
,d
,a
,b
,i
):(d
=a
,f
=true)});if(!f
)throw new TypeError("Reduce of empty array with no initial value");return d
};b
.reduceRight
=b
.foldr=function(a
,c
,d
,e
){a
==null&&(a
=[]);if(y
&&a
.reduceRight
===y
)return e
&&(c
=b
.bind(c
,e
)),d
!==void 0?a
.reduceRight(c
,d
):a
.reduceRight(c
);a
=(b
.isArray(a
)?a
.slice():b
.toArray(a
)).reverse();return b
.reduce(a
,c
,d
,e
)};b
.find
=b
.detect=function(a
,c
,b
){var e
;
13 D(a
,function(a
,g
,h
){if(c
.call(b
,a
,g
,h
))return e
=a
,true});return e
};b
.filter
=b
.select=function(a
,c
,b
){var e
=[];if(a
==null)return e
;if(z
&&a
.filter
===z
)return a
.filter(c
,b
);j(a
,function(a
,g
,h
){c
.call(b
,a
,g
,h
)&&(e
[e
.length
]=a
)});return e
};b
.reject=function(a
,c
,b
){var e
=[];if(a
==null)return e
;j(a
,function(a
,g
,h
){c
.call(b
,a
,g
,h
)||(e
[e
.length
]=a
)});return e
};b
.every
=b
.all=function(a
,c
,b
){var e
=true;if(a
==null)return e
;if(A
&&a
.every
===A
)return a
.every(c
,b
);j(a
,function(a
,g
,h
){if(!(e
=e
&&c
.call(b
,a
,g
,h
)))return o
});
14 return e
};var D
=b
.some
=b
.any=function(a
,c
,d
){var c
=c
||b
.identity
,e
=false;if(a
==null)return e
;if(B
&&a
.some
===B
)return a
.some(c
,d
);j(a
,function(a
,b
,h
){if(e
||(e
=c
.call(d
,a
,b
,h
)))return o
});return!!e
};b
.include
=b
.contains=function(a
,c
){var b
=false;if(a
==null)return b
;return q
&&a
.indexOf
===q
?a
.indexOf(c
)!=-1:b
=D(a
,function(a
){return a
===c
})};b
.invoke=function(a
,c
){var d
=i
.call(arguments
,2);return b
.map(a
,function(a
){return(c
.call
?c
||a
:a
[c
]).apply(a
,d
)})};b
.pluck=function(a
,c
){return b
.map(a
,function(a
){return a
[c
]})};
15 b
.max=function(a
,c
,d
){if(!c
&&b
.isArray(a
))return Math
.max
.apply(Math
,a
);if(!c
&&b
.isEmpty(a
))return-Infinity
;var e
={computed
:-Infinity
};j(a
,function(a
,b
,h
){b
=c
?c
.call(d
,a
,b
,h
):a
;b
>=e
.computed
&&(e
={value
:a
,computed
:b
})});return e
.value
};b
.min=function(a
,c
,d
){if(!c
&&b
.isArray(a
))return Math
.min
.apply(Math
,a
);if(!c
&&b
.isEmpty(a
))return Infinity
;var e
={computed
:Infinity
};j(a
,function(a
,b
,h
){b
=c
?c
.call(d
,a
,b
,h
):a
;b
<e
.computed
&&(e
={value
:a
,computed
:b
})});return e
.value
};b
.shuffle=function(a
){var c
=[],b
;
16 j(a
,function(a
,f
){f
==0?c
[0]=a
:(b
=Math
.floor(Math
.random()*(f
+1)),c
[f
]=c
[b
],c
[b
]=a
)});return c
};b
.sortBy=function(a
,c
,d
){return b
.pluck(b
.map(a
,function(a
,b
,g
){return{value
:a
,criteria
:c
.call(d
,a
,b
,g
)}}).sort(function(a
,c
){var b
=a
.criteria
,d
=c
.criteria
;return b
<d
?-1:b
>d
?1:0}),"value")};b
.groupBy=function(a
,c
){var d
={},e
=b
.isFunction(c
)?c:function(a
){return a
[c
]};j(a
,function(a
,c
){var b
=e(a
,c
);(d
[b
]||(d
[b
]=[])).push(a
)});return d
};b
.sortedIndex=function(a
,c
,d
){d
||(d
=b
.identity
);for(var e
=0,f
=a
.length
;e
<
17 f
;){var g
=e
+f
>>1;d(a
[g
])<d(c
)?e
=g
+1:f
=g
}return e
};b
.toArray=function(a
){return!a
?[]:a
.toArray
?a
.toArray():b
.isArray(a
)?i
.call(a
):b
.isArguments(a
)?i
.call(a
):b
.values(a
)};b
.size=function(a
){return b
.toArray(a
).length
};b
.first
=b
.head=function(a
,b
,d
){return b
!=null&&!d
?i
.call(a
,0,b
):a
[0]};b
.initial=function(a
,b
,d
){return i
.call(a
,0,a
.length
-(b
==null||d
?1:b
))};b
.last=function(a
,b
,d
){return b
!=null&&!d
?i
.call(a
,Math
.max(a
.length
-b
,0)):a
[a
.length
-1]};b
.rest
=b
.tail=function(a
,b
,d
){return i
.call(a
,b
==null||
18 d
?1:b
)};b
.compact=function(a
){return b
.filter(a
,function(a
){return!!a
})};b
.flatten=function(a
,c
){return b
.reduce(a
,function(a
,e
){if(b
.isArray(e
))return a
.concat(c
?e
:b
.flatten(e
));a
[a
.length
]=e
;return a
},[])};b
.without=function(a
){return b
.difference(a
,i
.call(arguments
,1))};b
.uniq
=b
.unique=function(a
,c
,d
){var d
=d
?b
.map(a
,d
):a
,e
=[];b
.reduce(d
,function(d
,g
,h
){if(0==h
||(c
===true?b
.last(d
)!=g
:!b
.include(d
,g
)))d
[d
.length
]=g
,e
[e
.length
]=a
[h
];return d
},[]);return e
};b
.union=function(){return b
.uniq(b
.flatten(arguments
,
19 true))};b
.intersection
=b
.intersect=function(a
){var c
=i
.call(arguments
,1);return b
.filter(b
.uniq(a
),function(a
){return b
.every(c
,function(c
){return b
.indexOf(c
,a
)>=0})})};b
.difference=function(a
,c
){return b
.filter(a
,function(a
){return!b
.include(c
,a
)})};b
.zip=function(){for(var a
=i
.call(arguments
),c
=b
.max(b
.pluck(a
,"length")),d
=Array(c
),e
=0;e
<c
;e
++)d
[e
]=b
.pluck(a
,""+e
);return d
};b
.indexOf=function(a
,c
,d
){if(a
==null)return-1;var e
;if(d
)return d
=b
.sortedIndex(a
,c
),a
[d
]===c
?d
:-1;if(q
&&a
.indexOf
===q
)return a
.indexOf(c
);
20 for(d
=0,e
=a
.length
;d
<e
;d
++)if(a
[d
]===c
)return d
;return-1};b
.lastIndexOf=function(a
,b
){if(a
==null)return-1;if(C
&&a
.lastIndexOf
===C
)return a
.lastIndexOf(b
);for(var d
=a
.length
;d
--;)if(a
[d
]===b
)return d
;return-1};b
.range=function(a
,b
,d
){arguments
.length
<=1&&(b
=a
||0,a
=0);for(var d
=arguments
[2]||1,e
=Math
.max(Math
.ceil((b
-a
)/d
),0),f
=0,g
=Array(e
);f
<e
;)g
[f
++]=a
,a
+=d
;return g
};var E=function(){};b
.bind=function(a
,c
){var d
,e
;if(a
.bind
===t
&&t
)return t
.apply(a
,i
.call(arguments
,1));if(!b
.isFunction(a
))throw new TypeError
;
21 e
=i
.call(arguments
,2);return d=function(){if(!(this instanceof d
))return a
.apply(c
,e
.concat(i
.call(arguments
)));E
.prototype=a
.prototype;var b
=new E
,g
=a
.apply(b
,e
.concat(i
.call(arguments
)));return Object(g
)===g
?g
:b
}};b
.bindAll=function(a
){var c
=i
.call(arguments
,1);c
.length
==0&&(c
=b
.functions(a
));j(c
,function(c
){a
[c
]=b
.bind(a
[c
],a
)});return a
};b
.memoize=function(a
,c
){var d
={};c
||(c
=b
.identity
);return function(){var b
=c
.apply(this,arguments
);return m
.call(d
,b
)?d
[b
]:d
[b
]=a
.apply(this,arguments
)}};b
.delay
=
22 function(a
,b
){var d
=i
.call(arguments
,2);return setTimeout(function(){return a
.apply(a
,d
)},b
)};b
.defer=function(a
){return b
.delay
.apply(b
,[a
,1].concat(i
.call(arguments
,1)))};b
.throttle=function(a
,c
){var d
,e
,f
,g
,h
,i
=b
.debounce(function(){h
=g
=false},c
);return function(){d
=this;e
=arguments
;var b
;f
||(f
=setTimeout(function(){f
=null;h
&&a
.apply(d
,e
);i()},c
));g
?h
=true:a
.apply(d
,e
);i();g
=true}};b
.debounce=function(a
,b
){var d
;return function(){var e
=this,f
=arguments
;clearTimeout(d
);d
=setTimeout(function(){d
=
23 null;a
.apply(e
,f
)},b
)}};b
.once=function(a
){var b
=false,d
;return function(){if(b
)return d
;b
=true;return d
=a
.apply(this,arguments
)}};b
.wrap=function(a
,b
){return function(){var d
=[a
].concat(i
.call(arguments
));return b
.apply(this,d
)}};b
.compose=function(){var a
=i
.call(arguments
);return function(){for(var b
=i
.call(arguments
),d
=a
.length
-1;d
>=0;d
--)b
=[a
[d
].apply(this,b
)];return b
[0]}};b
.after=function(a
,b
){return a
<=0?b():function(){if(--a
<1)return b
.apply(this,arguments
)}};b
.keys
=H
||function(a
){if(a
!==
24 Object(a
))throw new TypeError("Invalid object");var b
=[],d
;for(d
in a
)m
.call(a
,d
)&&(b
[b
.length
]=d
);return b
};b
.values=function(a
){return b
.map(a
,b
.identity
)};b
.functions
=b
.methods=function(a
){var c
=[],d
;for(d
in a
)b
.isFunction(a
[d
])&&c
.push(d
);return c
.sort()};b
.extend=function(a
){j(i
.call(arguments
,1),function(b
){for(var d
in b
)b
[d
]!==void 0&&(a
[d
]=b
[d
])});return a
};b
.defaults=function(a
){j(i
.call(arguments
,1),function(b
){for(var d
in b
)a
[d
]==null&&(a
[d
]=b
[d
])});return a
};b
.clone=function(a
){return!b
.isObject(a
)?
25 a
:b
.isArray(a
)?a
.slice():b
.extend({},a
)};b
.tap=function(a
,b
){b(a
);return a
};b
.isEqual=function(a
,b
){return r(a
,b
,[])};b
.isEmpty=function(a
){if(b
.isArray(a
)||b
.isString(a
))return a
.length
===0;for(var c
in a
)if(m
.call(a
,c
))return false;return true};b
.isElement=function(a
){return!!(a
&&a
.nodeType
==1)};b
.isArray
=p
||function(a
){return l
.call(a
)=="[object Array]"};b
.isObject=function(a
){return a
===Object(a
)};b
.isArguments
=l
.call(arguments
)=="[object Arguments]"?function(a
){return l
.call(a
)=="[object Arguments]"}:
26 function(a
){return!(!a
||!m
.call(a
,"callee"))};b
.isFunction=function(a
){return l
.call(a
)=="[object Function]"};b
.isString=function(a
){return l
.call(a
)=="[object String]"};b
.isNumber=function(a
){return l
.call(a
)=="[object Number]"};b
.isNaN=function(a
){return a
!==a
};b
.isBoolean=function(a
){return a
===true||a
===false||l
.call(a
)=="[object Boolean]"};b
.isDate=function(a
){return l
.call(a
)=="[object Date]"};b
.isRegExp=function(a
){return l
.call(a
)=="[object RegExp]"};b
.isNull=function(a
){return a
===null};
27 b
.isUndefined=function(a
){return a
===void 0};b
.noConflict=function(){s
._
=F
;return this};b
.identity=function(a
){return a
};b
.times=function(a
,b
,d
){for(var e
=0;e
<a
;e
++)b
.call(d
,e
)};b
.escape=function(a
){return(""+a
).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""
;").replace(/'/g,"'
;").replace(/\//g,"/
;")};b.mixin=function(a){j(b.functions(a),function(c){I(c,b[c]=a[c])})};var J=0;b.uniqueId=function(a){var b=J++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,
28 interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p
=[],print=function(){__p
.push
.apply(__p
,arguments
);};with(obj
||{}){__p
.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g
,
29 "\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e
=new Function("obj","_",d
);return c
?e(c
,b
):function(a
){return e(a
,b
)}};var n=function(a
){this._wrapped
=a
};b
.prototype=n
.prototype;var u=function(a
,c
){return c
?b(a
).chain():a
},I=function(a
,c
){n
.prototype[a
]=function(){var a
=i
.call(arguments
);G
.call(a
,this._wrapped
);return u(c
.apply(b
,a
),this._chain
)}};b
.mixin(b
);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a
){var b
=k
[a
];n
.prototype[a
]=function(){b
.apply(this._wrapped
,
30 arguments
);return u(this._wrapped
,this._chain
)}});j(["concat","join","slice"],function(a
){var b
=k
[a
];n
.prototype[a
]=function(){return u(b
.apply(this._wrapped
,arguments
),this._chain
)}});n
.prototype.chain=function(){this._chain
=true;return this};n
.prototype.value=function(){return this._wrapped
}}).call(this);