Commit 9ae927f9 authored by addyosmani's avatar addyosmani

merging sproutcore fork and adding initial qunit stub

parent 4518a412
/* ==== Scroll down to find where to put your styles :) ==== */
/* HTML5 ✰ Boilerplate */
html, body, div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
blockquote, q { quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after { content: ''; content: none; }
ins { background-color: #ff9; color: #000; text-decoration: none; }
mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
del { text-decoration: line-through; }
abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
table { border-collapse: collapse; border-spacing: 0; }
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
input, select { vertical-align: middle; }
body { font:13px/1.231 sans-serif; *font-size:small; }
select, input, textarea, button { font:99% sans-serif; }
pre, code, kbd, samp { font-family: monospace, sans-serif; }
html { overflow-y: scroll; }
a:hover, a:active { outline: none; }
ul, ol { margin-left: 2em; }
ol { list-style-type: decimal; }
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
small { font-size: 85%; }
strong, th { font-weight: bold; }
td { vertical-align: top; }
sub, sup { font-size: 75%; line-height: 0; position: relative; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
textarea { overflow: auto; }
.ie6 legend, .ie7 legend { margin-left: -7px; }
input[type="radio"] { vertical-align: text-bottom; }
input[type="checkbox"] { margin-right: 5px;
vertical-align: middle; }
.ie7 input[type="checkbox"] { vertical-align: baseline; }
.ie6 input { vertical-align: text-bottom; }
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
button, input, select, textarea { margin: 0; }
input:valid, textarea:valid { }
input:invalid, textarea:invalid { border-radius: 1px; -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; box-shadow: 0px 0px 5px red; }
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }
::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; }
::selection { background:#FF5E99; color:#fff; text-shadow: none; }
a:link { -webkit-tap-highlight-color: #FF5E99; }
button { width: auto; overflow: visible; }
.ie7 img { -ms-interpolation-mode: bicubic; }
body, select, input, textarea { color: #444; }
h1, h2, h3, h4, h5, h6 { font-weight: bold; }
a, a:active, a:visited { color: #607890; }
a:hover { color: #036; }
/*
// ========================================== \\
|| ||
|| Your styles ! ||
|| ||
\\ ========================================== //
*/
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
.hidden { display: none; visibility: hidden; }
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
.invisible { visibility: hidden; }
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
.clearfix { zoom: 1; }
@media all and (orientation:portrait) {
}
@media all and (orientation:landscape) {
}
@media screen and (max-device-width: 480px) {
/* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
}
@media print {
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
-ms-filter: none !important; }
a, a:visited { color: #444 !important; text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; }
tr, img { page-break-inside: avoid; }
@page { margin: 0.5cm; }
p, h2, h3 { orphans: 3; widows: 3; }
h2, h3{ page-break-after: avoid; }
}
\ No newline at end of file
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
caption, th, td {
text-align: left;
font-weight: normal;
vertical-align: middle; }
q, blockquote {
quotes: none; }
q:before, q:after, blockquote:before, blockquote:after {
content: "";
content: none; }
a img {
border: none; }
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block; }
/* CSS Reset */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
caption, th, td {
text-align: left;
font-weight: normal;
vertical-align: middle; }
q, blockquote {
quotes: none; }
q:before, q:after, blockquote:before, blockquote:after {
content: "";
content: none; }
a img {
border: none; }
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block; }
body {
line-height: 1;
font-family: "Lucida Grande", sans-serif;
font-size: 13px; }
ol, ul {
list-style: none; }
blockquote, q {
quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
/* App CSS */
body, html {
}
.sc-view {
position: relative;
overflow: visible; }
/*
body {
-moz-box-shadow: rgba(0, 0, 0, 0.6) 0 0 1px;
-webkit-box-shadow: rgba(0, 0, 0, 0.6) 0 0 1px;
-o-box-shadow: rgba(0, 0, 0, 0.6) 0 0 1px;
box-shadow: rgba(0, 0, 0, 0.6) 0 0 1px;
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
-o-border-radius: 8px;
-ms-border-radius: 8px;
-khtml-border-radius: 8px;
border-radius: 8px;
position: absolute;
width: 600px;
left: 50%;
margin-top: 38px;
border: 1px solid #bbbbbb;
margin-left: -300px;
background-color: #fff;
padding: 40px 10px 10px; }
body .mark-all-done label {
margin-left: 5px;
font-weight: bold; }
body #stats {
overflow: hidden;
width: 100%;
padding: 5px 10px;
margin: 10px -10px;
background-color: #eee;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
line-height: 25px; }
body #stats .remaining {
float: left; }
body #stats .sc-button {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #f9f9f9), color-stop(34%, #dddddd), color-stop(67%, #f2f2f2), color-stop(100%, #f7f7f7));
background-image: -webkit-linear-gradient(#f9f9f9 1%, #dddddd, #f2f2f2, #f7f7f7);
background-image: -moz-linear-gradient(#f9f9f9 1%, #dddddd, #f2f2f2, #f7f7f7);
background-image: -o-linear-gradient(#f9f9f9 1%, #dddddd, #f2f2f2, #f7f7f7);
background-image: linear-gradient(#f9f9f9 1%, #dddddd, #f2f2f2, #f7f7f7);
border: 1px solid #828282;
color: #000;
float: right;
padding: 5px; }
body #stats .sc-button:hover {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #ffffff), color-stop(34%, #e2e2e2), color-stop(67%, #f7f7f7), color-stop(100%, #fcfcfc));
background-image: -webkit-linear-gradient(#ffffff 1%, #e2e2e2, #f7f7f7, #fcfcfc);
background-image: -moz-linear-gradient(#ffffff 1%, #e2e2e2, #f7f7f7, #fcfcfc);
background-image: -o-linear-gradient(#ffffff 1%, #e2e2e2, #f7f7f7, #fcfcfc);
background-image: linear-gradient(#ffffff 1%, #e2e2e2, #f7f7f7, #fcfcfc); }
body #stats .sc-button.is-active {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #efefef), color-stop(34%, #d3d3d3), color-stop(67%, #e8e8e8), color-stop(100%, #ededed));
background-image: -webkit-linear-gradient(#efefef 1%, #d3d3d3, #e8e8e8, #ededed);
background-image: -moz-linear-gradient(#efefef 1%, #d3d3d3, #e8e8e8, #ededed);
background-image: -o-linear-gradient(#efefef 1%, #d3d3d3, #e8e8e8, #ededed);
background-image: linear-gradient(#efefef 1%, #d3d3d3, #e8e8e8, #ededed); }
body input[type='text'] {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 0 0 10px -2px rgba(0, 0, 0, 0.6);
-webkit-box-shadow: 0 0 10px -2px rgba(0, 0, 0, 0.6);
-o-box-shadow: 0 0 10px -2px rgba(0, 0, 0, 0.6);
box-shadow: 0 0 10px -2px rgba(0, 0, 0, 0.6);
color: #999;
background-color: #f0f0f0;
width: 588px;
font-size: 30px;
font-family: Helvetica, sans-serif;
padding: 5px;
border: 1px solid #bbbbbb;
font-weight: 500; }
body input[type='text']::-webkit-input-placeholder {
color: #aaa; }
body h1 {
-moz-border-radius-topleft: 8px;
-webkit-border-top-left-radius: 8px;
-o-border-top-left-radius: 8px;
-ms-border-top-left-radius: 8px;
-khtml-border-top-left-radius: 8px;
border-top-left-radius: 8px;
-moz-border-radius-topright: 8px;
-webkit-border-top-right-radius: 8px;
-o-border-top-right-radius: 8px;
-ms-border-top-right-radius: 8px;
-khtml-border-top-right-radius: 8px;
border-top-right-radius: 8px;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(49%, #f4f4f4), color-stop(51%, #ededed), color-stop(100%, #dedede));
background-image: -webkit-linear-gradient(#ffffff, #f4f4f4 49%, #ededed 51%, #dedede);
background-image: -moz-linear-gradient(#ffffff, #f4f4f4 49%, #ededed 51%, #dedede);
background-image: -o-linear-gradient(#ffffff, #f4f4f4 49%, #ededed 51%, #dedede);
background-image: linear-gradient(#ffffff, #f4f4f4 49%, #ededed 51%, #dedede);
text-shadow: white 0 1px 1px;
font-size: 15px;
position: absolute;
width: 600px;
height: 20px;
color: #53565e;
top: 0;
left: 0;
padding: 5px 10px;
border-bottom: 1px solid #bbbbbb; }
body .sc-checkbox input[type="checkbox"] {
margin-right: 7px; }
body ul {
margin: 10px 0 2px 0; }
body ul li {
padding: 5px; }
body ul li.is-done {
color: #B7B7B7;
text-decoration: line-through; }
body ul li:nth-child(odd) {
background-color: #F7F7F7; }
*/
/*new additions*/
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.4em;
background: #eeeeee;
color: #333333;
}
#todoapp {
width: 480px;
margin: 0 auto 40px;
background: white;
padding: 20px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
-o-border-bottom-left-radius: 5px;
-ms-border-bottom-left-radius: 5px;
-khtml-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
-o-border-bottom-right-radius: 5px;
-ms-border-bottom-right-radius: 5px;
-khtml-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
}
#todoapp h1 {
font-size: 36px;
font-weight: bold;
text-align: center;
padding: 20px 0 30px 0;
line-height: 1;
}
#create-todo {
position: relative;
}
#create-todo input {
width: 466px;
font-size: 24px;
font-family: inherit;
line-height: 1.4em;
border: 0;
outline: none;
padding: 6px;
border: 1px solid #999999;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#create-todo input::-webkit-input-placeholder {
font-style: italic;
}
#create-todo span {
position: absolute;
z-index: 999;
width: 170px;
left: 50%;
margin-left: -85px;
}
#todo-list {
margin-top: 10px;
}
#todo-list li {
padding: 12px 20px 11px 0;
position: relative;
font-size: 24px;
line-height: 1.1em;
border-bottom: 1px solid #cccccc;
}
#todo-list li:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
#todo-list li.editing {
padding: 0;
border-bottom: 0;
}
#todo-list .editing .display,
#todo-list .edit {
display: none;
}
#todo-list .editing .edit {
display: block;
}
#todo-list .editing input {
width: 444px;
font-size: 24px;
font-family: inherit;
margin: 0;
line-height: 1.6em;
border: 0;
outline: none;
padding: 10px 7px 0px 27px;
border: 1px solid #999999;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#todo-list .check {
position: relative;
top: 9px;
margin: 0 10px 0 7px;
float: left;
}
#todo-list .done .todo-content {
text-decoration: line-through;
color: #777777;
}
#todo-list .todo-destroy {
position: absolute;
right: 5px;
top: 14px;
display: none;
cursor: pointer;
width: 20px;
height: 20px;
background: url(destroy.png) no-repeat 0 0;
}
#todo-list li:hover .todo-destroy {
display: block;
}
#todo-list .todo-destroy:hover {
background-position: 0 -20px;
}
#todo-stats {
*zoom: 1;
margin-top: 10px;
color: #777777;
}
#todo-stats:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
#todo-stats .todo-count {
float: left;
}
#todo-stats .todo-count .number {
font-weight: bold;
color: #333333;
}
#todo-stats .todo-clear {
float: right;
}
#todo-stats .todo-clear a {
color: #777777;
font-size: 12px;
}
#todo-stats .todo-clear a:visited {
color: #777777;
}
#todo-stats .todo-clear a:hover {
color: #336699;
}
#instructions {
width: 520px;
margin: 10px auto;
color: #777777;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#instructions a {
color: #336699;
}
#credits {
width: 520px;
margin: 30px auto;
color: #999;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#credits a {
color: #888;
}
/* line 109 */
#todoapp #todo-stats {
*zoom: 1;
margin-top: 10px;
color: #555555;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
-o-border-bottom-left-radius: 5px;
-ms-border-bottom-left-radius: 5px;
-khtml-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
-o-border-bottom-right-radius: 5px;
-ms-border-bottom-right-radius: 5px;
-khtml-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
background: #f4fce8;
border-top: 1px solid #ededed;
padding: 0 20px;
line-height: 36px;
}
/* line 22, /opt/ree/lib/ruby/gems/1.8/gems/compass-0.10.5/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
#todoapp #todo-stats:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
/* line 118 */
#todoapp #todo-stats .todo-count {
float: left;
}
/* line 120 */
#todoapp #todo-stats .todo-count .number {
font-weight: bold;
color: #555555;
}
/* line 123 */
#todoapp #todo-stats .todo-clear {
float: right;
}
/* line 125 */
#todoapp #todo-stats button {
display: block;
line-height: 20px;
text-decoration: none;
-moz-border-radius: 12px;
-webkit-border-radius: 12px;
-o-border-radius: 12px;
-ms-border-radius: 12px;
-khtml-border-radius: 12px;
border-radius: 12px;
background: rgba(0, 0, 0, 0.1);
color: #555555;
font-size: 11px;
margin-top: 8px;
padding: 0 10px 1px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
float:right;
}
/* line 136 */
#todoapp #todo-stats button:hover {
background: rgba(0, 0, 0, 0.15);
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
}
#todos { display:block}
@import "compass/css3";
@import "compass/reset";
/* CSS Reset */
@include global-reset;
body {
line-height: 1;
font-family: "Lucida Grande", sans-serif;
font-size: 13px;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/* App CSS */
body, html {
color: #777;
background-color: #F2F4F5;
}
.sc-view {
position: relative;
overflow: visible;
}
$width: 600px;
$border: 1px solid #bbb;
body {
@include box-shadow(rgba(0,0,0,0.6) 0 0 1px);
@include border-radius(8px);
$padding: 10px;
$header-height: 20px;
position: absolute;
width: $width;
left: 50%;
margin-top: 38px;
border: $border;
margin-left: -300px;
background-color: #fff;
padding: ($header-height + $padding * 2) $padding $padding;
.mark-all-done label {
margin-left: 5px;
font-weight: bold;
}
#stats {
overflow: hidden;
width: 100%;
padding: 5px $padding;
margin: $padding ($padding * -1);
background-color: #eee;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
line-height: 25px;
.remaining {
float: left;
}
.sc-button {
@include background-image(linear-gradient(#F9F9F9 1%, #DDD, #F2F2F2, #F7F7F7));
border: 1px solid #828282;
color: #000;
float: right;
padding: 5px;
&:hover {
@include background-image(linear-gradient(#FFF 1%, #E2E2E2, #F7F7F7, #FCFCFC));
}
&.is-active {
@include background-image(linear-gradient(#EFEFEF 1%, #D3D3D3, #E8E8E8, #EDEDED));
}
}
}
input[type='text'] {
@include border-radius(5px);
@include single-box-shadow(rgba(0,0,0,0.6), 0, 0, 10px, -2px);
color: #999;
background-color: rgb(240,240,240);
width: $width - ($padding) - 2px;
font-size: 30px;
font-family: Helvetica, sans-serif;
padding: 5px;
border: $border;
font-weight: 500;
&::-webkit-input-placeholder {
color: #aaa;
}
}
h1 {
@include border-top-radius(8px);
@include background-image(linear-gradient(color-stops(white, rgb(244,244,244) 49%, rgb(237,237,237) 51%, #dedede)));
@include single-text-shadow(white, 0, 1px, 1px);
font-size: 15px;
position: absolute;
width: $width;
height: $header-height;
color: rgb(83,86,94);
top: 0;
left: 0;
padding: ($padding / 2) $padding;
border-bottom: $border;
}
.sc-checkbox {
input[type="checkbox"] {
margin-right: 7px;
}
}
ul {
margin: 10px 0 2px 0;
li {
padding: 5px;
&.is-done {
color: #B7B7B7;
text-decoration: line-through;
}
}
li:nth-child(odd) {
background-color: #F7F7F7;
}
}
}
<!doctype html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]--> <!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]--> <!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]--> <!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="css/style.css?v=2">
<link rel="stylesheet" href="css/todos.css">
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div id="todoapp">
<div class="title">
<h1>Todos</h1>
</div>
<div class="content">
<script type="text/html">
{{#view id="create-todo"}}
{{view Todos.CreateTodoView id="new-todo" placeholder="What needs to be done?"}}
{{/view}}
{{view SC.Checkbox class="mark-all-done"
title="Mark all as done"
valueBinding="Todos.todosController.allAreDone"}}
{{#view id="todos"}}
{{#collection id="todo-list" contentBinding="Todos.todosController" tagName="ul" itemClassBinding="content.isDone"}}
{{view SC.Checkbox titleBinding="parentView.content.title"
valueBinding="parentView.content.isDone"}}
{{/collection}}
{{/view}}
<!-- Insert this after the CreateTodoView and before the collection. -->
{{#view Todos.StatsView id="todo-stats"}}
{{#view SC.Button classBinding="isActive"
target="Todos.todosController"
action="clearCompletedTodos"}}
Clear Completed
{{/view}}
{{remainingString}} remaining
{{/view}}
</script>
</div>
</div>
<div id="credits">
Credits:
<br />
Tom Dale, SproutCore, Updates: Addy Osmani
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.6.1.min.js"%3E%3C/script%3E'))</script>
<script src="js/libs/sproutcore-2.0.a.2.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
Todos = SC.Application.create();
Todos.Todo = SC.Object.extend({
title: null,
isDone: false
});
Todos.todosController = SC.ArrayProxy.create({
content: [],
createTodo: function(title) {
var todo = Todos.Todo.create({ title: title });
this.pushObject(todo);
},
clearCompletedTodos: function() {
this.filterProperty('isDone', true).forEach(this.removeObject, this);
},
remaining: function() {
return this.filterProperty('isDone', false).get('length');
}.property('@each.isDone'),
allAreDone: function(key, value) {
if (value !== undefined) {
this.setEach('isDone', value);
return value;
} else {
return !!this.get('length') && this.everyProperty('isDone', true);
}
}.property('@each.isDone')
});
Todos.StatsView = SC.View.extend({
remainingBinding: 'Todos.todosController.remaining',
remainingString: function() {
var remaining = this.get('remaining');
return remaining + (remaining === 1 ? " item" : " items");
}.property('remaining')
});
Todos.CreateTodoView = SC.TextField.extend({
insertNewline: function() {
var value = this.get('value');
if (value) {
Todos.todosController.createTodo(value);
this.set('value', '');
}
}
});
/*!
* jQuery JavaScript Library v1.6.1
* http://jquery.com/
*
* Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu May 12 15:04:36 2011 -0400
*/
(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("<!doctype><html><body></body></html>");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bF.test(a)?d(a,e):b_(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bU,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bQ),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bD(a,b,c){var d=b==="width"?bx:by,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bn(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bm(a){f.nodeName(a,"input")?bl(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bl)}function bl(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bk(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bj(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bi(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bh(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(S.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem
)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,O(a.origType,a.selector),f.extend({},a,{handler:N,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,O(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?F:E):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=F;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=F;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=F,this.stopPropagation()},isDefaultPrevented:E,isPropagationStopped:E,isImmediatePropagationStopped:E};var G=function(a){var b=a.relatedTarget;a.type=a.data;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&f.event.handle.apply(this,arguments)}catch(d){}},H=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?H:G,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?H:G)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&L("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&L("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var I,J=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var M={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||E,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=y.exec(h),k="",j&&(k=j[0],h=h.replace(y,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,M[h]?(a.push(M[h]+k),h=h+k):h=(M[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+O(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+O(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=f.expr.match.POS,V={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(X(this,a,!1),"not",a)},filter:function(a){return this.pushStack(X(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=U.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/<tbody/i,bb=/<|&#?\w+;/,bc=/<(?:script|object|embed|option|style)/i,bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bh(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bn)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bc.test(a[0])&&(f.support.checkClone||!bd.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||
b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1></$2>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bm(k[i]);else bm(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bo=/alpha\([^)]*\)/i,bp=/opacity=([^)]*)/,bq=/-([a-z])/ig,br=/([A-Z]|^ms)/g,bs=/^-?\d+(?:px)?$/i,bt=/^-?\d/,bu=/^[+\-]=/,bv=/[^+\-\.\de]+/g,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB,bC=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bu.test(d)&&(d=+d.replace(bv,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bq,bC)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bD(a,b,d):f.swap(a,bw,function(){e=bD(a,b,d)});if(e<=0){e=bz(a,b,b),e==="0px"&&bB&&(e=bB(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bs.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cv(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cm.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cn.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cq||cs(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!co&&(cr?(co=1,g=function(){co&&(cr(g),e.tick())},cr(g)):co=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cq||cs(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// Portions ©2008-2011 Apple Inc. All rights reserved.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
(function(){var a=function(){var a={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,statements:6,simpleInverse:7,statement:8,openInverse:9,closeBlock:10,openBlock:11,mustache:12,partial:13,CONTENT:14,COMMENT:15,OPEN_BLOCK:16,inMustache:17,CLOSE:18,OPEN_INVERSE:19,OPEN_ENDBLOCK:20,path:21,OPEN:22,OPEN_UNESCAPED:23,OPEN_PARTIAL:24,params:25,hash:26,param:27,STRING:28,hashSegments:29,hashSegment:30,ID:31,EQUALS:32,pathSegments:33,SEP:34,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"STRING",31:"ID",32:"EQUALS",34:"SEP"},productions_:[0,[3,2],[4,3],[4,1],[4,0],[6,1],[6,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[7,2],[17,3],[17,2],[17,2],[17,1],[25,2],[25,1],[27,1],[27,1],[26,1],[29,2],[29,1],[30,3],[30,3],[21,1],[33,3],[33,1]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=new d.ProgramNode(f[h-2],f[h]);break;case 3:this.$=new d.ProgramNode(f[h]);break;case 4:this.$=new d.ProgramNode([]);break;case 5:this.$=[f[h]];break;case 6:f[h-1].push(f[h]),this.$=f[h-1];break;case 7:this.$=new d.InverseNode(f[h-2],f[h-1],f[h]);break;case 8:this.$=new d.BlockNode(f[h-2],f[h-1],f[h]);break;case 9:this.$=f[h];break;case 10:this.$=f[h];break;case 11:this.$=new d.ContentNode(f[h]);break;case 12:this.$=new d.CommentNode(f[h]);break;case 13:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 14:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 15:this.$=f[h-1];break;case 16:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 17:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1],!0);break;case 18:this.$=new d.PartialNode(f[h-1]);break;case 19:this.$=new d.PartialNode(f[h-2],f[h-1]);break;case 20:break;case 21:this.$=[[f[h-2]].concat(f[h-1]),f[h]];break;case 22:this.$=[[f[h-1]].concat(f[h]),null];break;case 23:this.$=[[f[h-1]],f[h]];break;case 24:this.$=[[f[h]],null];break;case 25:f[h-1].push(f[h]),this.$=f[h-1];break;case 26:this.$=[f[h]];break;case 27:this.$=f[h];break;case 28:this.$=new d.StringNode(f[h]);break;case 29:this.$=new d.HashNode(f[h]);break;case 30:f[h-1].push(f[h]),this.$=f[h-1];break;case 31:this.$=[f[h]];break;case 32:this.$=[f[h-2],f[h]];break;case 33:this.$=[f[h-2],new d.StringNode(f[h])];break;case 34:this.$=new d.IdNode(f[h]);break;case 35:f[h-2].push(f[h]),this.$=f[h-2];break;case 36:this.$=[f[h]]}},table:[{3:1,4:2,5:[2,4],6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{1:[3]},{5:[1,16]},{5:[2,3],7:17,8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,19],20:[2,3],22:[1,13],23:[1,14],24:[1,15]},{5:[2,5],14:[2,5],15:[2,5],16:[2,5],19:[2,5],20:[2,5],22:[2,5],23:[2,5],24:[2,5]},{4:20,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{4:21,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{17:22,21:23,31:[1,25],33:24},{17:26,21:23,31:[1,25],33:24},{17:27,21:23,31:[1,25],33:24},{17:28,21:23,31:[1,25],33:24},{21:29,31:[1,25],33:24},{1:[2,1]},{6:30,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{5:[2,6],14:[2,6],15:[2,6],16:[2,6],19:[2,6],20:[2,6],22:[2,6],23:[2,6],24:[2,6]},{17:22,18:[1,31],21:23,31:[1,25],33:24},{10:32,20:[1,33]},{10:34,20:[1,33]},{18:[1,35]},{18:[2,24],21:40,25:36,26:37,27:38,28:[1,41],29:39,30:42,31:[1,43],33:24},{18:[2,34],28:[2,34],31:[2,34],34:[1,44]},{18:[2,36],28:[2,36],31:[2,36],34:[2,36]},{18:[1,45]},{18:[1,46]},{18:[1,47]},{18:[1,48],21:49,31:[1,25],33:24},{5:[2,2],8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,2],22:[1,13],23:[1,14],24:[1,15]},{14:[2,20],15:[2,20],16:[2,20],19:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,7],14:[2,7],15:[2,7],16:[2,7],19:[2,7],20:[2,7],22:[2,7],23:[2,7],24:[2,7]},{21:50,31:[1,25],33:24},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{18:[2,22],21:40,26:51,27:52,28:[1,41],29:39,30:42,31:[1,43],33:24},{18:[2,23]},{18:[2,26],28:[2,26],31:[2,26]},{18:[2,29],30:53,31:[1,54]},{18:[2,27],28:[2,27],31:[2,27]},{18:[2,28],28:[2,28],31:[2,28]},{18:[2,31],31:[2,31]},{18:[2,36],28:[2,36],31:[2,36],32:[1,55],34:[2,36]},{31:[1,56]},{14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,17],14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]},{18:[1,57]},{18:[1,58]},{18:[2,21]},{18:[2,25],28:[2,25],31:[2,25]},{18:[2,30],31:[2,30]},{32:[1,55]},{21:59,28:[1,60],31:[1,25],33:24},{18:[2,35],28:[2,35],31:[2,35],34:[2,35]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{18:[2,32],31:[2,32]},{18:[2,33],31:[2,33]}],defaultActions:{16:[2,1],37:[2,23],51:[2,21]},parseError:function(a,b){throw new Error(a)},parse:function(a){function o(){var a;a=b.lexer.lex()||1,typeof a!="number"&&(a=b.symbols_[a]||a);return a}function n(a){c.length=c.length-2*a,d.length=d.length-a,e.length=e.length-a}var b=this,c=[0],d=[null],e=[],f=this.table,g="",h=0,i=0,j=0,k=2,l=1;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var m=this.lexer.yylloc;e.push(m),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var p,q,r,s,t,u,v={},w,x,y,z;for(;;){r=c[c.length-1],this.defaultActions[r]?s=this.defaultActions[r]:(p==null&&(p=o()),s=f[r]&&f[r][p]);if(typeof s=="undefined"||!s.length||!s[0]){if(!j){z=[];for(w in f[r])this.terminals_[w]&&w>2&&z.push("'"+this.terminals_[w]+"'");var A="";this.lexer.showPosition?A="Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+z.join(", "):A="Parse error on line "+(h+1)+": Unexpected "+(p==1?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:m,expected:z})}if(j==3){if(p==l)throw new Error(A||"Parsing halted.");i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,p=o()}for(;;){if(k.toString()in f[r])break;if(r==0)throw new Error(A||"Parsing halted.");n(1),r=c[c.length-1]}q=p,p=k,r=c[c.length-1],s=f[r]&&f[r][k],j=3}if(s[0]instanceof Array&&s.length>1)throw new Error("Parse Error: multiple actions possible at state: "+r+", token: "+p);switch(s[0]){case 1:c.push(p),d.push(this.lexer.yytext),e.push(this.lexer.yylloc),c.push(s[1]),p=null,q?(p=q,q=null):(i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,j>0&&j--);break;case 2:x=this.productions_[s[1]][1],v.$=d[d.length-x],v._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},u=this.performAction.call(v,g,i,h,this.yy,s[1],d,e);if(typeof u!="undefined")return u;x&&(c=c.slice(0,-1*x*2),d=d.slice(0,-1*x),e=e.slice(0,-1*x)),c.push(this.productions_[s[1]][0]),d.push(v.$),e.push(v._$),y=f[c[c.length-2]][c[c.length-1]],c.push(y);break;case 3:return!0}}return!0}},f=function(){var a={EOF:1,parseError:function(a,b){if(this.yy.parseError)this.yy.parseError(a,b);else throw new Error(a)},setInput:function(a){this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};return this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.match+=a,this.matched+=a;var b=a.match(/\n/);b&&this.yylineno++,this._input=this._input.slice(1);return a},unput:function(a){this._input=a+this._input;return this},more:function(){this._more=!0;return this},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;a.length<20&&(a+=this._input.substr(0,20-a.length));return(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d;this._more||(this.yytext="",this.match="");var e=this._currentRules();for(var f=0;f<e.length;f++){b=this._input.match(this.rules[e[f]]);if(b){d=b[0].match(/\n.*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-1:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,e[f],this.conditionStack[this.conditionStack.length-1]);if(a)return a;return}}if(this._input==="")return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return typeof a!="undefined"?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules}};a.performAction=function(a,b,c,d){var e=d;switch(c){case 0:this.begin("mu");if(b.yytext)return 14;break;case 1:return 14;case 2:return 24;case 3:return 16;case 4:return 20;case 5:return 19;case 6:return 19;case 7:return 23;case 8:return 23;case 9:b.yytext=b.yytext.substr(3,b.yyleng-5),this.begin("INITIAL");return 15;case 10:return 22;case 11:return 32;case 12:return 31;case 13:return 31;case 14:return 34;case 15:break;case 16:this.begin("INITIAL");return 18;case 17:this.begin("INITIAL");return 18;case 18:b.yytext=b.yytext.substr(1,b.yyleng-2).replace(/\\"/g,'"');return 28;case 19:return 31;case 20:return"INVALID";case 21:return 5}},a.rules=[/^[^\x00]*?(?=(\{\{))/,/^[^\x00]+/,/^\{\{>/,/^\{\{#/,/^\{\{\//,/^\{\{\^/,/^\{\{\s*else\b/,/^\{\{\{/,/^\{\{&/,/^\{\{![\s\S]*?\}\}/,/^\{\{/,/^=/,/^\.(?=[} ])/,/^\.\./,/^[/.]/,/^\s+/,/^\}\}\}/,/^\}\}/,/^"(\\["]|[^"])*"/,/^[a-zA-Z0-9_-]+(?=[=} /.])/,/^./,/^$/],a.conditions={mu:{rules:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],inclusive:!1},INITIAL:{rules:[0,1,21],inclusive:!0}};return a}();a.lexer=f;return a}();Handlebars={},Handlebars.VERSION="1.0.beta.1",Handlebars.Parser=a,Handlebars.parse=function(a){Handlebars.Parser.yy=Handlebars.AST;return Handlebars.Parser.parse(a)},Handlebars.print=function(a){return(new Handlebars.PrintVisitor).accept(a)},Handlebars.helpers={},Handlebars.partials={},Handlebars.registerHelper=function(a,b,c){c&&(b.not=c),this.helpers[a]=b},Handlebars.registerPartial=function(a,b){this.partials[a]=b},Handlebars.registerHelper("helperMissing",function(a){if(arguments.length===2)return undefined;throw new Error("Could not find property '"+a+"'")}),Handlebars.registerHelper("blockHelperMissing",function(a,b,c){c=c||function(){};var d="",e=Object.prototype.toString.call(a);e==="[object Function]"&&(a=a());if(a===!0)return b(this);if(a===!1||a==null)return c(this);if(e==="[object Array]"){if(a.length>0)for(var f=0,g=a.length;f<g;f++)d=d+b(a[f]);else d=c(this);return d}return b(a)},function(a,b){return b(a)}),Handlebars.registerHelper("each",function(a,b,c){var d="";if(a&&a.length>0)for(var e=0,f=a.length;e<f;e++)d=d+b(a[e]);else d=c(this);return d}),Handlebars.registerHelper("if",function(a,b,c){return!a||a==[]?c(this):b(this)}),Handlebars.registerHelper("unless",function(a,b,c){return Handlebars.helpers["if"].call(this,a,c,b)}),Handlebars.registerHelper("with",function(a,b){return b(a)}),Handlebars.logger={DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){}},Handlebars.log=function(a,b){Handlebars.logger.log(a,b)},function(){Handlebars.AST={},Handlebars.AST.ProgramNode=function(a,b){this.type="program",this.statements=a,b&&(this.inverse=new Handlebars.AST.ProgramNode(b))},Handlebars.AST.MustacheNode=function(a,b,c){this.type="mustache",this.id=a[0],this.params=a.slice(1),this.hash=b,this.escaped=!c},Handlebars.AST.PartialNode=function(a,b){this.type="partial",this.id=a,this.context=b};var a=function(a,b){if(a.original!==b.original)throw new Handlebars.Exception(a.original+" doesn't match "+b.original)};Handlebars.AST.BlockNode=function(b,c,d){a(b.id,d),this.type="block",this.mustache=b,this.program=c},Handlebars.AST.InverseNode=function(b,c,d){a(b.id,d),this.type="inverse",this.mustache=b,this.program=c},Handlebars.AST.ContentNode=function(a){this.type="content",this.string=a},Handlebars.AST.HashNode=function(a){this.type="hash",this.pairs=a},Handlebars.AST.IdNode=function(a){this.type="ID",this.original=a.join(".");var b=[],c=0;for(var d=0,e=a.length;d<e;d++){var f=a[d];if(f==="..")c++;else{if(f==="."||f==="this")continue;b.push(f)}}this.parts=b,this.string=b.join("."),this.depth=c,this.isSimple=b.length===1&&c===0},Handlebars.AST.StringNode=function(a){this.type="STRING",this.string=a},Handlebars.AST.CommentNode=function(a){this.type="comment",this.comment=a}}(),Handlebars.Visitor=function(){},Handlebars.Visitor.prototype={accept:function(a){return this[a.type](a)}},Handlebars.Exception=function(a){this.message=a},Handlebars.SafeString=function(a){this.string=a},Handlebars.SafeString.prototype.toString=function(){return this.string.toString()},function(){var a={"<":"&lt;",">":"&gt;"},b=/&(?!\w+;)|[<>]/g,c=/[&<>]/,d=function(b){return a[b]||"&amp;"};Handlebars.Utils={escapeExpression:function(a){if(a instanceof Handlebars.SafeString)return a.toString();if(a==null||a===!1)return"";if(!c.test(a))return a;return a.replace(b,d)},isEmpty:function(a){return typeof a=="undefined"?!0:a===null?!0:a===!1?!0:Object.prototype.toString.call(a)==="[object Array]"&&a.length===0?!0:!1}}}(),Handlebars.Compiler=function(){},Handlebars.JavaScriptCompiler=function(){},function(a,b){a.OPCODE_MAP={appendContent:1,getContext:2,lookupWithHelpers:3,lookup:4,append:5,invokeMustache:6,appendEscaped:7,pushString:8,truthyOrFallback:9,functionOrFallback:10,invokeProgram:11,invokePartial:12,push:13,invokeInverse:14,assignToHash:15,pushStringParam:16},a.MULTI_PARAM_OPCODES={appendContent:1,getContext:1,lookupWithHelpers:1,lookup:1,invokeMustache:2,pushString:1,truthyOrFallback:1,functionOrFallback:1,invokeProgram:2,invokePartial:1,push:1,invokeInverse:1,assignToHash:1,pushStringParam:1},a.DISASSEMBLE_MAP={};for(var c in a.OPCODE_MAP){var d=a.OPCODE_MAP[c];a.DISASSEMBLE_MAP[d]=c}a.multiParamSize=function(b){return a.MULTI_PARAM_OPCODES[a.DISASSEMBLE_MAP[b]]},a.prototype={compiler:a,disassemble:function(){var b=this.opcodes,c,d,e=[],f,g,h;for(var i=0,j=b.length;i<j;i++){c=b[i];if(c==="DECLARE")g=b[++i],h=b[++i],e.push("DECLARE "+g+" = "+h);else{f=a.DISASSEMBLE_MAP[c];var k=a.multiParamSize(c),l=[];for(var m=0;m<k;m++)d=b[++i],typeof d=="string"&&(d='"'+d.replace("\n","\\n")+'"'),l.push(d);f=f+" "+l.join(" "),e.push(f)}}return e.join("\n")},guid:0,compile:function(a,b){this.children=[],this.depths={list:[]},this.options=b||{};return this.program(a)},accept:function(a){return this[a.type](a)},program:function(a){var b=a.statements,c;this.opcodes=[];for(var d=0,e=b.length;d<e;d++)c=b[d],this[c.type](c);this.depths.list=this.depths.list.sort(function(a,b){return a-b});return this},compileProgram:function(a){var b=(new this.compiler).compile(a,this.options),c=this.guid++;this.usePartial=this.usePartial||b.usePartial,this.children[c]=b;for(var d=0,e=b.depths.list.length;d<e;d++){depth=b.depths.list[d];if(depth<2)continue;this.addDepth(depth-1)}return c},block:function(a){var b=a.mustache,c,d,e,f,g=this.setupStackForMustache(b),h=this.compileProgram(a.program);a.program.inverse&&(f=this.compileProgram(a.program.inverse),this.declare("inverse",f)),this.opcode("invokeProgram",h,g.length),this.declare("inverse",null),this.opcode("append")},inverse:function(a){this.ID(a.mustache.id);var b=this.compileProgram(a.program);this.opcode("invokeInverse",b),this.opcode("append")},hash:function(a){var b=a.pairs,c,d;this.opcode("push","{}");for(var e=0,f=b.length;e<f;e++)c=b[e],d=c[1],this.accept(d),this.opcode("assignToHash",c[0])},partial:function(a){var b=a.id;this.usePartial=!0,a.context?this.ID(a.context):this.opcode("push","context"),this.opcode("invokePartial",b.original),this.opcode("append")},content:function(a){this.opcode("appendContent",a.string)},mustache:function(a){var b=this.setupStackForMustache(a);this.opcode("invokeMustache",b.length,a.id.original),a.escaped?this.opcode("appendEscaped"):this.opcode("append")},ID:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth),this.opcode("lookupWithHelpers",a.parts[0]||null);for(var b=1,c=a.parts.length;b<c;b++)this.opcode("lookup",a.parts[b])},STRING:function(a){this.opcode("pushString",a.string)},comment:function(){},pushParams:function(a){var b=a.length,c;while(b--)c=a[b],this.options.stringParams?(c.depth&&this.addDepth(c.depth),this.opcode("getContext",c.depth||0),this.opcode("pushStringParam",c.string)):this[c.type](c)},opcode:function(b,c,d){this.opcodes.push(a.OPCODE_MAP[b]),c!==undefined&&this.opcodes.push(c),d!==undefined&&this.opcodes.push(d)},declare:function(a,b){this.opcodes.push("DECLARE"),this.opcodes.push(a),this.opcodes.push(b)},addDepth:function(a){a!==0&&(this.depths[a]||(this.depths[a]=!0,this.depths.list.push(a)))},setupStackForMustache:function(a){var b=a.params;this.pushParams(b),a.hash?this.hash(a.hash):this.opcode("push","{}"),this.ID(a.id);return b}},b.prototype={nameLookup:function(a,c,d){return b.RESERVED_WORDS[c]||c.indexOf("-")!==-1?a+"['"+c+"']":a+"."+c},appendToBuffer:function(a){return"buffer = buffer + "+a+";"},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b){this.environment=a,this.options=b||{},this.preamble(),this.stackSlot=0,this.stackVars=[],this.registers={list:[]},this.compileChildren(a,b),Handlebars.log(Handlebars.logger.DEBUG,a.disassemble()+"\n\n");var c=a.opcodes,d,e,f,h;this.i=0;for(g=c.length;this.i<g;this.i++)d=this.nextOpcode(0),d[0]==="DECLARE"?(this.i=this.i+2,this[d[1]]=d[2]):(this.i=this.i+d[1].length,this[d[0]].apply(this,d[1]));return this.createFunction()},nextOpcode:function(b){var c=this.environment.opcodes,d=c[this.i+b],e,f,g,h;if(d==="DECLARE"){e=c[this.i+1],f=c[this.i+2];return["DECLARE",e,f]}e=a.DISASSEMBLE_MAP[d],g=a.multiParamSize(d),h=[];for(var i=0;i<g;i++)h.push(c[this.i+i+1+b]);return[e,h]},eat:function(a){this.i=this.i+a.length},preamble:function(){var a=[];a.push("var buffer = "+this.initializeBuffer()+", currentContext = context");var b="helpers = helpers || Handlebars.helpers;";this.environment.usePartial&&(b=b+" partials = partials || Handlebars.partials;"),a.push(b),this.lastContext=0,this.source=a},createFunction:function(){var a={escapeExpression:Handlebars.Utils.escapeExpression,invokePartial:Handlebars.VM.invokePartial,programs:[],program:function(a,b,c,d){var e=this.programs[a];if(d)return Handlebars.VM.program(this.children[a],b,c,d);if(e)return e;e=this.programs[a]=Handlebars.VM.program(this.children[a],b,c);return e},programWithDepth:Handlebars.VM.programWithDepth,noop:Handlebars.VM.noop},b=this.stackVars.concat(this.registers.list);b.length>0&&(this.source[0]=this.source[0]+", "+b.join(", ")),this.source[0]=this.source[0]+";",this.source.push("return buffer;");var c=["Handlebars","context","helpers","partials"];this.options.data&&c.push("data");for(var d=0,e=this.environment.depths.list.length;d<e;d++)c.push("depth"+this.environment.depths.list[d]);c.length===4&&!this.environment.usePartial&&c.pop(),c.push(this.source.join("\n"));var f=Function.apply(this,c);f.displayName="Handlebars.js",Handlebars.log(Handlebars.logger.DEBUG,f.toString()+"\n\n"),a.render=f,a.children=this.environment.children;return function(b,c,d){try{c=c||{};var e=[Handlebars,b,c.helpers,c.partials,c.data],f=Array.prototype.slice.call(arguments,2);e=e.concat(f);return a.render.apply(a,e)}catch(g){throw g}}},appendContent:function(a){this.source.push(this.appendToBuffer(this.quotedString(a)))},append:function(){var a=this.popStack();this.source.push("if("+a+" || "+a+" === 0) { "+this.appendToBuffer(a)+" }")},appendEscaped:function(){var a=this.nextOpcode(1),b="";a[0]==="appendContent"&&(b=" + "+this.quotedString(a[1][0]),this.eat(a)),this.source.push(this.appendToBuffer("this.escapeExpression("+this.popStack()+")"+b))},getContext:function(a){this.lastContext!==a&&(this.lastContext=a,a===0?this.source.push("currentContext = context;"):this.source.push("currentContext = depth"+a+";"))},lookupWithHelpers:function(a){if(a){var b=this.nextStack(),c="if('"+a+"' in helpers) { "+b+" = "+this.nameLookup("helpers",a,"helper")+"; } else { "+b+" = "+this.nameLookup("currentContext",a,"context")+"; }";this.source.push(c)}else this.pushStack("currentContext")},lookup:function(a){var b=this.topStack();this.source.push(b+" = "+this.nameLookup(b,a,"context")+";")},pushStringParam:function(a){this.pushStack("currentContext"),this.pushString(a)},pushString:function(a){this.pushStack(this.quotedString(a))},push:function(a){this.pushStack(a)},invokeMustache:function(a,b){this.populateParams(a,this.quotedString(b),"{}",null,function(a,b,c){this.source.push("else if("+c+"=== undefined) { "+a+" = helpers.helperMissing.call("+b+"); }"),this.source.push("else { "+a+" = "+c+"; }")})},invokeProgram:function(a,b){var c=this.programExpression(this.inverse),d=this.programExpression(a);this.populateParams(b,null,d,c,function(a,b,c){this.source.push("else { "+a+" = helpers.blockHelperMissing.call("+b+"); }")})},populateParams:function(a,b,c,d,e){var f=this.popStack(),g,h=[],i,j,k=this.popStack();this.register("tmp1",c),this.source.push("tmp1.hash = "+k+";"),this.options.stringParams&&this.source.push("tmp1.contexts = [];");for(var l=0;l<a;l++)i=this.popStack(),h.push(i),this.options.stringParams&&this.source.push("tmp1.contexts.push("+this.popStack()+");");d&&(this.source.push("tmp1.fn = tmp1;"),this.source.push("tmp1.inverse = "+d+";")),this.options.data&&this.source.push("tmp1.data = data;"),h.push("tmp1"),d&&h.push(d),this.populateCall(h,f,b||f,e)},populateCall:function(a,b,c,d){var e=["context"].concat(a).join(", "),f=["context"].concat(c).concat(a).join(", ");nextStack=this.nextStack(),this.source.push("if(typeof "+b+" === 'function') { "+nextStack+" = "+b+".call("+e+"); }"),d.call(this,nextStack,f,b)},invokeInverse:function(a){var b=this.programExpression(a),c=["context",this.topStack(),"this.noop",b];this.pushStack("helpers.blockHelperMissing.call("+c.join(", ")+")")},invokePartial:function(a){this.pushStack("this.invokePartial("+this.nameLookup("partials",a,"partial")+", '"+a+"', "+this.popStack()+", helpers, partials);")},assignToHash:function(a){var b=this.popStack(),c=this.topStack();this.source.push(c+"['"+a+"'] = "+b+";")},compiler:b,compileChildren:function(a,b){var c=a.children,d,e,f=[];for(var g=0,h=c.length;g<h;g++)d=c[g],e=new this.compiler,f[g]=e.compile(d,b);a.rawChildren=c,a.children=f},programExpression:function(a){if(a==null)return"this.noop";var b=[a,"helpers","partials"],c=this.environment.rawChildren[a].depths.list;this.options.data&&b.push("data");for(var d=0,e=c.length;d<e;d++)depth=c[d],depth===1?b.push("context"):b.push("depth"+(depth-1));this.environment.usePartial||(b[3]?b[2]="null":b.pop());if(c.length===0)return"this.program("+b.join(", ")+")";b[0]="this.children["+a+"]";return"this.programWithDepth("+b.join(", ")+")"},register:function(a,b){this.useRegister(a),this.source.push(a+" = "+b+";")},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},pushStack:function(a){this.source.push(this.nextStack()+" = "+a+";");return"stack"+this.stackSlot},nextStack:function(){this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot);return"stack"+this.stackSlot},popStack:function(){return"stack"+this.stackSlot--},topStack:function(){return"stack"+this.stackSlot},quotedString:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r")+'"'}};var e="break case catch continue default delete do else finally for function if in instanceof new return switch this throw try typeof var void while with null true false".split(" ");compilerWords=b.RESERVED_WORDS={};for(var f=0,g=e.length;f<g;f++)compilerWords[e[f]]=!0}(Handlebars.Compiler,Handlebars.JavaScriptCompiler),Handlebars.VM={programWithDepth:function(a,b,c,d,e){var f=Array.prototype.slice.call(arguments,4);return function(e,g){g=g||{},g={helpers:g.helpers||b,partials:g.partials||c,data:g.data||d};return a.apply(this,[e,g].concat(f))}},program:function(a,b,c,d){return function(e,f){f=f||{};return a(e,{helpers:f.helpers||b,partials:f.partials||c,data:f.data||d})}},noop:function(){return""},compile:function(a,b){var c=Handlebars.parse(a),d=(new Handlebars.Compiler).compile(c,b);return(new Handlebars.JavaScriptCompiler).compile(d,b)},invokePartial:function(a,b,c,d,e){if(a===undefined)throw new Handlebars.Exception("The partial "+b+" could not be found");if(a instanceof Function)return a(c,{helpers:d,partials:e});e[b]=Handlebars.VM.compile(a);return e[b](c,{helpers:d,partials:e})}},Handlebars.compile=Handlebars.VM.compile})(),function(){"undefined"==typeof SC&&(SC={},"undefined"!=typeof window&&(window.SC=window.SproutCore=SproutCore=SC)),SC.VERSION="2.0.alpha",SC.ENV="undefined"==typeof ENV?{}:ENV,window.sc_assert=function(a,b){"function"==typeof b&&(b=b()!==!1);if(!b)throw new Error("assertion failed: "+a)}}(),function(){SC.platform={},SC.platform.create=Object.create;if(!SC.platform.create){var a=function(){},b=a.prototype;SC.platform.create=function(c,d){a.prototype=c,c=new a,a.prototype=b;if(d!==undefined)for(var e in d){if(!d.hasOwnProperty(e))continue;SC.platform.defineProperty(c,e,d[e])}return c},SC.platform.create.isSimulated=!0}SC.platform.defineProperty=Object.defineProperty,SC.platform.hasPropertyAccessors=!0,SC.platform.defineProperty||(SC.platform.hasPropertyAccessors=!!SC.platform.defineProperty,SC.platform.defineProperty=function(a,b,c){sc_assert("property descriptor cannot have `get` or `set` on this platform",!c.get&&!c.set),a[b]=c.value},SC.platform.defineProperty.isSimulated=!0)}(),function(){var a="__sc"+Date.now(),b,c,d;b=0,c=[],d={};var e={configurable:!0,writable:!0,enumerable:!1},f=SC.platform.defineProperty,g=SC.platform.create;SC.GUID_KEY=a,SC.generateGuid=function(c,d){d||(d="sc");var g=d+b++;c&&(e.value=g,f(c,a,e),e.value=null);return g},SC.guidFor=function(e){if(e===undefined)return"(undefined)";if(e===null)return"(null)";var f,g,h=typeof e;switch(h){case"number":g=c[e],g||(g=c[e]="nu"+e);return g;case"string":g=d[e],g||(g=d[e]="st"+b++);return g;case"boolean":return e?"(true)":"(false)";default:if(e[a])return e[a];if(e===Object)return"(Object)";if(e===Array)return"(Array)";return SC.generateGuid(e,"sc")}};var h={writable:!0,confgurable:!1,enumerable:!1,value:null},i=SC.GUID_KEY+"_meta";SC.META_KEY=i;var j={descs:{},watching:{}};Object.freeze&&Object.freeze(j),SC.meta=function(a,b){var c=a[i];if(b===!1)return c||j;c?c.source!==a&&(c=a[i]=g(c),c.descs=g(c.descs),c.values=g(c.values),c.watching=g(c.watching),c.lastSetValues={},c.cache={},c.source=a):(f(a,i,h),c=a[i]={descs:{},watching:{},values:{},lastSetValues:{},cache:{},source:a},c.descs.constructor=null);return c},SC.wrap=function(a,b){function c(){}var d=function(){var d,e=this._super;this._super=b||c,d=a.apply(this,arguments),this._super=e;return d};d.base=a;return d},SC.isArray=function(a){if(!a||a.setInterval)return!1;if(Array.isArray&&Array.isArray(a))return!0;if(SC.Array&&SC.Array.detect(a))return!0;if(a.length!==undefined&&"object"==typeof a)return!0;return!1},SC.makeArray=function(a){if(a==null)return[];return SC.isArray(a)?a:[a]}}(),function(){function o(a,d){var e=l.test(d),f=!e&&j.test(d),g;if(!a||f)a=window;e&&(d=d.slice(5));var k=d.indexOf("*");k>0&&d[k-1]!=="."?(a&&b(a,!1).proto!==a?a=h(a,d.slice(0,k)):a=null,d=d.slice(k+1)):a===window&&(g=n(d),a=c(a,g),d=d.slice(g.length+1));if(!d||d.length===0)throw new Error("Invalid Path");i[0]=a,i[1]=d;return i}function n(a){return a.match(m)[0]}function h(a,b){var d=b.length,e,f,g;e=b.indexOf("*");if(e>0&&b[e-1]!==".")return h(h(a,b.slice(0,e)),b.slice(e+1));e=0;while(a&&e<d)f=b.indexOf(".",e),f<0&&(f=d),g=b.slice(e,f),a=g==="*"?a:c(a,g),e=f+1;return a}function g(a){sc_assert("must pass non-empty string to normalizePath()",a&&a!=="");if(a==="*")return a;var b=a[0];if(b===".")return"this"+a;if(b==="*"&&a[1]!==".")return"this."+a.slice(1);return a}var a=SC.platform.hasPropertyAccessors&&SC.ENV.USE_ACCESSORS;SC.USE_ACCESSORS=!!a;var b=SC.meta,c,d;c=function c(a,b){b===undefined&&"string"==typeof a&&(b=a,a=SC);if(!a)return undefined;var c=a[b];c===undefined&&"function"==typeof a.unknownProperty&&(c=a.unknownProperty(b));return c},d=function d(a,b,c){"object"!=typeof a||b in a?a[b]=c:"function"==typeof a.setUnknownProperty?a.setUnknownProperty(b,c):"function"==typeof a.unknownProperty?a.unknownProperty(b,c):a[b]=c;return c};if(!a){var e=c,f=d;c=function(a,c){c===undefined&&"string"==typeof a&&(c=a,a=SC);if(!a)return undefined;var d=b(a,!1).descs[c];return d?d.get(a,c):e(a,c)},d=function(a,c,d){var e=b(a,!1).descs[c];e?e.set(a,c,d):f(a,c,d);return d}}SC.get=c,SC.set=d;var i=[],j=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,k=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]?/,l=/^this[\.\*]/,m=/^([^\.\*]+)/;SC.normalizePath=g,SC.normalizeTuple=function(a,b){return o(a,g(b))},SC.normalizeTuple.primitive=o,SC.getPath=function(a,b){var c,d;!b&&"string"==typeof a&&(b=a,a=null),b=g(b),c=l.test(b),d=!c&&j.test(b);if(!a||c||d||b.indexOf("*")>0){var e=o(a,b);a=e[0],b=e[1]}return h(a,b)},SC.setPath=function(a,b,c){var d;arguments.length===2&&"string"==typeof a&&(c=b,b=a,a=null),b=g(b);if(b.indexOf("*")>0){var e=o(a,b);a=e[0],b=e[1]}if(b.indexOf(".")>0)d=b.slice(b.lastIndexOf(".")+1),b=b.slice(0,b.length-(d.length+1)),!l.test(b)&&k.test(b)&&b.indexOf(".")<0?a=window[b]:b!=="this"&&(a=SC.getPath(a,b));else{if(k.test(b))throw new Error("Invalid Path");d=b}if(!d||d.length===0||d==="*")throw new Error("Invalid Path");return SC.set(a,d,c)}}(),function(){function r(a,b){return b==="toString"?"function"!=typeof a.toString:!!a[b]}function q(a){var b=p[a];b||(b=p[a]=function(b){return m(this,a,b)});return b}function o(a){var b=n[a];b||(b=n[a]=function(){return l(this,a)});return b}function m(a,b,c){var e=d(a),f;f=e.watching[b]>0&&c!==e.values[b],f&&SC.propertyWillChange(a,b),e.values[b]=c,f&&SC.propertyDidChange(a,b);return c}function l(a,b){var c=d(a,!1);return c.source===a&&c.values[b]}var a=SC.USE_ACCESSORS,b=SC.GUID_KEY,c=SC.META_KEY,d=SC.meta,e=SC.platform.create,f=SC.platform.defineProperty,g,h,i={writable:!0,configurable:!0,enumerable:!0,value:null};SC.Descriptor=function(){};var j=SC.Descriptor.prototype;j.set=function(a,b,c){a[b]=c;return c},j.get=function(a,b){return a[b]},j.setup=function(a,b,c){i.value=c,f(a,b,i),i.value=null},j.teardown=function(a,b){return a[b]},j.val=function(a,b){return a[b]},a||(SC.Descriptor.MUST_USE_GETTER=function(){sc_assert("Must use SC.get() to access this property",!1)},SC.Descriptor.MUST_USE_SETTER=function(){sc_assert("Must use SC.set() to access this property",!1)});var k={configurable:!0,enumerable:!0,set:SC.Descriptor.MUST_USE_SETTER},n={},p={};h=new SC.Descriptor,SC.platform.hasPropertyAccessors?(h.get=l,h.set=m,a?h.setup=function(a,b,c){k.get=o(b),k.set=q(b),f(a,b,k),k.get=k.set=null,c!==undefined&&(d(a).values[b]=c)}:h.setup=function(a,b,c){k.get=o(b),f(a,b,k),k.get=null,c!==undefined&&(d(a).values[b]=c)},h.teardown=function(a,b){var c=d(a).values[b];delete d(a).values[b];return c}):h.set=function(a,b,c){var e=d(a),f;f=e.watching[b]>0&&c!==a[b],f&&SC.propertyWillChange(a,b),a[b]=c,f&&SC.propertyDidChange(a,b);return c},SC.SIMPLE_PROPERTY=new SC.Descriptor,g=SC.SIMPLE_PROPERTY,g.unwatched=
h.unwatched=g,g.watched=h.watched=h,SC.defineProperty=function(a,b,c,e){var h=d(a,!1),i=h.descs,j=h.watching[b]>0;e===undefined?e=r(i,b)?i[b].teardown(a,b):a[b]:r(i,b)&&i[b].teardown(a,b),c||(c=g),c instanceof SC.Descriptor?(h=d(a,!0),i=h.descs,c=(j?c.watched:c.unwatched)||c,i[b]=c,c.setup(a,b,e,j)):(i[b]&&(d(a).descs[b]=null),f(a,b,c));return this},SC.create=function(a,d){var f=e(a,d);b in f&&SC.generateGuid(f,"sc"),c in f&&SC.rewatch(f);return f},SC.createPrototype=function(a,f){var g=e(a,f);d(g,!0).proto=g,b in g&&SC.generateGuid(g,"sc"),c in g&&SC.rewatch(g);return g},SC.destroy=function(a){a[c]&&(a[c]=null)}}(),function(){function n(c,d){var e=d._cacheable,f=d.func;return function(g){var h=a(this,e),i=h.source===this&&h.watching[c]>0,j,k,l;k=d._suspended,d._suspended=this,i=i&&h.lastSetValues[c]!==b(g),i&&(h.lastSetValues[c]=b(g),SC.propertyWillChange(this,c)),e&&delete h.cache[c],j=f.call(this,c,g),e&&(h.cache[c]=j),i&&SC.propertyDidChange(this,c),d._suspended=k;return j}}function m(b,c){var d=c._cacheable,e=c.func;return d?function(){var c,d=a(this).cache;if(b in d)return d[b];c=d[b]=e.call(this,b);return c}:function(){return e.call(this,b)}}function k(a,b){this.func=a,this._cacheable=b&&b.cacheable,this._dependentKeys=b&&b.dependentKeys}function j(a,b,c){var d=a._dependentKeys,e=d?d.length:0;for(var f=0;f<e;f++)h(b,c,d[f])}function i(a,b,c){var d=g(a,c);d[b]=(d[b]||0)-1,SC.unwatch(a,c)}function h(a,b,c){var d=g(a,c);d[b]=(d[b]||0)+1,SC.watch(a,c)}function g(b,c){var d=a(b),f,g;f=d.deps,f?f.__scproto__!==b&&(f=d.deps=e(f),f.__scproto__=b):f=d.deps={__scproto__:b},g=f[c],g?g.__scproto__!==b&&(g=f[c]=e(g),g.__scproto__=b):g=f[c]={__scproto__:b};return g}var a=SC.meta,b=SC.guidFor,c=SC.USE_ACCESSORS,d=Array.prototype.slice,e=SC.platform.create,f=SC.platform.defineProperty;SC.ComputedProperty=k,k.prototype=new SC.Descriptor;var l={configurable:!0,enumerable:!0,get:function(){return undefined},set:SC.Descriptor.MUST_USE_SETTER},o=k.prototype;o.cacheable=function(a){this._cacheable=a!==!1;return this},o.property=function(){this._dependentKeys=d.call(arguments);return this},o.setup=function(a,b,c){l.get=m(b,this),l.set=n(b,this),f(a,b,l),l.get=l.set=null,j(this,a,b)},o.teardown=function(b,c){var d=this._dependentKeys,e=d?d.length:0;for(var f=0;f<e;f++)i(b,c,d[f]);this._cacheable&&delete a(b).cache[c];return null},o.didChange=function(b,c){this._cacheable&&this._suspended!==b&&delete a(b).cache[c]},o.get=function(b,c){var d,e;if(this._cacheable){e=a(b).cache;if(c in e)return e[c];d=e[c]=this.func.call(b,c)}else d=this.func.call(b,c);return d},o.set=function(c,d,e){var f=this._cacheable,g=a(c,f),h=g.source===c&&g.watching[d]>0,i,j,k;j=this._suspended,this._suspended=c,h=h&&g.lastSetValues[d]!==b(e),h&&(g.lastSetValues[d]=b(e),SC.propertyWillChange(c,d)),f&&delete g.cache[d],i=this.func.call(c,d,e),f&&(g.cache[d]=i),h&&SC.propertyDidChange(c,d),this._suspended=j;return i},o.val=function(b,c){return a(b,!1).values[c]},SC.platform.hasPropertyAccessors?c||(o.setup=function(a,b){f(a,b,l),j(this,a,b)}):o.setup=function(a,b,c){a[b]=undefined,j(this,a,b)},SC.computed=function(a){return new k(a)}}(),function(){function n(a,c){var d=b(a,!1).listeners,e=[];d&&(d=d[c]);if(!d)return e;var f,h,i,j;for(f in d){if(g[f]||!d[f])continue;i=d[f];for(h in i){if(g[h]||!i[h])continue;j=i[h],e.push([j.target,j.method])}}return e}function m(a,c){var d=b(a,!1).listeners;d&&(d=d[c]);if(!d)return!1;var f,h,i;for(f in d){if(g[f]||!d[f])continue;i=d[f];for(h in i){if(g[h]||!i[h])continue;return!0}}var j=e(b(a,!0),a,!0,"listeners");j[c]=null;return!1}function l(a,c){a&&"function"==typeof a.sendEvent&&a.sendEvent.apply(a,d.call(arguments,1));var e=b(a,!1).listeners;if(e&&(e=e[c])){h(e,arguments);return!0}return!1}function k(a){var c=b(a,!1).listeners,d=[];if(c)for(var e in c)!g[e]&&c[e]&&d.push(e);return d}function j(a,b,d,e){!e&&"function"==typeof d&&(e=d,d=null);var g=f(a,b,d,!0),h=c(e);g&&g[h]&&(g[h]=null),a&&"function"==typeof a.didRemoveListener&&a.didRemoveListener(b,d,e)}function i(a,b,d,e,g){!e&&"function"==typeof d&&(e=d,d=null);var h=f(a,b,d,!0),i=c(e),j;h[i]?h[i].xform=g:h[i]={target:d,method:e,xform:g},a&&"function"==typeof a.didAddListener&&a.didAddListener(b,d,e);return j}function h(a,b){var c,d,e,f,h,i;for(c in a){if(g[c])continue;e=a[c];for(d in e){if(g[d]||!(f=e[d]))continue;h=f.method,i=f.target,i||(i=b[0]),"string"==typeof h&&(h=i[h]),f.xform?f.xform(i,h,b):h.apply(i,b)}}}function f(a,c,d,f){return e(b(a,f),a,f,"listeners",c,d)}function e(b,c,d){var e=arguments.length,f,g,h;for(f=3;f<e;f++){g=arguments[f],h=b[g];if(d)h?h.__scproto__!==c&&(h=b[g]=a(h),h.__scproto__=c):h=b[g]={__scproto__:c};else if(!h||h.__scproto__!==c)return undefined;b=h}return h}var a=SC.platform.create,b=SC.meta,c=SC.guidFor,d=Array.prototype.slice,g={__scproto__:!0};SC.addListener=i,SC.removeListener=j,SC.sendEvent=l,SC.hasListeners=m,SC.watchedEvents=k,SC.listenersFor=n}(),function(){function o(a,b,c){var d=c[0],e=m(c[1]),f;b.length>2&&(f=SC.getPath(d,e)),b.call(a,d,e,f)}function n(a,b,c){var d=c[0],e=l(c[1]),f;b.length>2&&(f=SC.getPath(d,e)),b.call(a,d,e,f)}function m(a){return a.slice(0,-7)}function l(a){return a.slice(0,-7)}function k(a){return a+b}function j(b){return b+a}function i(){if(!!f&&f.length!==0){var a=f;f=[],g={},a.forEach(function(a){SC.sendEvent(a[0],a[1])})}}function h(a,b){if(e){var d=c(a);g[d]||(g[d]={}),g[d][b]||(g[d][b]=!0,f.push([a,b]))}else SC.sendEvent(a,b)}var a=":change",b=":before",c=SC.guidFor,d=SC.normalizePath,e=0,f=[],g={};SC.beginPropertyChanges=function(){e++;return this},SC.endPropertyChanges=function(){e--,e<=0&&i()},SC.addObserver=function(a,b,c,e){b=d(b),SC.addListener(a,j(b),c,e,n),SC.watch(a,b);return this},SC.observersFor=function(a,b){return SC.listenersFor(a,j(b))},SC.removeObserver=function(a,b,c,e){b=d(b),SC.unwatch(a,b),SC.removeListener(a,j(b),c,e);return this},SC.addBeforeObserver=function(a,b,c,e){b=d(b),SC.addListener(a,k(b),c,e,o),SC.watch(a,b);return this},SC.beforeObserversFor=function(a,b){return SC.listenersFor(a,k(b))},SC.removeBeforeObserver=function(a,b,c,e){b=d(b),SC.unwatch(a,b),SC.removeListener(a,k(b),c,e);return this},SC.notifyObservers=function(a,b){h(a,j(b))},SC.notifyBeforeObservers=function(a,b){h(a,k(b))}}(),function(){function D(a,b){B(a,b,"didChange")}function C(a,b){B(a,b,"willChange")}function B(a,c,d){var e=b(a,!1),f=e.chainWatchers;if(!!f&&f.__scproto__===a){f=f[c];if(!f)return;for(var g in f){if(!f.hasOwnProperty(g))continue;f[g][d](a,c)}}}function A(a){var c=b(a),d=c.chains;d?d._value!==a&&(d=c.chains=d.copy(a)):d=c.chains=new y(null,null,a);return d}function x(a){return b(a,!1).proto===a}function w(a){if(v.length!==0){var b=v;v=[],b.forEach(function(a){a[0].add(a[1])}),a!==!1&&v.length>0&&setTimeout(w,1)}}function u(c,d,e){if(!!c&&"object"==typeof c){var f=b(c,!1),g=f.chainWatchers;if(!g||g.__scproto__!==c)return;g[d]&&delete g[d][a(e)],SC.unwatch(c,d)}}function t(c,d,e){if(!!c&&"object"==typeof c){var f=b(c),g=f.chainWatchers;if(!g||g.__scproto__!==c)g=f.chainWatchers={__scproto__:c};g[d]||(g[d]={}),g[d][a(e)]=e,SC.watch(c,d)}}function s(a,b){var c=q,d=!c;d&&(c=q={}),o("propertyDidChange",a,b,c),d&&(q=null)}function r(a,b){var c=p,d=!c;d&&(c=p={}),o("propertyWillChange",a,b,c),d&&(p=null)}function o(c,d,e,f){var g=a(d);f[g]||(f[g]={});if(!f[g][e]){f[g][e]=!0;var h=b(d,!1).deps,i=SC[c];h=h&&h[e];if(h)for(var j in h){if(n[j])continue;i(d,j)}}}function m(a){return a==="*"||!k.test(a)}function l(a){return a.match(j)[0]}var a=SC.guidFor,b=SC.meta,c=SC.get,d=SC.set,e=SC.normalizeTuple.primitive,f=SC.normalizePath,g=SC.SIMPLE_PROPERTY,h=SC.GUID_KEY,i=SC.notifyObservers,j=/^([^\.\*]+)/,k=/[\.\*]/,n={__scproto__:!0},p,q,v=[],y=function(a,b,d,e){var f;this._parent=a,this._key=b,this._watching=d===undefined,this._value=d||a._value&&!x(a._value)&&c(a._value,b),this._separator=e||".",this._paths={},this._watching&&(this._object=a._value,this._object&&t(this._object,this._key,this))},z=y.prototype;z.destroy=function(){if(this._watching){var a=this._object;a&&u(a,this._key,this),this._watching=!1}},z.copy=function(a){var b=new y(null,null,a,this._separator),c=this._paths,d;for(d in c){if(!(c[d]>0))continue;b.add(d)}return b},z.add=function(a){var b,c,d,f,g,h;h=this._paths,h[a]=(h[a]||0)+1,b=this._value,c=e(b,a);if(c[0]&&c[0]===b)a=c[1],d=l(a),a=a.slice(d.length+1);else{if(!c[0]){v.push([this,a]);return}f=c[0],d=a.slice(0,0-(c[1].length+1)),g=a.slice(d.length,d.length+1),a=c[1]}this.chain(d,a,f,g)},z.remove=function(a){var b,c,d,f,g;g=this._paths,g[a]>0&&g[a]--,b=this._value,c=e(b,a),c[0]===b?(a=c[1],d=l(a),a=a.slice(d.length+1)):(f=c[0],d=a.slice(0,0-(c[1].length+1)),a=c[1]),this.unchain(d,a)},z.count=0,z.chain=function(a,b,c,d){var e=this._chains,f;e||(e=this._chains={}),f=e[a],f||(f=e[a]=new y(this,a,c,d)),f.count++,b&&b.length>0&&(a=l(b),b=b.slice(a.length+1),f.chain(a,b))},z.unchain=function(a,b){var c=this._chains,d=c[a];b&&b.length>1&&(a=l(b),b=b.slice(a.length+1),d.unchain(a,b)),d.count--,d.count<=0&&(delete c[d._key],d.destroy())},z.willChange=function(){var a=this._chains;if(a)for(var b in a){if(!a.hasOwnProperty(b))continue;a[b].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},z.chainWillChange=function(a,b,c){this._key&&(b=this._key+this._separator+b),this._parent?this._parent.chainWillChange(this,b,c+1):(c>1&&SC.propertyWillChange(this._value,b),b="this."+b,this._paths[b]>0&&SC.propertyWillChange(this._value,b))},z.chainDidChange=function(a,b,c){this._key&&(b=this._key+this._separator+b),this._parent?this._parent.chainDidChange(this,b,c+1):(c>1&&SC.propertyDidChange(this._value,b),b="this."+b,this._paths[b]>0&&SC.propertyDidChange(this._value,b))},z.didChange=function(){if(this._watching){var a=this._parent._value;a!==this._object&&(u(this._object,this._key,this),this._object=a,t(a,this._key,this)),this._value=a&&!x(a)?c(a,this._key):undefined}var b=this._chains;if(b)for(var d in b){if(!b.hasOwnProperty(d))continue;b[d].didChange()}this._parent&&this._parent.chainDidChange(this,this._key,1)};var E=SC.SIMPLE_PROPERTY.watched;SC.watch=function(a,c){if(c==="length"&&SC.typeOf(a)==="array")return this;var d=b(a),e=d.watching,g;c=f(c),e[c]?e[c]=(e[c]||0)+1:(e[c]=1,m(c)?(g=d.descs[c],g=g?g.watched:E,g&&SC.defineProperty(a,c,g)):A(a).add(c));return this},SC.watch.flushPending=w,SC.unwatch=function(a,c){if(c==="length"&&SC.typeOf(a)==="array")return this;var d=b(a).watching,e,h;c=f(c),d[c]===1?(d[c]=0,m(c)?(e=b(a).descs[c],e=e?e.unwatched:g,e&&SC.defineProperty(a,c,e)):A(a).remove(c)):d[c]>1&&d[c]--;return this},SC.rewatch=function(a){var c=b(a,!1),d=c.chains,e=c.bindings,f,g;h in a&&!a.hasOwnProperty(h)&&SC.generateGuid(a,"sc"),d&&d._value!==a&&A(a);if(e&&c.proto!==a)for(f in e)g=!n[f]&&a[f],g&&g instanceof SC.Binding&&g.fromDidChange(a);return this},SC.propertyWillChange=function(a,c){var d=b(a,!1),e=d.proto,f=d.descs[c];e!==a&&(f&&f.willChange&&f.willChange(a,c),r(a,c),C(a,c),SC.notifyBeforeObservers(a,c))},SC.propertyDidChange=function(a,c){var d=b(a,!1),e=d.proto,f=d.descs[c];e!==a&&(f&&f.didChange&&f.didChange(a,c),s(a,c),D(a,c),SC.notifyObservers(a,c))}}(),function(){function w(a,b,c){var d=a.length;for(var f in b){if(!b.hasOwnProperty(f))continue;var g=b[f];a[d]=f;if(g&&g.toString===e)g[v]=a.join(".");else if(f==="SC"||g instanceof SC.Namespace){if(c[SC.guidFor(g)])continue;c[SC.guidFor(g)]=!0,w(a,g,c)}}a.length=d}function u(a,b,c){if(!c[SC.guidFor(b)]){c[SC.guidFor(b)]=!0;if(b.properties){var d=b.properties;for(var e in d)d.hasOwnProperty(e)&&(a[e]=!0)}else b.mixins&&b.mixins.forEach(function(b){u(a,b,c)})}}function t(a,b,c){var d=SC.guidFor(a);if(c[d])return!1;c[d]=!0;if(a===b)return!0;var e=a.mixins,f=e?e.length:0;while(--f>=0)if(t(e[f],b,c))return!0;return!1}function r(a,e,f){var g={},j={},k=SC.meta(a),l=k.required,r,s,t,u,v,w=SC._mixinBindings;m(e,i(a),g,j,a),b.detect(a)&&(s=j.willApplyProperty||a.willApplyProperty,t=j.didApplyProperty||a.didApplyProperty);for(r in g){if(!g.hasOwnProperty(r))continue;v=g[r],u=j[r];if(v===c){if(!(r in a)){if(!f)throw new Error("Required property not defined: "+r);l=o(a),l.__sc_count__++,l[r]=!0}}else{while(v instanceof d){var x=v.methodName;g[x]?(u=j[x],v=g[x]):k.descs[x]?(v=k.descs[x],u=v.val(a,x)):(u=a[x],v=SC.SIMPLE_PROPERTY)}s&&s.call(a,r);var y=p(u),z=y&&p(a[r]),A=q(u),B=A&&q(a[r]),C,D;if(z){C=z.length;for(D=0;D<C;D++)SC.removeObserver(a,z[D],null,r)}if(B){C=B.length;for(D=0;D<C;D++)SC.removeBeforeObserver(a,B[D],null,r)}u=w(a,r,u,k),n(a,r,v,u);if(y){C=y.length;for(D=0;D<C;D++)SC.addObserver(a,y[D],null,r)}if(A){C=A.length;for(D=0;D<C;D++)SC.addBeforeObserver(a,A[D],null,r)}l&&l[r]&&(l=o(a),l.__sc_count__--,l[r]=!1),t&&t.call(a,r)}}if(!f&&l&&l.__sc_count__>0){var E=[];for(r in l){if(h[r])continue;E.push(r)}throw new Error("Required properties not defined: "+E.join(","))}return a}function q(a){return"function"==typeof a&&a.__sc_observesBefore__}function p(a){return"function"==typeof a&&a.__sc_observes__}function o(a){var b=SC.meta(a),c=b.required;if(!c||c.__scproto__!==a)c=b.required=c?Object.create(c):{__sc_count__:0},c.__scproto__=a;return c}function m(b,d,e,f,g){function s(a){delete e[a],delete f[a]}var h=b.length,i,j,k,n,o,p,q,r;for(i=0;i<h;i++){j=b[i];if(!j)throw new Error("Null value found in SC.mixin()");if(j instanceof a){k=SC.guidFor(j);if(d[k])continue;d[k]=j,n=j.properties}else n=j;if(n){r=f.concatenatedProperties||g.concatenatedProperties,n.concatenatedProperties&&(r=r?r.concat(n.concatenatedProperties):n.concatenatedProperties);for(p in n){if(!n.hasOwnProperty(p))continue;o=n[p];if(o instanceof SC.Descriptor){if(o===c&&e[p])continue;e[p]=o,f[p]=undefined}else{if(l(o)){q=e[p]===SC.SIMPLE_PROPERTY&&f[p],q||(q=g[p]),"function"!=typeof q&&(q=null);if(q){var t=o.__sc_observes__,u=o.__sc_observesBefore__;o=SC.wrap(o,q),o.__sc_observes__=t,o.__sc_observesBefore__=u}}else if(r&&r.indexOf(p)>=0||p==="concatenatedProperties"){var v=f[p]||g[p];o=v?v.concat(o):SC.makeArray(o)}e[p]=SC.SIMPLE_PROPERTY,f[p]=o}}}else j.mixins&&(m(j.mixins,d,e,f,g),j._without&&j._without.forEach(s))}}function l(a){if("function"!=typeof a||a.isMethod===!1)return!1;return k.indexOf(a)<0}function j(b,c){c&&c.length>0&&(b.mixins=f.call(c,function(b){if(b instanceof a)return b;var c=new a;c.properties=b;return c}));return b}function i(a,b){var c=SC.meta(a,b!==!1),d=c.mixins;if(b===!1)return d||g;d?d.__scproto__!==a&&(d=c.mixins=Object.create(d),d.__scproto__=a):d=c.mixins={__scproto__:a};return d}var a,b,c,d,e,f=Array.prototype.map,g={},h={__scproto__:!0,__sc_count__:!0},k=[Boolean,Object,Number,Array,Date,String],n=SC.defineProperty;SC._mixinBindings=function(a,b,c,d){return c},SC.mixin=function(a){var b=Array.prototype.slice.call(arguments,1);return r(a,b,!1)},a=function(){return j(this,arguments)},a._apply=r,a.applyPartial=function(a){var b=Array.prototype.slice.call(arguments,1);return r(a,b,!0)},a.create=function(){e.processed=!1;var a=this;return j(new a,arguments)},a.prototype.reopen=function(){var b,c;this.properties&&(b=a.create(),b.properties=this.properties,delete this.properties,this.mixins=[b]);var d=arguments.length,e=this.mixins,f;for(f=0;f<d;f++)b=arguments[f],b instanceof a?e.push(b):(c=a.create(),c.properties=b,e.push(c));return this};var s=[];a.prototype.apply=function(a){s.length=0,s[0]=this;return r(a,s,!1)},a.prototype.applyPartial=function(a){s.length=0,s[0]=this;return r(a,s,!0)},a.prototype.detect=function(b){if(!b)return!1;if(b instanceof a)return t(b,this,{});return!!i(b,!1)[SC.guidFor(this)]},a.prototype.without=function(){var b=new a(this);b._without=Array.prototype.slice.call(arguments);return b},a.prototype.keys=function(){var a={},b={},c=[];u(a,this,b);for(var d in a)a.hasOwnProperty(d)&&c.push(d);return c};var v=SC.GUID_KEY+"_name";e=function(){!this[v]&&!e.processed&&(e.processed=!0,w([],window,{}));return this[v]||"(unknown mixin)"},a.prototype.toString=e,a.mixins=function(a){var b=[],c=i(a,!1),d,e;for(d in c){if(h[d])continue;e=c[d],e.properties||b.push(c[d])}return b},c=new SC.Descriptor,c.toString=function(){return"(Required Property)"},SC.required=function(){return c},d=function(a){this.methodName=a},d.prototype=new SC.Descriptor,SC.alias=function(a){return new d(a)},SC.Mixin=a,b=a.create({willApplyProperty:SC.required(),didApplyProperty:SC.required()}),SC.MixinDelegate=b,SC.observer=function(a){var b=Array.prototype.slice.call(arguments,1);a.__sc_observes__=b;return a},SC.beforeObserver=function(a){var b=Array.prototype.slice.call(arguments,1);a.__sc_observesBefore__=b;return a}}(),function(){}(),function(){function d(a,b,c,e){var f,g,h;if("object"!=typeof a)return a;if(b&&(g=c.indexOf(a))>=0)return e[g];sc_assert("Cannot clone an SC.Object that does not implement SC.Copyable",!(a instanceof SC.Object)||SC.Copyable&&SC.Copyable.detect(a));if(SC.typeOf(a)==="array"){f=a.slice();if(b){g=f.length;while(--g>=0)f[g]=d(f[g],b,c,e)}}else if(SC.Copyable&&SC.Copyable.detect(a))f=a.copy(b,c,e);else{f={};for(h in a){if(!a.hasOwnProperty(h))continue;f[h]=b?d(a[h],b,c,e):a[h]}}b&&(c.push(a),e.push(f));return f}YES=!0,NO=!1,typeof console=="undefined"&&(window.console={},console.log=console.info=console.warn=console.error=function(){}),SC.EXTEND_PROTOTYPES=SC.ENV.EXTEND_PROTOTYPES!==!1;var a={},b="Boolean Number String Function Array Date RegExp Object".split(" ");b.forEach(function(b){a["[object "+b+"]"]=b.toLowerCase()});var c=Object.prototype.toString;SC.typeOf=function(b){var d;d=b==null?String(b):a[c.call(b)]||"object",d==="function"?SC.Object&&SC.Object.detect(b)&&(d="class"):d==="object"&&(b instanceof Error?d="error":SC.Object&&b instanceof SC.Object?d="instance":d="object");return d},SC.none=function(a){return a===null||a===undefined},SC.empty=function(a){return a===null||a===undefined||a===""},SC.isArray=function(a){if(!a||a.setInterval)return!1;if(Array.isArray&&Array.isArray(a))return!0;if(SC.Array&&SC.Array.detect(a))return!0;if(a.length!==undefined&&"object"==typeof a)return!0;return!1},SC.compare=function(a,b){if(a===b)return 0;var c=SC.typeOf(a),d=SC.typeOf(b),e=SC.Comparable;if(e){if(c==="instance"&&e.detect(a.constructor))return a.constructor.compare(a,b);if(d==="instance"&&e.detect(b.constructor))return 1-b.constructor.compare(b,a)}var f=SC.ORDER_DEFINITION_MAPPING;if(!f){var g=SC.ORDER_DEFINITION;f=SC.ORDER_DEFINITION_MAPPING={};var h,i;for(h=0,i=g.length;h<i;++h)f[g[h]]=h;delete SC.ORDER_DEFINITION}var j=f[c],k=f[d];if(j<k)return-1;if(j>k)return 1;switch(c){case"boolean":case"number":if(a<b)return-1;if(a>b)return 1;return 0;case"string":var l=a.localeCompare(b);if(l<0)return-1;if(l>0)return 1;return 0;case"array":var m=a.length,n=b.length,o=Math.min(m,n),p=0,q=0,r=arguments.callee;while(p===0&&q<o)p=r(a[q],b[q]),q++;if(p!==0)return p;if(m<n)return-1;if(m>n)return 1;return 0;case"instance":if(SC.Comparable&&SC.Comparable.detect(a))return a.compare(a,b);return 0;default:return 0}},SC.copy=function(a,b){if("object"!=typeof a)return a;if(SC.Copyable&&SC.Copyable.detect(a))return a.copy(b);return d(a,b,b?[]:null,b?[]:null)},SC.inspect=function(a){var b,c=[];for(var d in a)if(a.hasOwnProperty(d)){b=a[d];if(b==="toString")continue;SC.typeOf(b)===SC.T_FUNCTION&&(b="function() { ... }"),c.push(d+": "+b)}return"{"+c.join(" , ")+"}"},SC.isEqual=function(a,b){if(a&&"function"==typeof a.isEqual)return a.isEqual(b);return a===b},SC.ORDER_DEFINITION=SC.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class"],SC.keys=Object.keys,SC.keys||(SC.keys=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b}),SC.K=function(){return this},SC.Error=function(){var a=Error.prototype.constructor.apply(this,arguments);for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b])},SC.Error.prototype=SC.create(Error.prototype),SC.Logger=window.console,"undefined"==typeof require&&(require=SC.K)}(),function(){SC.EXTEND_PROTOTYPES&&(Function.prototype.property=function(){var a=SC.computed(this);return a.property.apply(a,arguments)},Function.prototype.observes=function(){this.__sc_observes__=Array.prototype.slice.call(arguments);return this},Function.prototype.observesBefore=function(){this.__sc_observesBefore__=Array.prototype.slice.call(arguments);return this})}(),function(){var a=/^.+Binding$/;SC._mixinBindings=function(b,c,d,e){if(a.test(c)){d instanceof SC.Binding?d.to(c.slice(0,-7)):d=new SC.Binding(c.slice(0,-7),d),d.connect(b);var f=e.bindings;f?f.__scproto__!==b&&(f=e.bindings=SC.create(e.bindings),f.__scproto__=b):f=e.bindings={__scproto__:b},f[c]=!0}return d}}(),function(){var a=/[ _]/g,b={},c=/([a-z])([A-Z])/g;SC.STRINGS={},SC.String={fmt:function(a,b){var c=0;return a.replace(/%@([0-9]+)?/g,function(a,d){d=d?parseInt(d,0)-1:c++,a=b[d];return(a===null?"(null)":a===undefined?"":a).toString()})},loc:function(a,b){a=SC.STRINGS[a]||a;return SC.String.fmt(a,b)},w:function(a){return a.split(/\s+/)},decamelize:function(a){return a.replace(c,"$1_$2").toLowerCase()},dasherize:function(c){var d=b,e=d[c];if(e)return e;e=SC.String.decamelize(c).replace(a,"-"),d[c]=e;return e}}}(),function(){var a=SC.String.fmt,b=SC.String.w,c=SC.String.loc,d=SC.String.decamelize,e=SC.String.dasherize;SC.EXTEND_PROTOTYPES&&(String.prototype.fmt=function(){return a(this,arguments)},String.prototype.w=function(){return b(this)},String.prototype.loc=function(){return c(this,arguments)},String.prototype.decamelize=function(){return d(this)},String.prototype.dashersize=function(){return e(this)})}(),function(){}(),function(){}(),function(){function g(a,b,c){b.call(a,c[0],c[2],c[3])}function f(b,c){function d(d){var e=a(d,b);return c===undefined?!!e:c===e}return d}function e(a){c.push(a);return null}function d(){return c.length===0?{}:c.pop()}var a=SC.get,b=SC.set,c=[];SC.Enumerable=SC.Mixin.create({isEnumerable:!0,nextObject:SC.required(Function),firstObject:SC.computed(function(){if(a(this,"length")===0)return undefined;if(SC.Array&&SC.Array.detect(this))return this.objectAt(0);var b=d(),c;c=this.nextObject(0,null,b),e(b);return c}).property("[]").cacheable(),lastObject:SC.computed(function(){var b=a(this,"length");if(b===0)return undefined;if(SC.Array&&SC.Array.detect(this))return this.objectAt(b-1);var c=d(),f=0,g,h=null;do h=g,g=this.nextObject(f++,h,c);while(g!==undefined);e(c);return h}).property("[]").cacheable(),contains:function(a){return this.find(function(b){return b===a})!==undefined},forEach:function(b,c){if(typeof b!="function")throw new TypeError;var f=a(this,"length"),g=null,h=d();c===undefined&&(c=null);for(var i=0;i<f;i++){var j=this.nextObject(i,g,h);b.call(c,j,i,this),g=j}g=null,h=e(h);return this},getEach:function(b){return this.map(function(c){return a(c,b)})},setEach:function(a,c){return this.forEach(function(d){b(d,a,c)})},map:function(a,b){var c=[];this.forEach(function(d,e,f){c[e]=a.call(b,d,e,f)});return c},mapProperty:function(b){return this.map(function(c){return a(c,b)})},filter:function(a,b){var c=[];this.forEach(function(d,e,f){a.call(b,d,e,f)&&c.push(d)});return c},filterProperty:function(a,b){return this.filter(f(a,b))},find:function(b,c){var f=a(this,"length");c===undefined&&(c=null);var g=null,h,i=!1,j=undefined,k=d();for(var l=0;l<f&&!i;l++){h=this.nextObject(l,g,k);if(i=b.call(c,h,l,this))j=h;g=h}h=g=null,k=e(k);return j},findProperty:function(a,b){return this.find(f(a,b))},every:function(a,b){return!this.find(function(c,d,e){return!a.call(b,c,d,e)})},everyProperty:function(a,b){return this.every(f(a,b))},some:function(a,b){return!!this.find(function(c,d,e){return!!a.call(b,c,d,e)})},someProperty:function(a,b){return this.some(f(a,b))},reduce:function(a,b,c){if(typeof a!="function")throw new TypeError;var d=b;this.forEach(function(b,e){d=a.call(null,d,b,e,this,c)},this);return d},invoke:function(a){var b,c=[];arguments.length>1&&(b=Array.prototype.slice.call(arguments,1)),this.forEach(function(d,e){var f=d&&d[a];"function"==typeof f&&(c[e]=b?f.apply(d,b):f.call(d))},this);return c},toArray:function(){var a=[];this.forEach(function(b,c){a[c]=b});return a},compact:function(){return this.without(null)},without:function(a){if(!this.contains(a))return this;var b=[];this.forEach(function(c){c!==a&&(b[b.length]=c)});return b},uniq:function(){var a=[],b=!1;this.forEach(function(c){a.indexOf(c)<0?a[a.length]=c:b=!0});return b?a:this},"[]":function(a,b){return this}.property().cacheable(),addEnumerableObserver:function(b,c){var d=c&&c.willChange||"enumerableWillChange",e=c&&c.didChange||"enumerableDidChange",f=a(this,"hasEnumerableObservers");f||SC.propertyWillChange(this,"hasEnumerableObservers"),SC.addListener(this,"@enumerable:before",b,d,g),SC.addListener(this,"@enumerable:change",b,e,g),f||SC.propertyDidChange(this,"hasEnumerableObservers");return this},removeEnumerableObserver:function(b,c){var d=c&&c.willChange||"enumerableWillChange",e=c&&c.didChange||"enumerableDidChange",f=a(this,"hasEnumerableObservers");f&&SC.propertyWillChange(this,"hasEnumerableObservers"),SC.removeListener(this,"@enumerable:before",b,d),SC.removeListener(this,"@enumerable:change",b,e),f&&SC.propertyDidChange(this,"hasEnumerableObservers");return this},hasEnumerableObservers:function(){return SC.hasListeners(this,"@enumerable:change")||SC.hasListeners(this,"@enumerable:before")}.property().cacheable(),enumerableContentWillChange:function(b,c){var d,e,f;"number"==typeof b?d=b:b?d=a(b,"length"):d=b=-1,"number"==typeof c?e=c:c?e=a(c,"length"):e=c=-1,f=e<0||d<0||e-d!==0,b===-1&&(b=null),c===-1&&(c=null),SC.propertyWillChange(this,"[]"),f&&SC.propertyWillChange(this,"length"),SC.sendEvent(this,"@enumerable:before",b,c);return this},enumerableContentDidChange:function(b,c){var d=this.propertyDidChange,e,f,g;"number"==typeof b?e=b:b?e=a(b,"length"):e=b=-1,"number"==typeof c?f=c:c?f=a(c,"length"):f=c=-1,g=f<0||e<0||f-e!==0,b===-1&&(b=null),c===-1&&(c=null),SC.sendEvent(this,"@enumerable:change",b,c),g&&SC.propertyDidChange(this,"length"),SC.propertyDidChange(this,"[]");return this}})}(),function(){function d(a,b,c){b.call(a,c[0],c[2],c[3],c[4])}function c(a){return a===null||a===undefined}var a=SC.get,b=SC.set;SC.Array=SC.Mixin.create(SC.Enumerable,{isSCArray:!0,length:SC.required(),objectAt:function(b){if(b<0||b>=a(this,"length"))return undefined;return a(this,b)},nextObject:function(a){return this.objectAt(a)},"[]":function(b,c){c!==undefined&&this.replace(0,a(this,"length"),c);return this}.property().cacheable(),contains:function(a){return this.indexOf(a)>=0},slice:function(b,d){var e=[],f=a(this,"length");c(b)&&(b=0);if(c(d)||d>f)d=f;while(b<d)e[e.length]=this.objectAt(b++);return e},indexOf:function(b,c){var d,e=a(this,"length");c===undefined&&(c=0),c<0&&(c+=e);for(d=c;d<e;d++)if(this.objectAt(d,!0)===b)return d;return-1},lastIndexOf:function(b,c){var d,e=a(this,"length");c===undefined&&(c=e-1),c<0&&(c+=e);for(d=c;d>=0;d--)if(this.objectAt(d)===b)return d;return-1},addArrayObserver:function(b,c){var e=c&&c.willChange||"arrayWillChange",f=c&&c.didChange||"arrayDidChange",g=a(this,"hasArrayObservers");g||SC.propertyWillChange(this,"hasArrayObservers"),SC.addListener(this,"@array:before",b,e,d),SC.addListener(this,"@array:change",b,f,d),g||SC.propertyDidChange(this,"hasArrayObservers");return this},removeArrayObserver:function(b,c){var e=c&&c.willChange||"arrayWillChange",f=c&&c.didChange||"arrayDidChange",g=a(this,"hasArrayObservers");g&&SC.propertyWillChange(this,"hasArrayObservers"),SC.removeListener(this,"@array:before",b,e,d),SC.removeListener(this,"@array:change",b,f,d),g&&SC.propertyDidChange(this,"hasArrayObservers");return this},hasArrayObservers:function(){return SC.hasListeners(this,"@array:change")||SC.hasListeners(this,"@array:before")}.property().cacheable(),arrayContentWillChange:function(b,c,d){b===undefined?(b=0,c=d=-1):(c||(c=0),d||(d=0)),SC.sendEvent(this,"@array:before",b,c,d);var e,f;if(b>=0&&c>=0&&a(this,"hasEnumerableObservers")){e=[],f=b+c;for(var g=b;g<f;g++)e.push(this.objectAt(g))}else e=c;this.enumerableContentWillChange(e,d);return this},arrayContentDidChange:function(b,c,d){b===undefined?(b=0,c=d=-1):(c||(c=0),d||(d=0));var e,f;if(b>=0&&d>=0&&a(this,"hasEnumerableObservers")){e=[],f=b+d;for(var g=b;g<f;g++)e.push(this.objectAt(g))}else e=d;this.enumerableContentDidChange(c,e),SC.sendEvent(this,"@array:change",b,c,d);return this},"@each":function(){this.__each||(this.__each=new SC.EachProxy(this));return this.__each}.property().cacheable()})}(),function(){SC.Comparable=SC.Mixin.create({isComparable:!0,compare:SC.required(Function)})}(),function(){var a=SC.get,b=SC.set;SC.Copyable=SC.Mixin.create({copy:SC.required(Function),frozenCopy:function(){if(SC.Freezable&&SC.Freezable.detect(this))return a(this,"isFrozen")?this:this.copy().freeze();throw new Error(SC.String.fmt("%@ does not support freezing",this))}})}(),function(){var a=SC.get,b=SC.set;SC.Freezable=SC.Mixin.create({isFrozen:!1,freeze:function(){if(a(this,"isFrozen"))return this;b(this,"isFrozen",!0);return this}}),SC.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){SC.MutableEnumerable=SC.Mixin.create(SC.Enumerable,{addObject:SC.required(Function),addObjects:function(a){SC.beginPropertyChanges(this),a.forEach(function(a){this.addObject(a)},this),SC.endPropertyChanges(this);return this},removeObject:SC.required(Function),removeObjects:function(a){SC.beginPropertyChanges(this),a.forEach(function(a){this.removeObject(a)},this),SC.endPropertyChanges(this);return this}})}(),function(){var a="Index out of range",b=[],c=SC.get,d=SC.set;SC.MutableArray=SC.Mixin.create(SC.Array,SC.MutableEnumerable,{replace:SC.required(),insertAt:function(b,d){if(b>c(this,"length"))throw new Error(a);this.replace(b,0,[d]);return this},removeAt:function(d,e){var f=0;if("number"==typeof d){if(d<0||d>=c(this,"length"))throw new Error(a);e===undefined&&(e=1),this.replace(d,e,b)}return this},pushObject:function(a){this.insertAt(c(this,"length"),a);return a},pushObjects:function(a){this.beginPropertyChanges(),a.forEach(function(a){this.pushObject(a)},this),this.endPropertyChanges();return this},popObject:function(){var a=c(this,"length");if(a===0)return null;var b=this.objectAt(a-1);this.removeAt(a-1,1);return b},shiftObject:function(){if(c(this,"length")===0)return null;var a=this.objectAt(0);this.removeAt(0);return a},unshiftObject:function(a){this.insertAt(0,a);return a},unshiftObjects:function(a){this.beginPropertyChanges(),a.forEach(function(a){this.unshiftObject(a)},this),this.endPropertyChanges();return this},removeObject:function(a){var b=c(this,"length")||0;while(--b>=0){var d=this.objectAt(b);d===a&&this.removeAt(b)}return this},addObject:function(a){this.contains(a)||this.pushObject(a);return this}})}(),function(){var a=SC.get,b=SC.set;SC.Observable=SC.Mixin.create({isObserverable:!0,get:function(b){return a(this,b)},set:function(a,c){b(this,a,c);return this},setProperties:function(a){SC.beginPropertyChanges(this);for(var c in a)a.hasOwnProperty(c)&&b(this,c,a[c]);SC.endPropertyChanges(this);return this},beginPropertyChanges:function(){SC.beginPropertyChanges();return this},endPropertyChanges:function(){SC.endPropertyChanges();return this},propertyWillChange:function(a){SC.propertyWillChange(this,a);return this},propertyDidChange:function(a){SC.propertyDidChange(this,a);return this},notifyPropertyChange:function(a){this.propertyWillChange(a),this.propertyDidChange(a);return this},addObserver:function(a,b,c){SC.addObserver(this,a,b,c)},removeObserver:function(a,b,c){SC.removeObserver(this,a,b,c)},hasObserverFor:function(a){return SC.hasListeners(this,a+":change")},unknownProperty:function(a){return undefined},setUnknownProperty:function(a,b){this[a]=b},getPath:function(a){return SC.getPath(this,a)},setPath:function(a,b){SC.setPath(this,a,b);return this},incrementProperty:function(c,d){d||(d=1),b(this,c,(a(this,c)||0)+d);return a(this,c)},decrementProperty:function(c,d){d||(d=1),b(this,c,(a(this,c)||0)-d);return a(this,c)},toggleProperty:function(c){b(this,c,!a(this,c));return a(this,c)},observersForKey:function(a){return SC.observersFor(this,a)}})}(),function(){}(),function(){function g(){var c=!1,e,g=!1,h=!1,i=function(){c||d(i,"proto"),e?(this.reopen.apply(this,e),e=null,a(this),this.init.apply(this,arguments)):(h&&a(this),g===!1&&(g=this.init),g.apply(this,arguments))};i.toString=b,i._prototypeMixinDidChange=function(){c=!1},i._initMixins=function(a){e=a},SC.defineProperty(i,"proto",SC.computed(function(){c||(c=!0,i.PrototypeMixin.applyPartial(i.prototype),h=!!f(i.prototype,!1).chains);return this.prototype}));return i}var a=SC.rewatch,b=SC.Mixin.prototype.toString,c=SC.set,d=SC.get,e=SC.platform.create,f=SC.meta,h=g();h.PrototypeMixin=SC.Mixin.create({reopen:function(){SC.Mixin._apply(this,arguments,!0);return this},init:function(){},isDestroyed:!1,destroy:function(){c(this,"isDestroyed",!0);return this},bind:function(
a,b){b instanceof SC.Binding||(b=SC.Binding.from(b)),b.to(a).connect(this);return b},toString:function(){return"<"+this.constructor.toString()+":"+SC.guidFor(this)+">"}}),h.__super__=null;var i=SC.Mixin.create({ClassMixin:SC.required(),PrototypeMixin:SC.required(),isMethod:!1,extend:function(){var a=g(),b;a.ClassMixin=SC.Mixin.create(this.ClassMixin),a.PrototypeMixin=SC.Mixin.create(this.PrototypeMixin);var c=a.PrototypeMixin;c.reopen.apply(c,arguments),a.superclass=this,a.__super__=this.prototype,b=a.prototype=e(this.prototype),b.constructor=a,SC.generateGuid(b,"sc"),f(b).proto=b,SC.rewatch(b),a.subclasses=SC.Set?new SC.Set:null,this.subclasses&&this.subclasses.add(a),a.ClassMixin.apply(a);return a},create:function(){var a=this;arguments.length>0&&this._initMixins(arguments);return new a},reopen:function(){var a=this.PrototypeMixin;a.reopen.apply(a,arguments),this._prototypeMixinDidChange();return this},reopenClass:function(){var a=this.ClassMixin;a.reopen.apply(a,arguments),SC.Mixin._apply(this,arguments,!1);return this},detect:function(a){if("function"!=typeof a)return!1;while(a){if(a===this)return!0;a=a.superclass}return!1}});h.ClassMixin=i,i.apply(h),SC.CoreObject=h}(),function(){var a=SC.get,b=SC.set,c=SC.guidFor,d=SC.none;SC.Set=SC.CoreObject.extend(SC.MutableEnumerable,SC.Copyable,SC.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(SC.FROZEN_ERROR);var c=a(this,"length");this.enumerableContentWillChange(c,0),b(this,"length",0),this.enumerableContentDidChange(c,0);return this},isEqual:function(b){if(!SC.Enumerable.detect(b))return!1;var c=a(this,"length");if(a(b,"length")!==c)return!1;while(--c>=0)if(!b.contains(this[c]))return!1;return!0},add:SC.alias("addObject"),remove:SC.alias("removeObject"),pop:function(){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);var b=this.length>0?this[this.length-1]:null;this.remove(b);return b},push:SC.alias("addObject"),shift:SC.alias("pop"),unshift:SC.alias("push"),addEach:SC.alias("addObjects"),removeEach:SC.alias("removeObjects"),init:function(a){this._super(),a&&this.addObjects(a)},nextObject:function(a){return this[a]},firstObject:function(){return this.length>0?this[0]:undefined}.property("[]").cacheable(),lastObject:function(){return this.length>0?this[this.length-1]:undefined}.property("[]").cacheable(),addObject:function(e){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);if(d(e))return this;var f=c(e),g=this[f],h=a(this,"length"),i;if(g>=0&&g<h&&this[g]===e)return this;i=[e],this.enumerableContentWillChange(null,i),h=a(this,"length"),this[f]=h,this[h]=e,b(this,"length",h+1),this.enumerableContentDidChange(null,i);return this},removeObject:function(e){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);if(d(e))return this;var f=c(e),g=this[f],h=a(this,"length"),i,j;g>=0&&g<h&&this[g]===e&&(j=[e],this.enumerableContentWillChange(j,null),g<h-1&&(i=this[h-1],this[g]=i,this[c(i)]=g),delete this[f],delete this[h-1],b(this,"length",h-1),this.enumerableContentDidChange(j,null));return this},contains:function(a){return this[c(a)]>=0},copy:function(){var d=this.constructor,e=new d,f=a(this,"length");b(e,"length",f);while(--f>=0)e[f]=this[f],e[c(this[f])]=f;return e},toString:function(){var a=this.length,b,c=[];for(b=0;b<a;b++)c[b]=this[b];return"SC.Set<%@>".fmt(c.join(","))},isSet:YES});var e=SC.Set.create;SC.Set.create=function(a){if(a&&SC.Enumerable.detect(a)){SC.Logger.warn("Passing an enumerable to SC.Set.create() is deprecated and will be removed in a future version of SproutCore. Use new SC.Set(items) instead");return new SC.Set(a)}return e.apply(this,arguments)}}(),function(){SC.CoreObject.subclasses=new SC.Set,SC.Object=SC.CoreObject.extend(SC.Observable)}(),function(){SC.Namespace=SC.Object.extend()}(),function(){SC.Application=SC.Namespace.extend()}(),function(){var a=SC.get,b=SC.set;SC.ArrayProxy=SC.Object.extend(SC.MutableArray,{content:null,objectAtContent:function(b){return a(this,"content").objectAt(b)},replaceContent:function(b,c,d){a(this,"content").replace(b,c,d)},contentWillChange:function(){var b=a(this,"content"),c=b?a(b,"length"):0;this.arrayWillChange(b,0,c,undefined),b&&b.removeArrayObserver(this)}.observesBefore("content"),contentDidChange:function(){var b=a(this,"content"),c=b?a(b,"length"):0;b&&b.addArrayObserver(this),this.arrayDidChange(b,0,undefined,c)}.observes("content"),objectAt:function(b){return a(this,"content")&&this.objectAtContent(b)},length:function(){var b=a(this,"content");return b?a(b,"length"):0}.property("content.length").cacheable(),replace:function(b,c,d){a(this,"content")&&this.replaceContent(b,c,d);return this},arrayWillChange:function(a,b,c,d){this.arrayContentWillChange(b,c,d)},arrayDidChange:function(a,b,c,d){this.arrayContentDidChange(b,c,d)},init:function(a){this._super(),a&&b(this,"content",a),this.contentDidChange()}})}(),function(){function m(){l=null;for(var a in h){if(!h.hasOwnProperty(a))continue;var c=h[a];c.next&&(delete h[a],b(c.target,c.method,c.args,2))}}function k(a,c){c[this.tguid]&&delete c[this.tguid][this.mguid],h[a]&&b(this.target,this.method,this.args,2),delete h[a]}function j(){var a=Date.now(),c=-1;for(var d in h){if(!h.hasOwnProperty(d))continue;var e=h[d];if(e&&e.expires)if(a>=e.expires)delete h[d],b(e.target,e.method,e.args,2);else if(c<0||e.expires<c)c=e.expires}c>0&&setTimeout(j,c-Date.now())}function g(){f=null,e.currentRunLoop&&e.end()}function b(b,c,d,e){c===undefined&&(c=b,b=undefined),"string"==typeof c&&(c=b[c]),d&&e>0&&(d=d.length>e?a.call(d,e):null);return c.apply(b,d)}var a=Array.prototype.slice,c,d=SC.Object.extend({_prev:null,init:function(a){this._prev=a,this.onceTimers={}},end:function(){this.flush();return this._prev},schedule:function(b,c,d){var e=this._queues,f;e||(e=this._queues={}),f=e[b],f||(f=e[b]=[]);var g=arguments.length>3?a.call(arguments,3):null;f.push({target:c,method:d,args:g});return this},flush:function(a){function j(a){b(a.target,a.method,a.args)}var d=this._queues,e,f,g,h,i;if(!d)return this;SC.watch.flushPending();if(a)while(this._queues&&(h=this._queues[a]))this._queues[a]=null,i=SC.LOG_BINDINGS&&a==="sync",i&&SC.Logger.log("Begin: Flush Sync Queue"),a==="sync"&&SC.beginPropertyChanges(),h.forEach(j),a==="sync"&&SC.endPropertyChanges(),i&&SC.Logger.log("End: Flush Sync Queue");else{e=SC.run.queues,g=e.length;do{this._queues=null;for(f=0;f<g;f++)a=e[f],h=d[a],i=SC.LOG_BINDINGS&&a==="sync",i&&SC.Logger.log("Begin: Flush Sync Queue"),a==="sync"&&SC.beginPropertyChanges(),h&&h.forEach(j),a==="sync"&&SC.endPropertyChanges(),i&&SC.Logger.log("End: Flush Sync Queue")}while(d=this._queues)}c=null;return this}});SC.RunLoop=d;var e;SC.run=e=function(a,c){var d,f;e.begin();if(a||c)d=b(a,c);e.end();return d},SC.run.begin=function(){e.currentRunLoop=new d(e.currentRunLoop)},SC.run.end=function(){sc_assert("must have a current run loop",e.currentRunLoop),e.currentRunLoop=e.currentRunLoop.end()},SC.run.queues=["sync","actions","timers"],SC.run.schedule=function(a,b,c){var d=e.autorun();d.schedule.apply(d,arguments)};var f;SC.run.autorun=function(){e.currentRunLoop||e.begin(),f||(f=setTimeout(g,1));return e.currentRunLoop},SC.run.sync=function(){e.autorun(),e.currentRunLoop.flush("sync")};var h={},i=!1;SC.run.later=function(b,c){var d,f,g,i,k;arguments.length===2&&"function"==typeof b?(k=c,c=b,b=undefined,d=[b,c]):(d=a.call(arguments),k=d.pop()),f=Date.now()+k,g={target:b,method:c,expires:f,args:d},i=SC.guidFor(g),h[i]=g,e.once(h,j);return i},SC.run.once=function(b,c){var d=SC.guidFor(b),f=SC.guidFor(c),g,i,j=e.autorun().onceTimers;g=j[d]&&j[d][f],g&&h[g]?h[g].args=a.call(arguments):(i={target:b,method:c,args:a.call(arguments),tguid:d,mguid:f},g=SC.guidFor(i),h[g]=i,j[d]||(j[d]={}),j[d][f]=g,e.schedule("timers",i,k,g,j));return g};var l=!1;SC.run.next=function(b,c){var d,e;d={target:b,method:c,args:a.call(arguments),next:!0},e=SC.guidFor(d),h[e]=d,l||(l=setTimeout(m,1));return e},SC.run.cancel=function(a){delete h[a]},SC.RunLoop.begin=SC.run.begin,SC.RunLoop.end=SC.run.end}(),function(){function k(a,b){var c=b._logic;return c?c(a,b._from,b._from2):f(a,b._from)}function j(a){return a===undefined||a===null||a===""||SC.isArray(a)&&e(a,"length")===0}function i(a,b,c){var d=a._forceKind;d&&(b=d(b,a._placeholder));var e=a._transforms,f=e?e.length:0,g;for(g=0;g<f;g++)b=e[g].call(this,b,c);return b}function d(a){return!a}function c(a){return!!a}function b(a,b){if(a instanceof Array)return a.length>1?b:a[0];return a}function a(a){if(a instanceof Array)return a;if(a===undefined||a===null)return[];return[a]}SC.LOG_BINDINGS=!1||!!SC.ENV.LOG_BINDINGS,SC.BENCHMARK_BINDING_NOTIFICATIONS=!!SC.ENV.BENCHMARK_BINDING_NOTIFICATIONS,SC.BENCHMARK_BINDING_SETUP=!!SC.ENV.BENCHMARK_BINDING_SETUP,SC.MULTIPLE_PLACEHOLDER="@@MULT@@",SC.EMPTY_PLACEHOLDER="@@EMPTY@@";var e=SC.get,f=SC.getPath,g=SC.setPath,h=SC.guidFor,l=function(a,b,c){return f(a,b)&&f(a,c)},m=function(a,b,c){return f(a,b)||f(a,c)},n=SC.Object.extend({_direction:"fwd",init:function(a,b){this._from=b,this._to=a},from:function(a){this._from=a;return this},to:function(a){this._to=a;return this},oneWay:function(a){this._oneWay=a===undefined?!0:!!a;return this},transform:function(a){this._transforms||(this._transforms=[]),this._transforms.push(a);return this},resetTransforms:function(){this._transforms=null;return this},single:function(a){a===undefined&&(a=SC.MULTIPLE_PLACEHOLDER),this._forceKind=b,this._placeholder=a;return this},multiple:function(){this._forceKind=a,this._placeholder=null;return this},bool:function(){this.transform(c);return this},notEmpty:function(a,b){b&&(a&&this.from(a),a=b),a||(a=SC.EMPTY_PLACEHOLDER),this.transform(function(b){return j(b)?a:b});return this},notNull:function(a){throw new Error("SC.Binding.notNull not yet implemented")},not:function(){this.transform(d);return this},isNull:function(a){throw new Error("SC.Binding.isNull not yet implemented")},toString:function(){var a=this._oneWay?"[oneWay]":"";return SC.String.fmt("SC.Binding<%@>(%@ -> %@)%@",[h(this),this._from,this._to,a])},connect:function(a){sc_assert("Must pass a valid object to SC.Binding.connect()",!!a);var b=this._oneWay,c=this._from2;SC.addObserver(a,this._from,this,this.fromDidChange),c&&SC.addObserver(a,c,this,this.fromDidChange),b||SC.addObserver(a,this._to,this,this.toDidChange),SC.meta(a,!1).proto!==a&&this._scheduleSync(a,"fwd"),this._readyToSync=!0;return this},disconnect:function(a){sc_assert("Must pass a valid object to SC.Binding.disconnect()",!!a);var b=this._oneWay,c=this._from2;SC.removeObserver(a,this._from,this,this.fromDidChange),c&&SC.removeObserver(a,c,this,this.fromDidChange),b||SC.removeObserver(a,this._to,this,this.toDidChange),this._readyToSync=!1;return this},fromDidChange:function(a){this._scheduleSync(a,"fwd")},toDidChange:function(a){this._scheduleSync(a,"back")},_scheduleSync:function(a,b){var c=h(a);this[c]||SC.run.schedule("sync",this,this._sync,a),this[c]=this[c]==="fwd"||!b?"fwd":b},_sync:function(a){var b=SC.LOG_BINDINGS,c=h(a),d=this[c],e,g;!this._readyToSync||(delete this[c],d==="fwd"?(e=k(a,this),g=i(this,e,a),b&&SC.Logger.log(" ",this.toString(),e,"->",g,a),SC.setPath(a,this._to,g)):d==="back"&&!this._oneWay&&(e=f(a,this._to),g=i(this,k(a,this),a),e!==g&&(b&&SC.Logger.log(" ",this.toString(),e,"<-",g,a),SC.setPath(a,this._from,e))))}});n.reopenClass({from:function(){var a=this,b=new a;return b.from.apply(b,arguments)},to:function(){var a=this,b=new a;return b.to.apply(b,arguments)},oneWay:function(a,b){var c=this,d=new c(null,a);return d.oneWay(b)},single:function(a){var b=this,c=new b(null,a);return c.single()},multiple:function(a){var b=this,c=new b(null,a);return c.multiple()},oneWay:function(a,b){var c=this,d=new c(null,a);return d.oneWay(b)},transform:function(a){var b=this,c=new b;return c.transform(a)},notEmpty:function(a,b){var c=this,d=new c(null,a);return d.notEmpty(b)},bool:function(a){var b=this,c=new b(null,a);return c.bool()},not:function(a){var b=this,c=new b(null,a);return c.not()},and:function(a,b){var c=this,d=(new c(null,a)).oneWay();d._from2=b,d._logic=l;return d},or:function(a,b){var c=this,d=(new c(null,a)).oneWay();d._from2=b,d._logic=m;return d}}),SC.Binding=n,SC.bind=function(a,b,c){return(new SC.Binding(b,c)).connect(a)}}(),function(){function g(a,b,d,e,f){var g=d._objects;g||(g=d._objects={});var h,i;while(--f>=e){var j=a.objectAt(f);j&&(SC.removeBeforeObserver(j,b,d,"contentKeyWillChange"),SC.removeObserver(j,b,d,"contentKeyDidChange"),i=c(j),h=g[i],h[h.indexOf(f)]=null)}}function f(a,b,d,e,f){var g=d._objects,h;g||(g=d._objects={});while(--f>=e){var i=a.objectAt(f);i&&(SC.addBeforeObserver(i,b,d,"contentKeyWillChange"),SC.addObserver(i,b,d,"contentKeyDidChange"),h=c(i),g[h]||(g[h]=[]),g[h].push(f))}}var a=SC.set,b=SC.get,c=SC.guidFor,d=SC.Object.extend(SC.Array,{init:function(a,b,c){this._super(),this._keyName=b,this._owner=c,this._content=a},objectAt:function(a){var c=this._content.objectAt(a);return c&&b(c,this._keyName)},length:function(){var a=this._content;return a?b(a,"length"):0}.property("[]").cacheable()}),e=/^.+:(before|change)$/;SC.EachProxy=SC.Object.extend({init:function(a){this._super(),this._content=a,a.addArrayObserver(this),SC.watchedEvents(this).forEach(function(a){this.didAddListener(a)},this)},unknownProperty:function(b){var c;c=new d(this._content,b,this),a(this,b,c),this.beginObservingContentKey(b);return c},arrayWillChange:function(a,c,d,e){var f=this._keys,h,i,j;if(!!f){j=d>0?c+d:-1,SC.beginPropertyChanges(this);for(h in f){if(!f.hasOwnProperty(h))continue;j>0&&g(a,h,this,c,j),i=b(this,h),SC.propertyWillChange(this,h),i&&i.arrayContentWillChange(c,d,e)}SC.endPropertyChanges(this)}},arrayDidChange:function(a,c,d,e){var g=this._keys,h,i,j;if(!!g){j=e>0?c+e:-1,SC.beginPropertyChanges(this);for(h in g){if(!g.hasOwnProperty(h))continue;j>0&&f(a,h,this,c,j),i=b(this,h),i&&i.arrayContentDidChange(c,d,e),SC.propertyDidChange(this,h)}SC.endPropertyChanges(this)}},didAddListener:function(a){e.test(a)&&this.beginObservingContentKey(a.slice(0,-7))},didRemoveListener:function(a){e.test(a)&&this.stopObservingContentKey(a.slice(0,-7))},beginObservingContentKey:function(a){var c=this._keys;c||(c=this._keys={});if(!c[a]){c[a]=1;var d=this._content,e=b(d,"length");f(d,a,this,0,e)}else c[a]++},stopObservingContentKey:function(a){var c=this._keys;if(c&&c[a]>0&&--c[a]<=0){var d=this._content,e=b(d,"length");g(d,a,this,0,e)}},contentKeyWillChange:function(a,d){var e=this._objects[c(a)],f=b(this,d),g=f&&e?e.length:0,h;for(h=0;h<g;h++)f.arrayContentWillChange(e[h],1,1)},contentKeyDidChange:function(a,d){var e=this._objects[c(a)],f=b(this,d),g=f&&e?e.length:0,h;for(h=0;h<g;h++)f.arrayContentDidChange(e[h],1,1);SC.propertyDidChange(this,d)}})}(),function(){var a=SC.get,b=SC.set,c=SC.Mixin.create(SC.MutableArray,SC.Observable,SC.Copyable,{get:function(a){return a==="length"?this.length:"number"==typeof a?this[a]:this._super(a)},objectAt:function(a){return this[a]},replace:function(b,c,d){if(this.isFrozen)throw SC.FROZEN_ERROR;var e=d?a(d,"length"):0;this.arrayContentWillChange(b,c,e);if(!d||d.length===0)this.splice(b,c);else{var f=[b,c].concat(d);this.splice.apply(this,f)}this.arrayContentDidChange(b,c,e);return this},unknownProperty:function(a,b){var c;b!==undefined&&c===undefined&&(c=this[a]=b);return c},indexOf:function(a,b){var c,d=this.length;b===undefined?b=0:b=b<0?Math.ceil(b):Math.floor(b),b<0&&(b+=d);for(c=b;c<d;c++)if(this[c]===a)return c;return-1},lastIndexOf:function(a,b){var c,d=this.length;b===undefined?b=d-1:b=b<0?Math.ceil(b):Math.floor(b),b<0&&(b+=d);for(c=b;c>=0;c--)if(this[c]===a)return c;return-1},copy:function(){return this.slice()}}),d=["length"];c.keys().forEach(function(a){Array.prototype[a]&&d.push(a)}),d.length>0&&(c=c.without.apply(c,d)),SC.NativeArray=c,SC.NativeArray.activate=function(){c.apply(Array.prototype)},SC.EXTEND_PROTOTYPES&&SC.NativeArray.activate()}(),function(){}(),function(){}(),function(){var a=SC.get,b=SC.set;SC.RenderBuffer=function(a){return SC._RenderBuffer.create({elementTag:a})},SC._RenderBuffer=SC.Object.extend({elementClasses:null,elementId:null,elementAttributes:null,elementContent:null,elementTag:null,elementStyle:null,escapeContent:!1,escapeFunction:null,parentBuffer:null,init:function(){this._super(),b(this,"elementClasses",[]),b(this,"elementAttributes",{}),b(this,"elementStyle",{}),b(this,"elementContent",[])},push:function(b){a(this,"elementContent").pushObject(b);return this},addClass:function(b){a(this,"elementClasses").pushObject(b);return this},id:function(a){b(this,"elementId",a);return this},attr:function(b,c){a(this,"elementAttributes")[b]=c;return this},style:function(b,c){a(this,"elementStyle")[b]=c;return this},begin:function(a){return SC._RenderBuffer.create({parentBuffer:this,elementTag:a})},end:function(){var b=a(this,"parentBuffer");if(b){var c=this.string();b.push(c);return b}return this},element:function(){return SC.$(this.string())[0]},string:function(){var b=a(this,"elementId"),c=a(this,"elementClasses"),d=a(this,"elementAttributes"),e=a(this,"elementStyle"),f=a(this,"elementContent"),g=a(this,"elementTag"),h=[],i,j=["<"+g];b&&j.push('id="'+b+'"'),c.length&&j.push('class="'+c.join(" ")+'"');if(!jQuery.isEmptyObject(e)){for(i in e)e.hasOwnProperty(i)&&h.push(i+":"+e[i]+";");j.push('style="'+h.join()+'"')}for(i in d)d.hasOwnProperty(i)&&j.push(i+'="'+d[i]+'"');j.push(">"),j=j.join(" "),f=f.join(),a(this,"escapeContent")&&(f=a(this,"escapeFunction")(f));return j+f+"</"+g+">"}})}(),function(){var a=SC.get,b=SC.set;SC.EventDispatcher=SC.Object.extend({rootElement:document,setup:function(){var a,b={touchstart:"touchStart",touchmove:"touchMove",touchend:"touchEnd",touchcancel:"touchCancel",keydown:"keyDown",keyup:"keyUp",keypress:"keyPress",mousedown:"mouseDown",mouseup:"mouseUp",click:"click",dblclick:"doubleClick",mousemove:"mouseMove",focusin:"focusIn",focusout:"focusOut",mouseenter:"mouseEnter",mouseleave:"mouseLeave",change:"change"};for(a in b)b.hasOwnProperty(a)&&this.setupHandler(a,b[a])},setupHandler:function(b,c){var d=a(this,"rootElement");SC.$(d).delegate(".sc-view",b+".sproutcore",function(b){var d=SC.View.views[this.id],e=!0,f;SC.run(function(){while(e!==!1&&d)f=d[c],SC.typeOf(f)==="function"&&(e=f.call(d,b)),d=a(d,"parentView")});return e})},destroy:function(){var b=a(this,"rootElement");SC.$(b).undelegate(".sproutcore")}})}(),function(){var a=SC.get,b=SC.set;SC.Application=SC.Object.extend({rootElement:document,eventDispatcher:null,init:function(){var c,d=a(this,"rootElement");c=SC.EventDispatcher.create({rootElement:d}),b(this,"eventDispatcher",c),SC.$(document).ready(function(){c.setup()})},destroy:function(){a(this,"eventDispatcher").destroy()}})}(),function(){}(),function(){var a=SC.get,b=SC.set;SC.TEMPLATES={},SC.View=SC.Object.extend({concatenatedProperties:["classNames","classNameBindings"],isView:YES,templateName:null,templates:SC.TEMPLATES,template:function(b,c){if(c!==undefined)return c;var d=a(this,"templateName"),e=a(a(this,"templates"),d);if(!e&&d)throw new SC.Error('%@ - Unable to find template "%@".'.fmt(this,d));return e||a(this,"defaultTemplate")}.property("templateName").cacheable(),templateContext:function(a,b){return b!==undefined?b:this}.property().cacheable(),parentView:null,isVisible:!0,childViews:[],render:function(b){var c=a(this,"template");if(!!c){var d=a(this,"templateContext"),e={data:{view:this,isRenderData:!0}};this._didRenderChildViews=YES;var f=c(d,e);b.push(f)}},_applyClassNameBindings:function(){var b=a(this,"classNameBindings"),c=a(this,"classNames"),d,e,f;!b||b.forEach(function(a){var b,g=function(){e=this._classStringForProperty(a),d=this.$(),b&&d.removeClass(b),e?(d.addClass(e),b=e):b=null};SC.addObserver(this,a,g),f=this._classStringForProperty(a),f&&(c.push(f),b=f)},this)},_classStringForProperty:function(b){var c=b.split(":"),d=c[1];b=c[0];var e=SC.getPath(this,b);if(e===YES){if(d)return d;return SC.String.dasherize(a(b.split("."),"lastObject"))}return e!==NO&&e!==undefined&&e!==null?e:null},element:function(b,c){if(c!==undefined)return c;var d=a(this,"parentView");d&&(d=a(d,"element"));if(d)return this.findElementInParentElement(d)}.property("parentView").cacheable(),$:function(b){var c=a(this,"element");return c?b===undefined?SC.$(c):SC.$(b,c):SC.$()},mutateChildViews:function(b){var c=a(this,"childViews"),d=a(c,"length"),e;while(--d>=0)e=c[d],b.call(this,e);return this},forEachChildView:function(b){var c=a(this,"childViews"),d=a(c,"length"),e,f;for(f=0;f<d;f++)e=c[f],b.call(this,e);return this},appendTo:function(b){var c=a(this,"element");c||this.createElement(),this.$().appendTo(b);return this},append:function(){return this.appendTo(document.body)},remove:function(){this.destroyElement()},elementId:function(a,b){return b!==undefined?b:SC.guidFor(this)}.property().cacheable(),findElementInParentElement:function(b){var c="#"+a(this,"elementId");return jQuery(c)[0]||jQuery(c,b)[0]},renderBuffer:function(a){return SC.RenderBuffer(a)},createElement:function(){if(a(this,"element"))return this;var c=this.renderBuffer(a(this,"tagName"));this.renderToBuffer(c),b(this,"element",c.element()),this._notifyDidCreateElement();return this},didCreateElement:function(){},_notifyDidCreateElement:function(){this.didCreateElement(),this.forEachChildView(function(a){a._notifyDidCreateElement()})},destroyElement:function(){var c=a(this,"element");c&&(this._notifyWillDestroyElement(),SC.$(c).remove(),b(this,"element",null));return this},willDestroyElement:function(){},_notifyWillDestroyElement:function(){this.willDestroyElement(),this.forEachChildView(function(a){a._notifyWillDestroyElement()})},_sccv_elementWillChange:function(){this.forEachChildView(function(a){SC.propertyWillChange(a,"element")})}.observesBefore("element"),_sccv_elementDidChange:function(){this.forEachChildView(function(a){SC.propertyDidChange(a,"element")})}.observes("element"),parentViewDidChange:SC.K,renderToBuffer:function(a){var c,d,e;SC.beginPropertyChanges(this),b(this,"elementNeedsUpdate",NO),this.applyAttributesToBuffer(a),this.render(a),this._didRenderChildViews||this.renderChildViews(a),this._didRenderChildViews=NO,SC.endPropertyChanges(this)},applyAttributesToBuffer:function(b){this._applyClassNameBindings(),b.addClass(a(this,"classNames").join(" ")),b.id(a(this,"elementId"));var c=a(this,"ariaRole");c&&b.attr("role",c),a(this,"isVisible")||b.style("display","none")},renderChildViews:function(b){this.forEachChildView(function(c){b=b.begin(a(c,"tagName")),c.renderToBuffer(b),b=b.end()}),this._didRenderChildViews=YES;return b},tagName:"div",ariaRole:null,classNames:["sc-view"],classNameBindings:[],init:function(){var b=a(this,"parentView");this._super(),SC.View.views[a(this,"elementId")]=this,this.childViews=a(this,"childViews").slice(),this.classNameBindings=a(this,"classNameBindings").slice(),this.classNames=a(this,"classNames").slice(),this.createChildViews()},removeChild:function(c){b(c,"parentView",null);var d=a(this,"childViews");d.removeObject(c);return this},removeAllChildren:function(){return this.mutateChildViews(function(a){this.removeChild(a)})},destroyAllChildren:function(){return this.mutateChildViews(function(a){a.destroy()})},removeFromParent:function(){var b=a(this,"parentView");this.remove(),b&&b.removeChild(this);return this},destroy:function(){if(a(this,"isDestroyed"))return this;this.destroyElement(),this.mutateChildViews(function(a){a.destroy()}),delete SC.View.views[a(this,"elementId")],a(this,"parentView")&&this.removeFromParent(),this._super();return this},createChildViews:function(){var b=a(this,"childViews"),c=a(b,"length"),d,e,f,g;SC.beginPropertyChanges(this);for(d=0;d<c;++d){e=g=b[d];if(e){typeof e=="string"?g=this[e]:e=null;if(!g){SC.Logger.error("No view with name "+e+" has been found in "+this.toString());continue}g=this.createChildView(g),e&&(this[e]=g)}b[d]=g}SC.endPropertyChanges(this);return this},createChildView:function(a,c){SC.View.detect(a)?a=a.create(c||{},{parentView:this}):(sc_assert("must pass instance of View",a instanceof SC.View),b(a,"parentView",this));return a},_isVisibleDidChange:function(){this.$().toggle(a(this,"isVisible"))}.observes("isVisible")}),SC.View.views={}}(),function(){var a=SC.get,b=SC.set;SC.CollectionView=SC.View.extend({content:null,emptyView:null,itemViewClass:SC.View,init:function(){var a=this._super();this._sctcv_contentDidChange();return a},didCreateElement:function(){var b=a(this,"content");if(b){var c=a(b,"length");this.arrayWillChange(b,0,0,c),this.arrayDidChange(b,0,0,c)}},_sctcv_contentDidChange:function(){this.$().empty();var b=this._sccv_content,c=a(this,"content"),d=0,e=0;b&&(b.removeArrayObserver(this),d=a(b,"length")),c&&(c.addArrayObserver(this),e=a(c,"length")),this.arrayWillChange(b,0,d,e),this._sccv_content=c,this.arrayDidChange(c,0,d,e)}.observes("content"),destroy:function(){b(this,"content",null);return this._super()},arrayWillChange:function(b,c,d,e){if(!!a(this,"element")){var f=a(this,"emptyView");f&&!SC.Object.detect(f)&&f.removeFromParent();var g=a(this,"childViews"),h,i,j;j=a(g,"length");for(i=c+d-1;i>=c;i--)g[i].destroy()}},arrayDidChange:function(c,d,e,f){if(!!a(this,"element")){var g=a(this,"itemViewClass"),h=a(this,"childViews"),i=[],j,k,l,m,n,o,p,q,r,s;n=this.$();if(c){var t=c.slice(d,d+f);l=h.objectAt(d-1),o=l?l.$():null,s=a(t,"length");for(r=0;r<s;r++)p=t.objectAt(r),k=this.createChildView(g,{content:p}),q=k.createElement().$(),o?q.insertAfter(o):n.append(q),o=q,i.push(k);h.replace(d,0,i)}var u=a(this,"emptyView");a(h,"length")===0&&u&&(SC.Object.detect(u)&&(u=this.createChildView(u)),b(this,"emptyView",u),u.createElement().$().appendTo(n),b(this,"childViews",[u]))}}})}(),function(){}(),function(){"undefined"==typeof jQuery&&require("jquery"),SC.$=jQuery}(),function(){var a=SC.get,b=SC.set;SC.Button=SC.View.extend({classNames:["sc-button"],classNameBindings:["isActive"],tagName:"button",targetObject:function(){var b=a(this,"target");return SC.typeOf(b)==="string"?SC.getPath(b):b}.property("target").cacheable(),mouseDown:function(){b(this,"isActive",!0),this._mouseDown=!0,this._mouseEntered=!0},mouseLeave:function(){this._mouseDown&&(b(this,"isActive",!1),this._mouseEntered=!1)},mouseEnter:function(){this._mouseDown&&(b(this,"isActive",!0),this._mouseEntered=!0)},mouseUp:function(c){if(a(this,"isActive")){var d=a(this,"action"),e=a(this,"targetObject");e&&d&&(typeof d=="string"&&(d=e[d]),d.call(e,this)),b(this,"isActive",!1)}this._mouseDown=!1,this._mouseEntered=!1},touchStart:function(a){this.mouseDown(a)},touchEnd:function(a){this.mouseUp(a)}})}(),function(){SC.Handlebars={},SC.Handlebars.Compiler=function(){},SC.Handlebars.Compiler.prototype=SC.create(Handlebars.Compiler.prototype),SC.Handlebars.Compiler.prototype.compiler=SC.Handlebars.Compiler,SC.Handlebars.JavaScriptCompiler=function(){},SC.Handlebars.JavaScriptCompiler.prototype=SC.create(Handlebars.JavaScriptCompiler.prototype),SC.Handlebars.JavaScriptCompiler.prototype.compiler=SC.Handlebars.JavaScriptCompiler,SC.Handlebars.JavaScriptCompiler.prototype.nameLookup=function(a,b,c){return c==="context"?"SC.get("+a+", "+this.quotedString(b)+");":Handlebars.JavaScriptCompiler.prototype.nameLookup.call(this,a,b,c)},SC.Handlebars.Compiler.prototype.mustache=function(a){if(a.params.length||a.hash)return Handlebars.Compiler.prototype.mustache.call(this,a);var b=new Handlebars.AST.IdNode(["bind"]);a.escaped&&(a.hash=a.hash||new Handlebars.AST.HashNode([]),a.hash.pairs.push(["escaped",new Handlebars.AST.StringNode("true")])),a=new Handlebars.AST.MustacheNode([b].concat([a.id]),a.hash,!a.escaped);return Handlebars.Compiler.prototype.mustache.call(this,a)},SC.Handlebars.compile=function(a){var b=Handlebars.parse(a),c=(new SC.Handlebars.Compiler).compile(b,{data:!0,stringParams:!0}),d=(new SC.Handlebars.JavaScriptCompiler).compile(c,{data:!0,stringParams:!0});d.rawTemplate=a;return d},Handlebars.registerHelper("helperMissing",function(a,b){var c;c="%@ Handlebars error: Could not find property '%@' on object %@.";throw new SC.Error(SC.String.fmt(c,b.data.view,a,this))}),SC._RenderBuffer.reopen({escapeFunction:Handlebars.Utils.escapeExpression})}(),function(){var a=SC.set,b=SC.get;SC.Checkbox=SC.View.extend({title:null,value:!1,classNames:["sc-checkbox"],defaultTemplate:SC.Handlebars.compile('<label><input type="checkbox" {{bindAttr checked="value"}}>{{title}}</label>'),change:function(){SC.run.once(this,this._updateElementValue);return!1},_updateElementValue:function(){var b=this.$("input:checkbox");a(this,"value",b.prop("checked"))}})}(),function(){var a=SC.get,b=SC.set;SC.TextField=SC.View.extend({classNames:["sc-text-field"],insertNewline:SC.K,cancel:SC.K,type:"text",value:"",placeholder:"",defaultTemplate:function(){var b=a(this,"type");return SC.Handlebars.compile('<input type="%@" {{bindAttr value="value" placeholder="placeholder"}}>'.fmt(b))}.property(),focusOut:function(a){this._elementValueDidChange();return!1},change:function(a){this._elementValueDidChange();return!1},keyUp:function(a){this.interpretKeyEvents(a);return!1},interpretKeyEvents:function(a){var b=SC.TextField.KEY_EVENTS,c=b[a.keyCode];if(c)return this[c](a);this._elementValueDidChange()},_elementValueDidChange:function(){var a=this.$("input");b(this,"value",a.val())},_valueDidChange:function(){SC.run.once(this,this._updateElementValue)},_updateElementValue:function(){var b=this.$("input"),c=a(this,"value");if(c===undefined||c===null)c="";b.val(c)}}),SC.TextField.KEY_EVENTS={13:"insertNewline",27:"cancel"}}(),function(){}(),function(){var a=SC.get,b=SC.set,c=SC.getPath;SC._BindableSpanView=SC.View.extend({tagName:"span",shouldDisplayFunc:null,preserveContext:!1,displayTemplate:null,inverseTemplate:null,property:null,render:function(d){a(this,"isEscaped")&&b(d,"escapeContent",!0);var e=a(this,"shouldDisplayFunc"),f=a(this,"property"),g=a(this,"preserveContext"),h=a(this,"previousContext"),i=a(this,"inverseTemplate"),j=a(this,"displayTemplate"),k=c(h,f);if(e(k)){b(this,"template",j);if(g)b(this,"templateContext",h);else if(j)b(this,"templateContext",k);else{d.push(k);return}}else i?(b(this,"template",i),g?b(this,"templateContext",h):b(this,"templateContext",k)):b(this,"template",function(){return""});return this._super(d)},rerender:function(){var c;this.destroyAllChildren();var d=this.renderBuffer(a(this,"tagName"));a(this,"isEscaped")&&b(d,"escapeContent",!0),this.renderToBuffer(d),c=d.element(),this.$().replaceWith(c),b(this,"element",c),this._notifyDidCreateElement()}})}(),function(){var a=SC.get,b=SC.getPath;(function(){var c=function(c,d,e,f){var g=d.data,h=d.fn,i=d.inverse,j=g.view,k=this;if("object"==typeof this){var l=j.createChildView(SC._BindableSpanView,{preserveContext:e,shouldDisplayFunc:f,displayTemplate:h,inverseTemplate:i,property:c,previousContext:k,isEscaped:d.hash.escaped}),m,n;a(j,"childViews").pushObject(l),m=function(){a(l,"element")?l.rerender():SC.removeObserver(k,c,n)},n=function(){SC.run.once(m)},SC.addObserver(k,c,n);var o=l.renderBuffer(a(l,"tagName"));l.renderToBuffer(o);return new Handlebars.SafeString(o.string())}return b(this,c)};Handlebars.registerHelper("bind",function(a,b){return c.call(this,a,b,!1,function(a){return!SC.none(a)})}),Handlebars.registerHelper("boundIf",function(b,d){if(d)return c.call(this,b,d,!0,function(b){return SC.typeOf(b)==="array"?a(b,"length")!==0:!!b});throw new SC.Error("Cannot use boundIf helper without a block.")})})(),Handlebars.registerHelper("with",function(a,b){return Handlebars.helpers.bind.call(b.contexts[0],a,b)}),Handlebars.registerHelper("if",function(a,b){return Handlebars.helpers.boundIf.call(b.contexts[0],a,b)}),Handlebars.registerHelper("unless",function(a,b){var c=b.fn,d=b.inverse;b.fn=d,b.inverse=c;return Handlebars.helpers.boundIf.call(b.contexts[0],a,b)}),Handlebars.registerHelper("bindAttr",function(a){var c=a.hash,d=a.data.view,e=[],f=this,g=jQuery.uuid++,h=c["class"];if(h!==null&&h!==undefined){var i=SC.Handlebars.bindClasses(this,h,d,g);e.push('class="'+i.join(" ")+'"'),delete c["class"]}var j=SC.keys(c);j.forEach(function(a){var h=c[a],i=b(f,h),j,k;j=function j(){var c=b(f,h),e=d.$("[data-handlebars-id='"+g+"']");e.length===0?SC.removeObserver(f,h,k):c===NO?e.removeAttr(a):c===YES?e.attr(a,a):(SC.none(c)&&(c=""),e.attr(a,c.toString()))},k=function(){SC.run.once(j)},SC.addObserver(f,h,k),i===YES&&(i=a),i!==NO&&e.push(a+'="'+i+'"')},this),e.push('data-handlebars-id="'+g+'"');return e.join(" ")}),SC.Handlebars.bindClasses=function(c,d,e,f){var g=[],h,i,j,k=function(d){var e=b(c,d);return e===YES?SC.String.dasherize(a(d.split("."),"lastObject")):e!==NO&&e!==undefined&&e!==null?e:null};d.split(" ").forEach(function(a){var b,d,l;d=function(){h=k(a),j=f?e.$("[data-handlebars-id='"+f+"']"):e.$(),j.length===0?SC.removeObserver(c,a,l):(b&&j.removeClass(b),h?(j.addClass(h),b=h):b=null)},l=function(){SC.
run.once(d)},SC.addObserver(c,a,l),i=k(a),i&&(g.push(i),b=i)});return g}}(),function(){var a=SC.get,b=SC.set;SC.Handlebars.ViewHelper=SC.Object.create({viewClassFromHTMLOptions:function(a,b){var c={},d=b["class"],e=!1;b.id&&(c.elementId=b.id,e=!0),d&&(d=d.split(" "),c.classNames=d,e=!0),b.classBinding&&(c.classNameBindings=b.classBinding.split(" "),e=!0),e&&(b=jQuery.extend({},b),delete b.id,delete b["class"],delete b.classBinding);return a.extend(b,c)},helper:function(c,d,e){var f=e.inverse,g=e.data,h=g.view,i=e.fn,j=e.hash,k;if("string"==typeof d){k=SC.getPath(c,d);if(!k)throw new SC.Error("Unable to find view at path '"+d+"'")}else sc_assert("You must pass a string or a view class to the #view helper",SC.View.detect(d)),k=d;sc_assert("Null or undefined object was passed to the #view helper. Did you mean to pass a property path string?",!!k),k=this.viewClassFromHTMLOptions(k,j);var l=g.view,m=a(l,"childViews"),n=l.createChildView(k);i&&b(n,"template",i),m.pushObject(n);var o=SC.RenderBuffer(a(n,"tagName"));n.renderToBuffer(o);return new Handlebars.SafeString(o.string())}}),Handlebars.registerHelper("view",function(a,b){a&&a.data&&a.data.isRenderData&&(b=a,a="SC.View");return SC.Handlebars.ViewHelper.helper(this,a,b)})}(),function(){var a=SC.get;SC.Handlebars.CONTAINER_MAP={ul:"li",ol:"li",table:"tr",thead:"tr",tbody:"tr",tfoot:"tr",tr:"td"},Handlebars.registerHelper("collection",function(b,c){b&&b.data&&b.data.isRenderData&&(c=b,b=undefined);var d=c.fn,e=c.data,f=c.inverse,g;g=b?SC.getPath(b):SC.CollectionView,sc_assert("%@ #collection: Could not find %@".fmt(e.view,b),!!g);var h=c.hash,i={},j;for(var k in h)h.hasOwnProperty(k)&&(j=k.match(/^item(.)(.*)$/),j&&(i[j[1].toLowerCase()+j[2]]=h[k],delete h[k]));var l=h.tagName||a(g,"proto").tagName,m=SC.Handlebars.CONTAINER_MAP[l];m&&(i.tagName=i.tagName||m),d&&(i.template=d,delete c.fn),f&&(h.emptyView=SC.View.extend({template:f})),h.preserveContext&&(i.templateContext=function(){return a(this,"content")}.property("content"),delete h.preserveContext);var n=a(g,"proto").itemViewClass;h.itemViewClass=SC.Handlebars.ViewHelper.viewClassFromHTMLOptions(n,i);return Handlebars.helpers.view.call(this,g,c)}),Handlebars.registerHelper("each",function(a,b){b.hash.contentBinding=SC.Binding.from("parentView."+a).oneWay(),b.hash.preserveContext=!0;return Handlebars.helpers.collection.call(this,null,b)})}(),function(){}(),function(){SC.$(document).ready(function(){SC.$('head script[type="text/html"]').each(function(){var a=SC.$(this),b=a.attr("data-template-name")||a.attr("id");if(!b)throw new SC.Error("Template found without a name specified.Please provide a data-template-name attribute.\n"+a.html());SC.TEMPLATES[b]=SC.Handlebars.compile(a.html()),a.remove()}),SC.$('body script[type="text/html"]').each(function(){var a=SC.$(this),b=SC.Handlebars.compile(a.html()),c=a.attr("data-view"),d=c?SC.getPath(c):SC.View;d=d.create({template:b}),d.createElement(),a.replaceWith(d.$())})})}(),function(){}(),function(){}()
This source diff could not be displayed because it is too large. You can view the blob instead.
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// Portions ©2008-2011 Apple Inc. All rights reserved.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
(function(){var a=function(){var a={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,statements:6,simpleInverse:7,statement:8,openInverse:9,closeBlock:10,openBlock:11,mustache:12,partial:13,CONTENT:14,COMMENT:15,OPEN_BLOCK:16,inMustache:17,CLOSE:18,OPEN_INVERSE:19,OPEN_ENDBLOCK:20,path:21,OPEN:22,OPEN_UNESCAPED:23,OPEN_PARTIAL:24,params:25,hash:26,param:27,STRING:28,hashSegments:29,hashSegment:30,ID:31,EQUALS:32,pathSegments:33,SEP:34,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"STRING",31:"ID",32:"EQUALS",34:"SEP"},productions_:[0,[3,2],[4,3],[4,1],[4,0],[6,1],[6,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[7,2],[17,3],[17,2],[17,2],[17,1],[25,2],[25,1],[27,1],[27,1],[26,1],[29,2],[29,1],[30,3],[30,3],[21,1],[33,3],[33,1]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=new d.ProgramNode(f[h-2],f[h]);break;case 3:this.$=new d.ProgramNode(f[h]);break;case 4:this.$=new d.ProgramNode([]);break;case 5:this.$=[f[h]];break;case 6:f[h-1].push(f[h]),this.$=f[h-1];break;case 7:this.$=new d.InverseNode(f[h-2],f[h-1],f[h]);break;case 8:this.$=new d.BlockNode(f[h-2],f[h-1],f[h]);break;case 9:this.$=f[h];break;case 10:this.$=f[h];break;case 11:this.$=new d.ContentNode(f[h]);break;case 12:this.$=new d.CommentNode(f[h]);break;case 13:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 14:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 15:this.$=f[h-1];break;case 16:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1]);break;case 17:this.$=new d.MustacheNode(f[h-1][0],f[h-1][1],!0);break;case 18:this.$=new d.PartialNode(f[h-1]);break;case 19:this.$=new d.PartialNode(f[h-2],f[h-1]);break;case 20:break;case 21:this.$=[[f[h-2]].concat(f[h-1]),f[h]];break;case 22:this.$=[[f[h-1]].concat(f[h]),null];break;case 23:this.$=[[f[h-1]],f[h]];break;case 24:this.$=[[f[h]],null];break;case 25:f[h-1].push(f[h]),this.$=f[h-1];break;case 26:this.$=[f[h]];break;case 27:this.$=f[h];break;case 28:this.$=new d.StringNode(f[h]);break;case 29:this.$=new d.HashNode(f[h]);break;case 30:f[h-1].push(f[h]),this.$=f[h-1];break;case 31:this.$=[f[h]];break;case 32:this.$=[f[h-2],f[h]];break;case 33:this.$=[f[h-2],new d.StringNode(f[h])];break;case 34:this.$=new d.IdNode(f[h]);break;case 35:f[h-2].push(f[h]),this.$=f[h-2];break;case 36:this.$=[f[h]]}},table:[{3:1,4:2,5:[2,4],6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{1:[3]},{5:[1,16]},{5:[2,3],7:17,8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,19],20:[2,3],22:[1,13],23:[1,14],24:[1,15]},{5:[2,5],14:[2,5],15:[2,5],16:[2,5],19:[2,5],20:[2,5],22:[2,5],23:[2,5],24:[2,5]},{4:20,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{4:21,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{17:22,21:23,31:[1,25],33:24},{17:26,21:23,31:[1,25],33:24},{17:27,21:23,31:[1,25],33:24},{17:28,21:23,31:[1,25],33:24},{21:29,31:[1,25],33:24},{1:[2,1]},{6:30,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{5:[2,6],14:[2,6],15:[2,6],16:[2,6],19:[2,6],20:[2,6],22:[2,6],23:[2,6],24:[2,6]},{17:22,18:[1,31],21:23,31:[1,25],33:24},{10:32,20:[1,33]},{10:34,20:[1,33]},{18:[1,35]},{18:[2,24],21:40,25:36,26:37,27:38,28:[1,41],29:39,30:42,31:[1,43],33:24},{18:[2,34],28:[2,34],31:[2,34],34:[1,44]},{18:[2,36],28:[2,36],31:[2,36],34:[2,36]},{18:[1,45]},{18:[1,46]},{18:[1,47]},{18:[1,48],21:49,31:[1,25],33:24},{5:[2,2],8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,2],22:[1,13],23:[1,14],24:[1,15]},{14:[2,20],15:[2,20],16:[2,20],19:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,7],14:[2,7],15:[2,7],16:[2,7],19:[2,7],20:[2,7],22:[2,7],23:[2,7],24:[2,7]},{21:50,31:[1,25],33:24},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{18:[2,22],21:40,26:51,27:52,28:[1,41],29:39,30:42,31:[1,43],33:24},{18:[2,23]},{18:[2,26],28:[2,26],31:[2,26]},{18:[2,29],30:53,31:[1,54]},{18:[2,27],28:[2,27],31:[2,27]},{18:[2,28],28:[2,28],31:[2,28]},{18:[2,31],31:[2,31]},{18:[2,36],28:[2,36],31:[2,36],32:[1,55],34:[2,36]},{31:[1,56]},{14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,17],14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]},{18:[1,57]},{18:[1,58]},{18:[2,21]},{18:[2,25],28:[2,25],31:[2,25]},{18:[2,30],31:[2,30]},{32:[1,55]},{21:59,28:[1,60],31:[1,25],33:24},{18:[2,35],28:[2,35],31:[2,35],34:[2,35]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{18:[2,32],31:[2,32]},{18:[2,33],31:[2,33]}],defaultActions:{16:[2,1],37:[2,23],51:[2,21]},parseError:function(a,b){throw new Error(a)},parse:function(a){function o(){var a;a=b.lexer.lex()||1,typeof a!="number"&&(a=b.symbols_[a]||a);return a}function n(a){c.length=c.length-2*a,d.length=d.length-a,e.length=e.length-a}var b=this,c=[0],d=[null],e=[],f=this.table,g="",h=0,i=0,j=0,k=2,l=1;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var m=this.lexer.yylloc;e.push(m),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var p,q,r,s,t,u,v={},w,x,y,z;for(;;){r=c[c.length-1],this.defaultActions[r]?s=this.defaultActions[r]:(p==null&&(p=o()),s=f[r]&&f[r][p]);if(typeof s=="undefined"||!s.length||!s[0]){if(!j){z=[];for(w in f[r])this.terminals_[w]&&w>2&&z.push("'"+this.terminals_[w]+"'");var A="";this.lexer.showPosition?A="Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+z.join(", "):A="Parse error on line "+(h+1)+": Unexpected "+(p==1?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:m,expected:z})}if(j==3){if(p==l)throw new Error(A||"Parsing halted.");i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,p=o()}for(;;){if(k.toString()in f[r])break;if(r==0)throw new Error(A||"Parsing halted.");n(1),r=c[c.length-1]}q=p,p=k,r=c[c.length-1],s=f[r]&&f[r][k],j=3}if(s[0]instanceof Array&&s.length>1)throw new Error("Parse Error: multiple actions possible at state: "+r+", token: "+p);switch(s[0]){case 1:c.push(p),d.push(this.lexer.yytext),e.push(this.lexer.yylloc),c.push(s[1]),p=null,q?(p=q,q=null):(i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,j>0&&j--);break;case 2:x=this.productions_[s[1]][1],v.$=d[d.length-x],v._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},u=this.performAction.call(v,g,i,h,this.yy,s[1],d,e);if(typeof u!="undefined")return u;x&&(c=c.slice(0,-1*x*2),d=d.slice(0,-1*x),e=e.slice(0,-1*x)),c.push(this.productions_[s[1]][0]),d.push(v.$),e.push(v._$),y=f[c[c.length-2]][c[c.length-1]],c.push(y);break;case 3:return!0}}return!0}},f=function(){var a={EOF:1,parseError:function(a,b){if(this.yy.parseError)this.yy.parseError(a,b);else throw new Error(a)},setInput:function(a){this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};return this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.match+=a,this.matched+=a;var b=a.match(/\n/);b&&this.yylineno++,this._input=this._input.slice(1);return a},unput:function(a){this._input=a+this._input;return this},more:function(){this._more=!0;return this},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;a.length<20&&(a+=this._input.substr(0,20-a.length));return(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d;this._more||(this.yytext="",this.match="");var e=this._currentRules();for(var f=0;f<e.length;f++){b=this._input.match(this.rules[e[f]]);if(b){d=b[0].match(/\n.*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-1:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,e[f],this.conditionStack[this.conditionStack.length-1]);if(a)return a;return}}if(this._input==="")return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return typeof a!="undefined"?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules}};a.performAction=function(a,b,c,d){var e=d;switch(c){case 0:this.begin("mu");if(b.yytext)return 14;break;case 1:return 14;case 2:return 24;case 3:return 16;case 4:return 20;case 5:return 19;case 6:return 19;case 7:return 23;case 8:return 23;case 9:b.yytext=b.yytext.substr(3,b.yyleng-5),this.begin("INITIAL");return 15;case 10:return 22;case 11:return 32;case 12:return 31;case 13:return 31;case 14:return 34;case 15:break;case 16:this.begin("INITIAL");return 18;case 17:this.begin("INITIAL");return 18;case 18:b.yytext=b.yytext.substr(1,b.yyleng-2).replace(/\\"/g,'"');return 28;case 19:return 31;case 20:return"INVALID";case 21:return 5}},a.rules=[/^[^\x00]*?(?=(\{\{))/,/^[^\x00]+/,/^\{\{>/,/^\{\{#/,/^\{\{\//,/^\{\{\^/,/^\{\{\s*else\b/,/^\{\{\{/,/^\{\{&/,/^\{\{![\s\S]*?\}\}/,/^\{\{/,/^=/,/^\.(?=[} ])/,/^\.\./,/^[/.]/,/^\s+/,/^\}\}\}/,/^\}\}/,/^"(\\["]|[^"])*"/,/^[a-zA-Z0-9_-]+(?=[=} /.])/,/^./,/^$/],a.conditions={mu:{rules:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],inclusive:!1},INITIAL:{rules:[0,1,21],inclusive:!0}};return a}();a.lexer=f;return a}();Handlebars={},Handlebars.VERSION="1.0.beta.1",Handlebars.Parser=a,Handlebars.parse=function(a){Handlebars.Parser.yy=Handlebars.AST;return Handlebars.Parser.parse(a)},Handlebars.print=function(a){return(new Handlebars.PrintVisitor).accept(a)},Handlebars.helpers={},Handlebars.partials={},Handlebars.registerHelper=function(a,b,c){c&&(b.not=c),this.helpers[a]=b},Handlebars.registerPartial=function(a,b){this.partials[a]=b},Handlebars.registerHelper("helperMissing",function(a){if(arguments.length===2)return undefined;throw new Error("Could not find property '"+a+"'")}),Handlebars.registerHelper("blockHelperMissing",function(a,b,c){c=c||function(){};var d="",e=Object.prototype.toString.call(a);e==="[object Function]"&&(a=a());if(a===!0)return b(this);if(a===!1||a==null)return c(this);if(e==="[object Array]"){if(a.length>0)for(var f=0,g=a.length;f<g;f++)d=d+b(a[f]);else d=c(this);return d}return b(a)},function(a,b){return b(a)}),Handlebars.registerHelper("each",function(a,b,c){var d="";if(a&&a.length>0)for(var e=0,f=a.length;e<f;e++)d=d+b(a[e]);else d=c(this);return d}),Handlebars.registerHelper("if",function(a,b,c){return!a||a==[]?c(this):b(this)}),Handlebars.registerHelper("unless",function(a,b,c){return Handlebars.helpers["if"].call(this,a,c,b)}),Handlebars.registerHelper("with",function(a,b){return b(a)}),Handlebars.logger={DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){}},Handlebars.log=function(a,b){Handlebars.logger.log(a,b)},function(){Handlebars.AST={},Handlebars.AST.ProgramNode=function(a,b){this.type="program",this.statements=a,b&&(this.inverse=new Handlebars.AST.ProgramNode(b))},Handlebars.AST.MustacheNode=function(a,b,c){this.type="mustache",this.id=a[0],this.params=a.slice(1),this.hash=b,this.escaped=!c},Handlebars.AST.PartialNode=function(a,b){this.type="partial",this.id=a,this.context=b};var a=function(a,b){if(a.original!==b.original)throw new Handlebars.Exception(a.original+" doesn't match "+b.original)};Handlebars.AST.BlockNode=function(b,c,d){a(b.id,d),this.type="block",this.mustache=b,this.program=c},Handlebars.AST.InverseNode=function(b,c,d){a(b.id,d),this.type="inverse",this.mustache=b,this.program=c},Handlebars.AST.ContentNode=function(a){this.type="content",this.string=a},Handlebars.AST.HashNode=function(a){this.type="hash",this.pairs=a},Handlebars.AST.IdNode=function(a){this.type="ID",this.original=a.join(".");var b=[],c=0;for(var d=0,e=a.length;d<e;d++){var f=a[d];if(f==="..")c++;else{if(f==="."||f==="this")continue;b.push(f)}}this.parts=b,this.string=b.join("."),this.depth=c,this.isSimple=b.length===1&&c===0},Handlebars.AST.StringNode=function(a){this.type="STRING",this.string=a},Handlebars.AST.CommentNode=function(a){this.type="comment",this.comment=a}}(),Handlebars.Visitor=function(){},Handlebars.Visitor.prototype={accept:function(a){return this[a.type](a)}},Handlebars.Exception=function(a){this.message=a},Handlebars.SafeString=function(a){this.string=a},Handlebars.SafeString.prototype.toString=function(){return this.string.toString()},function(){var a={"<":"&lt;",">":"&gt;"},b=/&(?!\w+;)|[<>]/g,c=/[&<>]/,d=function(b){return a[b]||"&amp;"};Handlebars.Utils={escapeExpression:function(a){if(a instanceof Handlebars.SafeString)return a.toString();if(a==null||a===!1)return"";if(!c.test(a))return a;return a.replace(b,d)},isEmpty:function(a){return typeof a=="undefined"?!0:a===null?!0:a===!1?!0:Object.prototype.toString.call(a)==="[object Array]"&&a.length===0?!0:!1}}}(),Handlebars.Compiler=function(){},Handlebars.JavaScriptCompiler=function(){},function(a,b){a.OPCODE_MAP={appendContent:1,getContext:2,lookupWithHelpers:3,lookup:4,append:5,invokeMustache:6,appendEscaped:7,pushString:8,truthyOrFallback:9,functionOrFallback:10,invokeProgram:11,invokePartial:12,push:13,invokeInverse:14,assignToHash:15,pushStringParam:16},a.MULTI_PARAM_OPCODES={appendContent:1,getContext:1,lookupWithHelpers:1,lookup:1,invokeMustache:2,pushString:1,truthyOrFallback:1,functionOrFallback:1,invokeProgram:2,invokePartial:1,push:1,invokeInverse:1,assignToHash:1,pushStringParam:1},a.DISASSEMBLE_MAP={};for(var c in a.OPCODE_MAP){var d=a.OPCODE_MAP[c];a.DISASSEMBLE_MAP[d]=c}a.multiParamSize=function(b){return a.MULTI_PARAM_OPCODES[a.DISASSEMBLE_MAP[b]]},a.prototype={compiler:a,disassemble:function(){var b=this.opcodes,c,d,e=[],f,g,h;for(var i=0,j=b.length;i<j;i++){c=b[i];if(c==="DECLARE")g=b[++i],h=b[++i],e.push("DECLARE "+g+" = "+h);else{f=a.DISASSEMBLE_MAP[c];var k=a.multiParamSize(c),l=[];for(var m=0;m<k;m++)d=b[++i],typeof d=="string"&&(d='"'+d.replace("\n","\\n")+'"'),l.push(d);f=f+" "+l.join(" "),e.push(f)}}return e.join("\n")},guid:0,compile:function(a,b){this.children=[],this.depths={list:[]},this.options=b||{};return this.program(a)},accept:function(a){return this[a.type](a)},program:function(a){var b=a.statements,c;this.opcodes=[];for(var d=0,e=b.length;d<e;d++)c=b[d],this[c.type](c);this.depths.list=this.depths.list.sort(function(a,b){return a-b});return this},compileProgram:function(a){var b=(new this.compiler).compile(a,this.options),c=this.guid++;this.usePartial=this.usePartial||b.usePartial,this.children[c]=b;for(var d=0,e=b.depths.list.length;d<e;d++){depth=b.depths.list[d];if(depth<2)continue;this.addDepth(depth-1)}return c},block:function(a){var b=a.mustache,c,d,e,f,g=this.setupStackForMustache(b),h=this.compileProgram(a.program);a.program.inverse&&(f=this.compileProgram(a.program.inverse),this.declare("inverse",f)),this.opcode("invokeProgram",h,g.length),this.declare("inverse",null),this.opcode("append")},inverse:function(a){this.ID(a.mustache.id);var b=this.compileProgram(a.program);this.opcode("invokeInverse",b),this.opcode("append")},hash:function(a){var b=a.pairs,c,d;this.opcode("push","{}");for(var e=0,f=b.length;e<f;e++)c=b[e],d=c[1],this.accept(d),this.opcode("assignToHash",c[0])},partial:function(a){var b=a.id;this.usePartial=!0,a.context?this.ID(a.context):this.opcode("push","context"),this.opcode("invokePartial",b.original),this.opcode("append")},content:function(a){this.opcode("appendContent",a.string)},mustache:function(a){var b=this.setupStackForMustache(a);this.opcode("invokeMustache",b.length,a.id.original),a.escaped?this.opcode("appendEscaped"):this.opcode("append")},ID:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth),this.opcode("lookupWithHelpers",a.parts[0]||null);for(var b=1,c=a.parts.length;b<c;b++)this.opcode("lookup",a.parts[b])},STRING:function(a){this.opcode("pushString",a.string)},comment:function(){},pushParams:function(a){var b=a.length,c;while(b--)c=a[b],this.options.stringParams?(c.depth&&this.addDepth(c.depth),this.opcode("getContext",c.depth||0),this.opcode("pushStringParam",c.string)):this[c.type](c)},opcode:function(b,c,d){this.opcodes.push(a.OPCODE_MAP[b]),c!==undefined&&this.opcodes.push(c),d!==undefined&&this.opcodes.push(d)},declare:function(a,b){this.opcodes.push("DECLARE"),this.opcodes.push(a),this.opcodes.push(b)},addDepth:function(a){a!==0&&(this.depths[a]||(this.depths[a]=!0,this.depths.list.push(a)))},setupStackForMustache:function(a){var b=a.params;this.pushParams(b),a.hash?this.hash(a.hash):this.opcode("push","{}"),this.ID(a.id);return b}},b.prototype={nameLookup:function(a,c,d){return b.RESERVED_WORDS[c]||c.indexOf("-")!==-1?a+"['"+c+"']":a+"."+c},appendToBuffer:function(a){return"buffer = buffer + "+a+";"},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b){this.environment=a,this.options=b||{},this.preamble(),this.stackSlot=0,this.stackVars=[],this.registers={list:[]},this.compileChildren(a,b),Handlebars.log(Handlebars.logger.DEBUG,a.disassemble()+"\n\n");var c=a.opcodes,d,e,f,h;this.i=0;for(g=c.length;this.i<g;this.i++)d=this.nextOpcode(0),d[0]==="DECLARE"?(this.i=this.i+2,this[d[1]]=d[2]):(this.i=this.i+d[1].length,this[d[0]].apply(this,d[1]));return this.createFunction()},nextOpcode:function(b){var c=this.environment.opcodes,d=c[this.i+b],e,f,g,h;if(d==="DECLARE"){e=c[this.i+1],f=c[this.i+2];return["DECLARE",e,f]}e=a.DISASSEMBLE_MAP[d],g=a.multiParamSize(d),h=[];for(var i=0;i<g;i++)h.push(c[this.i+i+1+b]);return[e,h]},eat:function(a){this.i=this.i+a.length},preamble:function(){var a=[];a.push("var buffer = "+this.initializeBuffer()+", currentContext = context");var b="helpers = helpers || Handlebars.helpers;";this.environment.usePartial&&(b=b+" partials = partials || Handlebars.partials;"),a.push(b),this.lastContext=0,this.source=a},createFunction:function(){var a={escapeExpression:Handlebars.Utils.escapeExpression,invokePartial:Handlebars.VM.invokePartial,programs:[],program:function(a,b,c,d){var e=this.programs[a];if(d)return Handlebars.VM.program(this.children[a],b,c,d);if(e)return e;e=this.programs[a]=Handlebars.VM.program(this.children[a],b,c);return e},programWithDepth:Handlebars.VM.programWithDepth,noop:Handlebars.VM.noop},b=this.stackVars.concat(this.registers.list);b.length>0&&(this.source[0]=this.source[0]+", "+b.join(", ")),this.source[0]=this.source[0]+";",this.source.push("return buffer;");var c=["Handlebars","context","helpers","partials"];this.options.data&&c.push("data");for(var d=0,e=this.environment.depths.list.length;d<e;d++)c.push("depth"+this.environment.depths.list[d]);c.length===4&&!this.environment.usePartial&&c.pop(),c.push(this.source.join("\n"));var f=Function.apply(this,c);f.displayName="Handlebars.js",Handlebars.log(Handlebars.logger.DEBUG,f.toString()+"\n\n"),a.render=f,a.children=this.environment.children;return function(b,c,d){try{c=c||{};var e=[Handlebars,b,c.helpers,c.partials,c.data],f=Array.prototype.slice.call(arguments,2);e=e.concat(f);return a.render.apply(a,e)}catch(g){throw g}}},appendContent:function(a){this.source.push(this.appendToBuffer(this.quotedString(a)))},append:function(){var a=this.popStack();this.source.push("if("+a+" || "+a+" === 0) { "+this.appendToBuffer(a)+" }")},appendEscaped:function(){var a=this.nextOpcode(1),b="";a[0]==="appendContent"&&(b=" + "+this.quotedString(a[1][0]),this.eat(a)),this.source.push(this.appendToBuffer("this.escapeExpression("+this.popStack()+")"+b))},getContext:function(a){this.lastContext!==a&&(this.lastContext=a,a===0?this.source.push("currentContext = context;"):this.source.push("currentContext = depth"+a+";"))},lookupWithHelpers:function(a){if(a){var b=this.nextStack(),c="if('"+a+"' in helpers) { "+b+" = "+this.nameLookup("helpers",a,"helper")+"; } else { "+b+" = "+this.nameLookup("currentContext",a,"context")+"; }";this.source.push(c)}else this.pushStack("currentContext")},lookup:function(a){var b=this.topStack();this.source.push(b+" = "+this.nameLookup(b,a,"context")+";")},pushStringParam:function(a){this.pushStack("currentContext"),this.pushString(a)},pushString:function(a){this.pushStack(this.quotedString(a))},push:function(a){this.pushStack(a)},invokeMustache:function(a,b){this.populateParams(a,this.quotedString(b),"{}",null,function(a,b,c){this.source.push("else if("+c+"=== undefined) { "+a+" = helpers.helperMissing.call("+b+"); }"),this.source.push("else { "+a+" = "+c+"; }")})},invokeProgram:function(a,b){var c=this.programExpression(this.inverse),d=this.programExpression(a);this.populateParams(b,null,d,c,function(a,b,c){this.source.push("else { "+a+" = helpers.blockHelperMissing.call("+b+"); }")})},populateParams:function(a,b,c,d,e){var f=this.popStack(),g,h=[],i,j,k=this.popStack();this.register("tmp1",c),this.source.push("tmp1.hash = "+k+";"),this.options.stringParams&&this.source.push("tmp1.contexts = [];");for(var l=0;l<a;l++)i=this.popStack(),h.push(i),this.options.stringParams&&this.source.push("tmp1.contexts.push("+this.popStack()+");");d&&(this.source.push("tmp1.fn = tmp1;"),this.source.push("tmp1.inverse = "+d+";")),this.options.data&&this.source.push("tmp1.data = data;"),h.push("tmp1"),d&&h.push(d),this.populateCall(h,f,b||f,e)},populateCall:function(a,b,c,d){var e=["context"].concat(a).join(", "),f=["context"].concat(c).concat(a).join(", ");nextStack=this.nextStack(),this.source.push("if(typeof "+b+" === 'function') { "+nextStack+" = "+b+".call("+e+"); }"),d.call(this,nextStack,f,b)},invokeInverse:function(a){var b=this.programExpression(a),c=["context",this.topStack(),"this.noop",b];this.pushStack("helpers.blockHelperMissing.call("+c.join(", ")+")")},invokePartial:function(a){this.pushStack("this.invokePartial("+this.nameLookup("partials",a,"partial")+", '"+a+"', "+this.popStack()+", helpers, partials);")},assignToHash:function(a){var b=this.popStack(),c=this.topStack();this.source.push(c+"['"+a+"'] = "+b+";")},compiler:b,compileChildren:function(a,b){var c=a.children,d,e,f=[];for(var g=0,h=c.length;g<h;g++)d=c[g],e=new this.compiler,f[g]=e.compile(d,b);a.rawChildren=c,a.children=f},programExpression:function(a){if(a==null)return"this.noop";var b=[a,"helpers","partials"],c=this.environment.rawChildren[a].depths.list;this.options.data&&b.push("data");for(var d=0,e=c.length;d<e;d++)depth=c[d],depth===1?b.push("context"):b.push("depth"+(depth-1));this.environment.usePartial||(b[3]?b[2]="null":b.pop());if(c.length===0)return"this.program("+b.join(", ")+")";b[0]="this.children["+a+"]";return"this.programWithDepth("+b.join(", ")+")"},register:function(a,b){this.useRegister(a),this.source.push(a+" = "+b+";")},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},pushStack:function(a){this.source.push(this.nextStack()+" = "+a+";");return"stack"+this.stackSlot},nextStack:function(){this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot);return"stack"+this.stackSlot},popStack:function(){return"stack"+this.stackSlot--},topStack:function(){return"stack"+this.stackSlot},quotedString:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r")+'"'}};var e="break case catch continue default delete do else finally for function if in instanceof new return switch this throw try typeof var void while with null true false".split(" ");compilerWords=b.RESERVED_WORDS={};for(var f=0,g=e.length;f<g;f++)compilerWords[e[f]]=!0}(Handlebars.Compiler,Handlebars.JavaScriptCompiler),Handlebars.VM={programWithDepth:function(a,b,c,d,e){var f=Array.prototype.slice.call(arguments,4);return function(e,g){g=g||{},g={helpers:g.helpers||b,partials:g.partials||c,data:g.data||d};return a.apply(this,[e,g].concat(f))}},program:function(a,b,c,d){return function(e,f){f=f||{};return a(e,{helpers:f.helpers||b,partials:f.partials||c,data:f.data||d})}},noop:function(){return""},compile:function(a,b){var c=Handlebars.parse(a),d=(new Handlebars.Compiler).compile(c,b);return(new Handlebars.JavaScriptCompiler).compile(d,b)},invokePartial:function(a,b,c,d,e){if(a===undefined)throw new Handlebars.Exception("The partial "+b+" could not be found");if(a instanceof Function)return a(c,{helpers:d,partials:e});e[b]=Handlebars.VM.compile(a);return e[b](c,{helpers:d,partials:e})}},Handlebars.compile=Handlebars.VM.compile})(),function(){"undefined"==typeof SC&&(SC={},"undefined"!=typeof window&&(window.SC=window.SproutCore=SproutCore=SC)),SC.VERSION="2.0.alpha",SC.ENV="undefined"==typeof ENV?{}:ENV,window.sc_assert=function(a,b){"function"==typeof b&&(b=b()!==!1);if(!b)throw new Error("assertion failed: "+a)}}(),function(){SC.platform={},SC.platform.create=Object.create;if(!SC.platform.create){var a=function(){},b=a.prototype;SC.platform.create=function(c,d){a.prototype=c,c=new a,a.prototype=b;if(d!==undefined)for(var e in d){if(!d.hasOwnProperty(e))continue;SC.platform.defineProperty(c,e,d[e])}return c},SC.platform.create.isSimulated=!0}SC.platform.defineProperty=Object.defineProperty,SC.platform.hasPropertyAccessors=!0,SC.platform.defineProperty||(SC.platform.hasPropertyAccessors=!!SC.platform.defineProperty,SC.platform.defineProperty=function(a,b,c){sc_assert("property descriptor cannot have `get` or `set` on this platform",!c.get&&!c.set),a[b]=c.value},SC.platform.defineProperty.isSimulated=!0)}(),function(){var a="__sc"+Date.now(),b,c,d;b=0,c=[],d={};var e={configurable:!0,writable:!0,enumerable:!1},f=SC.platform.defineProperty,g=SC.platform.create;SC.GUID_KEY=a,SC.generateGuid=function(c,d){d||(d="sc");var e=d+b++;c&&(c[a]=e);return e},SC.guidFor=function(e){if(e===undefined)return"(undefined)";if(e===null)return"(null)";var f,g,h=typeof e;switch(h){case"number":g=c[e],g||(g=c[e]="nu"+e);return g;case"string":g=d[e],g||(g=d[e]="st"+b++);return g;case"boolean":return e?"(true)":"(false)";default:if(e[a])return e[a];if(e===Object)return"(Object)";if(e===Array)return"(Array)";return SC.generateGuid(e,"sc")}};var h={writable:!0,confgurable:!1,enumerable:!1,value:null},i=SC.GUID_KEY+"_meta";SC.META_KEY=i;var j={descs:{},watching:{}};Object.freeze&&Object.freeze(j),SC.meta=function(a,b){var c=a[i];if(b===!1)return c||j;c?c.source!==a&&(c=a[i]=g(c),c.descs=g(c.descs),c.values=g(c.values),c.watching=g(c.watching),c.lastSetValues={},c.cache={},c.source=a):(f(a,i,h),c=a[i]={descs:{},watching:{},values:{},lastSetValues:{},cache:{},source:a},c.descs.constructor=null);return c},SC.wrap=function(a,b){function c(){}var d=function(){var d,e=this._super;this._super=b||c,d=a.apply(this,arguments),this._super=e;return d};d.base=a;return d},SC.isArray=function(a){if(!a||a.setInterval)return!1;if(Array.isArray&&Array.isArray(a))return!0;if(SC.Array&&SC.Array.detect(a))return!0;if(a.length!==undefined&&"object"==typeof a)return!0;return!1},SC.makeArray=function(a){if(a==null)return[];return SC.isArray(a)?a:[a]}}(),function(){function o(a,d){var e=l.test(d),f=!e&&j.test(d),g;if(!a||f)a=window;e&&(d=d.slice(5));var k=d.indexOf("*");k>0&&d[k-1]!=="."?(a&&b(a,!1).proto!==a?a=h(a,d.slice(0,k)):a=null,d=d.slice(k+1)):a===window&&(g=n(d),a=c(a,g),d=d.slice(g.length+1));if(!d||d.length===0)throw new Error("Invalid Path");i[0]=a,i[1]=d;return i}function n(a){return a.match(m)[0]}function h(a,b){var d=b.length,e,f,g;e=b.indexOf("*");if(e>0&&b[e-1]!==".")return h(h(a,b.slice(0,e)),b.slice(e+1));e=0;while(a&&e<d)f=b.indexOf(".",e),f<0&&(f=d),g=b.slice(e,f),a=g==="*"?a:c(a,g),e=f+1;return a}function g(a){sc_assert("must pass non-empty string to normalizePath()",a&&a!=="");if(a==="*")return a;var b=a[0];if(b===".")return"this"+a;if(b==="*"&&a[1]!==".")return"this."+a.slice(1);return a}var a=SC.platform.hasPropertyAccessors&&SC.ENV.USE_ACCESSORS;SC.USE_ACCESSORS=!!a;var b=SC.meta,c,d;c=function c(a,b){b===undefined&&"string"==typeof a&&(b=a,a=SC);if(!a)return undefined;var c=a[b];c===undefined&&"function"==typeof a.unknownProperty&&(c=a.unknownProperty(b));return c},d=function d(a,b,c){"object"!=typeof a||b in a?a[b]=c:"function"==typeof a.setUnknownProperty?a.setUnknownProperty(b,c):"function"==typeof a.unknownProperty?a.unknownProperty(b,c):a[b]=c;return c};if(!a){var e=c,f=d;c=function(a,c){c===undefined&&"string"==typeof a&&(c=a,a=SC);if(!a)return undefined;var d=b(a,!1).descs[c];return d?d.get(a,c):e(a,c)},d=function(a,c,d){var e=b(a,!1).descs[c];e?e.set(a,c,d):f(a,c,d);return d}}SC.get=c,SC.set=d;var i=[],j=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,k=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]?/,l=/^this[\.\*]/,m=/^([^\.\*]+)/;SC.normalizePath=g,SC.normalizeTuple=function(a,b){return o(a,g(b))},SC.normalizeTuple.primitive=o,SC.getPath=function(a,b){var c,d;!b&&"string"==typeof a&&(b=a,a=null),b=g(b),c=l.test(b),d=!c&&j.test(b);if(!a||c||d||b.indexOf("*")>0){var e=o(a,b);a=e[0],b=e[1]}return h(a,b)},SC.setPath=function(a,b,c){var d;arguments.length===2&&"string"==typeof a&&(c=b,b=a,a=null),b=g(b);if(b.indexOf("*")>0){var e=o(a,b);a=e[0],b=e[1]}if(b.indexOf(".")>0)d=b.slice(b.lastIndexOf(".")+1),b=b.slice(0,b.length-(d.length+1)),!l.test(b)&&k.test(b)&&b.indexOf(".")<0?a=window[b]:b!=="this"&&(a=SC.getPath(a,b));else{if(k.test(b))throw new Error("Invalid Path");d=b}if(!d||d.length===0||d==="*")throw new Error("Invalid Path");return SC.set(a,d,c)}}(),function(){function r(a,b){return b==="toString"?"function"!=typeof a.toString:!!a[b]}function q(a){var b=p[a];b||(b=p[a]=function(b){return m(this,a,b)});return b}function o(a){var b=n[a];b||(b=n[a]=function(){return l(this,a)});return b}function m(a,b,c){var e=d(a),f;f=e.watching[b]>0&&c!==e.values[b],f&&SC.propertyWillChange(a,b),e.values[b]=c,f&&SC.propertyDidChange(a,b);return c}function l(a,b){var c=d(a,!1);return c.source===a&&c.values[b]}var a=SC.USE_ACCESSORS,b=SC.GUID_KEY,c=SC.META_KEY,d=SC.meta,e=SC.platform.create,f=SC.platform.defineProperty,g,h,i={writable:!0,configurable:!0,enumerable:!0,value:null};SC.Descriptor=function(){};var j=SC.Descriptor.prototype;j.set=function(a,b,c){a[b]=c;return c},j.get=function(a,b){return a[b]},j.setup=function(a,b,c){i.value=c,f(a,b,i),i.value=null},j.teardown=function(a,b){return a[b]},j.val=function(a,b){return a[b]},a||(SC.Descriptor.MUST_USE_GETTER=function(){sc_assert("Must use SC.get() to access this property",!1)},SC.Descriptor.MUST_USE_SETTER=function(){sc_assert("Must use SC.set() to access this property",!1)});var k={configurable:!0,enumerable:!0,set:SC.Descriptor.MUST_USE_SETTER},n={},p={};h=new SC.Descriptor,SC.platform.hasPropertyAccessors?(h.get=l,h.set=m,a?h.setup=function(a,b,c){k.get=o(b),k.set=q(b),f(a,b,k),k.get=k.set=null,c!==undefined&&(d(a).values[b]=c)}:h.setup=function(a,b,c){k.get=o(b),f(a,b,k),k.get=null,c!==undefined&&(d(a).values[b]=c)},h.teardown=function(a,b){var c=d(a).values[b];delete d(a).values[b];return c}):h.set=function(a,b,c){var e=d(a),f;f=e.watching[b]>0&&c!==a[b],f&&SC.propertyWillChange(a,b),a[b]=c,f&&SC.propertyDidChange(a,b);return c},SC.SIMPLE_PROPERTY=new SC.Descriptor,g=SC.SIMPLE_PROPERTY,g.unwatched=h.unwatched=g,g.watched=
h.watched=h,SC.defineProperty=function(a,b,c,e){var h=d(a,!1),i=h.descs,j=h.watching[b]>0;e===undefined?e=r(i,b)?i[b].teardown(a,b):a[b]:r(i,b)&&i[b].teardown(a,b),c||(c=g),c instanceof SC.Descriptor?(h=d(a,!0),i=h.descs,c=(j?c.watched:c.unwatched)||c,i[b]=c,c.setup(a,b,e,j)):(i[b]&&(d(a).descs[b]=null),f(a,b,c));return this},SC.create=function(a,d){var f=e(a,d);b in f&&SC.generateGuid(f,"sc"),c in f&&SC.rewatch(f);return f},SC.createPrototype=function(a,f){var g=e(a,f);d(g,!0).proto=g,b in g&&SC.generateGuid(g,"sc"),c in g&&SC.rewatch(g);return g},SC.destroy=function(a){a[c]&&(a[c]=null)}}(),function(){function n(c,d){var e=d._cacheable,f=d.func;return function(g){var h=a(this,e),i=h.source===this&&h.watching[c]>0,j,k,l;k=d._suspended,d._suspended=this,i=i&&h.lastSetValues[c]!==b(g),i&&(h.lastSetValues[c]=b(g),SC.propertyWillChange(this,c)),e&&delete h.cache[c],j=f.call(this,c,g),e&&(h.cache[c]=j),i&&SC.propertyDidChange(this,c),d._suspended=k;return j}}function m(b,c){var d=c._cacheable,e=c.func;return d?function(){var c,d=a(this).cache;if(b in d)return d[b];c=d[b]=e.call(this,b);return c}:function(){return e.call(this,b)}}function k(a,b){this.func=a,this._cacheable=b&&b.cacheable,this._dependentKeys=b&&b.dependentKeys}function j(a,b,c){var d=a._dependentKeys,e=d?d.length:0;for(var f=0;f<e;f++)h(b,c,d[f])}function i(a,b,c){var d=g(a,c);d[b]=(d[b]||0)-1,SC.unwatch(a,c)}function h(a,b,c){var d=g(a,c);d[b]=(d[b]||0)+1,SC.watch(a,c)}function g(b,c){var d=a(b),f,g;f=d.deps,f?f.__scproto__!==b&&(f=d.deps=e(f),f.__scproto__=b):f=d.deps={__scproto__:b},g=f[c],g?g.__scproto__!==b&&(g=f[c]=e(g),g.__scproto__=b):g=f[c]={__scproto__:b};return g}var a=SC.meta,b=SC.guidFor,c=SC.USE_ACCESSORS,d=Array.prototype.slice,e=SC.platform.create,f=SC.platform.defineProperty;SC.ComputedProperty=k,k.prototype=new SC.Descriptor;var l={configurable:!0,enumerable:!0,get:function(){return undefined},set:SC.Descriptor.MUST_USE_SETTER},o=k.prototype;o.cacheable=function(a){this._cacheable=a!==!1;return this},o.property=function(){this._dependentKeys=d.call(arguments);return this},o.setup=function(a,b,c){l.get=m(b,this),l.set=n(b,this),f(a,b,l),l.get=l.set=null,j(this,a,b)},o.teardown=function(b,c){var d=this._dependentKeys,e=d?d.length:0;for(var f=0;f<e;f++)i(b,c,d[f]);this._cacheable&&delete a(b).cache[c];return null},o.didChange=function(b,c){this._cacheable&&this._suspended!==b&&delete a(b).cache[c]},o.get=function(b,c){var d,e;if(this._cacheable){e=a(b).cache;if(c in e)return e[c];d=e[c]=this.func.call(b,c)}else d=this.func.call(b,c);return d},o.set=function(c,d,e){var f=this._cacheable,g=a(c,f),h=g.source===c&&g.watching[d]>0,i,j,k;j=this._suspended,this._suspended=c,h=h&&g.lastSetValues[d]!==b(e),h&&(g.lastSetValues[d]=b(e),SC.propertyWillChange(c,d)),f&&delete g.cache[d],i=this.func.call(c,d,e),f&&(g.cache[d]=i),h&&SC.propertyDidChange(c,d),this._suspended=j;return i},o.val=function(b,c){return a(b,!1).values[c]},SC.platform.hasPropertyAccessors?c||(o.setup=function(a,b){f(a,b,l),j(this,a,b)}):o.setup=function(a,b,c){a[b]=undefined,j(this,a,b)},SC.computed=function(a){return new k(a)}}(),function(){function n(a,c){var d=b(a,!1).listeners,e=[];d&&(d=d[c]);if(!d)return e;var f,h,i,j;for(f in d){if(g[f]||!d[f])continue;i=d[f];for(h in i){if(g[h]||!i[h])continue;j=i[h],e.push([j.target,j.method])}}return e}function m(a,c){var d=b(a,!1).listeners;d&&(d=d[c]);if(!d)return!1;var f,h,i;for(f in d){if(g[f]||!d[f])continue;i=d[f];for(h in i){if(g[h]||!i[h])continue;return!0}}var j=e(b(a,!0),a,!0,"listeners");j[c]=null;return!1}function l(a,c){a&&"function"==typeof a.sendEvent&&a.sendEvent.apply(a,d.call(arguments,1));var e=b(a,!1).listeners;if(e&&(e=e[c])){h(e,arguments);return!0}return!1}function k(a){var c=b(a,!1).listeners,d=[];if(c)for(var e in c)!g[e]&&c[e]&&d.push(e);return d}function j(a,b,d,e){!e&&"function"==typeof d&&(e=d,d=null);var g=f(a,b,d,!0),h=c(e);g&&g[h]&&(g[h]=null),a&&"function"==typeof a.didRemoveListener&&a.didRemoveListener(b,d,e)}function i(a,b,d,e,g){!e&&"function"==typeof d&&(e=d,d=null);var h=f(a,b,d,!0),i=c(e),j;h[i]?h[i].xform=g:h[i]={target:d,method:e,xform:g},a&&"function"==typeof a.didAddListener&&a.didAddListener(b,d,e);return j}function h(a,b){var c,d,e,f,h,i;for(c in a){if(g[c])continue;e=a[c];for(d in e){if(g[d]||!(f=e[d]))continue;h=f.method,i=f.target,i||(i=b[0]),"string"==typeof h&&(h=i[h]),f.xform?f.xform(i,h,b):h.apply(i,b)}}}function f(a,c,d,f){return e(b(a,f),a,f,"listeners",c,d)}function e(b,c,d){var e=arguments.length,f,g,h;for(f=3;f<e;f++){g=arguments[f],h=b[g];if(d)h?h.__scproto__!==c&&(h=b[g]=a(h),h.__scproto__=c):h=b[g]={__scproto__:c};else if(!h||h.__scproto__!==c)return undefined;b=h}return h}var a=SC.platform.create,b=SC.meta,c=SC.guidFor,d=Array.prototype.slice,g={__scproto__:!0};SC.addListener=i,SC.removeListener=j,SC.sendEvent=l,SC.hasListeners=m,SC.watchedEvents=k,SC.listenersFor=n}(),function(){function o(a,b,c){var d=c[0],e=m(c[1]),f;b.length>2&&(f=SC.getPath(d,e)),b.call(a,d,e,f)}function n(a,b,c){var d=c[0],e=l(c[1]),f;b.length>2&&(f=SC.getPath(d,e)),b.call(a,d,e,f)}function m(a){return a.slice(0,-7)}function l(a){return a.slice(0,-7)}function k(a){return a+b}function j(b){return b+a}function i(){if(!!f&&f.length!==0){var a=f;f=[],g={},a.forEach(function(a){SC.sendEvent(a[0],a[1])})}}function h(a,b){if(e){var d=c(a);g[d]||(g[d]={}),g[d][b]||(g[d][b]=!0,f.push([a,b]))}else SC.sendEvent(a,b)}var a=":change",b=":before",c=SC.guidFor,d=SC.normalizePath,e=0,f=[],g={};SC.beginPropertyChanges=function(){e++;return this},SC.endPropertyChanges=function(){e--,e<=0&&i()},SC.addObserver=function(a,b,c,e){b=d(b),SC.addListener(a,j(b),c,e,n),SC.watch(a,b);return this},SC.observersFor=function(a,b){return SC.listenersFor(a,j(b))},SC.removeObserver=function(a,b,c,e){b=d(b),SC.unwatch(a,b),SC.removeListener(a,j(b),c,e);return this},SC.addBeforeObserver=function(a,b,c,e){b=d(b),SC.addListener(a,k(b),c,e,o),SC.watch(a,b);return this},SC.beforeObserversFor=function(a,b){return SC.listenersFor(a,k(b))},SC.removeBeforeObserver=function(a,b,c,e){b=d(b),SC.unwatch(a,b),SC.removeListener(a,k(b),c,e);return this},SC.notifyObservers=function(a,b){h(a,j(b))},SC.notifyBeforeObservers=function(a,b){h(a,k(b))}}(),function(){function D(a,b){B(a,b,"didChange")}function C(a,b){B(a,b,"willChange")}function B(a,c,d){var e=b(a,!1),f=e.chainWatchers;if(!!f&&f.__scproto__===a){f=f[c];if(!f)return;for(var g in f){if(!f.hasOwnProperty(g))continue;f[g][d](a,c)}}}function A(a){var c=b(a),d=c.chains;d?d._value!==a&&(d=c.chains=d.copy(a)):d=c.chains=new y(null,null,a);return d}function x(a){return b(a,!1).proto===a}function w(a){if(v.length!==0){var b=v;v=[],b.forEach(function(a){a[0].add(a[1])}),a!==!1&&v.length>0&&setTimeout(w,1)}}function u(c,d,e){if(!!c&&"object"==typeof c){var f=b(c,!1),g=f.chainWatchers;if(!g||g.__scproto__!==c)return;g[d]&&delete g[d][a(e)],SC.unwatch(c,d)}}function t(c,d,e){if(!!c&&"object"==typeof c){var f=b(c),g=f.chainWatchers;if(!g||g.__scproto__!==c)g=f.chainWatchers={__scproto__:c};g[d]||(g[d]={}),g[d][a(e)]=e,SC.watch(c,d)}}function s(a,b){var c=q,d=!c;d&&(c=q={}),o("propertyDidChange",a,b,c),d&&(q=null)}function r(a,b){var c=p,d=!c;d&&(c=p={}),o("propertyWillChange",a,b,c),d&&(p=null)}function o(c,d,e,f){var g=a(d);f[g]||(f[g]={});if(!f[g][e]){f[g][e]=!0;var h=b(d,!1).deps,i=SC[c];h=h&&h[e];if(h)for(var j in h){if(n[j])continue;i(d,j)}}}function m(a){return a==="*"||!k.test(a)}function l(a){return a.match(j)[0]}var a=SC.guidFor,b=SC.meta,c=SC.get,d=SC.set,e=SC.normalizeTuple.primitive,f=SC.normalizePath,g=SC.SIMPLE_PROPERTY,h=SC.GUID_KEY,i=SC.notifyObservers,j=/^([^\.\*]+)/,k=/[\.\*]/,n={__scproto__:!0},p,q,v=[],y=function(a,b,d,e){var f;this._parent=a,this._key=b,this._watching=d===undefined,this._value=d||a._value&&!x(a._value)&&c(a._value,b),this._separator=e||".",this._paths={},this._watching&&(this._object=a._value,this._object&&t(this._object,this._key,this))},z=y.prototype;z.destroy=function(){if(this._watching){var a=this._object;a&&u(a,this._key,this),this._watching=!1}},z.copy=function(a){var b=new y(null,null,a,this._separator),c=this._paths,d;for(d in c){if(!(c[d]>0))continue;b.add(d)}return b},z.add=function(a){var b,c,d,f,g,h;h=this._paths,h[a]=(h[a]||0)+1,b=this._value,c=e(b,a);if(c[0]&&c[0]===b)a=c[1],d=l(a),a=a.slice(d.length+1);else{if(!c[0]){v.push([this,a]);return}f=c[0],d=a.slice(0,0-(c[1].length+1)),g=a.slice(d.length,d.length+1),a=c[1]}this.chain(d,a,f,g)},z.remove=function(a){var b,c,d,f,g;g=this._paths,g[a]>0&&g[a]--,b=this._value,c=e(b,a),c[0]===b?(a=c[1],d=l(a),a=a.slice(d.length+1)):(f=c[0],d=a.slice(0,0-(c[1].length+1)),a=c[1]),this.unchain(d,a)},z.count=0,z.chain=function(a,b,c,d){var e=this._chains,f;e||(e=this._chains={}),f=e[a],f||(f=e[a]=new y(this,a,c,d)),f.count++,b&&b.length>0&&(a=l(b),b=b.slice(a.length+1),f.chain(a,b))},z.unchain=function(a,b){var c=this._chains,d=c[a];b&&b.length>1&&(a=l(b),b=b.slice(a.length+1),d.unchain(a,b)),d.count--,d.count<=0&&(delete c[d._key],d.destroy())},z.willChange=function(){var a=this._chains;if(a)for(var b in a){if(!a.hasOwnProperty(b))continue;a[b].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},z.chainWillChange=function(a,b,c){this._key&&(b=this._key+this._separator+b),this._parent?this._parent.chainWillChange(this,b,c+1):(c>1&&SC.propertyWillChange(this._value,b),b="this."+b,this._paths[b]>0&&SC.propertyWillChange(this._value,b))},z.chainDidChange=function(a,b,c){this._key&&(b=this._key+this._separator+b),this._parent?this._parent.chainDidChange(this,b,c+1):(c>1&&SC.propertyDidChange(this._value,b),b="this."+b,this._paths[b]>0&&SC.propertyDidChange(this._value,b))},z.didChange=function(){if(this._watching){var a=this._parent._value;a!==this._object&&(u(this._object,this._key,this),this._object=a,t(a,this._key,this)),this._value=a&&!x(a)?c(a,this._key):undefined}var b=this._chains;if(b)for(var d in b){if(!b.hasOwnProperty(d))continue;b[d].didChange()}this._parent&&this._parent.chainDidChange(this,this._key,1)};var E=SC.SIMPLE_PROPERTY.watched;SC.watch=function(a,c){if(c==="length"&&SC.typeOf(a)==="array")return this;var d=b(a),e=d.watching,g;c=f(c),e[c]?e[c]=(e[c]||0)+1:(e[c]=1,m(c)?(g=d.descs[c],g=g?g.watched:E,g&&SC.defineProperty(a,c,g)):A(a).add(c));return this},SC.watch.flushPending=w,SC.unwatch=function(a,c){if(c==="length"&&SC.typeOf(a)==="array")return this;var d=b(a).watching,e,h;c=f(c),d[c]===1?(d[c]=0,m(c)?(e=b(a).descs[c],e=e?e.unwatched:g,e&&SC.defineProperty(a,c,e)):A(a).remove(c)):d[c]>1&&d[c]--;return this},SC.rewatch=function(a){var c=b(a,!1),d=c.chains,e=c.bindings,f,g;h in a&&!a.hasOwnProperty(h)&&SC.generateGuid(a,"sc"),d&&d._value!==a&&A(a);if(e&&c.proto!==a)for(f in e)g=!n[f]&&a[f],g&&g instanceof SC.Binding&&g.fromDidChange(a);return this},SC.propertyWillChange=function(a,c){var d=b(a,!1),e=d.proto,f=d.descs[c];e!==a&&(f&&f.willChange&&f.willChange(a,c),r(a,c),C(a,c),SC.notifyBeforeObservers(a,c))},SC.propertyDidChange=function(a,c){var d=b(a,!1),e=d.proto,f=d.descs[c];e!==a&&(f&&f.didChange&&f.didChange(a,c),s(a,c),D(a,c),SC.notifyObservers(a,c))}}(),function(){function w(a,b,c){var d=a.length;for(var f in b){if(!b.hasOwnProperty(f))continue;var g=b[f];a[d]=f;if(g&&g.toString===e)g[v]=a.join(".");else if(f==="SC"||g instanceof SC.Namespace){if(c[SC.guidFor(g)])continue;c[SC.guidFor(g)]=!0,w(a,g,c)}}a.length=d}function u(a,b,c){if(!c[SC.guidFor(b)]){c[SC.guidFor(b)]=!0;if(b.properties){var d=b.properties;for(var e in d)d.hasOwnProperty(e)&&(a[e]=!0)}else b.mixins&&b.mixins.forEach(function(b){u(a,b,c)})}}function t(a,b,c){var d=SC.guidFor(a);if(c[d])return!1;c[d]=!0;if(a===b)return!0;var e=a.mixins,f=e?e.length:0;while(--f>=0)if(t(e[f],b,c))return!0;return!1}function r(a,e,f){var g={},j={},k=SC.meta(a),l=k.required,r,s,t,u,v,w=SC._mixinBindings;m(e,i(a),g,j,a),b.detect(a)&&(s=j.willApplyProperty||a.willApplyProperty,t=j.didApplyProperty||a.didApplyProperty);for(r in g){if(!g.hasOwnProperty(r))continue;v=g[r],u=j[r];if(v===c){if(!(r in a)){if(!f)throw new Error("Required property not defined: "+r);l=o(a),l.__sc_count__++,l[r]=!0}}else{while(v instanceof d){var x=v.methodName;g[x]?(u=j[x],v=g[x]):k.descs[x]?(v=k.descs[x],u=v.val(a,x)):(u=a[x],v=SC.SIMPLE_PROPERTY)}s&&s.call(a,r);var y=p(u),z=y&&p(a[r]),A=q(u),B=A&&q(a[r]),C,D;if(z){C=z.length;for(D=0;D<C;D++)SC.removeObserver(a,z[D],null,r)}if(B){C=B.length;for(D=0;D<C;D++)SC.removeBeforeObserver(a,B[D],null,r)}u=w(a,r,u,k),n(a,r,v,u);if(y){C=y.length;for(D=0;D<C;D++)SC.addObserver(a,y[D],null,r)}if(A){C=A.length;for(D=0;D<C;D++)SC.addBeforeObserver(a,A[D],null,r)}l&&l[r]&&(l=o(a),l.__sc_count__--,l[r]=!1),t&&t.call(a,r)}}if(!f&&l&&l.__sc_count__>0){var E=[];for(r in l){if(h[r])continue;E.push(r)}throw new Error("Required properties not defined: "+E.join(","))}return a}function q(a){return"function"==typeof a&&a.__sc_observesBefore__}function p(a){return"function"==typeof a&&a.__sc_observes__}function o(a){var b=SC.meta(a),c=b.required;if(!c||c.__scproto__!==a)c=b.required=c?Object.create(c):{__sc_count__:0},c.__scproto__=a;return c}function m(b,d,e,f,g){function s(a){delete e[a],delete f[a]}var h=b.length,i,j,k,n,o,p,q,r;for(i=0;i<h;i++){j=b[i];if(!j)throw new Error("Null value found in SC.mixin()");if(j instanceof a){k=SC.guidFor(j);if(d[k])continue;d[k]=j,n=j.properties}else n=j;if(n){r=f.concatenatedProperties||g.concatenatedProperties,n.concatenatedProperties&&(r=r?r.concat(n.concatenatedProperties):n.concatenatedProperties);for(p in n){if(!n.hasOwnProperty(p))continue;o=n[p];if(o instanceof SC.Descriptor){if(o===c&&e[p])continue;e[p]=o,f[p]=undefined}else{if(l(o)){q=e[p]===SC.SIMPLE_PROPERTY&&f[p],q||(q=g[p]),"function"!=typeof q&&(q=null);if(q){var t=o.__sc_observes__,u=o.__sc_observesBefore__;o=SC.wrap(o,q),o.__sc_observes__=t,o.__sc_observesBefore__=u}}else if(r&&r.indexOf(p)>=0||p==="concatenatedProperties"){var v=f[p]||g[p];o=v?v.concat(o):SC.makeArray(o)}e[p]=SC.SIMPLE_PROPERTY,f[p]=o}}}else j.mixins&&(m(j.mixins,d,e,f,g),j._without&&j._without.forEach(s))}}function l(a){if("function"!=typeof a||a.isMethod===!1)return!1;return k.indexOf(a)<0}function j(b,c){c&&c.length>0&&(b.mixins=f.call(c,function(b){if(b instanceof a)return b;var c=new a;c.properties=b;return c}));return b}function i(a,b){var c=SC.meta(a,b!==!1),d=c.mixins;if(b===!1)return d||g;d?d.__scproto__!==a&&(d=c.mixins=Object.create(d),d.__scproto__=a):d=c.mixins={__scproto__:a};return d}var a,b,c,d,e,f=Array.prototype.map,g={},h={__scproto__:!0,__sc_count__:!0},k=[Boolean,Object,Number,Array,Date,String],n=SC.defineProperty;SC._mixinBindings=function(a,b,c,d){return c},SC.mixin=function(a){var b=Array.prototype.slice.call(arguments,1);return r(a,b,!1)},a=function(){return j(this,arguments)},a._apply=r,a.applyPartial=function(a){var b=Array.prototype.slice.call(arguments,1);return r(a,b,!0)},a.create=function(){e.processed=!1;var a=this;return j(new a,arguments)},a.prototype.reopen=function(){var b,c;this.properties&&(b=a.create(),b.properties=this.properties,delete this.properties,this.mixins=[b]);var d=arguments.length,e=this.mixins,f;for(f=0;f<d;f++)b=arguments[f],b instanceof a?e.push(b):(c=a.create(),c.properties=b,e.push(c));return this};var s=[];a.prototype.apply=function(a){s.length=0,s[0]=this;return r(a,s,!1)},a.prototype.applyPartial=function(a){s.length=0,s[0]=this;return r(a,s,!0)},a.prototype.detect=function(b){if(!b)return!1;if(b instanceof a)return t(b,this,{});return!!i(b,!1)[SC.guidFor(this)]},a.prototype.without=function(){var b=new a(this);b._without=Array.prototype.slice.call(arguments);return b},a.prototype.keys=function(){var a={},b={},c=[];u(a,this,b);for(var d in a)a.hasOwnProperty(d)&&c.push(d);return c};var v=SC.GUID_KEY+"_name";e=function(){!this[v]&&!e.processed&&(e.processed=!0,w([],window,{}));return this[v]||"(unknown mixin)"},a.prototype.toString=e,a.mixins=function(a){var b=[],c=i(a,!1),d,e;for(d in c){if(h[d])continue;e=c[d],e.properties||b.push(c[d])}return b},c=new SC.Descriptor,c.toString=function(){return"(Required Property)"},SC.required=function(){return c},d=function(a){this.methodName=a},d.prototype=new SC.Descriptor,SC.alias=function(a){return new d(a)},SC.Mixin=a,b=a.create({willApplyProperty:SC.required(),didApplyProperty:SC.required()}),SC.MixinDelegate=b,SC.observer=function(a){var b=Array.prototype.slice.call(arguments,1);a.__sc_observes__=b;return a},SC.beforeObserver=function(a){var b=Array.prototype.slice.call(arguments,1);a.__sc_observesBefore__=b;return a}}(),function(){}(),function(){function d(a,b,c,e){var f,g,h;if("object"!=typeof a)return a;if(b&&(g=c.indexOf(a))>=0)return e[g];sc_assert("Cannot clone an SC.Object that does not implement SC.Copyable",!(a instanceof SC.Object)||SC.Copyable&&SC.Copyable.detect(a));if(SC.typeOf(a)==="array"){f=a.slice();if(b){g=f.length;while(--g>=0)f[g]=d(f[g],b,c,e)}}else if(SC.Copyable&&SC.Copyable.detect(a))f=a.copy(b,c,e);else{f={};for(h in a){if(!a.hasOwnProperty(h))continue;f[h]=b?d(a[h],b,c,e):a[h]}}b&&(c.push(a),e.push(f));return f}YES=!0,NO=!1,typeof console=="undefined"&&(window.console={},console.log=console.info=console.warn=console.error=function(){}),SC.EXTEND_PROTOTYPES=SC.ENV.EXTEND_PROTOTYPES!==!1;var a={},b="Boolean Number String Function Array Date RegExp Object".split(" ");b.forEach(function(b){a["[object "+b+"]"]=b.toLowerCase()});var c=Object.prototype.toString;SC.typeOf=function(b){var d;d=b==null?String(b):a[c.call(b)]||"object",d==="function"?SC.Object&&SC.Object.detect(b)&&(d="class"):d==="object"&&(b instanceof Error?d="error":SC.Object&&b instanceof SC.Object?d="instance":d="object");return d},SC.none=function(a){return a===null||a===undefined},SC.empty=function(a){return a===null||a===undefined||a===""},SC.isArray=function(a){if(!a||a.setInterval)return!1;if(Array.isArray&&Array.isArray(a))return!0;if(SC.Array&&SC.Array.detect(a))return!0;if(a.length!==undefined&&"object"==typeof a)return!0;return!1},SC.compare=function(a,b){if(a===b)return 0;var c=SC.typeOf(a),d=SC.typeOf(b),e=SC.Comparable;if(e){if(c==="instance"&&e.detect(a.constructor))return a.constructor.compare(a,b);if(d==="instance"&&e.detect(b.constructor))return 1-b.constructor.compare(b,a)}var f=SC.ORDER_DEFINITION_MAPPING;if(!f){var g=SC.ORDER_DEFINITION;f=SC.ORDER_DEFINITION_MAPPING={};var h,i;for(h=0,i=g.length;h<i;++h)f[g[h]]=h;delete SC.ORDER_DEFINITION}var j=f[c],k=f[d];if(j<k)return-1;if(j>k)return 1;switch(c){case"boolean":case"number":if(a<b)return-1;if(a>b)return 1;return 0;case"string":var l=a.localeCompare(b);if(l<0)return-1;if(l>0)return 1;return 0;case"array":var m=a.length,n=b.length,o=Math.min(m,n),p=0,q=0,r=arguments.callee;while(p===0&&q<o)p=r(a[q],b[q]),q++;if(p!==0)return p;if(m<n)return-1;if(m>n)return 1;return 0;case"instance":if(SC.Comparable&&SC.Comparable.detect(a))return a.compare(a,b);return 0;default:return 0}},SC.copy=function(a,b){if("object"!=typeof a)return a;if(SC.Copyable&&SC.Copyable.detect(a))return a.copy(b);return d(a,b,b?[]:null,b?[]:null)},SC.inspect=function(a){var b,c=[];for(var d in a)if(a.hasOwnProperty(d)){b=a[d];if(b==="toString")continue;SC.typeOf(b)===SC.T_FUNCTION&&(b="function() { ... }"),c.push(d+": "+b)}return"{"+c.join(" , ")+"}"},SC.isEqual=function(a,b){if(a&&"function"==typeof a.isEqual)return a.isEqual(b);return a===b},SC.ORDER_DEFINITION=SC.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class"],SC.keys=Object.keys,SC.keys||(SC.keys=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b}),SC.K=function(){return this},SC.Error=function(){var a=Error.prototype.constructor.apply(this,arguments);for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b])},SC.Error.prototype=SC.create(Error.prototype),SC.Logger=window.console,"undefined"==typeof require&&(require=SC.K)}(),function(){SC.EXTEND_PROTOTYPES&&(Function.prototype.property=function(){var a=SC.computed(this);return a.property.apply(a,arguments)},Function.prototype.observes=function(){this.__sc_observes__=Array.prototype.slice.call(arguments);return this},Function.prototype.observesBefore=function(){this.__sc_observesBefore__=Array.prototype.slice.call(arguments);return this})}(),function(){var a=/^.+Binding$/;SC._mixinBindings=function(b,c,d,e){if(a.test(c)){d instanceof SC.Binding?d.to(c.slice(0,-7)):d=new SC.Binding(c.slice(0,-7),d),d.connect(b);var f=e.bindings;f?f.__scproto__!==b&&(f=e.bindings=SC.create(e.bindings),f.__scproto__=b):f=e.bindings={__scproto__:b},f[c]=!0}return d}}(),function(){var a=/[ _]/g,b={},c=/([a-z])([A-Z])/g;SC.STRINGS={},SC.String={fmt:function(a,b){var c=0;return a.replace(/%@([0-9]+)?/g,function(a,d){d=d?parseInt(d,0)-1:c++,a=b[d];return(a===null?"(null)":a===undefined?"":a).toString()})},loc:function(a,b){a=SC.STRINGS[a]||a;return SC.String.fmt(a,b)},w:function(a){return a.split(/\s+/)},decamelize:function(a){return a.replace(c,"$1_$2").toLowerCase()},dasherize:function(c){var d=b,e=d[c];if(e)return e;e=SC.String.decamelize(c).replace(a,"-"),d[c]=e;return e}}}(),function(){var a=SC.String.fmt,b=SC.String.w,c=SC.String.loc,d=SC.String.decamelize,e=SC.String.dasherize;SC.EXTEND_PROTOTYPES&&(String.prototype.fmt=function(){return a(this,arguments)},String.prototype.w=function(){return b(this)},String.prototype.loc=function(){return c(this,arguments)},String.prototype.decamelize=function(){return d(this)},String.prototype.dashersize=function(){return e(this)})}(),function(){}(),function(){}(),function(){function g(a,b,c){b.call(a,c[0],c[2],c[3])}function f(b,c){function d(d){var e=a(d,b);return c===undefined?!!e:c===e}return d}function e(a){c.push(a);return null}function d(){return c.length===0?{}:c.pop()}var a=SC.get,b=SC.set,c=[];SC.Enumerable=SC.Mixin.create({isEnumerable:!0,nextObject:SC.required(Function),firstObject:SC.computed(function(){if(a(this,"length")===0)return undefined;if(SC.Array&&SC.Array.detect(this))return this.objectAt(0);var b=d(),c;c=this.nextObject(0,null,b),e(b);return c}).property("[]").cacheable(),lastObject:SC.computed(function(){var b=a(this,"length");if(b===0)return undefined;if(SC.Array&&SC.Array.detect(this))return this.objectAt(b-1);var c=d(),f=0,g,h=null;do h=g,g=this.nextObject(f++,h,c);while(g!==undefined);e(c);return h}).property("[]").cacheable(),contains:function(a){return this.find(function(b){return b===a})!==undefined},forEach:function(b,c){if(typeof b!="function")throw new TypeError;var f=a(this,"length"),g=null,h=d();c===undefined&&(c=null);for(var i=0;i<f;i++){var j=this.nextObject(i,g,h);b.call(c,j,i,this),g=j}g=null,h=e(h);return this},getEach:function(b){return this.map(function(c){return a(c,b)})},setEach:function(a,c){return this.forEach(function(d){b(d,a,c)})},map:function(a,b){var c=[];this.forEach(function(d,e,f){c[e]=a.call(b,d,e,f)});return c},mapProperty:function(b){return this.map(function(c){return a(c,b)})},filter:function(a,b){var c=[];this.forEach(function(d,e,f){a.call(b,d,e,f)&&c.push(d)});return c},filterProperty:function(a,b){return this.filter(f(a,b))},find:function(b,c){var f=a(this,"length");c===undefined&&(c=null);var g=null,h,i=!1,j=undefined,k=d();for(var l=0;l<f&&!i;l++){h=this.nextObject(l,g,k);if(i=b.call(c,h,l,this))j=h;g=h}h=g=null,k=e(k);return j},findProperty:function(a,b){return this.find(f(a,b))},every:function(a,b){return!this.find(function(c,d,e){return!a.call(b,c,d,e)})},everyProperty:function(a,b){return this.every(f(a,b))},some:function(a,b){return!!this.find(function(c,d,e){return!!a.call(b,c,d,e)})},someProperty:function(a,b){return this.some(f(a,b))},reduce:function(a,b,c){if(typeof a!="function")throw new TypeError;var d=b;this.forEach(function(b,e){d=a.call(null,d,b,e,this,c)},this);return d},invoke:function(a){var b,c=[];arguments.length>1&&(b=Array.prototype.slice.call(arguments,1)),this.forEach(function(d,e){var f=d&&d[a];"function"==typeof f&&(c[e]=b?f.apply(d,b):f.call(d))},this);return c},toArray:function(){var a=[];this.forEach(function(b,c){a[c]=b});return a},compact:function(){return this.without(null)},without:function(a){if(!this.contains(a))return this;var b=[];this.forEach(function(c){c!==a&&(b[b.length]=c)});return b},uniq:function(){var a=[],b=!1;this.forEach(function(c){a.indexOf(c)<0?a[a.length]=c:b=!0});return b?a:this},"[]":function(a,b){return this}.property().cacheable(),addEnumerableObserver:function(b,c){var d=c&&c.willChange||"enumerableWillChange",e=c&&c.didChange||"enumerableDidChange",f=a(this,"hasEnumerableObservers");f||SC.propertyWillChange(this,"hasEnumerableObservers"),SC.addListener(this,"@enumerable:before",b,d,g),SC.addListener(this,"@enumerable:change",b,e,g),f||SC.propertyDidChange(this,"hasEnumerableObservers");return this},removeEnumerableObserver:function(b,c){var d=c&&c.willChange||"enumerableWillChange",e=c&&c.didChange||"enumerableDidChange",f=a(this,"hasEnumerableObservers");f&&SC.propertyWillChange(this,"hasEnumerableObservers"),SC.removeListener(this,"@enumerable:before",b,d),SC.removeListener(this,"@enumerable:change",b,e),f&&SC.propertyDidChange(this,"hasEnumerableObservers");return this},hasEnumerableObservers:function(){return SC.hasListeners(this,"@enumerable:change")||SC.hasListeners(this,"@enumerable:before")}.property().cacheable(),enumerableContentWillChange:function(b,c){var d,e,f;"number"==typeof b?d=b:b?d=a(b,"length"):d=b=-1,"number"==typeof c?e=c:c?e=a(c,"length"):e=c=-1,f=e<0||d<0||e-d!==0,b===-1&&(b=null),c===-1&&(c=null),SC.propertyWillChange(this,"[]"),f&&SC.propertyWillChange(this,"length"),SC.sendEvent(this,"@enumerable:before",b,c);return this},enumerableContentDidChange:function(b,c){var d=this.propertyDidChange,e,f,g;"number"==typeof b?e=b:b?e=a(b,"length"):e=b=-1,"number"==typeof c?f=c:c?f=a(c,"length"):f=c=-1,g=f<0||e<0||f-e!==0,b===-1&&(b=null),c===-1&&(c=null),SC.sendEvent(this,"@enumerable:change",b,c),g&&SC.propertyDidChange(this,"length"),SC.propertyDidChange(this,"[]");return this}})}(),function(){function d(a,b,c){b.call(a,c[0],c[2],c[3],c[4])}function c(a){return a===null||a===undefined}var a=SC.get,b=SC.set;SC.Array=SC.Mixin.create(SC.Enumerable,{isSCArray:!0,length:SC.required(),objectAt:function(b){if(b<0||b>=a(this,"length"))return undefined;return a(this,b)},nextObject:function(a){return this.objectAt(a)},"[]":function(b,c){c!==undefined&&this.replace(0,a(this,"length"),c);return this}.property().cacheable(),contains:function(a){return this.indexOf(a)>=0},slice:function(b,d){var e=[],f=a(this,"length");c(b)&&(b=0);if(c(d)||d>f)d=f;while(b<d)e[e.length]=this.objectAt(b++);return e},indexOf:function(b,c){var d,e=a(this,"length");c===undefined&&(c=0),c<0&&(c+=e);for(d=c;d<e;d++)if(this.objectAt(d,!0)===b)return d;return-1},lastIndexOf:function(b,c){var d,e=a(this,"length");c===undefined&&(c=e-1),c<0&&(c+=e);for(d=c;d>=0;d--)if(this.objectAt(d)===b)return d;return-1},addArrayObserver:function(b,c){var e=c&&c.willChange||"arrayWillChange",f=c&&c.didChange||"arrayDidChange",g=a(this,"hasArrayObservers");g||SC.propertyWillChange(this,"hasArrayObservers"),SC.addListener(this,"@array:before",b,e,d),SC.addListener(this,"@array:change",b,f,d),g||SC.propertyDidChange(this,"hasArrayObservers");return this},removeArrayObserver:function(b,c){var e=c&&c.willChange||"arrayWillChange",f=c&&c.didChange||"arrayDidChange",g=a(this,"hasArrayObservers");g&&SC.propertyWillChange(this,"hasArrayObservers"),SC.removeListener(this,"@array:before",b,e,d),SC.removeListener(this,"@array:change",b,f,d),g&&SC.propertyDidChange(this,"hasArrayObservers");return this},hasArrayObservers:function(){return SC.hasListeners(this,"@array:change")||SC.hasListeners(this,"@array:before")}.property().cacheable(),arrayContentWillChange:function(b,c,d){b===undefined?(b=0,c=d=-1):(c||(c=0),d||(d=0)),SC.sendEvent(this,"@array:before",b,c,d);var e,f;if(b>=0&&c>=0&&a(this,"hasEnumerableObservers")){e=[],f=b+c;for(var g=b;g<f;g++)e.push(this.objectAt(g))}else e=c;this.enumerableContentWillChange(e,d);return this},arrayContentDidChange:function(b,c,d){b===undefined?(b=0,c=d=-1):(c||(c=0),d||(d=0));var e,f;if(b>=0&&d>=0&&a(this,"hasEnumerableObservers")){e=[],f=b+d;for(var g=b;g<f;g++)e.push(this.objectAt(g))}else e=d;this.enumerableContentDidChange(c,e),SC.sendEvent(this,"@array:change",b,c,d);return this},"@each":function(){this.__each||(this.__each=new SC.EachProxy(this));return this.__each}.property().cacheable()})}(),function(){SC.Comparable=SC.Mixin.create({isComparable:!0,compare:SC.required(Function)})}(),function(){var a=SC.get,b=SC.set;SC.Copyable=SC.Mixin.create({copy:SC.required(Function),frozenCopy:function(){if(SC.Freezable&&SC.Freezable.detect(this))return a(this,"isFrozen")?this:this.copy().freeze();throw new Error(SC.String.fmt("%@ does not support freezing",this))}})}(),function(){var a=SC.get,b=SC.set;SC.Freezable=SC.Mixin.create({isFrozen:!1,freeze:function(){if(a(this,"isFrozen"))return this;b(this,"isFrozen",!0);return this}}),SC.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){SC.MutableEnumerable=SC.Mixin.create(SC.Enumerable,{addObject:SC.required(Function),addObjects:function(a){SC.beginPropertyChanges(this),a.forEach(function(a){this.addObject(a)},this),SC.endPropertyChanges(this);return this},removeObject:SC.required(Function),removeObjects:function(a){SC.beginPropertyChanges(this),a.forEach(function(a){this.removeObject(a)},this),SC.endPropertyChanges(this);return this}})}(),function(){var a="Index out of range",b=[],c=SC.get,d=SC.set;SC.MutableArray=SC.Mixin.create(SC.Array,SC.MutableEnumerable,{replace:SC.required(),insertAt:function(b,d){if(b>c(this,"length"))throw new Error(a);this.replace(b,0,[d]);return this},removeAt:function(d,e){var f=0;if("number"==typeof d){if(d<0||d>=c(this,"length"))throw new Error(a);e===undefined&&(e=1),this.replace(d,e,b)}return this},pushObject:function(a){this.insertAt(c(this,"length"),a);return a},pushObjects:function(a){this.beginPropertyChanges(),a.forEach(function(a){this.pushObject(a)},this),this.endPropertyChanges();return this},popObject:function(){var a=c(this,"length");if(a===0)return null;var b=this.objectAt(a-1);this.removeAt(a-1,1);return b},shiftObject:function(){if(c(this,"length")===0)return null;var a=this.objectAt(0);this.removeAt(0);return a},unshiftObject:function(a){this.insertAt(0,a);return a},unshiftObjects:function(a){this.beginPropertyChanges(),a.forEach(function(a){this.unshiftObject(a)},this),this.endPropertyChanges();return this},removeObject:function(a){var b=c(this,"length")||0;while(--b>=0){var d=this.objectAt(b);d===a&&this.removeAt(b)}return this},addObject:function(a){this.contains(a)||this.pushObject(a);return this}})}(),function(){var a=SC.get,b=SC.set;SC.Observable=SC.Mixin.create({isObserverable:!0,get:function(b){return a(this,b)},set:function(a,c){b(this,a,c);return this},setProperties:function(a){SC.beginPropertyChanges(this);for(var c in a)a.hasOwnProperty(c)&&b(this,c,a[c]);SC.endPropertyChanges(this);return this},beginPropertyChanges:function(){SC.beginPropertyChanges();return this},endPropertyChanges:function(){SC.endPropertyChanges();return this},propertyWillChange:function(a){SC.propertyWillChange(this,a);return this},propertyDidChange:function(a){SC.propertyDidChange(this,a);return this},notifyPropertyChange:function(a){this.propertyWillChange(a),this.propertyDidChange(a);return this},addObserver:function(a,b,c){SC.addObserver(this,a,b,c)},removeObserver:function(a,b,c){SC.removeObserver(this,a,b,c)},hasObserverFor:function(a){return SC.hasListeners(this,a+":change")},unknownProperty:function(a){return undefined},setUnknownProperty:function(a,b){this[a]=b},getPath:function(a){return SC.getPath(this,a)},setPath:function(a,b){SC.setPath(this,a,b);return this},incrementProperty:function(c,d){d||(d=1),b(this,c,(a(this,c)||0)+d);return a(this,c)},decrementProperty:function(c,d){d||(d=1),b(this,c,(a(this,c)||0)-d);return a(this,c)},toggleProperty:function(c){b(this,c,!a(this,c));return a(this,c)},observersForKey:function(a){return SC.observersFor(this,a)}})}(),function(){}(),function(){function g(){var c=!1,e,g=!1,h=!1,i=function(){c||d(i,"proto"),e?(this.reopen.apply(this,e),e=null,a(this),this.init.apply(this,arguments)):(h&&a(this),g===!1&&(g=this.init),g.apply(this,arguments))};i.toString=b,i._prototypeMixinDidChange=function(){c=!1},i._initMixins=function(a){e=a},SC.defineProperty(i,"proto",SC.computed(function(){c||(c=!0,i.PrototypeMixin.applyPartial(i.prototype),h=!!f(i.prototype,!1).chains);return this.prototype}));return i}var a=SC.rewatch,b=SC.Mixin.prototype.toString,c=SC.set,d=SC.get,e=SC.platform.create,f=SC.meta,h=g();h.PrototypeMixin=SC.Mixin.create({reopen:function(){SC.Mixin._apply(this,arguments,!0);return this},init:function(){},isDestroyed:!1,destroy:function(){c(this,"isDestroyed",!0);return this},bind:function(a,b){b instanceof SC.
Binding||(b=SC.Binding.from(b)),b.to(a).connect(this);return b},toString:function(){return"<"+this.constructor.toString()+":"+SC.guidFor(this)+">"}}),h.__super__=null;var i=SC.Mixin.create({ClassMixin:SC.required(),PrototypeMixin:SC.required(),isMethod:!1,extend:function(){var a=g(),b;a.ClassMixin=SC.Mixin.create(this.ClassMixin),a.PrototypeMixin=SC.Mixin.create(this.PrototypeMixin);var c=a.PrototypeMixin;c.reopen.apply(c,arguments),a.superclass=this,a.__super__=this.prototype,b=a.prototype=e(this.prototype),b.constructor=a,SC.generateGuid(b,"sc"),f(b).proto=b,SC.rewatch(b),a.subclasses=SC.Set?new SC.Set:null,this.subclasses&&this.subclasses.add(a),a.ClassMixin.apply(a);return a},create:function(){var a=this;arguments.length>0&&this._initMixins(arguments);return new a},reopen:function(){var a=this.PrototypeMixin;a.reopen.apply(a,arguments),this._prototypeMixinDidChange();return this},reopenClass:function(){var a=this.ClassMixin;a.reopen.apply(a,arguments),SC.Mixin._apply(this,arguments,!1);return this},detect:function(a){if("function"!=typeof a)return!1;while(a){if(a===this)return!0;a=a.superclass}return!1}});h.ClassMixin=i,i.apply(h),SC.CoreObject=h}(),function(){var a=SC.get,b=SC.set,c=SC.guidFor,d=SC.none;SC.Set=SC.CoreObject.extend(SC.MutableEnumerable,SC.Copyable,SC.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(SC.FROZEN_ERROR);var c=a(this,"length");this.enumerableContentWillChange(c,0),b(this,"length",0),this.enumerableContentDidChange(c,0);return this},isEqual:function(b){if(!SC.Enumerable.detect(b))return!1;var c=a(this,"length");if(a(b,"length")!==c)return!1;while(--c>=0)if(!b.contains(this[c]))return!1;return!0},add:SC.alias("addObject"),remove:SC.alias("removeObject"),pop:function(){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);var b=this.length>0?this[this.length-1]:null;this.remove(b);return b},push:SC.alias("addObject"),shift:SC.alias("pop"),unshift:SC.alias("push"),addEach:SC.alias("addObjects"),removeEach:SC.alias("removeObjects"),init:function(a){this._super(),a&&this.addObjects(a)},nextObject:function(a){return this[a]},firstObject:function(){return this.length>0?this[0]:undefined}.property("[]").cacheable(),lastObject:function(){return this.length>0?this[this.length-1]:undefined}.property("[]").cacheable(),addObject:function(e){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);if(d(e))return this;var f=c(e),g=this[f],h=a(this,"length"),i;if(g>=0&&g<h&&this[g]===e)return this;i=[e],this.enumerableContentWillChange(null,i),h=a(this,"length"),this[f]=h,this[h]=e,b(this,"length",h+1),this.enumerableContentDidChange(null,i);return this},removeObject:function(e){if(a(this,"isFrozen"))throw new Error(SC.FROZEN_ERROR);if(d(e))return this;var f=c(e),g=this[f],h=a(this,"length"),i,j;g>=0&&g<h&&this[g]===e&&(j=[e],this.enumerableContentWillChange(j,null),g<h-1&&(i=this[h-1],this[g]=i,this[c(i)]=g),delete this[f],delete this[h-1],b(this,"length",h-1),this.enumerableContentDidChange(j,null));return this},contains:function(a){return this[c(a)]>=0},copy:function(){var d=this.constructor,e=new d,f=a(this,"length");b(e,"length",f);while(--f>=0)e[f]=this[f],e[c(this[f])]=f;return e},toString:function(){var a=this.length,b,c=[];for(b=0;b<a;b++)c[b]=this[b];return"SC.Set<%@>".fmt(c.join(","))},isSet:YES});var e=SC.Set.create;SC.Set.create=function(a){if(a&&SC.Enumerable.detect(a)){SC.Logger.warn("Passing an enumerable to SC.Set.create() is deprecated and will be removed in a future version of SproutCore. Use new SC.Set(items) instead");return new SC.Set(a)}return e.apply(this,arguments)}}(),function(){SC.CoreObject.subclasses=new SC.Set,SC.Object=SC.CoreObject.extend(SC.Observable)}(),function(){SC.Namespace=SC.Object.extend()}(),function(){SC.Application=SC.Namespace.extend()}(),function(){var a=SC.get,b=SC.set;SC.ArrayProxy=SC.Object.extend(SC.MutableArray,{content:null,objectAtContent:function(b){return a(this,"content").objectAt(b)},replaceContent:function(b,c,d){a(this,"content").replace(b,c,d)},contentWillChange:function(){var b=a(this,"content"),c=b?a(b,"length"):0;this.arrayWillChange(b,0,c,undefined),b&&b.removeArrayObserver(this)}.observesBefore("content"),contentDidChange:function(){var b=a(this,"content"),c=b?a(b,"length"):0;b&&b.addArrayObserver(this),this.arrayDidChange(b,0,undefined,c)}.observes("content"),objectAt:function(b){return a(this,"content")&&this.objectAtContent(b)},length:function(){var b=a(this,"content");return b?a(b,"length"):0}.property("content.length").cacheable(),replace:function(b,c,d){a(this,"content")&&this.replaceContent(b,c,d);return this},arrayWillChange:function(a,b,c,d){this.arrayContentWillChange(b,c,d)},arrayDidChange:function(a,b,c,d){this.arrayContentDidChange(b,c,d)},init:function(a){this._super(),a&&b(this,"content",a),this.contentDidChange()}})}(),function(){function m(){l=null;for(var a in h){if(!h.hasOwnProperty(a))continue;var c=h[a];c.next&&(delete h[a],b(c.target,c.method,c.args,2))}}function k(a,c){c[this.tguid]&&delete c[this.tguid][this.mguid],h[a]&&b(this.target,this.method,this.args,2),delete h[a]}function j(){var a=Date.now(),c=-1;for(var d in h){if(!h.hasOwnProperty(d))continue;var e=h[d];if(e&&e.expires)if(a>=e.expires)delete h[d],b(e.target,e.method,e.args,2);else if(c<0||e.expires<c)c=e.expires}c>0&&setTimeout(j,c-Date.now())}function g(){f=null,e.currentRunLoop&&e.end()}function b(b,c,d,e){c===undefined&&(c=b,b=undefined),"string"==typeof c&&(c=b[c]),d&&e>0&&(d=d.length>e?a.call(d,e):null);return c.apply(b,d)}var a=Array.prototype.slice,c,d=SC.Object.extend({_prev:null,init:function(a){this._prev=a,this.onceTimers={}},end:function(){this.flush();return this._prev},schedule:function(b,c,d){var e=this._queues,f;e||(e=this._queues={}),f=e[b],f||(f=e[b]=[]);var g=arguments.length>3?a.call(arguments,3):null;f.push({target:c,method:d,args:g});return this},flush:function(a){function j(a){b(a.target,a.method,a.args)}var d=this._queues,e,f,g,h,i;if(!d)return this;SC.watch.flushPending();if(a)while(this._queues&&(h=this._queues[a]))this._queues[a]=null,i=SC.LOG_BINDINGS&&a==="sync",i&&SC.Logger.log("Begin: Flush Sync Queue"),a==="sync"&&SC.beginPropertyChanges(),h.forEach(j),a==="sync"&&SC.endPropertyChanges(),i&&SC.Logger.log("End: Flush Sync Queue");else{e=SC.run.queues,g=e.length;do{this._queues=null;for(f=0;f<g;f++)a=e[f],h=d[a],i=SC.LOG_BINDINGS&&a==="sync",i&&SC.Logger.log("Begin: Flush Sync Queue"),a==="sync"&&SC.beginPropertyChanges(),h&&h.forEach(j),a==="sync"&&SC.endPropertyChanges(),i&&SC.Logger.log("End: Flush Sync Queue")}while(d=this._queues)}c=null;return this}});SC.RunLoop=d;var e;SC.run=e=function(a,c){var d,f;e.begin();if(a||c)d=b(a,c);e.end();return d},SC.run.begin=function(){e.currentRunLoop=new d(e.currentRunLoop)},SC.run.end=function(){sc_assert("must have a current run loop",e.currentRunLoop),e.currentRunLoop=e.currentRunLoop.end()},SC.run.queues=["sync","actions","timers"],SC.run.schedule=function(a,b,c){var d=e.autorun();d.schedule.apply(d,arguments)};var f;SC.run.autorun=function(){e.currentRunLoop||e.begin(),f||(f=setTimeout(g,1));return e.currentRunLoop},SC.run.sync=function(){e.autorun(),e.currentRunLoop.flush("sync")};var h={},i=!1;SC.run.later=function(b,c){var d,f,g,i,k;arguments.length===2&&"function"==typeof b?(k=c,c=b,b=undefined,d=[b,c]):(d=a.call(arguments),k=d.pop()),f=Date.now()+k,g={target:b,method:c,expires:f,args:d},i=SC.guidFor(g),h[i]=g,e.once(h,j);return i},SC.run.once=function(b,c){var d=SC.guidFor(b),f=SC.guidFor(c),g,i,j=e.autorun().onceTimers;g=j[d]&&j[d][f],g&&h[g]?h[g].args=a.call(arguments):(i={target:b,method:c,args:a.call(arguments),tguid:d,mguid:f},g=SC.guidFor(i),h[g]=i,j[d]||(j[d]={}),j[d][f]=g,e.schedule("timers",i,k,g,j));return g};var l=!1;SC.run.next=function(b,c){var d,e;d={target:b,method:c,args:a.call(arguments),next:!0},e=SC.guidFor(d),h[e]=d,l||(l=setTimeout(m,1));return e},SC.run.cancel=function(a){delete h[a]},SC.RunLoop.begin=SC.run.begin,SC.RunLoop.end=SC.run.end}(),function(){function k(a,b){var c=b._logic;return c?c(a,b._from,b._from2):f(a,b._from)}function j(a){return a===undefined||a===null||a===""||SC.isArray(a)&&e(a,"length")===0}function i(a,b,c){var d=a._forceKind;d&&(b=d(b,a._placeholder));var e=a._transforms,f=e?e.length:0,g;for(g=0;g<f;g++)b=e[g].call(this,b,c);return b}function d(a){return!a}function c(a){return!!a}function b(a,b){if(a instanceof Array)return a.length>1?b:a[0];return a}function a(a){if(a instanceof Array)return a;if(a===undefined||a===null)return[];return[a]}SC.LOG_BINDINGS=!1||!!SC.ENV.LOG_BINDINGS,SC.BENCHMARK_BINDING_NOTIFICATIONS=!!SC.ENV.BENCHMARK_BINDING_NOTIFICATIONS,SC.BENCHMARK_BINDING_SETUP=!!SC.ENV.BENCHMARK_BINDING_SETUP,SC.MULTIPLE_PLACEHOLDER="@@MULT@@",SC.EMPTY_PLACEHOLDER="@@EMPTY@@";var e=SC.get,f=SC.getPath,g=SC.setPath,h=SC.guidFor,l=function(a,b,c){return f(a,b)&&f(a,c)},m=function(a,b,c){return f(a,b)||f(a,c)},n=SC.Object.extend({_direction:"fwd",init:function(a,b){this._from=b,this._to=a},from:function(a){this._from=a;return this},to:function(a){this._to=a;return this},oneWay:function(a){this._oneWay=a===undefined?!0:!!a;return this},transform:function(a){this._transforms||(this._transforms=[]),this._transforms.push(a);return this},resetTransforms:function(){this._transforms=null;return this},single:function(a){a===undefined&&(a=SC.MULTIPLE_PLACEHOLDER),this._forceKind=b,this._placeholder=a;return this},multiple:function(){this._forceKind=a,this._placeholder=null;return this},bool:function(){this.transform(c);return this},notEmpty:function(a,b){b&&(a&&this.from(a),a=b),a||(a=SC.EMPTY_PLACEHOLDER),this.transform(function(b){return j(b)?a:b});return this},notNull:function(a){throw new Error("SC.Binding.notNull not yet implemented")},not:function(){this.transform(d);return this},isNull:function(a){throw new Error("SC.Binding.isNull not yet implemented")},toString:function(){var a=this._oneWay?"[oneWay]":"";return SC.String.fmt("SC.Binding<%@>(%@ -> %@)%@",[h(this),this._from,this._to,a])},connect:function(a){sc_assert("Must pass a valid object to SC.Binding.connect()",!!a);var b=this._oneWay,c=this._from2;SC.addObserver(a,this._from,this,this.fromDidChange),c&&SC.addObserver(a,c,this,this.fromDidChange),b||SC.addObserver(a,this._to,this,this.toDidChange),SC.meta(a,!1).proto!==a&&this._scheduleSync(a,"fwd"),this._readyToSync=!0;return this},disconnect:function(a){sc_assert("Must pass a valid object to SC.Binding.disconnect()",!!a);var b=this._oneWay,c=this._from2;SC.removeObserver(a,this._from,this,this.fromDidChange),c&&SC.removeObserver(a,c,this,this.fromDidChange),b||SC.removeObserver(a,this._to,this,this.toDidChange),this._readyToSync=!1;return this},fromDidChange:function(a){this._scheduleSync(a,"fwd")},toDidChange:function(a){this._scheduleSync(a,"back")},_scheduleSync:function(a,b){var c=h(a);this[c]||SC.run.schedule("sync",this,this._sync,a),this[c]=this[c]==="fwd"||!b?"fwd":b},_sync:function(a){var b=SC.LOG_BINDINGS,c=h(a),d=this[c],e,g;!this._readyToSync||(delete this[c],d==="fwd"?(e=k(a,this),g=i(this,e,a),b&&SC.Logger.log(" ",this.toString(),e,"->",g,a),SC.setPath(a,this._to,g)):d==="back"&&!this._oneWay&&(e=f(a,this._to),g=i(this,k(a,this),a),e!==g&&(b&&SC.Logger.log(" ",this.toString(),e,"<-",g,a),SC.setPath(a,this._from,e))))}});n.reopenClass({from:function(){var a=this,b=new a;return b.from.apply(b,arguments)},to:function(){var a=this,b=new a;return b.to.apply(b,arguments)},oneWay:function(a,b){var c=this,d=new c(null,a);return d.oneWay(b)},single:function(a){var b=this,c=new b(null,a);return c.single()},multiple:function(a){var b=this,c=new b(null,a);return c.multiple()},oneWay:function(a,b){var c=this,d=new c(null,a);return d.oneWay(b)},transform:function(a){var b=this,c=new b;return c.transform(a)},notEmpty:function(a,b){var c=this,d=new c(null,a);return d.notEmpty(b)},bool:function(a){var b=this,c=new b(null,a);return c.bool()},not:function(a){var b=this,c=new b(null,a);return c.not()},and:function(a,b){var c=this,d=(new c(null,a)).oneWay();d._from2=b,d._logic=l;return d},or:function(a,b){var c=this,d=(new c(null,a)).oneWay();d._from2=b,d._logic=m;return d}}),SC.Binding=n,SC.bind=function(a,b,c){return(new SC.Binding(b,c)).connect(a)}}(),function(){function g(a,b,d,e,f){var g=d._objects;g||(g=d._objects={});var h,i;while(--f>=e){var j=a.objectAt(f);j&&(SC.removeBeforeObserver(j,b,d,"contentKeyWillChange"),SC.removeObserver(j,b,d,"contentKeyDidChange"),i=c(j),h=g[i],h[h.indexOf(f)]=null)}}function f(a,b,d,e,f){var g=d._objects,h;g||(g=d._objects={});while(--f>=e){var i=a.objectAt(f);i&&(SC.addBeforeObserver(i,b,d,"contentKeyWillChange"),SC.addObserver(i,b,d,"contentKeyDidChange"),h=c(i),g[h]||(g[h]=[]),g[h].push(f))}}var a=SC.set,b=SC.get,c=SC.guidFor,d=SC.Object.extend(SC.Array,{init:function(a,b,c){this._super(),this._keyName=b,this._owner=c,this._content=a},objectAt:function(a){var c=this._content.objectAt(a);return c&&b(c,this._keyName)},length:function(){var a=this._content;return a?b(a,"length"):0}.property("[]").cacheable()}),e=/^.+:(before|change)$/;SC.EachProxy=SC.Object.extend({init:function(a){this._super(),this._content=a,a.addArrayObserver(this),SC.watchedEvents(this).forEach(function(a){this.didAddListener(a)},this)},unknownProperty:function(b){var c;c=new d(this._content,b,this),a(this,b,c),this.beginObservingContentKey(b);return c},arrayWillChange:function(a,c,d,e){var f=this._keys,h,i,j;if(!!f){j=d>0?c+d:-1,SC.beginPropertyChanges(this);for(h in f){if(!f.hasOwnProperty(h))continue;j>0&&g(a,h,this,c,j),i=b(this,h),SC.propertyWillChange(this,h),i&&i.arrayContentWillChange(c,d,e)}SC.endPropertyChanges(this)}},arrayDidChange:function(a,c,d,e){var g=this._keys,h,i,j;if(!!g){j=e>0?c+e:-1,SC.beginPropertyChanges(this);for(h in g){if(!g.hasOwnProperty(h))continue;j>0&&f(a,h,this,c,j),i=b(this,h),i&&i.arrayContentDidChange(c,d,e),SC.propertyDidChange(this,h)}SC.endPropertyChanges(this)}},didAddListener:function(a){e.test(a)&&this.beginObservingContentKey(a.slice(0,-7))},didRemoveListener:function(a){e.test(a)&&this.stopObservingContentKey(a.slice(0,-7))},beginObservingContentKey:function(a){var c=this._keys;c||(c=this._keys={});if(!c[a]){c[a]=1;var d=this._content,e=b(d,"length");f(d,a,this,0,e)}else c[a]++},stopObservingContentKey:function(a){var c=this._keys;if(c&&c[a]>0&&--c[a]<=0){var d=this._content,e=b(d,"length");g(d,a,this,0,e)}},contentKeyWillChange:function(a,d){var e=this._objects[c(a)],f=b(this,d),g=f&&e?e.length:0,h;for(h=0;h<g;h++)f.arrayContentWillChange(e[h],1,1)},contentKeyDidChange:function(a,d){var e=this._objects[c(a)],f=b(this,d),g=f&&e?e.length:0,h;for(h=0;h<g;h++)f.arrayContentDidChange(e[h],1,1);SC.propertyDidChange(this,d)}})}(),function(){var a=SC.get,b=SC.set,c=SC.Mixin.create(SC.MutableArray,SC.Observable,SC.Copyable,{get:function(a){return a==="length"?this.length:"number"==typeof a?this[a]:this._super(a)},objectAt:function(a){return this[a]},replace:function(b,c,d){if(this.isFrozen)throw SC.FROZEN_ERROR;var e=d?a(d,"length"):0;this.arrayContentWillChange(b,c,e);if(!d||d.length===0)this.splice(b,c);else{var f=[b,c].concat(d);this.splice.apply(this,f)}this.arrayContentDidChange(b,c,e);return this},unknownProperty:function(a,b){var c;b!==undefined&&c===undefined&&(c=this[a]=b);return c},indexOf:function(a,b){var c,d=this.length;b===undefined?b=0:b=b<0?Math.ceil(b):Math.floor(b),b<0&&(b+=d);for(c=b;c<d;c++)if(this[c]===a)return c;return-1},lastIndexOf:function(a,b){var c,d=this.length;b===undefined?b=d-1:b=b<0?Math.ceil(b):Math.floor(b),b<0&&(b+=d);for(c=b;c>=0;c--)if(this[c]===a)return c;return-1},copy:function(){return this.slice()}}),d=["length"];c.keys().forEach(function(a){Array.prototype[a]&&d.push(a)}),d.length>0&&(c=c.without.apply(c,d)),SC.NativeArray=c,SC.NativeArray.activate=function(){c.apply(Array.prototype)},SC.EXTEND_PROTOTYPES&&SC.NativeArray.activate()}(),function(){}(),function(){}(),function(){var a=SC.get,b=SC.set;SC.RenderBuffer=function(a){return SC._RenderBuffer.create({elementTag:a})},SC._RenderBuffer=SC.Object.extend({elementClasses:null,elementId:null,elementAttributes:null,elementContent:null,elementTag:null,elementStyle:null,escapeContent:!1,escapeFunction:null,parentBuffer:null,init:function(){this._super(),b(this,"elementClasses",[]),b(this,"elementAttributes",{}),b(this,"elementStyle",{}),b(this,"elementContent",[])},push:function(b){a(this,"elementContent").pushObject(b);return this},addClass:function(b){a(this,"elementClasses").pushObject(b);return this},id:function(a){b(this,"elementId",a);return this},attr:function(b,c){a(this,"elementAttributes")[b]=c;return this},style:function(b,c){a(this,"elementStyle")[b]=c;return this},begin:function(a){return SC._RenderBuffer.create({parentBuffer:this,elementTag:a})},end:function(){var b=a(this,"parentBuffer");if(b){var c=this.string();b.push(c);return b}return this},element:function(){return SC.$(this.string())[0]},string:function(){var b=a(this,"elementId"),c=a(this,"elementClasses"),d=a(this,"elementAttributes"),e=a(this,"elementStyle"),f=a(this,"elementContent"),g=a(this,"elementTag"),h=[],i,j=["<"+g];b&&j.push('id="'+b+'"'),c.length&&j.push('class="'+c.join(" ")+'"');if(!jQuery.isEmptyObject(e)){for(i in e)e.hasOwnProperty(i)&&h.push(i+":"+e[i]+";");j.push('style="'+h.join()+'"')}for(i in d)d.hasOwnProperty(i)&&j.push(i+'="'+d[i]+'"');j.push(">"),j=j.join(" "),f=f.join(),a(this,"escapeContent")&&(f=a(this,"escapeFunction")(f));return j+f+"</"+g+">"}})}(),function(){var a=SC.get,b=SC.set;SC.EventDispatcher=SC.Object.extend({rootElement:document,setup:function(){var a,b={touchstart:"touchStart",touchmove:"touchMove",touchend:"touchEnd",touchcancel:"touchCancel",keydown:"keyDown",keyup:"keyUp",keypress:"keyPress",mousedown:"mouseDown",mouseup:"mouseUp",click:"click",dblclick:"doubleClick",mousemove:"mouseMove",focusin:"focusIn",focusout:"focusOut",mouseenter:"mouseEnter",mouseleave:"mouseLeave",change:"change"};for(a in b)b.hasOwnProperty(a)&&this.setupHandler(a,b[a])},setupHandler:function(b,c){var d=a(this,"rootElement");SC.$(d).delegate(".sc-view",b+".sproutcore",function(b){var d=SC.View.views[this.id],e=!0,f;SC.run(function(){while(e!==!1&&d)f=d[c],SC.typeOf(f)==="function"&&(e=f.call(d,b)),d=a(d,"parentView")});return e})},destroy:function(){var b=a(this,"rootElement");SC.$(b).undelegate(".sproutcore")}})}(),function(){var a=SC.get,b=SC.set;SC.Application=SC.Object.extend({rootElement:document,eventDispatcher:null,init:function(){var c,d=a(this,"rootElement");c=SC.EventDispatcher.create({rootElement:d}),b(this,"eventDispatcher",c),SC.$(document).ready(function(){c.setup()})},destroy:function(){a(this,"eventDispatcher").destroy()}})}(),function(){}(),function(){var a=SC.get,b=SC.set;SC.TEMPLATES={},SC.View=SC.Object.extend({concatenatedProperties:["classNames","classNameBindings"],isView:YES,templateName:null,templates:SC.TEMPLATES,template:function(b,c){if(c!==undefined)return c;var d=a(this,"templateName"),e=a(a(this,"templates"),d);if(!e&&d)throw new SC.Error('%@ - Unable to find template "%@".'.fmt(this,d));return e||a(this,"defaultTemplate")}.property("templateName").cacheable(),templateContext:function(a,b){return b!==undefined?b:this}.property().cacheable(),parentView:null,isVisible:!0,childViews:[],render:function(b){var c=a(this,"template");if(!!c){var d=a(this,"templateContext"),e={data:{view:this,isRenderData:!0}};this._didRenderChildViews=YES;var f=c(d,e);b.push(f)}},_applyClassNameBindings:function(){var b=a(this,"classNameBindings"),c=a(this,"classNames"),d,e,f;!b||b.forEach(function(a){var b,g=function(){e=this._classStringForProperty(a),d=this.$(),b&&d.removeClass(b),e?(d.addClass(e),b=e):b=null};SC.addObserver(this,a,g),f=this._classStringForProperty(a),f&&(c.push(f),b=f)},this)},_classStringForProperty:function(b){var c=b.split(":"),d=c[1];b=c[0];var e=SC.getPath(this,b);if(e===YES){if(d)return d;return SC.String.dasherize(a(b.split("."),"lastObject"))}return e!==NO&&e!==undefined&&e!==null?e:null},element:function(b,c){if(c!==undefined)return c;var d=a(this,"parentView");d&&(d=a(d,"element"));if(d)return this.findElementInParentElement(d)}.property("parentView").cacheable(),$:function(b){var c=a(this,"element");return c?b===undefined?SC.$(c):SC.$(b,c):SC.$()},mutateChildViews:function(b){var c=a(this,"childViews"),d=a(c,"length"),e;while(--d>=0)e=c[d],b.call(this,e);return this},forEachChildView:function(b){var c=a(this,"childViews"),d=a(c,"length"),e,f;for(f=0;f<d;f++)e=c[f],b.call(this,e);return this},appendTo:function(b){var c=a(this,"element");c||this.createElement(),this.$().appendTo(b);return this},append:function(){return this.appendTo(document.body)},remove:function(){this.destroyElement()},elementId:function(a,b){return b!==undefined?b:SC.guidFor(this)}.property().cacheable(),findElementInParentElement:function(b){var c="#"+a(this,"elementId");return jQuery(c)[0]||jQuery(c,b)[0]},renderBuffer:function(a){return SC.RenderBuffer(a)},createElement:function(){if(a(this,"element"))return this;var c=this.renderBuffer(a(this,"tagName"));this.renderToBuffer(c),b(this,"element",c.element()),this._notifyDidCreateElement();return this},didCreateElement:function(){},_notifyDidCreateElement:function(){this.didCreateElement(),this.forEachChildView(function(a){a._notifyDidCreateElement()})},destroyElement:function(){var c=a(this,"element");c&&(this._notifyWillDestroyElement(),SC.$(c).remove(),b(this,"element",null));return this},willDestroyElement:function(){},_notifyWillDestroyElement:function(){this.willDestroyElement(),this.forEachChildView(function(a){a._notifyWillDestroyElement()})},_sccv_elementWillChange:function(){this.forEachChildView(function(a){SC.propertyWillChange(a,"element")})}.observesBefore("element"),_sccv_elementDidChange:function(){this.forEachChildView(function(a){SC.propertyDidChange(a,"element")})}.observes("element"),parentViewDidChange:SC.K,renderToBuffer:function(a){var c,d,e;SC.beginPropertyChanges(this),b(this,"elementNeedsUpdate",NO),this.applyAttributesToBuffer(a),this.render(a),this._didRenderChildViews||this.renderChildViews(a),this._didRenderChildViews=NO,SC.endPropertyChanges(this)},applyAttributesToBuffer:function(b){this._applyClassNameBindings(),b.addClass(a(this,"classNames").join(" ")),b.id(a(this,"elementId"));var c=a(this,"ariaRole");c&&b.attr("role",c),a(this,"isVisible")||b.style("display","none")},renderChildViews:function(b){this.forEachChildView(function(c){b=b.begin(a(c,"tagName")),c.renderToBuffer(b),b=b.end()}),this._didRenderChildViews=YES;return b},tagName:"div",ariaRole:null,classNames:["sc-view"],classNameBindings:[],init:function(){var b=a(this,"parentView");this._super(),SC.View.views[a(this,"elementId")]=this,this.childViews=a(this,"childViews").slice(),this.classNameBindings=a(this,"classNameBindings").slice(),this.classNames=a(this,"classNames").slice(),this.createChildViews()},removeChild:function(c){b(c,"parentView",null);var d=a(this,"childViews");d.removeObject(c);return this},removeAllChildren:function(){return this.mutateChildViews(function(a){this.removeChild(a)})},destroyAllChildren:function(){return this.mutateChildViews(function(a){a.destroy()})},removeFromParent:function(){var b=a(this,"parentView");this.remove(),b&&b.removeChild(this);return this},destroy:function(){if(a(this,"isDestroyed"))return this;this.destroyElement(),this.mutateChildViews(function(a){a.destroy()}),delete SC.View.views[a(this,"elementId")],a(this,"parentView")&&this.removeFromParent(),this._super();return this},createChildViews:function(){var b=a(this,"childViews"),c=a(b,"length"),d,e,f,g;SC.beginPropertyChanges(this);for(d=0;d<c;++d){e=g=b[d];if(e){typeof e=="string"?g=this[e]:e=null;if(!g){SC.Logger.error("No view with name "+e+" has been found in "+this.toString());continue}g=this.createChildView(g),e&&(this[e]=g)}b[d]=g}SC.endPropertyChanges(this);return this},createChildView:function(a,c){SC.View.detect(a)?a=a.create(c||{},{parentView:this}):(sc_assert("must pass instance of View",a instanceof SC.View),b(a,"parentView",this));return a},_isVisibleDidChange:function(){this.$().toggle(a(this,"isVisible"))}.observes("isVisible")}),SC.View.views={}}(),function(){var a=SC.get,b=SC.set;SC.CollectionView=SC.View.extend({content:null,emptyView:null,itemViewClass:SC.View,init:function(){var a=this._super();this._sctcv_contentDidChange();return a},didCreateElement:function(){var b=a(this,"content");if(b){var c=a(b,"length");this.arrayWillChange(b,0,0,c),this.arrayDidChange(b,0,0,c)}},_sctcv_contentDidChange:function(){this.$().empty();var b=this._sccv_content,c=a(this,"content"),d=0,e=0;b&&(b.removeArrayObserver(this),d=a(b,"length")),c&&(c.addArrayObserver(this),e=a(c,"length")),this.arrayWillChange(b,0,d,e),this._sccv_content=c,this.arrayDidChange(c,0,d,e)}.observes("content"),destroy:function(){b(this,"content",null);return this._super()},arrayWillChange:function(b,c,d,e){if(!!a(this,"element")){var f=a(this,"emptyView");f&&!SC.Object.detect(f)&&f.removeFromParent();var g=a(this,"childViews"),h,i,j;j=a(g,"length");for(i=c+d-1;i>=c;i--)g[i].destroy()}},arrayDidChange:function(c,d,e,f){if(!!a(this,"element")){var g=a(this,"itemViewClass"),h=a(this,"childViews"),i=[],j,k,l,m,n,o,p,q,r,s;n=this.$();if(c){var t=c.slice(d,d+f);l=h.objectAt(d-1),o=l?l.$():null,s=a(t,"length");for(r=0;r<s;r++)p=t.objectAt(r),k=this.createChildView(g,{content:p}),q=k.createElement().$(),o?q.insertAfter(o):n.append(q),o=q,i.push(k);h.replace(d,0,i)}var u=a(this,"emptyView");a(h,"length")===0&&u&&(SC.Object.detect(u)&&(u=this.createChildView(u)),b(this,"emptyView",u),u.createElement().$().appendTo(n),b(this,"childViews",[u]))}}})}(),function(){}(),function(){"undefined"==typeof jQuery&&require("jquery"),SC.$=jQuery}(),function(){var a=SC.get,b=SC.set;SC.Button=SC.View.extend({classNames:["sc-button"],classNameBindings:["isActive"],tagName:"button",targetObject:function(){var b=a(this,"target");return SC.typeOf(b)==="string"?SC.getPath(b):b}.property("target").cacheable(),mouseDown:function(){b(this,"isActive",!0),this._mouseDown=!0,this._mouseEntered=!0},mouseLeave:function(){this._mouseDown&&(b(this,"isActive",!1),this._mouseEntered=!1)},mouseEnter:function(){this._mouseDown&&(b(this,"isActive",!0),this._mouseEntered=!0)},mouseUp:function(c){if(a(this,"isActive")){var d=a(this,"action"),e=a(this,"targetObject");e&&d&&(typeof d=="string"&&(d=e[d]),d.call(e,this)),b(this,"isActive",!1)}this._mouseDown=!1,this._mouseEntered=!1},touchStart:function(a){this.mouseDown(a)},touchEnd:function(a){this.mouseUp(a)}})}(),function(){SC.Handlebars={},SC.Handlebars.Compiler=function(){},SC.Handlebars.Compiler.prototype=SC.create(Handlebars.Compiler.prototype),SC.Handlebars.Compiler.prototype.compiler=SC.Handlebars.Compiler,SC.Handlebars.JavaScriptCompiler=function(){},SC.Handlebars.JavaScriptCompiler.prototype=SC.create(Handlebars.JavaScriptCompiler.prototype),SC.Handlebars.JavaScriptCompiler.prototype.compiler=SC.Handlebars.JavaScriptCompiler,SC.Handlebars.JavaScriptCompiler.prototype.nameLookup=function(a,b,c){return c==="context"?"SC.get("+a+", "+this.quotedString(b)+");":Handlebars.JavaScriptCompiler.prototype.nameLookup.call(this,a,b,c)},SC.Handlebars.Compiler.prototype.mustache=function(a){if(a.params.length||a.hash)return Handlebars.Compiler.prototype.mustache.call(this,a);var b=new Handlebars.AST.IdNode(["bind"]);a.escaped&&(a.hash=a.hash||new Handlebars.AST.HashNode([]),a.hash.pairs.push(["escaped",new Handlebars.AST.StringNode("true")])),a=new Handlebars.AST.MustacheNode([b].concat([a.id]),a.hash,!a.escaped);return Handlebars.Compiler.prototype.mustache.call(this,a)},SC.Handlebars.compile=function(a){var b=Handlebars.parse(a),c=(new SC.Handlebars.Compiler).compile(b,{data:!0,stringParams:!0}),d=(new SC.Handlebars.JavaScriptCompiler).compile(c,{data:!0,stringParams:!0});d.rawTemplate=a;return d},Handlebars.registerHelper("helperMissing",function(a,b){var c;c="%@ Handlebars error: Could not find property '%@' on object %@.";throw new SC.Error(SC.String.fmt(c,b.data.view,a,this))}),SC._RenderBuffer.reopen({escapeFunction:Handlebars.Utils.escapeExpression})}(),function(){var a=SC.set,b=SC.get;SC.Checkbox=SC.View.extend({title:null,value:!1,classNames:["sc-checkbox"],defaultTemplate:SC.Handlebars.compile('<label><input type="checkbox" {{bindAttr checked="value"}}>{{title}}</label>'),change:function(){SC.run.once(this,this._updateElementValue);return!1},_updateElementValue:function(){var b=this.$("input:checkbox");a(this,"value",b.prop("checked"))}})}(),function(){var a=SC.get,b=SC.set;SC.TextField=SC.View.extend({classNames:["sc-text-field"],insertNewline:SC.K,cancel:SC.K,type:"text",value:"",placeholder:null,defaultTemplate:function(){var b=a(this,"type");return SC.Handlebars.compile('<input type="%@" {{bindAttr value="value" placeholder="placeholder"}}>'.fmt(b))}.property(),focusOut:function(a){this._elementValueDidChange();return!1},change:function(a){this._elementValueDidChange();return!1},keyUp:function(a){this.interpretKeyEvents(a);return!1},interpretKeyEvents:function(a){var b=SC.TextField.KEY_EVENTS,c=b[a.keyCode];if(c)return this[c](a);this._elementValueDidChange()},_elementValueDidChange:function(){var a=this.$("input");b(this,"value",a.val())},_valueDidChange:function(){SC.run.once(this,this._updateElementValue)},_updateElementValue:function(){var b=this.$("input");b.val(a(this,"value"))}}),SC.TextField.KEY_EVENTS={13:"insertNewline",27:"cancel"}}(),function(){}(),function(){var a=SC.get,b=SC.set,c=SC.getPath;SC._BindableSpanView=SC.View.extend({tagName:"span",shouldDisplayFunc:null,preserveContext:!1,displayTemplate:null,inverseTemplate:null,property:null,render:function(d){a(this,"isEscaped")&&b(d,"escapeContent",!0);var e=a(this,"shouldDisplayFunc"),f=a(this,"property"),g=a(this,"preserveContext"),h=a(this,"previousContext"),i=a(this,"inverseTemplate"),j=a(this,"displayTemplate"),k=c(h,f);if(e(k)){b(this,"template",j);if(g)b(this,"templateContext",h);else if(j)b(this,"templateContext",k);else{d.push(k);return}}else i?(b(this,"template",i),g?b(this,"templateContext",h):b(this,"templateContext",k)):b(this,"template",function(){return""});return this._super(d)},rerender:function(){var c;this.destroyAllChildren();var d=this.renderBuffer(a(this,"tagName"));a(this,"isEscaped")&&b(d,"escapeContent",!0),this.renderToBuffer(d),c=d.element(),this.$().replaceWith(c),b(this,"element",c),this._notifyDidCreateElement()}})}(),function(){var a=SC.get,b=SC.getPath;(function(){var c=function(c,d,e,f){var g=d.data,h=d.fn,i=d.inverse,j=g.view,k=this;if("object"==typeof this){var l=j.createChildView(SC._BindableSpanView,{preserveContext:e,shouldDisplayFunc:f,displayTemplate:h,inverseTemplate:i,property:c,previousContext:k,isEscaped:d.hash.escaped}),m,n;a(j,"childViews").pushObject(l),m=function(){a(l,"element")?l.rerender():SC.removeObserver(k,c,n)},n=function(){SC.run.once(m)},SC.addObserver(k,c,n);var o=l.renderBuffer(a(l,"tagName"));l.renderToBuffer(o);return new Handlebars.SafeString(o.string())}return b(this,c)};Handlebars.registerHelper("bind",function(a,b){return c.call(this,a,b,!1,function(a){return!SC.none(a)})}),Handlebars.registerHelper("boundIf",function(b,d){if(d)return c.call(this,b,d,!0,function(b){return SC.typeOf(b)==="array"?a(b,"length")!==0:!!b});throw new SC.Error("Cannot use boundIf helper without a block.")})})(),Handlebars.registerHelper("with",function(a,b){return Handlebars.helpers.bind.call(b.contexts[0],a,b)}),Handlebars.registerHelper("if",function(a,b){return Handlebars.helpers.boundIf.call(b.contexts[0],a,b)}),Handlebars.registerHelper("unless",function(a,b){var c=b.fn,d=b.inverse;b.fn=d,b.inverse=c;return Handlebars.helpers.boundIf.call(b.contexts[0],a,b)}),Handlebars.registerHelper("bindAttr",function(a){var c=a.hash,d=a.data.view,e=[],f=this,g=jQuery.uuid++,h=c["class"];if(h!==null&&h!==undefined){var i=SC.Handlebars.bindClasses(this,h,d,g);e.push('class="'+i.join(" ")+'"'),delete c["class"]}var j=SC.keys(c);j.forEach(function(a){var h=c[a],i=b(f,h),j,k;j=function j(){var c=b(f,h),e=d.$("[data-handlebars-id='"+g+"']");e.length===0?SC.removeObserver(f,h,k):c===NO?e.removeAttr(a):c===YES?e.attr(a,a):e.attr(a,c)},k=function(){SC.run.once(j)},SC.addObserver(f,h,k),i===YES&&(i=a),i!==NO&&e.push(a+'="'+i+'"')},this),e.push('data-handlebars-id="'+g+'"');return e.join(" ")}),SC.Handlebars.bindClasses=function(c,d,e,f){var g=[],h,i,j,k=function(d){var e=b(c,d);return e===YES?SC.String.dasherize(a(d.split("."),"lastObject")):e!==NO&&e!==undefined&&e!==null?e:null};d.split(" ").forEach(function(a){var b,d,l;d=function(){h=k(a),j=f?e.$("[data-handlebars-id='"+f+"']"):e.$(),j.length===0?SC.removeObserver(c,a,l):(b&&j.removeClass(b),h?(j.addClass(h),b=h):b=null)},l=function(){SC.run.once(d)},SC.addObserver(c,a,l),i=k(a),i&&(g.push(i),b=i)});return g}}(),function(){
var a=SC.get,b=SC.set;SC.Handlebars.ViewHelper=SC.Object.create({viewClassFromHTMLOptions:function(a,b){var c={},d=b["class"],e=!1;b.id&&(c.elementId=b.id,e=!0),d&&(d=d.split(" "),c.classNames=d,e=!0),b.classBinding&&(c.classNameBindings=b.classBinding.split(" "),e=!0),e&&(b=jQuery.extend({},b),delete b.id,delete b["class"],delete b.classBinding);return a.extend(b,c)},helper:function(c,d,e){var f=e.inverse,g=e.data,h=g.view,i=e.fn,j=e.hash,k;if("string"==typeof d){k=SC.getPath(c,d);if(!k)throw new SC.Error("Unable to find view at path '"+d+"'")}else sc_assert("You must pass a string or a view class to the #view helper",SC.View.detect(d)),k=d;sc_assert("Null or undefined object was passed to the #view helper. Did you mean to pass a property path string?",!!k),k=this.viewClassFromHTMLOptions(k,j);var l=g.view,m=a(l,"childViews"),n=l.createChildView(k);i&&b(n,"template",i),m.pushObject(n);var o=SC.RenderBuffer(a(n,"tagName"));n.renderToBuffer(o);return new Handlebars.SafeString(o.string())}}),Handlebars.registerHelper("view",function(a,b){a&&a.data&&a.data.isRenderData&&(b=a,a="SC.View");return SC.Handlebars.ViewHelper.helper(this,a,b)})}(),function(){var a=SC.get;SC.Handlebars.CONTAINER_MAP={ul:"li",ol:"li",table:"tr",thead:"tr",tbody:"tr",tfoot:"tr",tr:"td"},Handlebars.registerHelper("collection",function(b,c){b&&b.data&&b.data.isRenderData&&(c=b,b=undefined);var d=c.fn,e=c.data,f=c.inverse,g;g=b?SC.getPath(b):SC.CollectionView,sc_assert("%@ #collection: Could not find %@".fmt(e.view,b),!!g);var h=c.hash,i={},j;for(var k in h)h.hasOwnProperty(k)&&(j=k.match(/^item(.)(.*)$/),j&&(i[j[1].toLowerCase()+j[2]]=h[k],delete h[k]));var l=h.tagName||a(g,"proto").tagName,m=SC.Handlebars.CONTAINER_MAP[l];m&&(i.tagName=i.tagName||m),d&&(i.template=d,delete c.fn),f&&(h.emptyView=SC.View.extend({template:f})),h.preserveContext&&(i.templateContext=function(){return a(this,"content")}.property("content"),delete h.preserveContext);var n=a(g,"proto").itemViewClass;h.itemViewClass=SC.Handlebars.ViewHelper.viewClassFromHTMLOptions(n,i);return Handlebars.helpers.view.call(this,g,c)}),Handlebars.registerHelper("each",function(a,b){b.hash.contentBinding=SC.Binding.from("parentView."+a).oneWay(),b.hash.preserveContext=!0;return Handlebars.helpers.collection.call(this,null,b)})}(),function(){}(),function(){SC.$(document).ready(function(){SC.$('head script[type="text/html"]').each(function(){var a=SC.$(this),b=a.attr("data-template-name")||a.attr("id");if(!b)throw new SC.Error("Template found without a name specified.Please provide a data-template-name attribute.\n"+a.html());SC.TEMPLATES[b]=SC.Handlebars.compile(a.html()),a.remove()}),SC.$('body script[type="text/html"]').each(function(){var a=SC.$(this),b=SC.Handlebars.compile(a.html()),c=a.attr("data-view"),d=c?SC.getPath(c):SC.View;d=d.create({template:b}),d.createElement(),a.replaceWith(d.$())})})}(),function(){}(),function(){}()
/**
* QUnit - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
}
/**
* QUnit - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
(function(window) {
var defined = {
setTimeout: typeof window.setTimeout !== "undefined",
sessionStorage: (function() {
try {
return !!sessionStorage.getItem;
} catch(e){
return false;
}
})()
};
var testId = 0;
var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
this.name = name;
this.testName = testName;
this.expected = expected;
this.testEnvironmentArg = testEnvironmentArg;
this.async = async;
this.callback = callback;
this.assertions = [];
};
Test.prototype = {
init: function() {
var tests = id("qunit-tests");
if (tests) {
var b = document.createElement("strong");
b.innerHTML = "Running " + this.name;
var li = document.createElement("li");
li.appendChild( b );
li.className = "running";
li.id = this.id = "test-output" + testId++;
tests.appendChild( li );
}
},
setup: function() {
if (this.module != config.previousModule) {
if ( config.previousModule ) {
QUnit.moduleDone( {
name: config.previousModule,
failed: config.moduleStats.bad,
passed: config.moduleStats.all - config.moduleStats.bad,
total: config.moduleStats.all
} );
}
config.previousModule = this.module;
config.moduleStats = { all: 0, bad: 0 };
QUnit.moduleStart( {
name: this.module
} );
}
config.current = this;
this.testEnvironment = extend({
setup: function() {},
teardown: function() {}
}, this.moduleTestEnvironment);
if (this.testEnvironmentArg) {
extend(this.testEnvironment, this.testEnvironmentArg);
}
QUnit.testStart( {
name: this.testName
} );
// allow utility functions to access the current test environment
// TODO why??
QUnit.current_testEnvironment = this.testEnvironment;
try {
if ( !config.pollution ) {
saveGlobal();
}
this.testEnvironment.setup.call(this.testEnvironment);
} catch(e) {
QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
}
},
run: function() {
if ( this.async ) {
QUnit.stop();
}
if ( config.notrycatch ) {
this.callback.call(this.testEnvironment);
return;
}
try {
this.callback.call(this.testEnvironment);
} catch(e) {
fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
// else next test will carry the responsibility
saveGlobal();
// Restart the tests if they're blocking
if ( config.blocking ) {
start();
}
}
},
teardown: function() {
try {
this.testEnvironment.teardown.call(this.testEnvironment);
checkPollution();
} catch(e) {
QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
}
},
finish: function() {
if ( this.expected && this.expected != this.assertions.length ) {
QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
}
var good = 0, bad = 0,
tests = id("qunit-tests");
config.stats.all += this.assertions.length;
config.moduleStats.all += this.assertions.length;
if ( tests ) {
var ol = document.createElement("ol");
for ( var i = 0; i < this.assertions.length; i++ ) {
var assertion = this.assertions[i];
var li = document.createElement("li");
li.className = assertion.result ? "pass" : "fail";
li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
ol.appendChild( li );
if ( assertion.result ) {
good++;
} else {
bad++;
config.stats.bad++;
config.moduleStats.bad++;
}
}
// store result when possible
if ( QUnit.config.reorder && defined.sessionStorage ) {
if (bad) {
sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad);
} else {
sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName);
}
}
if (bad == 0) {
ol.style.display = "none";
}
var b = document.createElement("strong");
b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
var a = document.createElement("a");
a.innerHTML = "Rerun";
a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
addEvent(b, "click", function() {
var next = b.nextSibling.nextSibling,
display = next.style.display;
next.style.display = display === "none" ? "block" : "none";
});
addEvent(b, "dblclick", function(e) {
var target = e && e.target ? e.target : window.event.srcElement;
if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
target = target.parentNode;
}
if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
}
});
var li = id(this.id);
li.className = bad ? "fail" : "pass";
li.removeChild( li.firstChild );
li.appendChild( b );
li.appendChild( a );
li.appendChild( ol );
} else {
for ( var i = 0; i < this.assertions.length; i++ ) {
if ( !this.assertions[i].result ) {
bad++;
config.stats.bad++;
config.moduleStats.bad++;
}
}
}
try {
QUnit.reset();
} catch(e) {
fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
}
QUnit.testDone( {
name: this.testName,
failed: bad,
passed: this.assertions.length - bad,
total: this.assertions.length
} );
},
queue: function() {
var test = this;
synchronize(function() {
test.init();
});
function run() {
// each of these can by async
synchronize(function() {
test.setup();
});
synchronize(function() {
test.run();
});
synchronize(function() {
test.teardown();
});
synchronize(function() {
test.finish();
});
}
// defer when previous test run passed, if storage is available
var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName);
if (bad) {
run();
} else {
synchronize(run);
};
}
};
var QUnit = {
// call on start of module test to prepend name to all tests
module: function(name, testEnvironment) {
config.currentModule = name;
config.currentModuleTestEnviroment = testEnvironment;
},
asyncTest: function(testName, expected, callback) {
if ( arguments.length === 2 ) {
callback = expected;
expected = 0;
}
QUnit.test(testName, expected, callback, true);
},
test: function(testName, expected, callback, async) {
var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
if ( arguments.length === 2 ) {
callback = expected;
expected = null;
}
// is 2nd argument a testEnvironment?
if ( expected && typeof expected === 'object') {
testEnvironmentArg = expected;
expected = null;
}
if ( config.currentModule ) {
name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
}
if ( !validTest(config.currentModule + ": " + testName) ) {
return;
}
var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
test.module = config.currentModule;
test.moduleTestEnvironment = config.currentModuleTestEnviroment;
test.queue();
},
/**
* Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
*/
expect: function(asserts) {
config.current.expected = asserts;
},
/**
* Asserts true.
* @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
*/
ok: function(a, msg) {
a = !!a;
var details = {
result: a,
message: msg
};
msg = escapeHtml(msg);
QUnit.log(details);
config.current.assertions.push({
result: a,
message: msg
});
},
/**
* Checks that the first two arguments are equal, with an optional message.
* Prints out both actual and expected values.
*
* Prefered to ok( actual == expected, message )
*
* @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
*
* @param Object actual
* @param Object expected
* @param String message (optional)
*/
equal: function(actual, expected, message) {
QUnit.push(expected == actual, actual, expected, message);
},
notEqual: function(actual, expected, message) {
QUnit.push(expected != actual, actual, expected, message);
},
deepEqual: function(actual, expected, message) {
QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
},
notDeepEqual: function(actual, expected, message) {
QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
},
strictEqual: function(actual, expected, message) {
QUnit.push(expected === actual, actual, expected, message);
},
notStrictEqual: function(actual, expected, message) {
QUnit.push(expected !== actual, actual, expected, message);
},
raises: function(block, expected, message) {
var actual, ok = false;
if (typeof expected === 'string') {
message = expected;
expected = null;
}
try {
block();
} catch (e) {
actual = e;
}
if (actual) {
// we don't want to validate thrown error
if (!expected) {
ok = true;
// expected is a regexp
} else if (QUnit.objectType(expected) === "regexp") {
ok = expected.test(actual);
// expected is a constructor
} else if (actual instanceof expected) {
ok = true;
// expected is a validation function which returns true is validation passed
} else if (expected.call({}, actual) === true) {
ok = true;
}
}
QUnit.ok(ok, message);
},
start: function() {
config.semaphore--;
if (config.semaphore > 0) {
// don't start until equal number of stop-calls
return;
}
if (config.semaphore < 0) {
// ignore if start is called more often then stop
config.semaphore = 0;
}
// A slight delay, to avoid any current callbacks
if ( defined.setTimeout ) {
window.setTimeout(function() {
if ( config.timeout ) {
clearTimeout(config.timeout);
}
config.blocking = false;
process();
}, 13);
} else {
config.blocking = false;
process();
}
},
stop: function(timeout) {
config.semaphore++;
config.blocking = true;
if ( timeout && defined.setTimeout ) {
clearTimeout(config.timeout);
config.timeout = window.setTimeout(function() {
QUnit.ok( false, "Test timed out" );
QUnit.start();
}, timeout);
}
}
};
// Backwards compatibility, deprecated
QUnit.equals = QUnit.equal;
QUnit.same = QUnit.deepEqual;
// Maintain internal state
var config = {
// The queue of tests to run
queue: [],
// block until document ready
blocking: true,
// by default, run previously failed tests first
// very useful in combination with "Hide passed tests" checked
reorder: true,
noglobals: false,
notrycatch: false
};
// Load paramaters
(function() {
var location = window.location || { search: "", protocol: "file:" },
params = location.search.slice( 1 ).split( "&" ),
length = params.length,
urlParams = {},
current;
if ( params[ 0 ] ) {
for ( var i = 0; i < length; i++ ) {
current = params[ i ].split( "=" );
current[ 0 ] = decodeURIComponent( current[ 0 ] );
// allow just a key to turn on a flag, e.g., test.html?noglobals
current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
urlParams[ current[ 0 ] ] = current[ 1 ];
if ( current[ 0 ] in config ) {
config[ current[ 0 ] ] = current[ 1 ];
}
}
}
QUnit.urlParams = urlParams;
config.filter = urlParams.filter;
// Figure out if we're running the tests from a server or not
QUnit.isLocal = !!(location.protocol === 'file:');
})();
// Expose the API as global variables, unless an 'exports'
// object exists, in that case we assume we're in CommonJS
if ( typeof exports === "undefined" || typeof require === "undefined" ) {
extend(window, QUnit);
window.QUnit = QUnit;
} else {
extend(exports, QUnit);
exports.QUnit = QUnit;
}
// define these after exposing globals to keep them in these QUnit namespace only
extend(QUnit, {
config: config,
// Initialize the configuration options
init: function() {
extend(config, {
stats: { all: 0, bad: 0 },
moduleStats: { all: 0, bad: 0 },
started: +new Date,
updateRate: 1000,
blocking: false,
autostart: true,
autorun: false,
filter: "",
queue: [],
semaphore: 0
});
var tests = id( "qunit-tests" ),
banner = id( "qunit-banner" ),
result = id( "qunit-testresult" );
if ( tests ) {
tests.innerHTML = "";
}
if ( banner ) {
banner.className = "";
}
if ( result ) {
result.parentNode.removeChild( result );
}
if ( tests ) {
result = document.createElement( "p" );
result.id = "qunit-testresult";
result.className = "result";
tests.parentNode.insertBefore( result, tests );
result.innerHTML = 'Running...<br/>&nbsp;';
}
},
/**
* Resets the test setup. Useful for tests that modify the DOM.
*
* If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
*/
reset: function() {
if ( window.jQuery ) {
jQuery( "#qunit-fixture" ).html( config.fixture );
} else {
var main = id( 'qunit-fixture' );
if ( main ) {
main.innerHTML = config.fixture;
}
}
},
/**
* Trigger an event on an element.
*
* @example triggerEvent( document.body, "click" );
*
* @param DOMElement elem
* @param String type
*/
triggerEvent: function( elem, type, event ) {
if ( document.createEvent ) {
event = document.createEvent("MouseEvents");
event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent( event );
} else if ( elem.fireEvent ) {
elem.fireEvent("on"+type);
}
},
// Safe object type checking
is: function( type, obj ) {
return QUnit.objectType( obj ) == type;
},
objectType: function( obj ) {
if (typeof obj === "undefined") {
return "undefined";
// consider: typeof null === object
}
if (obj === null) {
return "null";
}
var type = Object.prototype.toString.call( obj )
.match(/^\[object\s(.*)\]$/)[1] || '';
switch (type) {
case 'Number':
if (isNaN(obj)) {
return "nan";
} else {
return "number";
}
case 'String':
case 'Boolean':
case 'Array':
case 'Date':
case 'RegExp':
case 'Function':
return type.toLowerCase();
}
if (typeof obj === "object") {
return "object";
}
return undefined;
},
push: function(result, actual, expected, message) {
var details = {
result: result,
message: message,
actual: actual,
expected: expected
};
message = escapeHtml(message) || (result ? "okay" : "failed");
message = '<span class="test-message">' + message + "</span>";
expected = escapeHtml(QUnit.jsDump.parse(expected));
actual = escapeHtml(QUnit.jsDump.parse(actual));
var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
if (actual != expected) {
output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
}
if (!result) {
var source = sourceFromStacktrace();
if (source) {
details.source = source;
output += '<tr class="test-source"><th>Source: </th><td><pre>' + escapeHtml(source) + '</pre></td></tr>';
}
}
output += "</table>";
QUnit.log(details);
config.current.assertions.push({
result: !!result,
message: output
});
},
url: function( params ) {
params = extend( extend( {}, QUnit.urlParams ), params );
var querystring = "?",
key;
for ( key in params ) {
querystring += encodeURIComponent( key ) + "=" +
encodeURIComponent( params[ key ] ) + "&";
}
return window.location.pathname + querystring.slice( 0, -1 );
},
// Logging callbacks; all receive a single argument with the listed properties
// run test/logs.html for any related changes
begin: function() {},
// done: { failed, passed, total, runtime }
done: function() {},
// log: { result, actual, expected, message }
log: function() {},
// testStart: { name }
testStart: function() {},
// testDone: { name, failed, passed, total }
testDone: function() {},
// moduleStart: { name }
moduleStart: function() {},
// moduleDone: { name, failed, passed, total }
moduleDone: function() {}
});
if ( typeof document === "undefined" || document.readyState === "complete" ) {
config.autorun = true;
}
addEvent(window, "load", function() {
QUnit.begin({});
// Initialize the config, saving the execution queue
var oldconfig = extend({}, config);
QUnit.init();
extend(config, oldconfig);
config.blocking = false;
var userAgent = id("qunit-userAgent");
if ( userAgent ) {
userAgent.innerHTML = navigator.userAgent;
}
var banner = id("qunit-header");
if ( banner ) {
banner.innerHTML = '<a href="' + QUnit.url({ filter: undefined }) + '"> ' + banner.innerHTML + '</a> ' +
'<label><input name="noglobals" type="checkbox"' + ( config.noglobals ? ' checked="checked"' : '' ) + '>noglobals</label>' +
'<label><input name="notrycatch" type="checkbox"' + ( config.notrycatch ? ' checked="checked"' : '' ) + '>notrycatch</label>';
addEvent( banner, "change", function( event ) {
var params = {};
params[ event.target.name ] = event.target.checked ? true : undefined;
window.location = QUnit.url( params );
});
}
var toolbar = id("qunit-testrunner-toolbar");
if ( toolbar ) {
var filter = document.createElement("input");
filter.type = "checkbox";
filter.id = "qunit-filter-pass";
addEvent( filter, "click", function() {
var ol = document.getElementById("qunit-tests");
if ( filter.checked ) {
ol.className = ol.className + " hidepass";
} else {
var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
ol.className = tmp.replace(/ hidepass /, " ");
}
if ( defined.sessionStorage ) {
if (filter.checked) {
sessionStorage.setItem("qunit-filter-passed-tests", "true");
} else {
sessionStorage.removeItem("qunit-filter-passed-tests");
}
}
});
if ( defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
filter.checked = true;
var ol = document.getElementById("qunit-tests");
ol.className = ol.className + " hidepass";
}
toolbar.appendChild( filter );
var label = document.createElement("label");
label.setAttribute("for", "qunit-filter-pass");
label.innerHTML = "Hide passed tests";
toolbar.appendChild( label );
}
var main = id('qunit-fixture');
if ( main ) {
config.fixture = main.innerHTML;
}
if (config.autostart) {
QUnit.start();
}
});
function done() {
config.autorun = true;
// Log the last module results
if ( config.currentModule ) {
QUnit.moduleDone( {
name: config.currentModule,
failed: config.moduleStats.bad,
passed: config.moduleStats.all - config.moduleStats.bad,
total: config.moduleStats.all
} );
}
var banner = id("qunit-banner"),
tests = id("qunit-tests"),
runtime = +new Date - config.started,
passed = config.stats.all - config.stats.bad,
html = [
'Tests completed in ',
runtime,
' milliseconds.<br/>',
'<span class="passed">',
passed,
'</span> tests of <span class="total">',
config.stats.all,
'</span> passed, <span class="failed">',
config.stats.bad,
'</span> failed.'
].join('');
if ( banner ) {
banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
}
if ( tests ) {
id( "qunit-testresult" ).innerHTML = html;
}
if ( typeof document !== "undefined" && document.title ) {
// show ✖ for good, ✔ for bad suite result in title
// use escape sequences in case file gets loaded with non-utf-8-charset
document.title = (config.stats.bad ? "\u2716" : "\u2714") + " " + document.title;
}
QUnit.done( {
failed: config.stats.bad,
passed: passed,
total: config.stats.all,
runtime: runtime
} );
}
function validTest( name ) {
var filter = config.filter,
run = false;
if ( !filter ) {
return true;
}
var not = filter.charAt( 0 ) === "!";
if ( not ) {
filter = filter.slice( 1 );
}
if ( name.indexOf( filter ) !== -1 ) {
return !not;
}
if ( not ) {
run = true;
}
return run;
}
// so far supports only Firefox, Chrome and Opera (buggy)
// could be extended in the future to use something like https://github.com/csnover/TraceKit
function sourceFromStacktrace() {
try {
throw new Error();
} catch ( e ) {
if (e.stacktrace) {
// Opera
return e.stacktrace.split("\n")[6];
} else if (e.stack) {
// Firefox, Chrome
return e.stack.split("\n")[4];
}
}
}
function escapeHtml(s) {
if (!s) {
return "";
}
s = s + "";
return s.replace(/[\&"<>\\]/g, function(s) {
switch(s) {
case "&": return "&amp;";
case "\\": return "\\\\";
case '"': return '\"';
case "<": return "&lt;";
case ">": return "&gt;";
default: return s;
}
});
}
function synchronize( callback ) {
config.queue.push( callback );
if ( config.autorun && !config.blocking ) {
process();
}
}
function process() {
var start = (new Date()).getTime();
while ( config.queue.length && !config.blocking ) {
if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
config.queue.shift()();
} else {
window.setTimeout( process, 13 );
break;
}
}
if (!config.blocking && !config.queue.length) {
done();
}
}
function saveGlobal() {
config.pollution = [];
if ( config.noglobals ) {
for ( var key in window ) {
config.pollution.push( key );
}
}
}
function checkPollution( name ) {
var old = config.pollution;
saveGlobal();
var newGlobals = diff( config.pollution, old );
if ( newGlobals.length > 0 ) {
ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
}
var deletedGlobals = diff( old, config.pollution );
if ( deletedGlobals.length > 0 ) {
ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
}
}
// returns a new Array with the elements that are in a but not in b
function diff( a, b ) {
var result = a.slice();
for ( var i = 0; i < result.length; i++ ) {
for ( var j = 0; j < b.length; j++ ) {
if ( result[i] === b[j] ) {
result.splice(i, 1);
i--;
break;
}
}
}
return result;
}
function fail(message, exception, callback) {
if ( typeof console !== "undefined" && console.error && console.warn ) {
console.error(message);
console.error(exception);
console.warn(callback.toString());
} else if ( window.opera && opera.postError ) {
opera.postError(message, exception, callback.toString);
}
}
function extend(a, b) {
for ( var prop in b ) {
if ( b[prop] === undefined ) {
delete a[prop];
} else {
a[prop] = b[prop];
}
}
return a;
}
function addEvent(elem, type, fn) {
if ( elem.addEventListener ) {
elem.addEventListener( type, fn, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, fn );
} else {
fn();
}
}
function id(name) {
return !!(typeof document !== "undefined" && document && document.getElementById) &&
document.getElementById( name );
}
// Test for equality any JavaScript type.
// Discussions and reference: http://philrathe.com/articles/equiv
// Test suites: http://philrathe.com/tests/equiv
// Author: Philippe Rathé <prathe@gmail.com>
QUnit.equiv = function () {
var innerEquiv; // the real equiv function
var callers = []; // stack to decide between skip/abort functions
var parents = []; // stack to avoiding loops from circular referencing
// Call the o related callback with the given arguments.
function bindCallbacks(o, callbacks, args) {
var prop = QUnit.objectType(o);
if (prop) {
if (QUnit.objectType(callbacks[prop]) === "function") {
return callbacks[prop].apply(callbacks, args);
} else {
return callbacks[prop]; // or undefined
}
}
}
var callbacks = function () {
// for string, boolean, number and null
function useStrictEquality(b, a) {
if (b instanceof a.constructor || a instanceof b.constructor) {
// to catch short annotaion VS 'new' annotation of a declaration
// e.g. var i = 1;
// var j = new Number(1);
return a == b;
} else {
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 QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf();
},
"regexp": function (b, a) {
return QUnit.objectType(b) === "regexp" &&
a.source === b.source && // the regex itself
a.global === b.global && // and its modifers (gmi) ...
a.ignoreCase === b.ignoreCase &&
a.multiline === b.multiline;
},
// - skip when the property is a method of an instance (OOP)
// - abort otherwise,
// initial === would have catch identical references anyway
"function": function () {
var caller = callers[callers.length - 1];
return caller !== Object &&
typeof caller !== "undefined";
},
"array": function (b, a) {
var i, j, loop;
var len;
// b could be an object literal here
if ( ! (QUnit.objectType(b) === "array")) {
return false;
}
len = a.length;
if (len !== b.length) { // safe and faster
return false;
}
//track reference to avoid circular references
parents.push(a);
for (i = 0; i < len; i++) {
loop = false;
for(j=0;j<parents.length;j++){
if(parents[j] === a[i]){
loop = true;//dont rewalk array
}
}
if (!loop && ! innerEquiv(a[i], b[i])) {
parents.pop();
return false;
}
}
parents.pop();
return true;
},
"object": function (b, a) {
var i, j, loop;
var eq = true; // unless we can proove it
var aProperties = [], bProperties = []; // collection of strings
// comparing constructors is more strict than using instanceof
if ( a.constructor !== b.constructor) {
return false;
}
// stack constructor before traversing properties
callers.push(a.constructor);
//track reference to avoid circular references
parents.push(a);
for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
loop = false;
for(j=0;j<parents.length;j++){
if(parents[j] === a[i])
loop = true; //don't go down the same path twice
}
aProperties.push(i); // collect a's properties
if (!loop && ! innerEquiv(a[i], b[i])) {
eq = false;
break;
}
}
callers.pop(); // unstack, we are done
parents.pop();
for (i in b) {
bProperties.push(i); // collect b's properties
}
// Ensures identical properties name
return eq && innerEquiv(aProperties.sort(), bProperties.sort());
}
};
}();
innerEquiv = function () { // can take multiple arguments
var args = Array.prototype.slice.apply(arguments);
if (args.length < 2) {
return true; // end transition
}
return (function (a, b) {
if (a === b) {
return true; // catch the most you can
} else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) {
return false; // don't lose time with error prone cases
} else {
return bindCallbacks(a, callbacks, [b, a]);
}
// apply transition with (1..n) arguments
})(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
};
return innerEquiv;
}();
/**
* jsDump
* Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
* Date: 5/15/2008
* @projectDescription Advanced and extensible data dumping for Javascript.
* @version 1.0.0
* @author Ariel Flesler
* @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
*/
QUnit.jsDump = (function() {
function quote( str ) {
return '"' + str.toString().replace(/"/g, '\\"') + '"';
};
function literal( o ) {
return o + '';
};
function join( pre, arr, post ) {
var s = jsDump.separator(),
base = jsDump.indent(),
inner = jsDump.indent(1);
if ( arr.join )
arr = arr.join( ',' + s + inner );
if ( !arr )
return pre + post;
return [ pre, inner + arr, base + post ].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 reName = /^function (\w+)/;
var jsDump = {
parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
var parser = this.parsers[ type || this.typeOf(obj) ];
type = typeof parser;
return type == 'function' ? parser.call( this, obj ) :
type == 'string' ? parser :
this.parsers.error;
},
typeOf:function( obj ) {
var type;
if ( obj === null ) {
type = "null";
} else if (typeof obj === "undefined") {
type = "undefined";
} else if (QUnit.is("RegExp", obj)) {
type = "regexp";
} else if (QUnit.is("Date", obj)) {
type = "date";
} else if (QUnit.is("Function", obj)) {
type = "function";
} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
type = "window";
} else if (obj.nodeType === 9) {
type = "document";
} else if (obj.nodeType) {
type = "node";
} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
type = "array";
} else {
type = typeof obj;
}
return type;
},
separator:function() {
return this.multiline ? this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
},
indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
if ( !this.multiline )
return '';
var chr = this.indentChar;
if ( this.HTML )
chr = chr.replace(/\t/g,' ').replace(/ /g,'&nbsp;');
return Array( this._depth_ + (extra||0) ).join(chr);
},
up:function( a ) {
this._depth_ += a || 1;
},
down:function( a ) {
this._depth_ -= a || 1;
},
setParser:function( name, parser ) {
this.parsers[name] = parser;
},
// The next 3 are exposed so you can use them
quote:quote,
literal:literal,
join:join,
//
_depth_: 1,
// This is the list of parsers, to modify them, use jsDump.setParser
parsers:{
window: '[Window]',
document: '[Document]',
error:'[ERROR]', //when no parser is found, shouldn't happen
unknown: '[Unknown]',
'null':'null',
'undefined':'undefined',
'function':function( fn ) {
var ret = 'function',
name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
if ( name )
ret += ' ' + name;
ret += '(';
ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
},
array: array,
nodelist: array,
arguments: array,
object:function( map ) {
var ret = [ ];
QUnit.jsDump.up();
for ( var key in map )
ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );
QUnit.jsDump.down();
return join( '{', ret, '}' );
},
node:function( node ) {
var open = QUnit.jsDump.HTML ? '&lt;' : '<',
close = QUnit.jsDump.HTML ? '&gt;' : '>';
var tag = node.nodeName.toLowerCase(),
ret = open + tag;
for ( var a in QUnit.jsDump.DOMAttrs ) {
var val = node[QUnit.jsDump.DOMAttrs[a]];
if ( val )
ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
}
return ret + close + open + '/' + tag + close;
},
functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
var l = fn.length;
if ( !l ) return '';
var args = Array(l);
while ( l-- )
args[l] = String.fromCharCode(97+l);//97 is 'a'
return ' ' + args.join(', ') + ' ';
},
key:quote, //object calls it internally, the key part of an item in a map
functionCode:'[code]', //function calls it internally, it's the content of the function
attribute:quote, //node calls it internally, it's an html attribute value
string:quote,
date:quote,
regexp:literal, //regex
number:literal,
'boolean':literal
},
DOMAttrs:{//attributes to dump from nodes, name=>realName
id:'id',
name:'name',
'class':'className'
},
HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
indentChar:' ',//indentation unit
multiline:true //if true, items in a collection, are separated by a \n, else just a space.
};
return jsDump;
})();
// from Sizzle.js
function getText( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += getText( elem.childNodes );
}
}
return ret;
};
/*
* Javascript Diff Algorithm
* By John Resig (http://ejohn.org/)
* Modified by Chu Alan "sprite"
*
* Released under the MIT license.
*
* More Info:
* http://ejohn.org/projects/javascript-diff-algorithm/
*
* Usage: QUnit.diff(expected, actual)
*
* QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
*/
QUnit.diff = (function() {
function diff(o, n){
var ns = new Object();
var os = new Object();
for (var i = 0; i < n.length; i++) {
if (ns[n[i]] == null)
ns[n[i]] = {
rows: new Array(),
o: null
};
ns[n[i]].rows.push(i);
}
for (var i = 0; i < o.length; i++) {
if (os[o[i]] == null)
os[o[i]] = {
rows: new Array(),
n: null
};
os[o[i]].rows.push(i);
}
for (var i in ns) {
if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
n[ns[i].rows[0]] = {
text: n[ns[i].rows[0]],
row: os[i].rows[0]
};
o[os[i].rows[0]] = {
text: o[os[i].rows[0]],
row: ns[i].rows[0]
};
}
}
for (var i = 0; i < n.length - 1; i++) {
if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
n[i + 1] == o[n[i].row + 1]) {
n[i + 1] = {
text: n[i + 1],
row: n[i].row + 1
};
o[n[i].row + 1] = {
text: o[n[i].row + 1],
row: i + 1
};
}
}
for (var i = n.length - 1; i > 0; i--) {
if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
n[i - 1] == o[n[i].row - 1]) {
n[i - 1] = {
text: n[i - 1],
row: n[i].row - 1
};
o[n[i].row - 1] = {
text: o[n[i].row - 1],
row: i - 1
};
}
}
return {
o: o,
n: n
};
}
return function(o, n){
o = o.replace(/\s+$/, '');
n = n.replace(/\s+$/, '');
var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
var str = "";
var oSpace = o.match(/\s+/g);
if (oSpace == null) {
oSpace = [" "];
}
else {
oSpace.push(" ");
}
var nSpace = n.match(/\s+/g);
if (nSpace == null) {
nSpace = [" "];
}
else {
nSpace.push(" ");
}
if (out.n.length == 0) {
for (var i = 0; i < out.o.length; i++) {
str += '<del>' + out.o[i] + oSpace[i] + "</del>";
}
}
else {
if (out.n[0].text == null) {
for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
str += '<del>' + out.o[n] + oSpace[n] + "</del>";
}
}
for (var i = 0; i < out.n.length; i++) {
if (out.n[i].text == null) {
str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
}
else {
var pre = "";
for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
}
str += " " + out.n[i].text + nSpace[i] + pre;
}
}
}
return str;
};
})();
})(this);
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript" src="same.js"></script>
<script>
var logs = ["begin", "testStart", "testDone", "log", "moduleStart", "moduleDone", "done"];
for (var i = 0; i < logs.length; i++) {
(function() {
var log = logs[i];
QUnit[log] = function() {
console.log(log, arguments);
};
})();
}
</script>
</head>
<body>
<div id="qunit-fixture">test markup</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript" src="same.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="logs.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
// TODO disable reordering for this suite!
var begin = 0,
moduleStart = 0,
moduleDone = 0,
testStart = 0,
testDone = 0,
log = 0,
moduleContext,
moduleDoneContext,
testContext,
testDoneContext,
logContext;
QUnit.begin = function() {
begin++;
};
QUnit.done = function() {
};
QUnit.moduleStart = function(context) {
moduleStart++;
moduleContext = context;
};
QUnit.moduleDone = function(context) {
moduleDone++;
moduleDoneContext = context;
};
QUnit.testStart = function(context) {
testStart++;
testContext = context;
};
QUnit.testDone = function(context) {
testDone++;
testDoneContext = context;
};
QUnit.log = function(context) {
log++;
logContext = context;
};
var logs = ["begin", "testStart", "testDone", "log", "moduleStart", "moduleDone", "done"];
for (var i = 0; i < logs.length; i++) {
(function() {
var log = logs[i],
logger = QUnit[log];
QUnit[log] = function() {
console.log(log, arguments);
logger.apply(this, arguments);
};
})();
}
module("logs1");
test("test1", 13, function() {
equal(begin, 1);
equal(moduleStart, 1);
equal(testStart, 1);
equal(testDone, 0);
equal(moduleDone, 0);
deepEqual(logContext, {
result: true,
message: undefined,
actual: 0,
expected: 0
});
equal("foo", "foo", "msg");
deepEqual(logContext, {
result: true,
message: "msg",
actual: "foo",
expected: "foo"
});
strictEqual(testDoneContext, undefined);
deepEqual(testContext, {
name: "test1"
});
strictEqual(moduleDoneContext, undefined);
deepEqual(moduleContext, {
name: "logs1"
});
equal(log, 12);
});
test("test2", 10, function() {
equal(begin, 1);
equal(moduleStart, 1);
equal(testStart, 2);
equal(testDone, 1);
equal(moduleDone, 0);
deepEqual(testDoneContext, {
name: "test1",
failed: 0,
passed: 13,
total: 13
});
deepEqual(testContext, {
name: "test2"
});
strictEqual(moduleDoneContext, undefined);
deepEqual(moduleContext, {
name: "logs1"
});
equal(log, 22);
});
module("logs2");
test("test1", 9, function() {
equal(begin, 1);
equal(moduleStart, 2);
equal(testStart, 3);
equal(testDone, 2);
equal(moduleDone, 1);
deepEqual(testContext, {
name: "test1"
});
deepEqual(moduleDoneContext, {
name: "logs1",
failed: 0,
passed: 23,
total: 23
});
deepEqual(moduleContext, {
name: "logs2"
});
equal(log, 31);
});
test("test2", 8, function() {
equal(begin, 1);
equal(moduleStart, 2);
equal(testStart, 4);
equal(testDone, 3);
equal(moduleDone, 1);
deepEqual(testContext, {
name: "test2"
});
deepEqual(moduleContext, {
name: "logs2"
});
equal(log, 39);
});
module("equiv");
test("Primitive types and constants", function () {
equals(QUnit.equiv(null, null), true, "null");
equals(QUnit.equiv(null, {}), false, "null");
equals(QUnit.equiv(null, undefined), false, "null");
equals(QUnit.equiv(null, 0), false, "null");
equals(QUnit.equiv(null, false), false, "null");
equals(QUnit.equiv(null, ''), false, "null");
equals(QUnit.equiv(null, []), false, "null");
equals(QUnit.equiv(undefined, undefined), true, "undefined");
equals(QUnit.equiv(undefined, null), false, "undefined");
equals(QUnit.equiv(undefined, 0), false, "undefined");
equals(QUnit.equiv(undefined, false), false, "undefined");
equals(QUnit.equiv(undefined, {}), false, "undefined");
equals(QUnit.equiv(undefined, []), false, "undefined");
equals(QUnit.equiv(undefined, ""), false, "undefined");
// Nan usually doest not equal to Nan using the '==' operator.
// Only isNaN() is able to do it.
equals(QUnit.equiv(0/0, 0/0), true, "NaN"); // NaN VS NaN
equals(QUnit.equiv(1/0, 2/0), true, "Infinity"); // Infinity VS Infinity
equals(QUnit.equiv(-1/0, 2/0), false, "-Infinity, Infinity"); // -Infinity VS Infinity
equals(QUnit.equiv(-1/0, -2/0), true, "-Infinity, -Infinity"); // -Infinity VS -Infinity
equals(QUnit.equiv(0/0, 1/0), false, "NaN, Infinity"); // Nan VS Infinity
equals(QUnit.equiv(1/0, 0/0), false, "NaN, Infinity"); // Nan VS Infinity
equals(QUnit.equiv(0/0, null), false, "NaN");
equals(QUnit.equiv(0/0, undefined), false, "NaN");
equals(QUnit.equiv(0/0, 0), false, "NaN");
equals(QUnit.equiv(0/0, false), false, "NaN");
equals(QUnit.equiv(0/0, function () {}), false, "NaN");
equals(QUnit.equiv(1/0, null), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, undefined), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, 0), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, 1), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, false), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, true), false, "NaN, Infinity");
equals(QUnit.equiv(1/0, function () {}), false, "NaN, Infinity");
equals(QUnit.equiv(0, 0), true, "number");
equals(QUnit.equiv(0, 1), false, "number");
equals(QUnit.equiv(1, 0), false, "number");
equals(QUnit.equiv(1, 1), true, "number");
equals(QUnit.equiv(1.1, 1.1), true, "number");
equals(QUnit.equiv(0.0000005, 0.0000005), true, "number");
equals(QUnit.equiv(0, ''), false, "number");
equals(QUnit.equiv(0, '0'), false, "number");
equals(QUnit.equiv(1, '1'), false, "number");
equals(QUnit.equiv(0, false), false, "number");
equals(QUnit.equiv(1, true), false, "number");
equals(QUnit.equiv(true, true), true, "boolean");
equals(QUnit.equiv(true, false), false, "boolean");
equals(QUnit.equiv(false, true), false, "boolean");
equals(QUnit.equiv(false, 0), false, "boolean");
equals(QUnit.equiv(false, null), false, "boolean");
equals(QUnit.equiv(false, undefined), false, "boolean");
equals(QUnit.equiv(true, 1), false, "boolean");
equals(QUnit.equiv(true, null), false, "boolean");
equals(QUnit.equiv(true, undefined), false, "boolean");
equals(QUnit.equiv('', ''), true, "string");
equals(QUnit.equiv('a', 'a'), true, "string");
equals(QUnit.equiv("foobar", "foobar"), true, "string");
equals(QUnit.equiv("foobar", "foo"), false, "string");
equals(QUnit.equiv('', 0), false, "string");
equals(QUnit.equiv('', false), false, "string");
equals(QUnit.equiv('', null), false, "string");
equals(QUnit.equiv('', undefined), false, "string");
// Short annotation VS new annotation
equals(QUnit.equiv(0, new Number()), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Number(), 0), true, "short annotation VS new annotation");
equals(QUnit.equiv(1, new Number(1)), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Number(1), 1), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Number(0), 1), false, "short annotation VS new annotation");
equals(QUnit.equiv(0, new Number(1)), false, "short annotation VS new annotation");
equals(QUnit.equiv(new String(), ""), true, "short annotation VS new annotation");
equals(QUnit.equiv("", new String()), true, "short annotation VS new annotation");
equals(QUnit.equiv(new String("My String"), "My String"), true, "short annotation VS new annotation");
equals(QUnit.equiv("My String", new String("My String")), true, "short annotation VS new annotation");
equals(QUnit.equiv("Bad String", new String("My String")), false, "short annotation VS new annotation");
equals(QUnit.equiv(new String("Bad String"), "My String"), false, "short annotation VS new annotation");
equals(QUnit.equiv(false, new Boolean()), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Boolean(), false), true, "short annotation VS new annotation");
equals(QUnit.equiv(true, new Boolean(true)), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Boolean(true), true), true, "short annotation VS new annotation");
equals(QUnit.equiv(true, new Boolean(1)), true, "short annotation VS new annotation");
equals(QUnit.equiv(false, new Boolean(false)), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Boolean(false), false), true, "short annotation VS new annotation");
equals(QUnit.equiv(false, new Boolean(0)), true, "short annotation VS new annotation");
equals(QUnit.equiv(true, new Boolean(false)), false, "short annotation VS new annotation");
equals(QUnit.equiv(new Boolean(false), true), false, "short annotation VS new annotation");
equals(QUnit.equiv(new Object(), {}), true, "short annotation VS new annotation");
equals(QUnit.equiv({}, new Object()), true, "short annotation VS new annotation");
equals(QUnit.equiv(new Object(), {a:1}), false, "short annotation VS new annotation");
equals(QUnit.equiv({a:1}, new Object()), false, "short annotation VS new annotation");
equals(QUnit.equiv({a:undefined}, new Object()), false, "short annotation VS new annotation");
equals(QUnit.equiv(new Object(), {a:undefined}), false, "short annotation VS new annotation");
});
test("Objects Basics.", function() {
equals(QUnit.equiv({}, {}), true);
equals(QUnit.equiv({}, null), false);
equals(QUnit.equiv({}, undefined), false);
equals(QUnit.equiv({}, 0), false);
equals(QUnit.equiv({}, false), false);
// This test is a hard one, it is very important
// REASONS:
// 1) They are of the same type "object"
// 2) [] instanceof Object is true
// 3) Their properties are the same (doesn't exists)
equals(QUnit.equiv({}, []), false);
equals(QUnit.equiv({a:1}, {a:1}), true);
equals(QUnit.equiv({a:1}, {a:"1"}), false);
equals(QUnit.equiv({a:[]}, {a:[]}), true);
equals(QUnit.equiv({a:{}}, {a:null}), false);
equals(QUnit.equiv({a:1}, {}), false);
equals(QUnit.equiv({}, {a:1}), false);
// Hard ones
equals(QUnit.equiv({a:undefined}, {}), false);
equals(QUnit.equiv({}, {a:undefined}), false);
equals(QUnit.equiv(
{
a: [{ bar: undefined }]
},
{
a: [{ bat: undefined }]
}
), false);
});
test("Arrays Basics.", function() {
equals(QUnit.equiv([], []), true);
// May be a hard one, can invoke a crash at execution.
// because their types are both "object" but null isn't
// like a true object, it doesn't have any property at all.
equals(QUnit.equiv([], null), false);
equals(QUnit.equiv([], undefined), false);
equals(QUnit.equiv([], false), false);
equals(QUnit.equiv([], 0), false);
equals(QUnit.equiv([], ""), false);
// May be a hard one, but less hard
// than {} with [] (note the order)
equals(QUnit.equiv([], {}), false);
equals(QUnit.equiv([null],[]), false);
equals(QUnit.equiv([undefined],[]), false);
equals(QUnit.equiv([],[null]), false);
equals(QUnit.equiv([],[undefined]), false);
equals(QUnit.equiv([null],[undefined]), false);
equals(QUnit.equiv([[]],[[]]), true);
equals(QUnit.equiv([[],[],[]],[[],[],[]]), true);
equals(QUnit.equiv(
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]),
true);
equals(QUnit.equiv(
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // shorter
false);
equals(QUnit.equiv(
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
[[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // deepest element not an array
false);
// same multidimensional
equals(QUnit.equiv(
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,4,[
1,2,[
1,2,3,4,[
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]],
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,4,[
1,2,[
1,2,3,4,[
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]]),
true, "Multidimensional");
// different multidimensional
equals(QUnit.equiv(
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,4,[
1,2,[
1,2,3,4,[
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]],
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,4,[
1,2,[
'1',2,3,4,[ // string instead of number
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]]),
false, "Multidimensional");
// different multidimensional
equals(QUnit.equiv(
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,4,[
1,2,[
1,2,3,4,[
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]],
[1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,6,7,8,9, [
1,2,3,4,5,[
[6,7,8,9, [
[
1,2,3,4,[
2,3,[ // missing an element (4)
1,2,[
1,2,3,4,[
1,2,3,4,5,6,7,8,9,[
0
],1,2,3,4,5,6,7,8,9
],5,6,7,8,9
],4,5,6,7,8,9
],5,6,7,8,9
],5,6,7
]
]
]
]
]]]),
false, "Multidimensional");
});
test("Functions.", function() {
var f0 = function () {};
var f1 = function () {};
// f2 and f3 have the same code, formatted differently
var f2 = function () {var i = 0;};
var f3 = function () {
var i = 0 // this comment and no semicoma as difference
};
equals(QUnit.equiv(function() {}, function() {}), false, "Anonymous functions"); // exact source code
equals(QUnit.equiv(function() {}, function() {return true;}), false, "Anonymous functions");
equals(QUnit.equiv(f0, f0), true, "Function references"); // same references
equals(QUnit.equiv(f0, f1), false, "Function references"); // exact source code, different references
equals(QUnit.equiv(f2, f3), false, "Function references"); // equivalent source code, different references
equals(QUnit.equiv(f1, f2), false, "Function references"); // different source code, different references
equals(QUnit.equiv(function() {}, true), false);
equals(QUnit.equiv(function() {}, undefined), false);
equals(QUnit.equiv(function() {}, null), false);
equals(QUnit.equiv(function() {}, {}), false);
});
test("Date instances.", function() {
// Date, we don't need to test Date.parse() because it returns a number.
// Only test the Date instances by setting them a fix date.
// The date use is midnight January 1, 1970
var d1 = new Date();
d1.setTime(0); // fix the date
var d2 = new Date();
d2.setTime(0); // fix the date
var d3 = new Date(); // The very now
// Anyway their types differs, just in case the code fails in the order in which it deals with date
equals(QUnit.equiv(d1, 0), false); // d1.valueOf() returns 0, but d1 and 0 are different
// test same values date and different instances equality
equals(QUnit.equiv(d1, d2), true);
// test different date and different instances difference
equals(QUnit.equiv(d1, d3), false);
});
test("RegExp.", function() {
// Must test cases that imply those traps:
// var a = /./;
// a instanceof Object; // Oops
// a instanceof RegExp; // Oops
// typeof a === "function"; // Oops, false in IE and Opera, true in FF and Safari ("object")
// Tests same regex with same modifiers in different order
var r = /foo/;
var r5 = /foo/gim;
var r6 = /foo/gmi;
var r7 = /foo/igm;
var r8 = /foo/img;
var r9 = /foo/mig;
var r10 = /foo/mgi;
var ri1 = /foo/i;
var ri2 = /foo/i;
var rm1 = /foo/m;
var rm2 = /foo/m;
var rg1 = /foo/g;
var rg2 = /foo/g;
equals(QUnit.equiv(r5, r6), true, "Modifier order");
equals(QUnit.equiv(r5, r7), true, "Modifier order");
equals(QUnit.equiv(r5, r8), true, "Modifier order");
equals(QUnit.equiv(r5, r9), true, "Modifier order");
equals(QUnit.equiv(r5, r10), true, "Modifier order");
equals(QUnit.equiv(r, r5), false, "Modifier");
equals(QUnit.equiv(ri1, ri2), true, "Modifier");
equals(QUnit.equiv(r, ri1), false, "Modifier");
equals(QUnit.equiv(ri1, rm1), false, "Modifier");
equals(QUnit.equiv(r, rm1), false, "Modifier");
equals(QUnit.equiv(rm1, ri1), false, "Modifier");
equals(QUnit.equiv(rm1, rm2), true, "Modifier");
equals(QUnit.equiv(rg1, rm1), false, "Modifier");
equals(QUnit.equiv(rm1, rg1), false, "Modifier");
equals(QUnit.equiv(rg1, rg2), true, "Modifier");
// Different regex, same modifiers
var r11 = /[a-z]/gi;
var r13 = /[0-9]/gi; // oops! different
equals(QUnit.equiv(r11, r13), false, "Regex pattern");
var r14 = /0/ig;
var r15 = /"0"/ig; // oops! different
equals(QUnit.equiv(r14, r15), false, "Regex pattern");
var r1 = /[\n\r\u2028\u2029]/g;
var r2 = /[\n\r\u2028\u2029]/g;
var r3 = /[\n\r\u2028\u2028]/g; // differs from r1
var r4 = /[\n\r\u2028\u2029]/; // differs from r1
equals(QUnit.equiv(r1, r2), true, "Regex pattern");
equals(QUnit.equiv(r1, r3), false, "Regex pattern");
equals(QUnit.equiv(r1, r4), false, "Regex pattern");
// More complex regex
var regex1 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
var regex2 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
// regex 3 is different: '.' not escaped
var regex3 = "^[-_.a-z0-9]+@([-_a-z0-9]+.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
var r21 = new RegExp(regex1);
var r22 = new RegExp(regex2);
var r23 = new RegExp(regex3); // diff from r21, not same pattern
var r23a = new RegExp(regex3, "gi"); // diff from r23, not same modifier
var r24a = new RegExp(regex3, "ig"); // same as r23a
equals(QUnit.equiv(r21, r22), true, "Complex Regex");
equals(QUnit.equiv(r21, r23), false, "Complex Regex");
equals(QUnit.equiv(r23, r23a), false, "Complex Regex");
equals(QUnit.equiv(r23a, r24a), true, "Complex Regex");
// typeof r1 is "function" in some browsers and "object" in others so we must cover this test
var re = / /;
equals(QUnit.equiv(re, function () {}), false, "Regex internal");
equals(QUnit.equiv(re, {}), false, "Regex internal");
});
test("Complex Objects.", function() {
function fn1() {
return "fn1";
}
function fn2() {
return "fn2";
}
// Try to invert the order of some properties to make sure it is covered.
// It can failed when properties are compared between unsorted arrays.
equals(QUnit.equiv(
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
q: [],
p: 1/0,
o: 99
},
l: undefined,
m: null
}
},
d: 0,
i: true,
h: "false"
}
},
e: undefined,
g: "",
h: "h",
f: {},
i: []
},
{
a: 1,
b: null,
c: [{}],
d: {
b: false,
a: 3.14159,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
t: undefined,
u: 0,
s: [1,2,3],
v: {
w: {
x: {
z: null,
y: "Yahoo!"
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
i: true,
h: "false"
}
},
e: undefined,
g: "",
f: {},
h: "h",
i: []
}
), true);
equals(QUnit.equiv(
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
//r: "r", // different: missing a property
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
},
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
}
), false);
equals(QUnit.equiv(
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
},
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
//t: undefined, // different: missing a property with an undefined value
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
}
), false);
equals(QUnit.equiv(
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
},
{
a: 1,
b: null,
c: [{}],
d: {
a: 3.14159,
b: false,
c: {
d: 0,
e: fn1,
f: [[[]]],
g: {
j: {
k: {
n: {
r: "r",
s: [1,2,3],
t: undefined,
u: 0,
v: {
w: {
x: {
y: "Yahoo!",
z: null
}
}
}
},
o: 99,
p: 1/0,
q: {} // different was []
},
l: undefined,
m: null
}
},
h: "false",
i: true
}
},
e: undefined,
f: {},
g: "",
h: "h",
i: []
}
), false);
var same1 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3]],
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var same2 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3]],
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var diff1 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3,4]], // different: 4 was add to the array
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var diff2 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3]],
newprop: undefined, // different: newprop was added
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var diff3 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3]],
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ α" // different: missing last char
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var diff4 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,undefined,{}, [], [1,2,3]], // different: undefined instead of null
bar: undefined
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
var diff5 = {
a: [
"string", null, 0, "1", 1, {
prop: null,
foo: [1,2,null,{}, [], [1,2,3]],
bat: undefined // different: property name not "bar"
}, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
],
unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
b: "b",
c: fn1
};
equals(QUnit.equiv(same1, same2), true);
equals(QUnit.equiv(same2, same1), true);
equals(QUnit.equiv(same2, diff1), false);
equals(QUnit.equiv(diff1, same2), false);
equals(QUnit.equiv(same1, diff1), false);
equals(QUnit.equiv(same1, diff2), false);
equals(QUnit.equiv(same1, diff3), false);
equals(QUnit.equiv(same1, diff3), false);
equals(QUnit.equiv(same1, diff4), false);
equals(QUnit.equiv(same1, diff5), false);
equals(QUnit.equiv(diff5, diff1), false);
});
test("Complex Arrays.", function() {
function fn() {
}
equals(QUnit.equiv(
[1, 2, 3, true, {}, null, [
{
a: ["", '1', 0]
},
5, 6, 7
], "foo"],
[1, 2, 3, true, {}, null, [
{
a: ["", '1', 0]
},
5, 6, 7
], "foo"]),
true);
equals(QUnit.equiv(
[1, 2, 3, true, {}, null, [
{
a: ["", '1', 0]
},
5, 6, 7
], "foo"],
[1, 2, 3, true, {}, null, [
{
b: ["", '1', 0] // not same property name
},
5, 6, 7
], "foo"]),
false);
var a = [{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn,
f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
], [], [[[], "foo", null, {
n: 1/0,
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]];
equals(QUnit.equiv(a,
[{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn,
f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
], [], [[[], "foo", null, {
n: 1/0,
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]]), true);
equals(QUnit.equiv(a,
[{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn,
f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[2]]]], "3"], {}, 1/0 // different: [[[[[2]]]]] instead of [[[[[3]]]]]
], [], [[[], "foo", null, {
n: 1/0,
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]]), false);
equals(QUnit.equiv(a,
[{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn,
f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
], [], [[[], "foo", null, {
n: -1/0, // different, -Infinity instead of Infinity
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]]), false);
equals(QUnit.equiv(a,
[{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn,
f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
], [], [[[], "foo", { // different: null is missing
n: 1/0,
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]]), false);
equals(QUnit.equiv(a,
[{
b: fn,
c: false,
"do": "reserved word",
"for": {
ar: [3,5,9,"hey!", [], {
ar: [1,[
3,4,6,9, null, [], []
]],
e: fn
// different: missing property f: undefined
}]
},
e: 0.43445
}, 5, "string", 0, fn, false, null, undefined, 0, [
4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
], [], [[[], "foo", null, {
n: 1/0,
z: {
a: [3,4,5,6,"yep!", undefined, undefined],
b: {}
}
}, {}]]]), false);
});
test("Prototypal inheritance", function() {
function Gizmo(id) {
this.id = id;
}
function Hoozit(id) {
this.id = id;
}
Hoozit.prototype = new Gizmo();
var gizmo = new Gizmo("ok");
var hoozit = new Hoozit("ok");
// Try this test many times after test on instances that hold function
// to make sure that our code does not mess with last object constructor memoization.
equals(QUnit.equiv(function () {}, function () {}), false);
// Hoozit inherit from Gizmo
// hoozit instanceof Hoozit; // true
// hoozit instanceof Gizmo; // true
equals(QUnit.equiv(hoozit, gizmo), true);
Gizmo.prototype.bar = true; // not a function just in case we skip them
// Hoozit inherit from Gizmo
// They are equivalent
equals(QUnit.equiv(hoozit, gizmo), true);
// Make sure this is still true !important
// The reason for this is that I forgot to reset the last
// caller to where it were called from.
equals(QUnit.equiv(function () {}, function () {}), false);
// Make sure this is still true !important
equals(QUnit.equiv(hoozit, gizmo), true);
Hoozit.prototype.foo = true; // not a function just in case we skip them
// Gizmo does not inherit from Hoozit
// gizmo instanceof Gizmo; // true
// gizmo instanceof Hoozit; // false
// They are not equivalent
equals(QUnit.equiv(hoozit, gizmo), false);
// Make sure this is still true !important
equals(QUnit.equiv(function () {}, function () {}), false);
});
test("Instances", function() {
function A() {}
var a1 = new A();
var a2 = new A();
function B() {
this.fn = function () {};
}
var b1 = new B();
var b2 = new B();
equals(QUnit.equiv(a1, a2), true, "Same property, same constructor");
// b1.fn and b2.fn are functions but they are different references
// But we decided to skip function for instances.
equals(QUnit.equiv(b1, b2), true, "Same property, same constructor");
equals(QUnit.equiv(a1, b1), false, "Same properties but different constructor"); // failed
function Car(year) {
var privateVar = 0;
this.year = year;
this.isOld = function() {
return year > 10;
};
}
function Human(year) {
var privateVar = 1;
this.year = year;
this.isOld = function() {
return year > 80;
};
}
var car = new Car(30);
var carSame = new Car(30);
var carDiff = new Car(10);
var human = new Human(30);
var diff = {
year: 30
};
var same = {
year: 30,
isOld: function () {}
};
equals(QUnit.equiv(car, car), true);
equals(QUnit.equiv(car, carDiff), false);
equals(QUnit.equiv(car, carSame), true);
equals(QUnit.equiv(car, human), false);
});
test("Complex Instances Nesting (with function value in literals and/or in nested instances)", function() {
function A(fn) {
this.a = {};
this.fn = fn;
this.b = {a: []};
this.o = {};
this.fn1 = fn;
}
function B(fn) {
this.fn = fn;
this.fn1 = function () {};
this.a = new A(function () {});
}
function fnOutside() {
}
function C(fn) {
function fnInside() {
}
this.x = 10;
this.fn = fn;
this.fn1 = function () {};
this.fn2 = fnInside;
this.fn3 = {
a: true,
b: fnOutside // ok make reference to a function in all instances scope
};
this.o1 = {};
// This function will be ignored.
// Even if it is not visible for all instances (e.g. locked in a closures),
// it is from a property that makes part of an instance (e.g. from the C constructor)
this.b1 = new B(function () {});
this.b2 = new B({
x: {
b2: new B(function() {})
}
});
}
function D(fn) {
function fnInside() {
}
this.x = 10;
this.fn = fn;
this.fn1 = function () {};
this.fn2 = fnInside;
this.fn3 = {
a: true,
b: fnOutside, // ok make reference to a function in all instances scope
// This function won't be ingored.
// It isn't visible for all C insances
// and it is not in a property of an instance. (in an Object instances e.g. the object literal)
c: fnInside
};
this.o1 = {};
// This function will be ignored.
// Even if it is not visible for all instances (e.g. locked in a closures),
// it is from a property that makes part of an instance (e.g. from the C constructor)
this.b1 = new B(function () {});
this.b2 = new B({
x: {
b2: new B(function() {})
}
});
}
function E(fn) {
function fnInside() {
}
this.x = 10;
this.fn = fn;
this.fn1 = function () {};
this.fn2 = fnInside;
this.fn3 = {
a: true,
b: fnOutside // ok make reference to a function in all instances scope
};
this.o1 = {};
// This function will be ignored.
// Even if it is not visible for all instances (e.g. locked in a closures),
// it is from a property that makes part of an instance (e.g. from the C constructor)
this.b1 = new B(function () {});
this.b2 = new B({
x: {
b1: new B({a: function() {}}),
b2: new B(function() {})
}
});
}
var a1 = new A(function () {});
var a2 = new A(function () {});
equals(QUnit.equiv(a1, a2), true);
equals(QUnit.equiv(a1, a2), true); // different instances
var b1 = new B(function () {});
var b2 = new B(function () {});
equals(QUnit.equiv(b1, b2), true);
var c1 = new C(function () {});
var c2 = new C(function () {});
equals(QUnit.equiv(c1, c2), true);
var d1 = new D(function () {});
var d2 = new D(function () {});
equals(QUnit.equiv(d1, d2), false);
var e1 = new E(function () {});
var e2 = new E(function () {});
equals(QUnit.equiv(e1, e2), false);
});
test('object with references to self wont loop', function(){
var circularA = {
abc:null
}, circularB = {
abc:null
};
circularA.abc = circularA;
circularB.abc = circularB;
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
circularA.def = 1;
circularB.def = 1;
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
circularA.def = 1;
circularB.def = 0;
equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object (unambigous test)");
});
test('array with references to self wont loop', function(){
var circularA = [],
circularB = [];
circularA.push(circularA);
circularB.push(circularB);
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
circularA.push( 'abc' );
circularB.push( 'abc' );
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
circularA.push( 'hello' );
circularB.push( 'goodbye' );
equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on array (unambigous test)");
});
test('mixed object/array with references to self wont loop', function(){
var circularA = [{abc:null}],
circularB = [{abc:null}];
circularA[0].abc = circularA;
circularB[0].abc = circularB;
circularA.push(circularA);
circularB.push(circularB);
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
circularA[0].def = 1;
circularB[0].def = 1;
equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
circularA[0].def = 1;
circularB[0].def = 0;
equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object/array (unambigous test)");
});
test("Test that must be done at the end because they extend some primitive's prototype", function() {
// Try that a function looks like our regular expression.
// This tests if we check that a and b are really both instance of RegExp
Function.prototype.global = true;
Function.prototype.multiline = true;
Function.prototype.ignoreCase = false;
Function.prototype.source = "my regex";
var re = /my regex/gm;
equals(QUnit.equiv(re, function () {}), false, "A function that looks that a regex isn't a regex");
// This test will ensures it works in both ways, and ALSO especially that we can make differences
// between RegExp and Function constructor because typeof on a RegExpt instance is "function"
equals(QUnit.equiv(function () {}, re), false, "Same conversely, but ensures that function and regexp are distinct because their constructor are different");
});
test("module without setup/teardown (default)", function() {
expect(1);
ok(true);
});
test("expect in test", 3, function() {
ok(true);
ok(true);
ok(true);
});
test("expect in test", 1, function() {
ok(true);
});
module("setup test", {
setup: function() {
ok(true);
}
});
test("module with setup", function() {
expect(2);
ok(true);
});
test("module with setup, expect in test call", 2, function() {
ok(true);
});
var state;
module("setup/teardown test", {
setup: function() {
state = true;
ok(true);
},
teardown: function() {
ok(true);
}
});
test("module with setup/teardown", function() {
expect(3);
ok(true);
});
module("setup/teardown test 2");
test("module without setup/teardown", function() {
expect(1);
ok(true);
});
if (typeof setTimeout !== 'undefined') {
state = 'fail';
module("teardown and stop", {
teardown: function() {
equal(state, "done", "Test teardown.");
}
});
test("teardown must be called after test ended", function() {
expect(1);
stop();
setTimeout(function() {
state = "done";
start();
}, 13);
});
module("async setup test", {
setup: function() {
stop();
setTimeout(function(){
ok(true);
start();
}, 500);
}
});
asyncTest("module with async setup", function() {
expect(2);
ok(true);
start();
});
module("async teardown test", {
teardown: function() {
stop();
setTimeout(function(){
ok(true);
start();
}, 500);
}
});
asyncTest("module with async teardown", function() {
expect(2);
ok(true);
start();
});
module("asyncTest");
asyncTest("asyncTest", function() {
expect(2);
ok(true);
setTimeout(function() {
state = "done";
ok(true);
start();
}, 13);
});
asyncTest("asyncTest", 2, function() {
ok(true);
setTimeout(function() {
state = "done";
ok(true);
start();
}, 13);
});
test("sync", 2, function() {
stop();
setTimeout(function() {
ok(true);
start();
}, 13);
stop();
setTimeout(function() {
ok(true);
start();
}, 125);
});
}
module("save scope", {
setup: function() {
this.foo = "bar";
},
teardown: function() {
deepEqual(this.foo, "bar");
}
});
test("scope check", function() {
expect(2);
deepEqual(this.foo, "bar");
});
module("simple testEnvironment setup", {
foo: "bar",
bugid: "#5311" // example of meta-data
});
test("scope check", function() {
deepEqual(this.foo, "bar");
});
test("modify testEnvironment",function() {
this.foo="hamster";
});
test("testEnvironment reset for next test",function() {
deepEqual(this.foo, "bar");
});
module("testEnvironment with object", {
options:{
recipe:"soup",
ingredients:["hamster","onions"]
}
});
test("scope check", function() {
deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ;
});
test("modify testEnvironment",function() {
// since we do a shallow copy, the testEnvironment can be modified
this.options.ingredients.push("carrots");
});
test("testEnvironment reset for next test",function() {
deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ;
});
module("testEnvironment tests");
function makeurl() {
var testEnv = QUnit.current_testEnvironment;
var url = testEnv.url || 'http://example.com/search';
var q = testEnv.q || 'a search test';
return url + '?q='+encodeURIComponent(q);
}
test("makeurl working",function() {
equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global');
equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment');
});
module("testEnvironment with makeurl settings", {
url: 'http://google.com/',
q: 'another_search_test'
});
test("makeurl working with settings from testEnvironment", function() {
equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url');
});
test("each test can extend the module testEnvironment", {
q:'hamstersoup'
}, function() {
equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test');
});
module("jsDump");
test("jsDump output", function() {
equals( QUnit.jsDump.parse([1, 2]), "[\n 1,\n 2\n]" );
equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n \"top\": 5,\n \"left\": 0\n}" );
if (typeof document !== 'undefined' && document.getElementById("qunit-header")) {
equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" );
equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n <h1 id=\"qunit-header\"></h1>\n]" );
}
});
module("assertions");
test("raises",function() {
function CustomError( message ) {
this.message = message;
}
CustomError.prototype.toString = function() {
return this.message;
};
raises(
function() {
throw "error"
}
);
raises(
function() {
throw "error"
},
'raises with just a message, no expected'
);
raises(
function() {
throw new CustomError();
},
CustomError,
'raised error is an instance of CustomError'
);
raises(
function() {
throw new CustomError("some error description");
},
/description/,
"raised error message contains 'description'"
);
raises(
function() {
throw new CustomError("some error description");
},
function( err ) {
if ( (err instanceof CustomError) && /description/.test(err) ) {
return true;
}
},
"custom validation function"
);
});
if (typeof document !== "undefined") {
module("fixture");
test("setup", function() {
document.getElementById("qunit-fixture").innerHTML = "foobar";
});
test("basics", function() {
equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" );
});
}
module("custom assertions");
(function() {
function mod2(value, expected, message) {
var actual = value % 2;
QUnit.push(actual == expected, actual, expected, message);
}
test("mod2", function() {
mod2(2, 0, "2 % 2 == 0");
mod2(3, 1, "3 % 2 == 1");
})
})();
(function() {
var reset = QUnit.reset;
function afterTest() {
ok( false, "reset should not modify test status" );
}
module("reset");
test("reset runs assertions", function() {
QUnit.reset = function() {
afterTest();
reset.apply( this, arguments );
};
});
test("reset runs assertions2", function() {
QUnit.reset = reset;
});
})();
module("noglobals", {
teardown: function() {
delete window.badGlobalVariableIntroducedInTest;
}
});
test("let teardown clean up globals", function() {
// this test will always pass if run without ?noglobals=true
window.badGlobalVariableIntroducedInTest = true;
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment