Last active
August 29, 2015 14:13
-
-
Save dcasciotti/70b5f43083aed260436c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* Bootstrap v2.3.2 | |
* | |
* Copyright 2012 Twitter, Inc | |
* Licensed under the Apache License v2.0 | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Designed and built with all the love in the world @twitter by @mdo and @fat. | |
*/.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{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}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* Bootstrap.js by @fat & @mdo | |
* Copyright 2012 Twitter, Inc. | |
* http://www.apache.org/licenses/LICENSE-2.0.txt | |
*/ | |
!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(exports){ | |
crossfilter.version = "1.2.0"; | |
function crossfilter_identity(d) { | |
return d; | |
} | |
crossfilter.permute = permute; | |
function permute(array, index) { | |
for (var i = 0, n = index.length, copy = new Array(n); i < n; ++i) { | |
copy[i] = array[index[i]]; | |
} | |
return copy; | |
} | |
var bisect = crossfilter.bisect = bisect_by(crossfilter_identity); | |
bisect.by = bisect_by; | |
function bisect_by(f) { | |
// Locate the insertion point for x in a to maintain sorted order. The | |
// arguments lo and hi may be used to specify a subset of the array which | |
// should be considered; by default the entire array is used. If x is already | |
// present in a, the insertion point will be before (to the left of) any | |
// existing entries. The return value is suitable for use as the first | |
// argument to `array.splice` assuming that a is already sorted. | |
// | |
// The returned insertion point i partitions the array a into two halves so | |
// that all v < x for v in a[lo:i] for the left side and all v >= x for v in | |
// a[i:hi] for the right side. | |
function bisectLeft(a, x, lo, hi) { | |
while (lo < hi) { | |
var mid = lo + hi >>> 1; | |
if (f(a[mid]) < x) lo = mid + 1; | |
else hi = mid; | |
} | |
return lo; | |
} | |
// Similar to bisectLeft, but returns an insertion point which comes after (to | |
// the right of) any existing entries of x in a. | |
// | |
// The returned insertion point i partitions the array into two halves so that | |
// all v <= x for v in a[lo:i] for the left side and all v > x for v in | |
// a[i:hi] for the right side. | |
function bisectRight(a, x, lo, hi) { | |
while (lo < hi) { | |
var mid = lo + hi >>> 1; | |
if (x < f(a[mid])) hi = mid; | |
else lo = mid + 1; | |
} | |
return lo; | |
} | |
bisectRight.right = bisectRight; | |
bisectRight.left = bisectLeft; | |
return bisectRight; | |
} | |
var heap = crossfilter.heap = heap_by(crossfilter_identity); | |
heap.by = heap_by; | |
function heap_by(f) { | |
// Builds a binary heap within the specified array a[lo:hi]. The heap has the | |
// property such that the parent a[lo+i] is always less than or equal to its | |
// two children: a[lo+2*i+1] and a[lo+2*i+2]. | |
function heap(a, lo, hi) { | |
var n = hi - lo, | |
i = (n >>> 1) + 1; | |
while (--i > 0) sift(a, i, n, lo); | |
return a; | |
} | |
// Sorts the specified array a[lo:hi] in descending order, assuming it is | |
// already a heap. | |
function sort(a, lo, hi) { | |
var n = hi - lo, | |
t; | |
while (--n > 0) t = a[lo], a[lo] = a[lo + n], a[lo + n] = t, sift(a, 1, n, lo); | |
return a; | |
} | |
// Sifts the element a[lo+i-1] down the heap, where the heap is the contiguous | |
// slice of array a[lo:lo+n]. This method can also be used to update the heap | |
// incrementally, without incurring the full cost of reconstructing the heap. | |
function sift(a, i, n, lo) { | |
var d = a[--lo + i], | |
x = f(d), | |
child; | |
while ((child = i << 1) <= n) { | |
if (child < n && f(a[lo + child]) > f(a[lo + child + 1])) child++; | |
if (x <= f(a[lo + child])) break; | |
a[lo + i] = a[lo + child]; | |
i = child; | |
} | |
a[lo + i] = d; | |
} | |
heap.sort = sort; | |
return heap; | |
} | |
var heapselect = crossfilter.heapselect = heapselect_by(crossfilter_identity); | |
heapselect.by = heapselect_by; | |
function heapselect_by(f) { | |
var heap = heap_by(f); | |
// Returns a new array containing the top k elements in the array a[lo:hi]. | |
// The returned array is not sorted, but maintains the heap property. If k is | |
// greater than hi - lo, then fewer than k elements will be returned. The | |
// order of elements in a is unchanged by this operation. | |
function heapselect(a, lo, hi, k) { | |
var queue = new Array(k = Math.min(hi - lo, k)), | |
min, | |
i, | |
x, | |
d; | |
for (i = 0; i < k; ++i) queue[i] = a[lo++]; | |
heap(queue, 0, k); | |
if (lo < hi) { | |
min = f(queue[0]); | |
do { | |
if (x = f(d = a[lo]) > min) { | |
queue[0] = d; | |
min = f(heap(queue, 0, k)[0]); | |
} | |
} while (++lo < hi); | |
} | |
return queue; | |
} | |
return heapselect; | |
} | |
var insertionsort = crossfilter.insertionsort = insertionsort_by(crossfilter_identity); | |
insertionsort.by = insertionsort_by; | |
function insertionsort_by(f) { | |
function insertionsort(a, lo, hi) { | |
for (var i = lo + 1; i < hi; ++i) { | |
for (var j = i, t = a[i], x = f(t); j > lo && f(a[j - 1]) > x; --j) { | |
a[j] = a[j - 1]; | |
} | |
a[j] = t; | |
} | |
return a; | |
} | |
return insertionsort; | |
} | |
// Algorithm designed by Vladimir Yaroslavskiy. | |
// Implementation based on the Dart project; see lib/dart/LICENSE for details. | |
var quicksort = crossfilter.quicksort = quicksort_by(crossfilter_identity); | |
quicksort.by = quicksort_by; | |
function quicksort_by(f) { | |
var insertionsort = insertionsort_by(f); | |
function sort(a, lo, hi) { | |
return (hi - lo < quicksort_sizeThreshold | |
? insertionsort | |
: quicksort)(a, lo, hi); | |
} | |
function quicksort(a, lo, hi) { | |
// Compute the two pivots by looking at 5 elements. | |
var sixth = (hi - lo) / 6 | 0, | |
i1 = lo + sixth, | |
i5 = hi - 1 - sixth, | |
i3 = lo + hi - 1 >> 1, // The midpoint. | |
i2 = i3 - sixth, | |
i4 = i3 + sixth; | |
var e1 = a[i1], x1 = f(e1), | |
e2 = a[i2], x2 = f(e2), | |
e3 = a[i3], x3 = f(e3), | |
e4 = a[i4], x4 = f(e4), | |
e5 = a[i5], x5 = f(e5); | |
var t; | |
// Sort the selected 5 elements using a sorting network. | |
if (x1 > x2) t = e1, e1 = e2, e2 = t, t = x1, x1 = x2, x2 = t; | |
if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; | |
if (x1 > x3) t = e1, e1 = e3, e3 = t, t = x1, x1 = x3, x3 = t; | |
if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; | |
if (x1 > x4) t = e1, e1 = e4, e4 = t, t = x1, x1 = x4, x4 = t; | |
if (x3 > x4) t = e3, e3 = e4, e4 = t, t = x3, x3 = x4, x4 = t; | |
if (x2 > x5) t = e2, e2 = e5, e5 = t, t = x2, x2 = x5, x5 = t; | |
if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; | |
if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; | |
var pivot1 = e2, pivotValue1 = x2, | |
pivot2 = e4, pivotValue2 = x4; | |
// e2 and e4 have been saved in the pivot variables. They will be written | |
// back, once the partitioning is finished. | |
a[i1] = e1; | |
a[i2] = a[lo]; | |
a[i3] = e3; | |
a[i4] = a[hi - 1]; | |
a[i5] = e5; | |
var less = lo + 1, // First element in the middle partition. | |
great = hi - 2; // Last element in the middle partition. | |
// Note that for value comparison, <, <=, >= and > coerce to a primitive via | |
// Object.prototype.valueOf; == and === do not, so in order to be consistent | |
// with natural order (such as for Date objects), we must do two compares. | |
var pivotsEqual = pivotValue1 <= pivotValue2 && pivotValue1 >= pivotValue2; | |
if (pivotsEqual) { | |
// Degenerated case where the partitioning becomes a dutch national flag | |
// problem. | |
// | |
// [ | < pivot | == pivot | unpartitioned | > pivot | ] | |
// ^ ^ ^ ^ ^ | |
// left less k great right | |
// | |
// a[left] and a[right] are undefined and are filled after the | |
// partitioning. | |
// | |
// Invariants: | |
// 1) for x in ]left, less[ : x < pivot. | |
// 2) for x in [less, k[ : x == pivot. | |
// 3) for x in ]great, right[ : x > pivot. | |
for (var k = less; k <= great; ++k) { | |
var ek = a[k], xk = f(ek); | |
if (xk < pivotValue1) { | |
if (k !== less) { | |
a[k] = a[less]; | |
a[less] = ek; | |
} | |
++less; | |
} else if (xk > pivotValue1) { | |
// Find the first element <= pivot in the range [k - 1, great] and | |
// put [:ek:] there. We know that such an element must exist: | |
// When k == less, then el3 (which is equal to pivot) lies in the | |
// interval. Otherwise a[k - 1] == pivot and the search stops at k-1. | |
// Note that in the latter case invariant 2 will be violated for a | |
// short amount of time. The invariant will be restored when the | |
// pivots are put into their final positions. | |
while (true) { | |
var greatValue = f(a[great]); | |
if (greatValue > pivotValue1) { | |
great--; | |
// This is the only location in the while-loop where a new | |
// iteration is started. | |
continue; | |
} else if (greatValue < pivotValue1) { | |
// Triple exchange. | |
a[k] = a[less]; | |
a[less++] = a[great]; | |
a[great--] = ek; | |
break; | |
} else { | |
a[k] = a[great]; | |
a[great--] = ek; | |
// Note: if great < k then we will exit the outer loop and fix | |
// invariant 2 (which we just violated). | |
break; | |
} | |
} | |
} | |
} | |
} else { | |
// We partition the list into three parts: | |
// 1. < pivot1 | |
// 2. >= pivot1 && <= pivot2 | |
// 3. > pivot2 | |
// | |
// During the loop we have: | |
// [ | < pivot1 | >= pivot1 && <= pivot2 | unpartitioned | > pivot2 | ] | |
// ^ ^ ^ ^ ^ | |
// left less k great right | |
// | |
// a[left] and a[right] are undefined and are filled after the | |
// partitioning. | |
// | |
// Invariants: | |
// 1. for x in ]left, less[ : x < pivot1 | |
// 2. for x in [less, k[ : pivot1 <= x && x <= pivot2 | |
// 3. for x in ]great, right[ : x > pivot2 | |
for (var k = less; k <= great; k++) { | |
var ek = a[k], xk = f(ek); | |
if (xk < pivotValue1) { | |
if (k !== less) { | |
a[k] = a[less]; | |
a[less] = ek; | |
} | |
++less; | |
} else { | |
if (xk > pivotValue2) { | |
while (true) { | |
var greatValue = f(a[great]); | |
if (greatValue > pivotValue2) { | |
great--; | |
if (great < k) break; | |
// This is the only location inside the loop where a new | |
// iteration is started. | |
continue; | |
} else { | |
// a[great] <= pivot2. | |
if (greatValue < pivotValue1) { | |
// Triple exchange. | |
a[k] = a[less]; | |
a[less++] = a[great]; | |
a[great--] = ek; | |
} else { | |
// a[great] >= pivot1. | |
a[k] = a[great]; | |
a[great--] = ek; | |
} | |
break; | |
} | |
} | |
} | |
} | |
} | |
} | |
// Move pivots into their final positions. | |
// We shrunk the list from both sides (a[left] and a[right] have | |
// meaningless values in them) and now we move elements from the first | |
// and third partition into these locations so that we can store the | |
// pivots. | |
a[lo] = a[less - 1]; | |
a[less - 1] = pivot1; | |
a[hi - 1] = a[great + 1]; | |
a[great + 1] = pivot2; | |
// The list is now partitioned into three partitions: | |
// [ < pivot1 | >= pivot1 && <= pivot2 | > pivot2 ] | |
// ^ ^ ^ ^ | |
// left less great right | |
// Recursive descent. (Don't include the pivot values.) | |
sort(a, lo, less - 1); | |
sort(a, great + 2, hi); | |
if (pivotsEqual) { | |
// All elements in the second partition are equal to the pivot. No | |
// need to sort them. | |
return a; | |
} | |
// In theory it should be enough to call _doSort recursively on the second | |
// partition. | |
// The Android source however removes the pivot elements from the recursive | |
// call if the second partition is too large (more than 2/3 of the list). | |
if (less < i1 && great > i5) { | |
var lessValue, greatValue; | |
while ((lessValue = f(a[less])) <= pivotValue1 && lessValue >= pivotValue1) ++less; | |
while ((greatValue = f(a[great])) <= pivotValue2 && greatValue >= pivotValue2) --great; | |
// Copy paste of the previous 3-way partitioning with adaptions. | |
// | |
// We partition the list into three parts: | |
// 1. == pivot1 | |
// 2. > pivot1 && < pivot2 | |
// 3. == pivot2 | |
// | |
// During the loop we have: | |
// [ == pivot1 | > pivot1 && < pivot2 | unpartitioned | == pivot2 ] | |
// ^ ^ ^ | |
// less k great | |
// | |
// Invariants: | |
// 1. for x in [ *, less[ : x == pivot1 | |
// 2. for x in [less, k[ : pivot1 < x && x < pivot2 | |
// 3. for x in ]great, * ] : x == pivot2 | |
for (var k = less; k <= great; k++) { | |
var ek = a[k], xk = f(ek); | |
if (xk <= pivotValue1 && xk >= pivotValue1) { | |
if (k !== less) { | |
a[k] = a[less]; | |
a[less] = ek; | |
} | |
less++; | |
} else { | |
if (xk <= pivotValue2 && xk >= pivotValue2) { | |
while (true) { | |
var greatValue = f(a[great]); | |
if (greatValue <= pivotValue2 && greatValue >= pivotValue2) { | |
great--; | |
if (great < k) break; | |
// This is the only location inside the loop where a new | |
// iteration is started. | |
continue; | |
} else { | |
// a[great] < pivot2. | |
if (greatValue < pivotValue1) { | |
// Triple exchange. | |
a[k] = a[less]; | |
a[less++] = a[great]; | |
a[great--] = ek; | |
} else { | |
// a[great] == pivot1. | |
a[k] = a[great]; | |
a[great--] = ek; | |
} | |
break; | |
} | |
} | |
} | |
} | |
} | |
} | |
// The second partition has now been cleared of pivot elements and looks | |
// as follows: | |
// [ * | > pivot1 && < pivot2 | * ] | |
// ^ ^ | |
// less great | |
// Sort the second partition using recursive descent. | |
// The second partition looks as follows: | |
// [ * | >= pivot1 && <= pivot2 | * ] | |
// ^ ^ | |
// less great | |
// Simply sort it by recursive descent. | |
return sort(a, less, great + 1); | |
} | |
return sort; | |
} | |
var quicksort_sizeThreshold = 32; | |
var crossfilter_array8 = crossfilter_arrayUntyped, | |
crossfilter_array16 = crossfilter_arrayUntyped, | |
crossfilter_array32 = crossfilter_arrayUntyped, | |
crossfilter_arrayLengthen = crossfilter_identity, | |
crossfilter_arrayWiden = crossfilter_identity; | |
if (typeof Uint8Array !== "undefined") { | |
crossfilter_array8 = function(n) { return new Uint8Array(n); }; | |
crossfilter_array16 = function(n) { return new Uint16Array(n); }; | |
crossfilter_array32 = function(n) { return new Uint32Array(n); }; | |
crossfilter_arrayLengthen = function(array, length) { | |
var copy = new array.constructor(length); | |
copy.set(array); | |
return copy; | |
}; | |
crossfilter_arrayWiden = function(array, width) { | |
var copy; | |
switch (width) { | |
case 16: copy = crossfilter_array16(array.length); break; | |
case 32: copy = crossfilter_array32(array.length); break; | |
default: throw new Error("invalid array width!"); | |
} | |
copy.set(array); | |
return copy; | |
}; | |
} | |
function crossfilter_arrayUntyped(n) { | |
return new Array(n); | |
} | |
function crossfilter_filterExact(bisect, value) { | |
return function(values) { | |
var n = values.length; | |
return [bisect.left(values, value, 0, n), bisect.right(values, value, 0, n)]; | |
}; | |
} | |
function crossfilter_filterRange(bisect, range) { | |
var min = range[0], | |
max = range[1]; | |
return function(values) { | |
var n = values.length; | |
return [bisect.left(values, min, 0, n), bisect.left(values, max, 0, n)]; | |
}; | |
} | |
function crossfilter_filterAll(values) { | |
return [0, values.length]; | |
} | |
function crossfilter_null() { | |
return null; | |
} | |
function crossfilter_zero() { | |
return 0; | |
} | |
function crossfilter_reduceIncrement(p) { | |
return p + 1; | |
} | |
function crossfilter_reduceDecrement(p) { | |
return p - 1; | |
} | |
function crossfilter_reduceAdd(f) { | |
return function(p, v) { | |
return p + +f(v); | |
}; | |
} | |
function crossfilter_reduceSubtract(f) { | |
return function(p, v) { | |
return p - f(v); | |
}; | |
} | |
exports.crossfilter = crossfilter; | |
function crossfilter() { | |
var crossfilter = { | |
add: add, | |
dimension: dimension, | |
groupAll: groupAll, | |
size: size | |
}; | |
var data = [], // the records | |
n = 0, // the number of records; data.length | |
m = 0, // a bit mask representing which dimensions are in use | |
M = 8, // number of dimensions that can fit in `filters` | |
filters = crossfilter_array8(0), // M bits per record; 1 is filtered out | |
filterListeners = [], // when the filters change | |
dataListeners = []; // when data is added | |
// Adds the specified new records to this crossfilter. | |
function add(newData) { | |
var n0 = n, | |
n1 = newData.length; | |
// If there's actually new data to add… | |
// Merge the new data into the existing data. | |
// Lengthen the filter bitset to handle the new records. | |
// Notify listeners (dimensions and groups) that new data is available. | |
if (n1) { | |
data = data.concat(newData); | |
filters = crossfilter_arrayLengthen(filters, n += n1); | |
dataListeners.forEach(function(l) { l(newData, n0, n1); }); | |
} | |
return crossfilter; | |
} | |
// Adds a new dimension with the specified value accessor function. | |
function dimension(value) { | |
var dimension = { | |
filter: filter, | |
filterExact: filterExact, | |
filterRange: filterRange, | |
filterFunction: filterFunction, | |
filterAll: filterAll, | |
top: top, | |
bottom: bottom, | |
group: group, | |
groupAll: groupAll, | |
remove: remove | |
}; | |
var one = ~m & -~m, // lowest unset bit as mask, e.g., 00001000 | |
zero = ~one, // inverted one, e.g., 11110111 | |
values, // sorted, cached array | |
index, // value rank ↦ object id | |
newValues, // temporary array storing newly-added values | |
newIndex, // temporary array storing newly-added index | |
sort = quicksort_by(function(i) { return newValues[i]; }), | |
refilter = crossfilter_filterAll, // for recomputing filter | |
refilterFunction, // the custom filter function in use | |
indexListeners = [], // when data is added | |
dimensionGroups = [], | |
lo0 = 0, | |
hi0 = 0; | |
// Updating a dimension is a two-stage process. First, we must update the | |
// associated filters for the newly-added records. Once all dimensions have | |
// updated their filters, the groups are notified to update. | |
dataListeners.unshift(preAdd); | |
dataListeners.push(postAdd); | |
// Incorporate any existing data into this dimension, and make sure that the | |
// filter bitset is wide enough to handle the new dimension. | |
m |= one; | |
if (M >= 32 ? !one : m & (1 << M) - 1) { | |
filters = crossfilter_arrayWiden(filters, M <<= 1); | |
} | |
preAdd(data, 0, n); | |
postAdd(data, 0, n); | |
// Incorporates the specified new records into this dimension. | |
// This function is responsible for updating filters, values, and index. | |
function preAdd(newData, n0, n1) { | |
// Permute new values into natural order using a sorted index. | |
newValues = newData.map(value); | |
newIndex = sort(crossfilter_range(n1), 0, n1); | |
newValues = permute(newValues, newIndex); | |
// Bisect newValues to determine which new records are selected. | |
var bounds = refilter(newValues), lo1 = bounds[0], hi1 = bounds[1], i, k; | |
if (refilterFunction) { | |
for (i = 0; i < n1; ++i) { | |
if (!refilterFunction(newValues[i], k = newIndex[i] + n0)) filters[k] |= one; | |
} | |
} else { | |
for (i = 0; i < lo1; ++i) filters[newIndex[i] + n0] |= one; | |
for (i = hi1; i < n1; ++i) filters[newIndex[i] + n0] |= one; | |
} | |
// If this dimension previously had no data, then we don't need to do the | |
// more expensive merge operation; use the new values and index as-is. | |
if (!n0) { | |
values = newValues; | |
index = newIndex; | |
lo0 = lo1; | |
hi0 = hi1; | |
return; | |
} | |
var oldValues = values, | |
oldIndex = index, | |
i0 = 0, | |
i1 = 0; | |
// Otherwise, create new arrays into which to merge new and old. | |
values = new Array(n); | |
index = crossfilter_index(n, n); | |
// Merge the old and new sorted values, and old and new index. | |
for (i = 0; i0 < n0 && i1 < n1; ++i) { | |
if (oldValues[i0] < newValues[i1]) { | |
values[i] = oldValues[i0]; | |
index[i] = oldIndex[i0++]; | |
} else { | |
values[i] = newValues[i1]; | |
index[i] = newIndex[i1++] + n0; | |
} | |
} | |
// Add any remaining old values. | |
for (; i0 < n0; ++i0, ++i) { | |
values[i] = oldValues[i0]; | |
index[i] = oldIndex[i0]; | |
} | |
// Add any remaining new values. | |
for (; i1 < n1; ++i1, ++i) { | |
values[i] = newValues[i1]; | |
index[i] = newIndex[i1] + n0; | |
} | |
// Bisect again to recompute lo0 and hi0. | |
bounds = refilter(values), lo0 = bounds[0], hi0 = bounds[1]; | |
} | |
// When all filters have updated, notify index listeners of the new values. | |
function postAdd(newData, n0, n1) { | |
indexListeners.forEach(function(l) { l(newValues, newIndex, n0, n1); }); | |
newValues = newIndex = null; | |
} | |
// Updates the selected values based on the specified bounds [lo, hi]. | |
// This implementation is used by all the public filter methods. | |
function filterIndexBounds(bounds) { | |
var lo1 = bounds[0], | |
hi1 = bounds[1]; | |
if (refilterFunction) { | |
refilterFunction = null; | |
filterIndexFunction(function(d, i) { return lo1 <= i && i < hi1; }); | |
lo0 = lo1; | |
hi0 = hi1; | |
return dimension; | |
} | |
var i, | |
j, | |
k, | |
added = [], | |
removed = []; | |
// Fast incremental update based on previous lo index. | |
if (lo1 < lo0) { | |
for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { | |
filters[k = index[i]] ^= one; | |
added.push(k); | |
} | |
} else if (lo1 > lo0) { | |
for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { | |
filters[k = index[i]] ^= one; | |
removed.push(k); | |
} | |
} | |
// Fast incremental update based on previous hi index. | |
if (hi1 > hi0) { | |
for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { | |
filters[k = index[i]] ^= one; | |
added.push(k); | |
} | |
} else if (hi1 < hi0) { | |
for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { | |
filters[k = index[i]] ^= one; | |
removed.push(k); | |
} | |
} | |
lo0 = lo1; | |
hi0 = hi1; | |
filterListeners.forEach(function(l) { l(one, added, removed); }); | |
return dimension; | |
} | |
// Filters this dimension using the specified range, value, or null. | |
// If the range is null, this is equivalent to filterAll. | |
// If the range is an array, this is equivalent to filterRange. | |
// Otherwise, this is equivalent to filterExact. | |
function filter(range) { | |
return range == null | |
? filterAll() : Array.isArray(range) | |
? filterRange(range) : typeof range === "function" | |
? filterFunction(range) | |
: filterExact(range); | |
} | |
// Filters this dimension to select the exact value. | |
function filterExact(value) { | |
return filterIndexBounds((refilter = crossfilter_filterExact(bisect, value))(values)); | |
} | |
// Filters this dimension to select the specified range [lo, hi]. | |
// The lower bound is inclusive, and the upper bound is exclusive. | |
function filterRange(range) { | |
return filterIndexBounds((refilter = crossfilter_filterRange(bisect, range))(values)); | |
} | |
// Clears any filters on this dimension. | |
function filterAll() { | |
return filterIndexBounds((refilter = crossfilter_filterAll)(values)); | |
} | |
// Filters this dimension using an arbitrary function. | |
function filterFunction(f) { | |
refilter = crossfilter_filterAll; | |
filterIndexFunction(refilterFunction = f); | |
lo0 = 0; | |
hi0 = n; | |
return dimension; | |
} | |
function filterIndexFunction(f) { | |
var i, | |
k, | |
x, | |
added = [], | |
removed = []; | |
for (i = 0; i < n; ++i) { | |
if (!(filters[k = index[i]] & one) ^ (x = f(values[i], k))) { | |
if (x) filters[k] &= zero, added.push(k); | |
else filters[k] |= one, removed.push(k); | |
} | |
} | |
filterListeners.forEach(function(l) { l(one, added, removed); }); | |
} | |
// Returns the top K selected records based on this dimension's order. | |
// Note: observes this dimension's filter, unlike group and groupAll. | |
function top(k) { | |
var array = [], | |
i = hi0, | |
j; | |
while (--i >= lo0 && k > 0) { | |
if (!filters[j = index[i]]) { | |
array.push(data[j]); | |
--k; | |
} | |
} | |
return array; | |
} | |
// Returns the bottom K selected records based on this dimension's order. | |
// Note: observes this dimension's filter, unlike group and groupAll. | |
function bottom(k) { | |
var array = [], | |
i = lo0, | |
j; | |
while (i < hi0 && k > 0) { | |
if (!filters[j = index[i]]) { | |
array.push(data[j]); | |
--k; | |
} | |
i++; | |
} | |
return array; | |
} | |
// Adds a new group to this dimension, using the specified key function. | |
function group(key) { | |
var group = { | |
top: top, | |
all: all, | |
reduce: reduce, | |
reduceCount: reduceCount, | |
reduceSum: reduceSum, | |
order: order, | |
orderNatural: orderNatural, | |
size: size, | |
remove: remove | |
}; | |
// Ensure that this group will be removed when the dimension is removed. | |
dimensionGroups.push(group); | |
var groups, // array of {key, value} | |
groupIndex, // object id ↦ group id | |
groupWidth = 8, | |
groupCapacity = crossfilter_capacity(groupWidth), | |
k = 0, // cardinality | |
select, | |
heap, | |
reduceAdd, | |
reduceRemove, | |
reduceInitial, | |
update = crossfilter_null, | |
reset = crossfilter_null, | |
resetNeeded = true; | |
if (arguments.length < 1) key = crossfilter_identity; | |
// The group listens to the crossfilter for when any dimension changes, so | |
// that it can update the associated reduce values. It must also listen to | |
// the parent dimension for when data is added, and compute new keys. | |
filterListeners.push(update); | |
indexListeners.push(add); | |
// Incorporate any existing data into the grouping. | |
add(values, index, 0, n); | |
// Incorporates the specified new values into this group. | |
// This function is responsible for updating groups and groupIndex. | |
function add(newValues, newIndex, n0, n1) { | |
var oldGroups = groups, | |
reIndex = crossfilter_index(k, groupCapacity), | |
add = reduceAdd, | |
initial = reduceInitial, | |
k0 = k, // old cardinality | |
i0 = 0, // index of old group | |
i1 = 0, // index of new record | |
j, // object id | |
g0, // old group | |
x0, // old key | |
x1, // new key | |
g, // group to add | |
x; // key of group to add | |
// If a reset is needed, we don't need to update the reduce values. | |
if (resetNeeded) add = initial = crossfilter_null; | |
// Reset the new groups (k is a lower bound). | |
// Also, make sure that groupIndex exists and is long enough. | |
groups = new Array(k), k = 0; | |
groupIndex = k0 > 1 ? crossfilter_arrayLengthen(groupIndex, n) : crossfilter_index(n, groupCapacity); | |
// Get the first old key (x0 of g0), if it exists. | |
if (k0) x0 = (g0 = oldGroups[0]).key; | |
// Find the first new key (x1), skipping NaN keys. | |
while (i1 < n1 && !((x1 = key(newValues[i1])) >= x1)) ++i1; | |
// While new keys remain… | |
while (i1 < n1) { | |
// Determine the lesser of the two current keys; new and old. | |
// If there are no old keys remaining, then always add the new key. | |
if (g0 && x0 <= x1) { | |
g = g0, x = x0; | |
// Record the new index of the old group. | |
reIndex[i0] = k; | |
// Retrieve the next old key. | |
if (g0 = oldGroups[++i0]) x0 = g0.key; | |
} else { | |
g = {key: x1, value: initial()}, x = x1; | |
} | |
// Add the lesser group. | |
groups[k] = g; | |
// Add any selected records belonging to the added group, while | |
// advancing the new key and populating the associated group index. | |
while (!(x1 > x)) { | |
groupIndex[j = newIndex[i1] + n0] = k; | |
if (!(filters[j] & zero)) g.value = add(g.value, data[j]); | |
if (++i1 >= n1) break; | |
x1 = key(newValues[i1]); | |
} | |
groupIncrement(); | |
} | |
// Add any remaining old groups that were greater than all new keys. | |
// No incremental reduce is needed; these groups have no new records. | |
// Also record the new index of the old group. | |
while (i0 < k0) { | |
groups[reIndex[i0] = k] = oldGroups[i0++]; | |
groupIncrement(); | |
} | |
// If we added any new groups before any old groups, | |
// update the group index of all the old records. | |
if (k > i0) for (i0 = 0; i0 < n0; ++i0) { | |
groupIndex[i0] = reIndex[groupIndex[i0]]; | |
} | |
// Modify the update and reset behavior based on the cardinality. | |
// If the cardinality is less than or equal to one, then the groupIndex | |
// is not needed. If the cardinality is zero, then there are no records | |
// and therefore no groups to update or reset. Note that we also must | |
// change the registered listener to point to the new method. | |
j = filterListeners.indexOf(update); | |
if (k > 1) { | |
update = updateMany; | |
reset = resetMany; | |
} else { | |
if (k === 1) { | |
update = updateOne; | |
reset = resetOne; | |
} else { | |
update = crossfilter_null; | |
reset = crossfilter_null; | |
} | |
groupIndex = null; | |
} | |
filterListeners[j] = update; | |
// Count the number of added groups, | |
// and widen the group index as needed. | |
function groupIncrement() { | |
if (++k === groupCapacity) { | |
reIndex = crossfilter_arrayWiden(reIndex, groupWidth <<= 1); | |
groupIndex = crossfilter_arrayWiden(groupIndex, groupWidth); | |
groupCapacity = crossfilter_capacity(groupWidth); | |
} | |
} | |
} | |
// Reduces the specified selected or deselected records. | |
// This function is only used when the cardinality is greater than 1. | |
function updateMany(filterOne, added, removed) { | |
if (filterOne === one || resetNeeded) return; | |
var i, | |
k, | |
n, | |
g; | |
// Add the added values. | |
for (i = 0, n = added.length; i < n; ++i) { | |
if (!(filters[k = added[i]] & zero)) { | |
g = groups[groupIndex[k]]; | |
g.value = reduceAdd(g.value, data[k]); | |
} | |
} | |
// Remove the removed values. | |
for (i = 0, n = removed.length; i < n; ++i) { | |
if ((filters[k = removed[i]] & zero) === filterOne) { | |
g = groups[groupIndex[k]]; | |
g.value = reduceRemove(g.value, data[k]); | |
} | |
} | |
} | |
// Reduces the specified selected or deselected records. | |
// This function is only used when the cardinality is 1. | |
function updateOne(filterOne, added, removed) { | |
if (filterOne === one || resetNeeded) return; | |
var i, | |
k, | |
n, | |
g = groups[0]; | |
// Add the added values. | |
for (i = 0, n = added.length; i < n; ++i) { | |
if (!(filters[k = added[i]] & zero)) { | |
g.value = reduceAdd(g.value, data[k]); | |
} | |
} | |
// Remove the removed values. | |
for (i = 0, n = removed.length; i < n; ++i) { | |
if ((filters[k = removed[i]] & zero) === filterOne) { | |
g.value = reduceRemove(g.value, data[k]); | |
} | |
} | |
} | |
// Recomputes the group reduce values from scratch. | |
// This function is only used when the cardinality is greater than 1. | |
function resetMany() { | |
var i, | |
g; | |
// Reset all group values. | |
for (i = 0; i < k; ++i) { | |
groups[i].value = reduceInitial(); | |
} | |
// Add any selected records. | |
for (i = 0; i < n; ++i) { | |
if (!(filters[i] & zero)) { | |
g = groups[groupIndex[i]]; | |
g.value = reduceAdd(g.value, data[i]); | |
} | |
} | |
} | |
// Recomputes the group reduce values from scratch. | |
// This function is only used when the cardinality is 1. | |
function resetOne() { | |
var i, | |
g = groups[0]; | |
// Reset the singleton group values. | |
g.value = reduceInitial(); | |
// Add any selected records. | |
for (i = 0; i < n; ++i) { | |
if (!(filters[i] & zero)) { | |
g.value = reduceAdd(g.value, data[i]); | |
} | |
} | |
} | |
// Returns the array of group values, in the dimension's natural order. | |
function all() { | |
if (resetNeeded) reset(), resetNeeded = false; | |
return groups; | |
} | |
// Returns a new array containing the top K group values, in reduce order. | |
function top(k) { | |
var top = select(all(), 0, groups.length, k); | |
return heap.sort(top, 0, top.length); | |
} | |
// Sets the reduce behavior for this group to use the specified functions. | |
// This method lazily recomputes the reduce values, waiting until needed. | |
function reduce(add, remove, initial) { | |
reduceAdd = add; | |
reduceRemove = remove; | |
reduceInitial = initial; | |
resetNeeded = true; | |
return group; | |
} | |
// A convenience method for reducing by count. | |
function reduceCount() { | |
return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); | |
} | |
// A convenience method for reducing by sum(value). | |
function reduceSum(value) { | |
return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); | |
} | |
// Sets the reduce order, using the specified accessor. | |
function order(value) { | |
select = heapselect_by(valueOf); | |
heap = heap_by(valueOf); | |
function valueOf(d) { return value(d.value); } | |
return group; | |
} | |
// A convenience method for natural ordering by reduce value. | |
function orderNatural() { | |
return order(crossfilter_identity); | |
} | |
// Returns the cardinality of this group, irrespective of any filters. | |
function size() { | |
return k; | |
} | |
// Removes this group and associated event listeners. | |
function remove() { | |
var i = filterListeners.indexOf(update); | |
if (i >= 0) filterListeners.splice(i, 1); | |
i = indexListeners.indexOf(add); | |
if (i >= 0) indexListeners.splice(i, 1); | |
return group; | |
} | |
return reduceCount().orderNatural(); | |
} | |
// A convenience function for generating a singleton group. | |
function groupAll() { | |
var g = group(crossfilter_null), all = g.all; | |
delete g.all; | |
delete g.top; | |
delete g.order; | |
delete g.orderNatural; | |
delete g.size; | |
g.value = function() { return all()[0].value; }; | |
return g; | |
} | |
function remove() { | |
dimensionGroups.forEach(function(group) { group.remove(); }); | |
var i = dataListeners.indexOf(preAdd); | |
if (i >= 0) dataListeners.splice(i, 1); | |
i = dataListeners.indexOf(postAdd); | |
if (i >= 0) dataListeners.splice(i, 1); | |
for (i = 0; i < n; ++i) filters[i] &= zero; | |
m &= zero; | |
return dimension; | |
} | |
return dimension; | |
} | |
// A convenience method for groupAll on a dummy dimension. | |
// This implementation can be optimized since it always has cardinality 1. | |
function groupAll() { | |
var group = { | |
reduce: reduce, | |
reduceCount: reduceCount, | |
reduceSum: reduceSum, | |
value: value, | |
remove: remove | |
}; | |
var reduceValue, | |
reduceAdd, | |
reduceRemove, | |
reduceInitial, | |
resetNeeded = true; | |
// The group listens to the crossfilter for when any dimension changes, so | |
// that it can update the reduce value. It must also listen to the parent | |
// dimension for when data is added. | |
filterListeners.push(update); | |
dataListeners.push(add); | |
// For consistency; actually a no-op since resetNeeded is true. | |
add(data, 0, n); | |
// Incorporates the specified new values into this group. | |
function add(newData, n0) { | |
var i; | |
if (resetNeeded) return; | |
// Add the added values. | |
for (i = n0; i < n; ++i) { | |
if (!filters[i]) { | |
reduceValue = reduceAdd(reduceValue, data[i]); | |
} | |
} | |
} | |
// Reduces the specified selected or deselected records. | |
function update(filterOne, added, removed) { | |
var i, | |
k, | |
n; | |
if (resetNeeded) return; | |
// Add the added values. | |
for (i = 0, n = added.length; i < n; ++i) { | |
if (!filters[k = added[i]]) { | |
reduceValue = reduceAdd(reduceValue, data[k]); | |
} | |
} | |
// Remove the removed values. | |
for (i = 0, n = removed.length; i < n; ++i) { | |
if (filters[k = removed[i]] === filterOne) { | |
reduceValue = reduceRemove(reduceValue, data[k]); | |
} | |
} | |
} | |
// Recomputes the group reduce value from scratch. | |
function reset() { | |
var i; | |
reduceValue = reduceInitial(); | |
for (i = 0; i < n; ++i) { | |
if (!filters[i]) { | |
reduceValue = reduceAdd(reduceValue, data[i]); | |
} | |
} | |
} | |
// Sets the reduce behavior for this group to use the specified functions. | |
// This method lazily recomputes the reduce value, waiting until needed. | |
function reduce(add, remove, initial) { | |
reduceAdd = add; | |
reduceRemove = remove; | |
reduceInitial = initial; | |
resetNeeded = true; | |
return group; | |
} | |
// A convenience method for reducing by count. | |
function reduceCount() { | |
return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); | |
} | |
// A convenience method for reducing by sum(value). | |
function reduceSum(value) { | |
return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); | |
} | |
// Returns the computed reduce value. | |
function value() { | |
if (resetNeeded) reset(), resetNeeded = false; | |
return reduceValue; | |
} | |
// Removes this group and associated event listeners. | |
function remove() { | |
var i = filterListeners.indexOf(update); | |
if (i >= 0) filterListeners.splice(i); | |
i = dataListeners.indexOf(add); | |
if (i >= 0) dataListeners.splice(i); | |
return group; | |
} | |
return reduceCount(); | |
} | |
// Returns the number of records in this crossfilter, irrespective of any filters. | |
function size() { | |
return n; | |
} | |
return arguments.length | |
? add(arguments[0]) | |
: crossfilter; | |
} | |
// Returns an array of size n, big enough to store ids up to m. | |
function crossfilter_index(n, m) { | |
return (m < 0x101 | |
? crossfilter_array8 : m < 0x10001 | |
? crossfilter_array16 | |
: crossfilter_array32)(n); | |
} | |
// Constructs a new array of size n, with sequential values from 0 to n - 1. | |
function crossfilter_range(n) { | |
var range = crossfilter_index(n, n); | |
for (var i = -1; ++i < n;) range[i] = i; | |
return range; | |
} | |
function crossfilter_capacity(w) { | |
return w === 8 | |
? 0x100 : w === 16 | |
? 0x10000 | |
: 0x100000000; | |
} | |
})(this); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.dc-chart { | |
float: left; | |
} | |
.dc-chart rect.bar { | |
stroke: none; | |
cursor: pointer; | |
} | |
.dc-chart rect.bar:hover { | |
fill-opacity: .5; | |
} | |
.dc-chart rect.stack1 { | |
stroke: none; | |
fill: red; | |
} | |
.dc-chart rect.stack2 { | |
stroke: none; | |
fill: green; | |
} | |
.dc-chart rect.deselected { | |
stroke: none; | |
fill: #ccc; | |
} | |
.dc-chart .sub .bar { | |
stroke: none; | |
fill: #ccc; | |
} | |
.dc-chart .pie-slice { | |
fill: white; | |
font-size: 12px; | |
cursor: pointer; | |
} | |
.dc-chart .pie-slice :hover { | |
fill-opacity: .8; | |
} | |
.dc-chart .selected path { | |
stroke-width: 3; | |
stroke: #ccc; | |
fill-opacity: 1; | |
} | |
.dc-chart .deselected path { | |
stroke: none; | |
fill-opacity: .5; | |
fill: #ccc; | |
} | |
.dc-chart .axis path, .axis line { | |
fill: none; | |
stroke: #000; | |
shape-rendering: crispEdges; | |
} | |
.dc-chart .axis text { | |
font: 10px sans-serif; | |
} | |
.dc-chart .grid-line { | |
fill: none; | |
stroke: #ccc; | |
opacity: .5; | |
shape-rendering: crispEdges; | |
} | |
.dc-chart .grid-line line { | |
fill: none; | |
stroke: #ccc; | |
opacity: .5; | |
shape-rendering: crispEdges; | |
} | |
.dc-chart .brush rect.background { | |
z-index: -999; | |
} | |
.dc-chart .brush rect.extent { | |
fill: steelblue; | |
fill-opacity: .125; | |
} | |
.dc-chart .brush .resize path { | |
fill: #eee; | |
stroke: #666; | |
} | |
.dc-chart path.line { | |
fill: none; | |
stroke-width: 1.5px; | |
} | |
.dc-chart circle.dot { | |
stroke: none; | |
} | |
.dc-chart g.dc-tooltip path { | |
fill: none; | |
stroke: grey; | |
stroke-opacity: .8; | |
} | |
.dc-chart path.area { | |
fill-opacity: .3; | |
stroke: none; | |
} | |
.dc-chart .node { | |
font-size: 0.7em; | |
cursor: pointer; | |
} | |
.dc-chart .node :hover { | |
fill-opacity: .8; | |
} | |
.dc-chart .selected circle { | |
stroke-width: 3; | |
stroke: #ccc; | |
fill-opacity: 1; | |
} | |
.dc-chart .deselected circle { | |
stroke: none; | |
fill-opacity: .5; | |
fill: #ccc; | |
} | |
.dc-chart .bubble { | |
stroke: none; | |
fill-opacity: 0.6; | |
} | |
.dc-data-count { | |
float: right; | |
margin-top: 15px; | |
margin-right: 15px; | |
} | |
.dc-data-count .filter-count { | |
color: #3182bd; | |
font-weight: bold; | |
} | |
.dc-data-count .total-count { | |
color: #3182bd; | |
font-weight: bold; | |
} | |
.dc-data-table { | |
} | |
.dc-chart g.state { | |
cursor: pointer; | |
} | |
.dc-chart g.state :hover { | |
fill-opacity: .8; | |
} | |
.dc-chart g.state path { | |
stroke: white; | |
} | |
.dc-chart g.selected path { | |
} | |
.dc-chart g.deselected path { | |
fill: grey; | |
} | |
.dc-chart g.selected text { | |
} | |
.dc-chart g.deselected text { | |
display: none; | |
} | |
.dc-chart g.county path { | |
stroke: white; | |
fill: none; | |
} | |
.dc-chart g.debug rect { | |
fill: blue; | |
fill-opacity: .2; | |
} | |
.dc-chart g.row rect { | |
fill-opacity: 0.8; | |
cursor: pointer; | |
} | |
.dc-chart g.row rect:hover { | |
fill-opacity: 0.6; | |
} | |
.dc-chart g.row text { | |
fill: white; | |
font-size: 12px; | |
cursor: pointer; | |
} | |
.dc-chart g text { | |
/* Makes it so the user can't accidentally click and select text that is meant as a label only */ | |
-webkit-user-select: none; /* Chrome/Safari */ | |
-moz-user-select: none; /* Firefox */ | |
-ms-user-select: none; /* IE10 */ | |
-o-user-select: none; | |
user-select: none; | |
pointer-events: none; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright 2012 the original author or authors. | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
dc = { | |
version: "1.5.0", | |
constants : { | |
CHART_CLASS: "dc-chart", | |
DEBUG_GROUP_CLASS: "debug", | |
STACK_CLASS: "stack", | |
DESELECTED_CLASS: "deselected", | |
SELECTED_CLASS: "selected", | |
NODE_INDEX_NAME: "__index__", | |
GROUP_INDEX_NAME: "__group_index__", | |
DEFAULT_CHART_GROUP: "__default_chart_group__", | |
EVENT_DELAY: 40, | |
NEGLIGIBLE_NUMBER: 1e-10 | |
}, | |
_renderlet : null | |
}; | |
dc.chartRegistry = function() { | |
// chartGroup:string => charts:array | |
var _chartMap = {}; | |
this.has = function(chart) { | |
for (var e in _chartMap) { | |
if (_chartMap[e].indexOf(chart) >= 0) | |
return true; | |
} | |
return false; | |
}; | |
function initializeChartGroup(group) { | |
if (!group) | |
group = dc.constants.DEFAULT_CHART_GROUP; | |
if (!_chartMap[group]) | |
_chartMap[group] = []; | |
return group; | |
} | |
this.register = function(chart, group) { | |
group = initializeChartGroup(group); | |
_chartMap[group].push(chart); | |
}; | |
this.clear = function() { | |
_chartMap = {}; | |
}; | |
this.list = function(group) { | |
group = initializeChartGroup(group); | |
return _chartMap[group]; | |
}; | |
return this; | |
}(); | |
dc.registerChart = function(chart, group) { | |
dc.chartRegistry.register(chart, group); | |
}; | |
dc.hasChart = function(chart) { | |
return dc.chartRegistry.has(chart); | |
}; | |
dc.deregisterAllCharts = function() { | |
dc.chartRegistry.clear(); | |
}; | |
dc.filterAll = function(group) { | |
var charts = dc.chartRegistry.list(group); | |
for (var i = 0; i < charts.length; ++i) { | |
charts[i].filterAll(); | |
} | |
}; | |
dc.renderAll = function(group) { | |
var charts = dc.chartRegistry.list(group); | |
for (var i = 0; i < charts.length; ++i) { | |
charts[i].render(); | |
} | |
if(dc._renderlet !== null) | |
dc._renderlet(group); | |
}; | |
dc.redrawAll = function(group) { | |
var charts = dc.chartRegistry.list(group); | |
for (var i = 0; i < charts.length; ++i) { | |
charts[i].redraw(); | |
} | |
if(dc._renderlet !== null) | |
dc._renderlet(group); | |
}; | |
dc.transition = function(selections, duration, callback) { | |
if (duration <= 0 || duration === undefined) | |
return selections; | |
var s = selections | |
.transition() | |
.duration(duration); | |
if (callback instanceof Function) { | |
callback(s); | |
} | |
return s; | |
}; | |
dc.units = {}; | |
dc.units.integers = function(s, e) { | |
return Math.abs(e - s); | |
}; | |
dc.units.ordinal = function(s, e, domain){ | |
return domain; | |
}; | |
dc.units.fp = {}; | |
dc.units.fp.precision= function(precision){ | |
var _f = function(s, e, domain){return Math.ceil(Math.abs((e-s)/_f.resolution));}; | |
_f.resolution = precision; | |
return _f; | |
}; | |
dc.round = {}; | |
dc.round.floor = function(n) { | |
return Math.floor(n); | |
}; | |
dc.round.ceil = function(n) { | |
return Math.ceil(n); | |
}; | |
dc.round.round = function(n) { | |
return Math.round(n); | |
}; | |
dc.override = function(obj, functionName, newFunction) { | |
var existingFunction = obj[functionName]; | |
obj["_" + functionName] = existingFunction; | |
obj[functionName] = newFunction; | |
}; | |
dc.renderlet = function(_){ | |
if(!arguments.length) return dc._renderlet; | |
dc._renderlet = _; | |
return dc; | |
}; | |
dc.instanceOfChart = function (o) { | |
return o instanceof Object && o.__dc_flag__; | |
}; | |
dc.errors = {}; | |
dc.errors.Exception = function(msg) { | |
var _msg = msg != null ? msg : "Unexpected internal error"; | |
this.message = _msg; | |
this.toString = function(){ | |
return _msg; | |
}; | |
}; | |
dc.errors.InvalidStateException = function() { | |
dc.errors.Exception.apply(this, arguments); | |
};dc.dateFormat = d3.time.format("%m/%d/%Y"); | |
dc.printers = {}; | |
dc.printers.filters = function (filters) { | |
var s = ""; | |
for (var i = 0; i < filters.length; ++i) { | |
if (i > 0) s += ", "; | |
s += dc.printers.filter(filters[i]); | |
} | |
return s; | |
}; | |
dc.printers.filter = function (filter) { | |
var s = ""; | |
if (filter) { | |
if (filter instanceof Array) { | |
if (filter.length >= 2) | |
s = "[" + dc.utils.printSingleValue(filter[0]) + " -> " + dc.utils.printSingleValue(filter[1]) + "]"; | |
else if (filter.length >= 1) | |
s = dc.utils.printSingleValue(filter[0]); | |
} else { | |
s = dc.utils.printSingleValue(filter) | |
} | |
} | |
return s; | |
}; | |
dc.utils = {}; | |
dc.utils.printSingleValue = function (filter) { | |
var s = "" + filter; | |
if (filter instanceof Date) | |
s = dc.dateFormat(filter); | |
else if (typeof(filter) == "string") | |
s = filter; | |
else if (typeof(filter) == "number") | |
s = Math.round(filter); | |
return s; | |
}; | |
dc.utils.add = function (l, r) { | |
if (typeof r === "string") | |
r = r.replace("%", "") | |
if (l instanceof Date) { | |
if (typeof r === "string") r = +r | |
var d = new Date(); | |
d.setTime(l.getTime()); | |
d.setDate(l.getDate() + r); | |
return d; | |
} else if (typeof r === "string") { | |
var percentage = (+r / 100); | |
return l > 0 ? l * (1 + percentage) : l * (1 - percentage); | |
} else { | |
return l + r; | |
} | |
}; | |
dc.utils.subtract = function (l, r) { | |
if (typeof r === "string") | |
r = r.replace("%", "") | |
if (l instanceof Date) { | |
if (typeof r === "string") r = +r | |
var d = new Date(); | |
d.setTime(l.getTime()); | |
d.setDate(l.getDate() - r); | |
return d; | |
} else if (typeof r === "string") { | |
var percentage = (+r / 100); | |
return l < 0 ? l * (1 + percentage) : l * (1 - percentage); | |
} else { | |
return l - r; | |
} | |
}; | |
dc.utils.GroupStack = function () { | |
var _dataLayers = []; | |
var _groups = []; | |
var _defaultAccessor; | |
function initializeDataLayer(i) { | |
if (!_dataLayers[i]) | |
_dataLayers[i] = []; | |
} | |
this.setDataPoint = function (layerIndex, pointIndex, data) { | |
initializeDataLayer(layerIndex); | |
_dataLayers[layerIndex][pointIndex] = data; | |
}; | |
this.getDataPoint = function (x, y) { | |
initializeDataLayer(x); | |
var dataPoint = _dataLayers[x][y]; | |
if (dataPoint == undefined) | |
dataPoint = 0; | |
return dataPoint; | |
}; | |
this.addGroup = function (group, accessor) { | |
if (!accessor) | |
accessor = _defaultAccessor; | |
_groups.push([group, accessor]); | |
return _groups.length - 1; | |
}; | |
this.getGroupByIndex = function (index) { | |
return _groups[index][0]; | |
}; | |
this.getAccessorByIndex = function (index) { | |
return _groups[index][1]; | |
}; | |
this.size = function () { | |
return _groups.length; | |
}; | |
this.clear = function () { | |
_dataLayers = []; | |
_groups = []; | |
}; | |
this.setDefaultAccessor = function (retriever) { | |
_defaultAccessor = retriever; | |
}; | |
this.getDataLayers = function () { | |
return _dataLayers; | |
}; | |
this.toLayers = function () { | |
var layers = []; | |
for (var i = 0; i < _dataLayers.length; ++i) { | |
var layer = {index: i, points: []}; | |
var dataPoints = _dataLayers[i]; | |
for (var j = 0; j < dataPoints.length; ++j) | |
layer.points.push(dataPoints[j]); | |
layers.push(layer); | |
} | |
return layers; | |
}; | |
}; | |
dc.utils.isNegligible = function (max) { | |
return max === undefined || (max < dc.constants.NEGLIGIBLE_NUMBER && max > -dc.constants.NEGLIGIBLE_NUMBER); | |
} | |
dc.utils.groupMax = function (group, accessor) { | |
var max = d3.max(group.all(), function (e) { | |
return accessor(e); | |
}); | |
if (dc.utils.isNegligible(max)) max = 0; | |
return max; | |
}; | |
dc.utils.groupMin = function (group, accessor) { | |
var min = d3.min(group.all(), function (e) { | |
return accessor(e); | |
}); | |
if (dc.utils.isNegligible(min)) min = 0; | |
return min; | |
}; | |
dc.utils.nameToId = function (name) { | |
return name.toLowerCase().replace(/[\s]/g, "_").replace(/[\.']/g, ""); | |
}; | |
dc.utils.appendOrSelect = function (parent, name) { | |
var element = parent.select(name); | |
if (element.empty()) element = parent.append(name); | |
return element; | |
}; | |
dc.utils.createLegendable = function (chart, group, index, accessor) { | |
var legendable = {name: chart.getGroupName(group, accessor), data: group}; | |
if (typeof chart.colors === 'function') legendable.color = chart.colors()(index); | |
return legendable; | |
}; | |
dc.utils.safeNumber = function(n){return isNaN(n)?0:n;}; | |
dc.events = { | |
current: null | |
}; | |
dc.events.trigger = function(closure, delay) { | |
if (!delay){ | |
closure(); | |
return; | |
} | |
dc.events.current = closure; | |
setTimeout(function() { | |
if (closure == dc.events.current) | |
closure(); | |
}, delay); | |
}; | |
dc.cumulative = {}; | |
dc.cumulative.Base = function() { | |
this._keyIndex = []; | |
this._map = {}; | |
this.sanitizeKey = function(key) { | |
key = key + ""; | |
return key; | |
}; | |
this.clear = function() { | |
this._keyIndex = []; | |
this._map = {}; | |
}; | |
this.size = function() { | |
return this._keyIndex.length; | |
}; | |
this.getValueByKey = function(key) { | |
key = this.sanitizeKey(key); | |
var value = this._map[key]; | |
return value; | |
}; | |
this.setValueByKey = function(key, value) { | |
key = this.sanitizeKey(key); | |
return this._map[key] = value; | |
}; | |
this.indexOfKey = function(key) { | |
key = this.sanitizeKey(key); | |
return this._keyIndex.indexOf(key); | |
}; | |
this.addToIndex = function(key) { | |
key = this.sanitizeKey(key); | |
this._keyIndex.push(key); | |
}; | |
this.getKeyByIndex = function(index) { | |
return this._keyIndex[index]; | |
}; | |
}; | |
dc.cumulative.Sum = function() { | |
dc.cumulative.Base.apply(this, arguments); | |
this.add = function(key, value) { | |
if (value == null) | |
value = 0; | |
if (this.getValueByKey(key) == null) { | |
this.addToIndex(key); | |
this.setValueByKey(key, value); | |
} else { | |
this.setValueByKey(key, this.getValueByKey(key) + value); | |
} | |
}; | |
this.minus = function(key, value) { | |
this.setValueByKey(key, this.getValueByKey(key) - value); | |
}; | |
this.cumulativeSum = function(key) { | |
var keyIndex = this.indexOfKey(key); | |
if (keyIndex < 0) return 0; | |
var cumulativeValue = 0; | |
for (var i = 0; i <= keyIndex; ++i) { | |
var k = this.getKeyByIndex(i); | |
cumulativeValue += this.getValueByKey(k); | |
} | |
return cumulativeValue; | |
}; | |
}; | |
dc.cumulative.Sum.prototype = new dc.cumulative.Base(); | |
dc.cumulative.CountUnique = function() { | |
dc.cumulative.Base.apply(this, arguments); | |
function hashSize(hash) { | |
var size = 0, key; | |
for (key in hash) { | |
if (hash.hasOwnProperty(key)) size++; | |
} | |
return size; | |
} | |
this.add = function(key, e) { | |
if (this.getValueByKey(key) == null) { | |
this.setValueByKey(key, {}); | |
this.addToIndex(key); | |
} | |
if (e != null) { | |
if (this.getValueByKey(key)[e] == null) | |
this.getValueByKey(key)[e] = 0; | |
this.getValueByKey(key)[e] += 1; | |
} | |
}; | |
this.minus = function(key, e) { | |
this.getValueByKey(key)[e] -= 1; | |
if (this.getValueByKey(key)[e] <= 0) | |
delete this.getValueByKey(key)[e]; | |
}; | |
this.count = function(key) { | |
return hashSize(this.getValueByKey(key)); | |
}; | |
this.cumulativeCount = function(key) { | |
var keyIndex = this.indexOfKey(key); | |
if (keyIndex < 0) return 0; | |
var cumulativeCount = 0; | |
for (var i = 0; i <= keyIndex; ++i) { | |
var k = this.getKeyByIndex(i); | |
cumulativeCount += this.count(k); | |
} | |
return cumulativeCount; | |
}; | |
}; | |
dc.cumulative.CountUnique.prototype = new dc.cumulative.Base(); | |
dc.baseChart = function (_chart) { | |
_chart.__dc_flag__ = true; | |
var _dimension; | |
var _group; | |
var _anchor; | |
var _root; | |
var _svg; | |
var _width = 200, _height = 200; | |
var _keyAccessor = function (d) { | |
return d.key; | |
}; | |
var _valueAccessor = function (d) { | |
return d.value; | |
}; | |
var _label = function (d) { | |
return d.key; | |
}; | |
var _renderLabel = false; | |
var _title = function (d) { | |
return d.key + ": " + d.value; | |
}; | |
var _renderTitle = false; | |
var _transitionDuration = 750; | |
var _filterPrinter = dc.printers.filters; | |
var _renderlets = []; | |
var _chartGroup = dc.constants.DEFAULT_CHART_GROUP; | |
var NULL_LISTENER = function (chart) { | |
}; | |
var _listeners = { | |
preRender: NULL_LISTENER, | |
postRender: NULL_LISTENER, | |
preRedraw: NULL_LISTENER, | |
postRedraw: NULL_LISTENER, | |
filtered: NULL_LISTENER, | |
zoomed: NULL_LISTENER | |
}; | |
var _legend; | |
var _filters = []; | |
var _filterHandler = function (dimension, filters) { | |
dimension.filter(null); | |
if (filters.length == 0) | |
dimension.filter(null); | |
else if (filters.length == 1) | |
dimension.filter(filters[0]); | |
else | |
dimension.filterFunction(function (d) { | |
return filters.indexOf(d) >= 0; | |
}); | |
return filters; | |
}; | |
_chart.width = function (w) { | |
if (!arguments.length) return _width; | |
_width = w; | |
return _chart; | |
}; | |
_chart.height = function (h) { | |
if (!arguments.length) return _height; | |
_height = h; | |
return _chart; | |
}; | |
_chart.dimension = function (d) { | |
if (!arguments.length) return _dimension; | |
_dimension = d; | |
_chart.expireCache(); | |
return _chart; | |
}; | |
_chart.group = function (g, name) { | |
if (!arguments.length) return _group; | |
_group = g; | |
_chart.expireCache(); | |
if (typeof name === 'string') _chart.setGroupName(_group, name); | |
return _chart; | |
}; | |
_chart.setGroupName = function (g, name, accessor) { | |
if (!g.__names__) g.__names__ = {}; | |
g.__names__[groupNameKey(accessor)] = name; | |
}; | |
function groupNameKey(accessor) { | |
var defaultKey = "default"; | |
return accessor ? (accessor == _chart.valueAccessor() ? defaultKey : accessor) : defaultKey; | |
} | |
_chart.getGroupName = function (g, accessor) { | |
if (!g.__names__) g.__names__ = {}; | |
return g.__names__[groupNameKey(accessor)]; | |
}; | |
_chart.orderedGroup = function () { | |
return _group.order(function (p) { | |
return p.key; | |
}); | |
}; | |
_chart.filterAll = function () { | |
return _chart.filter(null); | |
}; | |
_chart.dataSet = function () { | |
return _dimension != undefined && _group != undefined; | |
}; | |
_chart.select = function (s) { | |
return _root.select(s); | |
}; | |
_chart.selectAll = function (s) { | |
return _root ? _root.selectAll(s) : null; | |
}; | |
_chart.anchor = function (a, chartGroup) { | |
if (!arguments.length) return _anchor; | |
if (dc.instanceOfChart(a)) { | |
_anchor = a.anchor(); | |
_root = a.root(); | |
} else { | |
_anchor = a; | |
_root = d3.select(_anchor); | |
_root.classed(dc.constants.CHART_CLASS, true); | |
dc.registerChart(_chart, chartGroup); | |
} | |
_chartGroup = chartGroup; | |
return _chart; | |
}; | |
_chart.root = function (r) { | |
if (!arguments.length) return _root; | |
_root = r; | |
return _chart; | |
}; | |
_chart.svg = function (_) { | |
if (!arguments.length) return _svg; | |
_svg = _; | |
return _chart; | |
}; | |
_chart.resetSvg = function () { | |
_chart.select("svg").remove(); | |
return _chart.generateSvg(); | |
}; | |
_chart.generateSvg = function () { | |
_svg = _chart.root().append("svg") | |
.attr("width", _chart.width()) | |
.attr("height", _chart.height()); | |
return _svg; | |
}; | |
_chart.filterPrinter = function (_) { | |
if (!arguments.length) return _filterPrinter; | |
_filterPrinter = _; | |
return _chart; | |
}; | |
_chart.turnOnControls = function () { | |
if (_root) { | |
_chart.selectAll(".reset").style("display", null); | |
_chart.selectAll(".filter").text(_filterPrinter(_chart.filters())).style("display", null); | |
} | |
return _chart; | |
}; | |
_chart.turnOffControls = function () { | |
if (_root) { | |
_chart.selectAll(".reset").style("display", "none"); | |
_chart.selectAll(".filter").style("display", "none").text(_chart.filter()); | |
} | |
return _chart; | |
}; | |
_chart.transitionDuration = function (d) { | |
if (!arguments.length) return _transitionDuration; | |
_transitionDuration = d; | |
return _chart; | |
}; | |
_chart.render = function () { | |
_listeners.preRender(_chart); | |
if (_dimension == null) | |
throw new dc.errors.InvalidStateException("Mandatory attribute chart.dimension is missing on chart[" | |
+ _chart.anchor() + "]"); | |
if (_group == null) | |
throw new dc.errors.InvalidStateException("Mandatory attribute chart.group is missing on chart[" | |
+ _chart.anchor() + "]"); | |
var result = _chart.doRender(); | |
if (_legend) _legend.render(); | |
_chart.activateRenderlets("postRender"); | |
return result; | |
}; | |
_chart.activateRenderlets = function (event) { | |
if (_chart.transitionDuration() > 0 && _svg) { | |
_svg.transition().duration(_chart.transitionDuration()) | |
.each("end", function () { | |
runAllRenderlets(); | |
if (event) _listeners[event](_chart); | |
}); | |
} else { | |
runAllRenderlets(); | |
if (event) _listeners[event](_chart); | |
} | |
} | |
_chart.redraw = function () { | |
_listeners.preRedraw(_chart); | |
var result = _chart.doRedraw(); | |
_chart.activateRenderlets("postRedraw"); | |
return result; | |
}; | |
_chart.invokeFilteredListener = function (chart, f) { | |
if (f !== undefined) _listeners.filtered(_chart, f); | |
}; | |
_chart.invokeZoomedListener = function (chart) { | |
_listeners.zoomed(_chart); | |
}; | |
_chart.hasFilter = function (filter) { | |
if (!arguments.length) return _filters.length > 0; | |
return _filters.indexOf(filter) >= 0; | |
}; | |
function removeFilter(_) { | |
_filters.splice(_filters.indexOf(_), 1); | |
applyFilters(); | |
_chart.invokeFilteredListener(_chart, _); | |
} | |
function addFilter(_) { | |
_filters.push(_); | |
applyFilters(); | |
_chart.invokeFilteredListener(_chart, _); | |
} | |
function resetFilters() { | |
_filters = []; | |
applyFilters(); | |
_chart.invokeFilteredListener(_chart, null); | |
} | |
function applyFilters() { | |
if (_chart.dataSet() && _chart.dimension().filter != undefined) { | |
var fs = _filterHandler(_chart.dimension(), _filters); | |
_filters = fs ? fs : _filters; | |
} | |
} | |
_chart.filter = function (_) { | |
if (!arguments.length) return _filters.length > 0 ? _filters[0] : null; | |
if (_ == null) { | |
resetFilters(); | |
} else { | |
if (_chart.hasFilter(_)) | |
removeFilter(_); | |
else | |
addFilter(_); | |
} | |
if (_root != null && _chart.hasFilter()) { | |
_chart.turnOnControls(); | |
} else { | |
_chart.turnOffControls(); | |
} | |
return _chart; | |
}; | |
_chart.filters = function () { | |
return _filters; | |
}; | |
_chart.highlightSelected = function (e) { | |
d3.select(e).classed(dc.constants.SELECTED_CLASS, true); | |
d3.select(e).classed(dc.constants.DESELECTED_CLASS, false); | |
}; | |
_chart.fadeDeselected = function (e) { | |
d3.select(e).classed(dc.constants.SELECTED_CLASS, false); | |
d3.select(e).classed(dc.constants.DESELECTED_CLASS, true); | |
}; | |
_chart.resetHighlight = function (e) { | |
d3.select(e).classed(dc.constants.SELECTED_CLASS, false); | |
d3.select(e).classed(dc.constants.DESELECTED_CLASS, false); | |
}; | |
_chart.onClick = function (d) { | |
var filter = _chart.keyAccessor()(d); | |
dc.events.trigger(function () { | |
_chart.filter(filter); | |
dc.redrawAll(_chart.chartGroup()); | |
}); | |
}; | |
_chart.filterHandler = function (_) { | |
if (!arguments.length) return _filterHandler; | |
_filterHandler = _; | |
return _chart; | |
}; | |
// abstract function stub | |
_chart.doRender = function () { | |
// do nothing in base, should be overridden by sub-function | |
return _chart; | |
}; | |
_chart.doRedraw = function () { | |
// do nothing in base, should be overridden by sub-function | |
return _chart; | |
}; | |
_chart.legendables = function () { | |
// do nothing in base, should be overridden by sub-function | |
return []; | |
}; | |
_chart.legendHighlight = function (d) { | |
// do nothing in base, should be overridden by sub-function | |
}; | |
_chart.legendReset = function (d) { | |
// do nothing in base, should be overridden by sub-function | |
}; | |
_chart.keyAccessor = function (_) { | |
if (!arguments.length) return _keyAccessor; | |
_keyAccessor = _; | |
return _chart; | |
}; | |
_chart.valueAccessor = function (_) { | |
if (!arguments.length) return _valueAccessor; | |
_valueAccessor = _; | |
return _chart; | |
}; | |
_chart.label = function (_) { | |
if (!arguments.length) return _label; | |
_label = _; | |
_renderLabel = true; | |
return _chart; | |
}; | |
_chart.renderLabel = function (_) { | |
if (!arguments.length) return _renderLabel; | |
_renderLabel = _; | |
return _chart; | |
}; | |
_chart.title = function (_) { | |
if (!arguments.length) return _title; | |
_title = _; | |
_renderTitle = true; | |
return _chart; | |
}; | |
_chart.renderTitle = function (_) { | |
if (!arguments.length) return _renderTitle; | |
_renderTitle = _; | |
return _chart; | |
}; | |
_chart.renderlet = function (_) { | |
_renderlets.push(_); | |
return _chart; | |
}; | |
function runAllRenderlets() { | |
for (var i = 0; i < _renderlets.length; ++i) { | |
_renderlets[i](_chart); | |
} | |
} | |
_chart.chartGroup = function (_) { | |
if (!arguments.length) return _chartGroup; | |
_chartGroup = _; | |
return _chart; | |
}; | |
_chart.on = function (event, listener) { | |
_listeners[event] = listener; | |
return _chart; | |
}; | |
_chart.expireCache = function () { | |
// do nothing in base, should be overridden by sub-function | |
return _chart; | |
}; | |
_chart.legend = function (l) { | |
if (!arguments.length) return _legend; | |
_legend = l; | |
_legend.parent(_chart); | |
return _chart; | |
}; | |
return _chart; | |
}; | |
dc.marginable = function (_chart) { | |
var _margin = {top: 10, right: 50, bottom: 30, left: 30}; | |
_chart.margins = function (m) { | |
if (!arguments.length) return _margin; | |
_margin = m; | |
return _chart; | |
}; | |
_chart.effectiveWidth = function () { | |
return _chart.width() - _chart.margins().left - _chart.margins().right; | |
}; | |
_chart.effectiveHeight = function () { | |
return _chart.height() - _chart.margins().top - _chart.margins().bottom; | |
}; | |
return _chart; | |
};dc.coordinateGridChart = function (_chart) { | |
var GRID_LINE_CLASS = "grid-line"; | |
var HORIZONTAL_CLASS = "horizontal"; | |
var VERTICAL_CLASS = "vertical"; | |
_chart = dc.colorChart(dc.marginable(dc.baseChart(_chart))); | |
_chart.colors(d3.scale.category10()); | |
var _parent; | |
var _g; | |
var _chartBodyG; | |
var _x; | |
var _xOriginalDomain; | |
var _xAxis = d3.svg.axis(); | |
var _xUnits = dc.units.integers; | |
var _xAxisPadding = 0; | |
var _xElasticity = false; | |
var _y; | |
var _yAxis = d3.svg.axis(); | |
var _yAxisPadding = 0; | |
var _yElasticity = false; | |
var _brush = d3.svg.brush(); | |
var _brushOn = true; | |
var _round; | |
var _renderHorizontalGridLine = false; | |
var _renderVerticalGridLine = false; | |
var _refocused = false; | |
var _unitCount; | |
var _rangeChart; | |
var _focusChart; | |
var _mouseZoomable = false; | |
var _clipPadding = 0; | |
_chart.title(function (d) { | |
return d.data.key + ": " + d.data.value; | |
}); | |
_chart.rescale = function () { | |
_unitCount = null; | |
_chart.xUnitCount(); | |
} | |
_chart.rangeChart = function (_) { | |
if (!arguments.length) return _rangeChart; | |
_rangeChart = _; | |
_rangeChart.focusChart(_chart); | |
return _chart; | |
} | |
_chart.generateG = function (parent) { | |
if (parent == null) | |
_parent = _chart.svg(); | |
else | |
_parent = parent; | |
_g = _parent.append("g"); | |
_chartBodyG = _g.append("g").attr("class", "chart-body") | |
.attr("transform", "translate(" + _chart.margins().left + ", " + _chart.margins().top + ")") | |
.attr("clip-path", "url(#" + getClipPathId() + ")"); | |
return _g; | |
}; | |
_chart.g = function (_) { | |
if (!arguments.length) return _g; | |
_g = _; | |
return _chart; | |
}; | |
_chart.mouseZoomable = function (z) { | |
if (!arguments.length) return _mouseZoomable; | |
_mouseZoomable = z; | |
return _chart; | |
}; | |
_chart.chartBodyG = function (_) { | |
if (!arguments.length) return _chartBodyG; | |
_chartBodyG = _; | |
return _chart; | |
}; | |
_chart.x = function (_) { | |
if (!arguments.length) return _x; | |
_x = _; | |
_xOriginalDomain = _x.domain(); | |
return _chart; | |
}; | |
_chart.xOriginalDomain = function () { | |
return _xOriginalDomain; | |
}; | |
_chart.xUnits = function (_) { | |
if (!arguments.length) return _xUnits; | |
_xUnits = _; | |
return _chart; | |
}; | |
_chart.xAxis = function (_) { | |
if (!arguments.length) return _xAxis; | |
_xAxis = _; | |
return _chart; | |
}; | |
_chart.elasticX = function (_) { | |
if (!arguments.length) return _xElasticity; | |
_xElasticity = _; | |
return _chart; | |
}; | |
_chart.xAxisPadding = function (_) { | |
if (!arguments.length) return _xAxisPadding; | |
_xAxisPadding = _; | |
return _chart; | |
}; | |
_chart.xUnitCount = function () { | |
if (_unitCount == null) { | |
var units = _chart.xUnits()(_chart.x().domain()[0], _chart.x().domain()[1], _chart.x().domain()); | |
if (units instanceof Array) | |
_unitCount = units.length; | |
else | |
_unitCount = units; | |
} | |
return _unitCount; | |
}; | |
_chart.isOrdinal = function () { | |
return _chart.xUnits() === dc.units.ordinal; | |
}; | |
_chart.prepareOrdinalXAxis = function (count) { | |
if (!count) | |
count = _chart.xUnitCount(); | |
var range = []; | |
var currentPosition = 0; | |
var increment = _chart.xAxisLength() / count; | |
for (var i = 0; i < count; i++) { | |
range[i] = currentPosition; | |
currentPosition += increment; | |
} | |
_x.range(range); | |
}; | |
function prepareXAxis(g) { | |
if (_chart.elasticX() && !_chart.isOrdinal()) { | |
_x.domain([_chart.xAxisMin(), _chart.xAxisMax()]); | |
} | |
if (_chart.isOrdinal()) { | |
_chart.prepareOrdinalXAxis(); | |
} else { | |
_x.range([0, _chart.xAxisLength()]); | |
} | |
_xAxis = _xAxis.scale(_chart.x()).orient("bottom"); | |
renderVerticalGridLines(g); | |
} | |
_chart.renderXAxis = function (g) { | |
var axisXG = g.selectAll("g.x"); | |
if (axisXG.empty()) | |
axisXG = g.append("g") | |
.attr("class", "axis x") | |
.attr("transform", "translate(" + _chart.margins().left + "," + _chart.xAxisY() + ")"); | |
dc.transition(axisXG, _chart.transitionDuration()) | |
.call(_xAxis); | |
}; | |
function renderVerticalGridLines(g) { | |
var gridLineG = g.selectAll("g." + VERTICAL_CLASS); | |
if (_renderVerticalGridLine) { | |
if (gridLineG.empty()) | |
gridLineG = g.insert("g", ":first-child") | |
.attr("class", GRID_LINE_CLASS + " " + VERTICAL_CLASS) | |
.attr("transform", "translate(" + _chart.yAxisX() + "," + _chart.margins().top + ")"); | |
var ticks = _xAxis.tickValues() ? _xAxis.tickValues() : _x.ticks(_xAxis.ticks()[0]); | |
var lines = gridLineG.selectAll("line") | |
.data(ticks); | |
// enter | |
var linesGEnter = lines.enter() | |
.append("line") | |
.attr("x1", function (d) { | |
return _x(d); | |
}) | |
.attr("y1", _chart.xAxisY() - _chart.margins().top) | |
.attr("x2", function (d) { | |
return _x(d); | |
}) | |
.attr("y2", 0) | |
.attr("opacity", 0); | |
dc.transition(linesGEnter, _chart.transitionDuration()) | |
.attr("opacity", 1); | |
// update | |
dc.transition(lines, _chart.transitionDuration()) | |
.attr("x1", function (d) { | |
return _x(d); | |
}) | |
.attr("y1", _chart.xAxisY() - _chart.margins().top) | |
.attr("x2", function (d) { | |
return _x(d); | |
}) | |
.attr("y2", 0); | |
// exit | |
lines.exit().remove(); | |
} | |
else { | |
gridLineG.selectAll("line").remove() | |
} | |
} | |
_chart.xAxisY = function () { | |
return (_chart.height() - _chart.margins().bottom); | |
}; | |
_chart.xAxisLength = function () { | |
return _chart.effectiveWidth(); | |
}; | |
function prepareYAxis(g) { | |
if (_y == null || _chart.elasticY()) { | |
_y = d3.scale.linear(); | |
_y.domain([_chart.yAxisMin(), _chart.yAxisMax()]).rangeRound([_chart.yAxisHeight(), 0]); | |
} | |
_y.range([_chart.yAxisHeight(), 0]); | |
_yAxis = _yAxis.scale(_y).orient("left"); | |
renderHorizontalGridLines(g); | |
} | |
_chart.renderYAxis = function (g) { | |
var axisYG = g.selectAll("g.y"); | |
if (axisYG.empty()) | |
axisYG = g.append("g") | |
.attr("class", "axis y") | |
.attr("transform", "translate(" + _chart.yAxisX() + "," + _chart.margins().top + ")"); | |
dc.transition(axisYG, _chart.transitionDuration()) | |
.call(_yAxis); | |
}; | |
function renderHorizontalGridLines(g) { | |
var gridLineG = g.selectAll("g." + HORIZONTAL_CLASS); | |
if (_renderHorizontalGridLine) { | |
var ticks = _yAxis.tickValues() ? _yAxis.tickValues() : _y.ticks(_yAxis.ticks()[0]); | |
if (gridLineG.empty()) | |
gridLineG = g.insert("g", ":first-child") | |
.attr("class", GRID_LINE_CLASS + " " + HORIZONTAL_CLASS) | |
.attr("transform", "translate(" + _chart.yAxisX() + "," + _chart.margins().top + ")"); | |
var lines = gridLineG.selectAll("line") | |
.data(ticks); | |
// enter | |
var linesGEnter = lines.enter() | |
.append("line") | |
.attr("x1", 1) | |
.attr("y1", function (d) { | |
return _y(d); | |
}) | |
.attr("x2", _chart.xAxisLength()) | |
.attr("y2", function (d) { | |
return _y(d); | |
}) | |
.attr("opacity", 0); | |
dc.transition(linesGEnter, _chart.transitionDuration()) | |
.attr("opacity", 1); | |
// update | |
dc.transition(lines, _chart.transitionDuration()) | |
.attr("x1", 1) | |
.attr("y1", function (d) { | |
return _y(d); | |
}) | |
.attr("x2", _chart.xAxisLength()) | |
.attr("y2", function (d) { | |
return _y(d); | |
}); | |
// exit | |
lines.exit().remove(); | |
} | |
else { | |
gridLineG.selectAll("line").remove() | |
} | |
} | |
_chart.yAxisX = function () { | |
return _chart.margins().left; | |
}; | |
_chart.y = function (_) { | |
if (!arguments.length) return _y; | |
_y = _; | |
return _chart; | |
}; | |
_chart.yAxis = function (y) { | |
if (!arguments.length) return _yAxis; | |
_yAxis = y; | |
return _chart; | |
}; | |
_chart.elasticY = function (_) { | |
if (!arguments.length) return _yElasticity; | |
_yElasticity = _; | |
return _chart; | |
}; | |
_chart.renderHorizontalGridLines = function (_) { | |
if (!arguments.length) return _renderHorizontalGridLine; | |
_renderHorizontalGridLine = _; | |
return _chart; | |
}; | |
_chart.renderVerticalGridLines = function (_) { | |
if (!arguments.length) return _renderVerticalGridLine; | |
_renderVerticalGridLine = _; | |
return _chart; | |
}; | |
_chart.xAxisMin = function () { | |
var min = d3.min(_chart.group().all(), function (e) { | |
return _chart.keyAccessor()(e); | |
}); | |
return dc.utils.subtract(min, _xAxisPadding); | |
}; | |
_chart.xAxisMax = function () { | |
var max = d3.max(_chart.group().all(), function (e) { | |
return _chart.keyAccessor()(e); | |
}); | |
return dc.utils.add(max, _xAxisPadding); | |
}; | |
_chart.yAxisMin = function () { | |
var min = d3.min(_chart.group().all(), function (e) { | |
return _chart.valueAccessor()(e); | |
}); | |
min = dc.utils.subtract(min, _yAxisPadding); | |
return min; | |
}; | |
_chart.yAxisMax = function () { | |
var max = d3.max(_chart.group().all(), function (e) { | |
return _chart.valueAccessor()(e); | |
}); | |
max = dc.utils.add(max, _yAxisPadding); | |
return max; | |
}; | |
_chart.yAxisPadding = function (_) { | |
if (!arguments.length) return _yAxisPadding; | |
_yAxisPadding = _; | |
return _chart; | |
}; | |
_chart.yAxisHeight = function () { | |
return _chart.effectiveHeight(); | |
}; | |
_chart.round = function (_) { | |
if (!arguments.length) return _round; | |
_round = _; | |
return _chart; | |
}; | |
dc.override(_chart, "filter", function (_) { | |
if (!arguments.length) return _chart._filter(); | |
_chart._filter(_); | |
if (_) { | |
_chart.brush().extent(_); | |
} else { | |
_chart.brush().clear(); | |
} | |
return _chart; | |
}); | |
_chart.brush = function (_) { | |
if (!arguments.length) return _brush; | |
_brush = _; | |
return _chart; | |
}; | |
function brushHeight() { | |
return _chart.xAxisY() - _chart.margins().top; | |
} | |
_chart.renderBrush = function (g) { | |
if (_chart.isOrdinal()) | |
_brushOn = false; | |
if (_brushOn) { | |
_brush.on("brushstart", brushStart) | |
.on("brush", brushing) | |
.on("brushend", brushEnd); | |
var gBrush = g.append("g") | |
.attr("class", "brush") | |
.attr("transform", "translate(" + _chart.margins().left + "," + _chart.margins().top + ")") | |
.call(_brush.x(_chart.x())); | |
gBrush.selectAll("rect").attr("height", brushHeight()); | |
gBrush.selectAll(".resize").append("path").attr("d", _chart.resizeHandlePath); | |
if (_chart.hasFilter()) { | |
_chart.redrawBrush(g); | |
} | |
} | |
}; | |
function brushStart(p) { | |
} | |
_chart.extendBrush = function () { | |
var extent = _brush.extent(); | |
if (_chart.round()) { | |
extent[0] = extent.map(_chart.round())[0]; | |
extent[1] = extent.map(_chart.round())[1]; | |
_g.select(".brush") | |
.call(_brush.extent(extent)); | |
} | |
return extent; | |
}; | |
_chart.brushIsEmpty = function (extent) { | |
return _brush.empty() || !extent || extent[1] <= extent[0]; | |
}; | |
function brushing(p) { | |
var extent = _chart.extendBrush(); | |
_chart.redrawBrush(_g); | |
if (_chart.brushIsEmpty(extent)) { | |
dc.events.trigger(function () { | |
_chart.filter(null); | |
dc.redrawAll(_chart.chartGroup()); | |
}); | |
} else { | |
dc.events.trigger(function () { | |
_chart.filter(null); | |
_chart.filter([extent[0], extent[1]]); | |
dc.redrawAll(_chart.chartGroup()); | |
}, dc.constants.EVENT_DELAY); | |
} | |
} | |
function brushEnd(p) { | |
} | |
_chart.redrawBrush = function (g) { | |
if (_brushOn) { | |
if (_chart.filter() && _chart.brush().empty()) | |
_chart.brush().extent(_chart.filter()); | |
var gBrush = g.select("g.brush"); | |
gBrush.call(_chart.brush().x(_chart.x())); | |
gBrush.selectAll("rect").attr("height", brushHeight()); | |
} | |
_chart.fadeDeselectedArea(); | |
}; | |
_chart.fadeDeselectedArea = function () { | |
// do nothing, sub-chart should override this function | |
}; | |
// borrowed from Crossfilter example | |
_chart.resizeHandlePath = function (d) { | |
var e = +(d == "e"), x = e ? 1 : -1, y = brushHeight() / 3; | |
return "M" + (.5 * x) + "," + y | |
+ "A6,6 0 0 " + e + " " + (6.5 * x) + "," + (y + 6) | |
+ "V" + (2 * y - 6) | |
+ "A6,6 0 0 " + e + " " + (.5 * x) + "," + (2 * y) | |
+ "Z" | |
+ "M" + (2.5 * x) + "," + (y + 8) | |
+ "V" + (2 * y - 8) | |
+ "M" + (4.5 * x) + "," + (y + 8) | |
+ "V" + (2 * y - 8); | |
}; | |
function getClipPathId() { | |
return _chart.anchor().replace('#', '') + "-clip"; | |
} | |
_chart.clipPadding = function (p) { | |
if (!arguments.length) return _clipPadding; | |
_clipPadding = p; | |
return _chart; | |
}; | |
function generateClipPath() { | |
var defs = dc.utils.appendOrSelect(_parent, "defs"); | |
var chartBodyClip = dc.utils.appendOrSelect(defs, "clipPath").attr("id", getClipPathId()); | |
var padding = _clipPadding * 2; | |
dc.utils.appendOrSelect(chartBodyClip, "rect") | |
.attr("width", _chart.xAxisLength() + padding) | |
.attr("height", _chart.yAxisHeight() + padding); | |
} | |
_chart.doRender = function () { | |
if (_x == null) | |
throw new dc.errors.InvalidStateException("Mandatory attribute chart.x is missing on chart[" | |
+ _chart.anchor() + "]"); | |
_chart.resetSvg(); | |
if (_chart.dataSet()) { | |
_chart.generateG(); | |
generateClipPath(); | |
prepareXAxis(_chart.g()); | |
prepareYAxis(_chart.g()); | |
_chart.plotData(); | |
_chart.renderXAxis(_chart.g()); | |
_chart.renderYAxis(_chart.g()); | |
_chart.renderBrush(_chart.g()); | |
enableMouseZoom(); | |
} | |
return _chart; | |
}; | |
function enableMouseZoom() { | |
if (_mouseZoomable) { | |
_chart.root().call(d3.behavior.zoom() | |
.x(_chart.x()) | |
.scaleExtent([1, 100]) | |
.on("zoom", function () { | |
_chart.focus(_chart.x().domain()); | |
_chart.invokeZoomedListener(_chart); | |
updateRangeSelChart(); | |
})); | |
} | |
} | |
function updateRangeSelChart() { | |
if (_rangeChart) { | |
var refDom = _chart.x().domain(); | |
var origDom = _rangeChart.xOriginalDomain(); | |
var newDom = [ | |
refDom[0] < origDom[0] ? refDom[0] : origDom[0], | |
refDom[1] > origDom[1] ? refDom[1] : origDom[1]]; | |
_rangeChart.focus(newDom); | |
_rangeChart.filter(null); | |
_rangeChart.filter(refDom); | |
dc.events.trigger(function () { | |
dc.redrawAll(_chart.chartGroup()); | |
}); | |
} | |
} | |
_chart.doRedraw = function () { | |
prepareXAxis(_chart.g()); | |
prepareYAxis(_chart.g()); | |
_chart.plotData(); | |
if (_chart.elasticY()) | |
_chart.renderYAxis(_chart.g()); | |
if (_chart.elasticX() || _refocused) | |
_chart.renderXAxis(_chart.g()); | |
_chart.redrawBrush(_chart.g()); | |
return _chart; | |
}; | |
_chart.subRender = function () { | |
if (_chart.dataSet()) { | |
_chart.plotData(); | |
} | |
return _chart; | |
}; | |
_chart.brushOn = function (_) { | |
if (!arguments.length) return _brushOn; | |
_brushOn = _; | |
return _chart; | |
}; | |
_chart.getDataWithinXDomain = function (group) { | |
var data = []; | |
if (_chart.isOrdinal()) { | |
data = group.all(); | |
} else { | |
group.all().forEach(function (d) { | |
var key = _chart.keyAccessor()(d); | |
if (key >= _chart.x().domain()[0] && key <= _chart.x().domain()[1]) | |
data.push(d); | |
}); | |
} | |
return data; | |
}; | |
function hasRangeSelected(range) { | |
return range instanceof Array && range.length > 1; | |
} | |
_chart.focus = function (range) { | |
_refocused = true; | |
if (hasRangeSelected(range)) { | |
_chart.x().domain(range); | |
} else { | |
_chart.x().domain(_chart.xOriginalDomain()); | |
} | |
_chart.rescale(); | |
_chart.redraw(); | |
if (!hasRangeSelected(range)) | |
_refocused = false; | |
}; | |
_chart.refocused = function () { | |
return _refocused; | |
}; | |
_chart.focusChart = function (c) { | |
if (!arguments.length) return _focusChart; | |
_focusChart = c; | |
_chart.on("filtered", function (chart) { | |
dc.events.trigger(function () { | |
_focusChart.focus(chart.filter()); | |
_focusChart.filter(chart.filter()); | |
dc.redrawAll(chart.chartGroup()); | |
}); | |
}); | |
return _chart; | |
}; | |
return _chart; | |
}; | |
dc.colorChart = function(_chart) { | |
var _colors = d3.scale.category20c(); | |
var _colorDomain = [0, _colors.range().length]; | |
var _colorCalculator = function(value) { | |
var minValue = _colorDomain[0]; | |
var maxValue = _colorDomain[1]; | |
if (isNaN(value)) value = 0; | |
if(maxValue == null) return _colors(value); | |
var colorsLength = _chart.colors().range().length; | |
var denominator = (maxValue - minValue) / colorsLength; | |
var colorValue = Math.abs(Math.min(colorsLength - 1, Math.round((value - minValue) / denominator))); | |
return _chart.colors()(colorValue); | |
}; | |
var _colorAccessor = function(d, i){return i;}; | |
_chart.colors = function(_) { | |
if (!arguments.length) return _colors; | |
if (_ instanceof Array) { | |
_colors = d3.scale.ordinal().range(_); | |
var domain = []; | |
for(var i = 0; i < _.length; ++i){ | |
domain.push(i); | |
} | |
_colors.domain(domain); | |
} else { | |
_colors = _; | |
} | |
_colorDomain = [0, _colors.range().length]; | |
return _chart; | |
}; | |
_chart.colorCalculator = function(_){ | |
if(!arguments.length) return _colorCalculator; | |
_colorCalculator = _; | |
return _chart; | |
}; | |
_chart.getColor = function(d, i){ | |
return _colorCalculator(_colorAccessor(d, i)); | |
}; | |
_chart.colorAccessor = function(_){ | |
if(!arguments.length) return _colorAccessor; | |
_colorAccessor = _; | |
return _chart; | |
}; | |
_chart.colorDomain = function(_){ | |
if(!arguments.length) return _colorDomain; | |
_colorDomain = _; | |
return _chart; | |
}; | |
return _chart; | |
}; | |
dc.stackableChart = function (_chart) { | |
var _groupStack = new dc.utils.GroupStack(); | |
var _stackLayout = d3.layout.stack() | |
.offset("zero") | |
.order("default") | |
.values(function (d) { | |
return d.points; | |
}); | |
var _allGroups; | |
var _allValueAccessors; | |
var _allKeyAccessors; | |
var _stackLayers; | |
_chart.stack = function (group, p2, retriever) { | |
if (typeof p2 === 'string') | |
_chart.setGroupName(group, p2, retriever); | |
else if (typeof p2 === 'function') | |
retriever = p2; | |
_groupStack.setDefaultAccessor(_chart.valueAccessor()); | |
_groupStack.addGroup(group, retriever); | |
_chart.expireCache(); | |
return _chart; | |
}; | |
_chart.expireCache = function () { | |
_allGroups = null; | |
_allValueAccessors = null; | |
_allKeyAccessors = null; | |
_stackLayers = null; | |
return _chart; | |
}; | |
_chart.allGroups = function () { | |
if (_allGroups == null) { | |
_allGroups = []; | |
_allGroups.push(_chart.group()); | |
for (var i = 0; i < _groupStack.size(); ++i) | |
_allGroups.push(_groupStack.getGroupByIndex(i)); | |
} | |
return _allGroups; | |
}; | |
_chart.allValueAccessors = function () { | |
if (_allValueAccessors == null) { | |
_allValueAccessors = []; | |
_allValueAccessors.push(_chart.valueAccessor()); | |
for (var i = 0; i < _groupStack.size(); ++i) | |
_allValueAccessors.push(_groupStack.getAccessorByIndex(i)); | |
} | |
return _allValueAccessors; | |
}; | |
_chart.getValueAccessorByIndex = function (groupIndex) { | |
return _chart.allValueAccessors()[groupIndex]; | |
}; | |
_chart.yAxisMin = function () { | |
var min, all = flattenStack(); | |
min = d3.min(all, function (p) { | |
return (p.y + p.y0 < p.y0) ? (p.y + p.y0) : p.y0; | |
}); | |
min = dc.utils.subtract(min, _chart.yAxisPadding()); | |
return min; | |
}; | |
_chart.yAxisMax = function () { | |
var max, all = flattenStack(); | |
max = d3.max(all, function (p) { | |
return p.y + p.y0; | |
}); | |
max = dc.utils.add(max, _chart.yAxisPadding()); | |
return max; | |
}; | |
function flattenStack() { | |
var all = []; | |
if (_chart.x()) { | |
var xDomain = _chart.x().domain(); | |
_chart.stackLayers().forEach(function (e) { | |
e.points.forEach(function (p) { | |
if (p.x >= xDomain[0] && p.x <= xDomain[1]) | |
all.push(p); | |
}); | |
}); | |
} else { | |
_chart.stackLayers().forEach(function (e) { | |
all = all.concat(e.points); | |
}); | |
} | |
return all; | |
} | |
_chart.allKeyAccessors = function () { | |
if (_allKeyAccessors == null) { | |
_allKeyAccessors = []; | |
_allKeyAccessors.push(_chart.keyAccessor()); | |
for (var i = 0; i < _groupStack.size(); ++i) | |
_allKeyAccessors.push(_chart.keyAccessor()); | |
} | |
return _allKeyAccessors; | |
}; | |
_chart.getKeyAccessorByIndex = function (groupIndex) { | |
return _chart.allKeyAccessors()[groupIndex]; | |
}; | |
_chart.xAxisMin = function () { | |
var min = null; | |
var allGroups = _chart.allGroups(); | |
for (var groupIndex = 0; groupIndex < allGroups.length; ++groupIndex) { | |
var group = allGroups[groupIndex]; | |
var m = dc.utils.groupMin(group, _chart.getKeyAccessorByIndex(groupIndex)); | |
if (min == null || min > m) min = m; | |
} | |
return dc.utils.subtract(min, _chart.xAxisPadding()); | |
}; | |
_chart.xAxisMax = function () { | |
var max = null; | |
var allGroups = _chart.allGroups(); | |
for (var groupIndex = 0; groupIndex < allGroups.length; ++groupIndex) { | |
var group = allGroups[groupIndex]; | |
var m = dc.utils.groupMax(group, _chart.getKeyAccessorByIndex(groupIndex)); | |
if (max == null || max < m) max = m; | |
} | |
return dc.utils.add(max, _chart.xAxisPadding()); | |
}; | |
function getKeyFromData(groupIndex, d) { | |
return _chart.getKeyAccessorByIndex(groupIndex)(d); | |
} | |
function getValueFromData(groupIndex, d) { | |
return _chart.getValueAccessorByIndex(groupIndex)(d); | |
} | |
function calculateDataPointMatrix(data, groupIndex) { | |
for (var dataIndex = 0; dataIndex < data.length; ++dataIndex) { | |
var d = data[dataIndex]; | |
var key = getKeyFromData(groupIndex, d); | |
var value = getValueFromData(groupIndex, d); | |
_groupStack.setDataPoint(groupIndex, dataIndex, {data: d, x: key, y: value}); | |
} | |
} | |
_chart.calculateDataPointMatrixForAll = function () { | |
var groups = _chart.allGroups(); | |
for (var groupIndex = 0; groupIndex < groups.length; ++groupIndex) { | |
var group = groups[groupIndex]; | |
var data = group.all(); | |
calculateDataPointMatrix(data, groupIndex); | |
} | |
}; | |
_chart.getChartStack = function () { | |
return _groupStack; | |
}; | |
dc.override(_chart, "valueAccessor", function (_) { | |
if (!arguments.length) return _chart._valueAccessor(); | |
_chart.expireCache(); | |
return _chart._valueAccessor(_); | |
}); | |
dc.override(_chart, "keyAccessor", function (_) { | |
if (!arguments.length) return _chart._keyAccessor(); | |
_chart.expireCache(); | |
return _chart._keyAccessor(_); | |
}); | |
_chart.stackLayout = function (stack) { | |
if (!arguments.length) return _stackLayout; | |
_stackLayout = stack; | |
return _chart; | |
}; | |
_chart.stackLayers = function (_) { | |
if (!arguments.length) { | |
if (_stackLayers == null) { | |
_chart.calculateDataPointMatrixForAll(); | |
_stackLayers = _chart.stackLayout()(_groupStack.toLayers()); | |
} | |
return _stackLayers; | |
} else { | |
_stackLayers = _; | |
} | |
}; | |
_chart.legendables = function () { | |
var items = []; | |
_allGroups.forEach(function (g, i) { | |
items.push(dc.utils.createLegendable(_chart, g, i, _chart.getValueAccessorByIndex(i))); | |
}); | |
return items; | |
}; | |
return _chart; | |
}; | |
dc.abstractBubbleChart = function (_chart) { | |
var _maxBubbleRelativeSize = 0.3; | |
var _minRadiusWithLabel = 10; | |
_chart.BUBBLE_NODE_CLASS = "node"; | |
_chart.BUBBLE_CLASS = "bubble"; | |
_chart.MIN_RADIUS = 10; | |
_chart = dc.colorChart(_chart); | |
_chart.renderLabel(true); | |
_chart.renderTitle(false); | |
var _r = d3.scale.linear().domain([0, 100]); | |
var _rValueAccessor = function (d) { | |
return d.r; | |
}; | |
_chart.r = function (_) { | |
if (!arguments.length) return _r; | |
_r = _; | |
return _chart; | |
}; | |
_chart.radiusValueAccessor = function (_) { | |
if (!arguments.length) return _rValueAccessor; | |
_rValueAccessor = _; | |
return _chart; | |
}; | |
_chart.rMin = function () { | |
var min = d3.min(_chart.group().all(), function (e) { | |
return _chart.radiusValueAccessor()(e); | |
}); | |
return min; | |
}; | |
_chart.rMax = function () { | |
var max = d3.max(_chart.group().all(), function (e) { | |
return _chart.radiusValueAccessor()(e); | |
}); | |
return max; | |
}; | |
_chart.bubbleR = function (d) { | |
var value = _chart.radiusValueAccessor()(d); | |
var r = _chart.r()(value); | |
if (isNaN(r) || value <= 0) | |
r = 0; | |
return r; | |
}; | |
var labelFunction = function (d) { | |
return _chart.label()(d); | |
}; | |
var labelOpacity = function (d) { | |
return (_chart.bubbleR(d) > _minRadiusWithLabel) ? 1 : 0; | |
}; | |
_chart.doRenderLabel = function (bubbleGEnter) { | |
if (_chart.renderLabel()) { | |
var label = bubbleGEnter.select("text"); | |
if (label.empty()) { | |
label = bubbleGEnter.append("text") | |
.attr("text-anchor", "middle") | |
.attr("dy", ".3em") | |
.on("click", _chart.onClick); | |
} | |
label | |
.attr("opacity", 0) | |
.text(labelFunction); | |
dc.transition(label, _chart.transitionDuration()) | |
.attr("opacity", labelOpacity); | |
} | |
}; | |
_chart.doUpdateLabels = function (bubbleGEnter) { | |
if (_chart.renderLabel()) { | |
var labels = bubbleGEnter.selectAll("text") | |
.text(labelFunction); | |
dc.transition(labels, _chart.transitionDuration()) | |
.attr("opacity", labelOpacity); | |
} | |
}; | |
var titleFunction = function (d) { | |
return _chart.title()(d); | |
}; | |
_chart.doRenderTitles = function (g) { | |
if (_chart.renderTitle()) { | |
var title = g.select("title"); | |
if (title.empty()) | |
g.append("title").text(titleFunction); | |
} | |
}; | |
_chart.doUpdateTitles = function (g) { | |
if (_chart.renderTitle()) { | |
g.selectAll("title").text(titleFunction); | |
} | |
}; | |
_chart.minRadiusWithLabel = function (_) { | |
if (!arguments.length) return _minRadiusWithLabel; | |
_minRadiusWithLabel = _; | |
return _chart; | |
}; | |
_chart.maxBubbleRelativeSize = function (_) { | |
if (!arguments.length) return _maxBubbleRelativeSize; | |
_maxBubbleRelativeSize = _; | |
return _chart; | |
}; | |
_chart.initBubbleColor = function (d, i) { | |
this[dc.constants.NODE_INDEX_NAME] = i; | |
return _chart.getColor(d, i); | |
}; | |
_chart.updateBubbleColor = function (d, i) { | |
// a work around to get correct node index since | |
return _chart.getColor(d, this[dc.constants.NODE_INDEX_NAME]); | |
}; | |
_chart.fadeDeselectedArea = function () { | |
if (_chart.hasFilter()) { | |
_chart.selectAll("g." + _chart.BUBBLE_NODE_CLASS).each(function (d) { | |
if (_chart.isSelectedNode(d)) { | |
_chart.highlightSelected(this); | |
} else { | |
_chart.fadeDeselected(this); | |
} | |
}); | |
} else { | |
_chart.selectAll("g." + _chart.BUBBLE_NODE_CLASS).each(function (d) { | |
_chart.resetHighlight(this); | |
}); | |
} | |
}; | |
_chart.isSelectedNode = function (d) { | |
return _chart.hasFilter(d.key); | |
}; | |
_chart.onClick = function (d) { | |
var filter = d.key; | |
dc.events.trigger(function () { | |
_chart.filter(filter); | |
dc.redrawAll(_chart.chartGroup()); | |
}); | |
}; | |
return _chart; | |
}; | |
dc.pieChart = function (parent, chartGroup) { | |
var DEFAULT_MIN_ANGLE_FOR_LABEL = 0.5; | |
var _sliceCssClass = "pie-slice"; | |
var _radius, | |
_innerRadius = 0; | |
var _g; | |
var _minAngleForLabel = DEFAULT_MIN_ANGLE_FOR_LABEL; | |
var _chart = dc.colorChart(dc.baseChart({})); | |
var _slicesCap = Infinity; | |
var _othersLabel = "Others"; | |
var _othersGrouper = function (data, sum) { | |
data.push({"key": _othersLabel, "value": sum }); | |
}; | |
function assemblePieData() { | |
if (_slicesCap == Infinity) { | |
return _chart.orderedGroup().top(_slicesCap); // ordered by keys | |
} else { | |
var topRows = _chart.group().top(_slicesCap); // ordered by value | |
var topRowsSum = d3.sum(topRows, _chart.valueAccessor()); | |
var allRows = _chart.group().all(); | |
var allRowsSum = d3.sum(allRows, _chart.valueAccessor()); | |
_othersGrouper(topRows, allRowsSum - topRowsSum); | |
return topRows; | |
} | |
} | |
_chart.label(function (d) { | |
return _chart.keyAccessor()(d.data); | |
}); | |
_chart.renderLabel(true); | |
_chart.title(function (d) { | |
return _chart.keyAccessor()(d.data) + ": " + _chart.valueAccessor()(d.data); | |
}); | |
_chart.transitionDuration(350); | |
_chart.doRender = function () { | |
_chart.resetSvg(); | |
_g = _chart.svg() | |
.append("g") | |
.attr("transform", "translate(" + _chart.cx() + "," + _chart.cy() + ")"); | |
drawChart(); | |
return _chart; | |
}; | |
function drawChart() { | |
if (_chart.dataSet()) { | |
var pie = calculateDataPie(); | |
// set radius on basis of chart dimension if missing | |
_radius = _radius ? _radius : d3.min([_chart.width(), _chart.height()]) /2; | |
var arc = _chart.buildArcs(); | |
var pieData = pie(assemblePieData()); | |
if (_g) { | |
var slices = _g.selectAll("g." + _sliceCssClass) | |
.data(pieData); | |
createElements(slices, arc, pieData); | |
updateElements(pieData, arc); | |
removeElements(slices); | |
highlightFilter(); | |
} | |
} | |
} | |
function createElements(slices, arc, pieData) { | |
var slicesEnter = createSliceNodes(slices); | |
createSlicePath(slicesEnter, arc); | |
createTitles(slicesEnter); | |
createLabels(pieData, arc); | |
} | |
function createSliceNodes(slices) { | |
var slicesEnter = slices | |
.enter() | |
.append("g") | |
.attr("class", function (d, i) { | |
return _sliceCssClass + " _" + i; | |
}); | |
return slicesEnter; | |
} | |
function createSlicePath(slicesEnter, arc) { | |
var slicePath = slicesEnter.append("path") | |
.attr("fill", function (d, i) { | |
return _chart.getColor(d, i); | |
}) | |
.on("click", onClick) | |
.attr("d", function (d, i) { | |
return safeArc(d, i, arc); | |
}); | |
slicePath.transition() | |
.duration(_chart.transitionDuration()) | |
.attrTween("d", tweenPie); | |
} | |
function createTitles(slicesEnter) { | |
if (_chart.renderTitle()) { | |
slicesEnter.append("title").text(function (d) { | |
return _chart.title()(d); | |
}); | |
} | |
} | |
function createLabels(pieData, arc) { | |
if (_chart.renderLabel()) { | |
var labels = _g.selectAll("text." + _sliceCssClass) | |
.data(pieData); | |
var labelsEnter = labels | |
.enter() | |
.append("text") | |
.attr("class", function (d, i) { | |
return _sliceCssClass + " _" + i; | |
}) | |
.on("click", onClick); | |
dc.transition(labelsEnter, _chart.transitionDuration()) | |
.attr("transform", function (d) { | |
d.innerRadius = _chart.innerRadius(); | |
d.outerRadius = _radius; | |
var centroid = arc.centroid(d); | |
if (isNaN(centroid[0]) || isNaN(centroid[1])) { | |
return "translate(0,0)"; | |
} else { | |
return "translate(" + centroid + ")"; | |
} | |
}) | |
.attr("text-anchor", "middle") | |
.text(function (d) { | |
var data = d.data; | |
if (sliceHasNoData(data) || sliceTooSmall(d)) | |
return ""; | |
return _chart.label()(d); | |
}); | |
} | |
} | |
function updateElements(pieData, arc) { | |
updateSlicePaths(pieData, arc); | |
updateLabels(pieData, arc); | |
updateTitles(pieData); | |
} | |
function updateSlicePaths(pieData, arc) { | |
var slicePaths = _g.selectAll("g." + _sliceCssClass) | |
.data(pieData) | |
.select("path") | |
.attr("d", function (d, i) { | |
return safeArc(d, i, arc); | |
}); | |
dc.transition(slicePaths, _chart.transitionDuration(), | |
function (s) { | |
s.attrTween("d", tweenPie); | |
}).attr("fill", function (d, i) { | |
return _chart.getColor(d, i); | |
}); | |
} | |
function updateLabels(pieData, arc) { | |
if (_chart.renderLabel()) { | |
var labels = _g.selectAll("text." + _sliceCssClass) | |
.data(pieData); | |
dc.transition(labels, _chart.transitionDuration()) | |
.attr("transform", function (d) { | |
d.innerRadius = _chart.innerRadius(); | |
d.outerRadius = _radius; | |
var centroid = arc.centroid(d); | |
if (isNaN(centroid[0]) || isNaN(centroid[1])) { | |
return "translate(0,0)"; | |
} else { | |
return "translate(" + centroid + ")"; | |
} | |
}) | |
.attr("text-anchor", "middle") | |
.text(function (d) { | |
var data = d.data; | |
if (sliceHasNoData(data) || sliceTooSmall(d)) | |
return ""; | |
return _chart.label()(d); | |
}); | |
} | |
} | |
function updateTitles(pieData) { | |
if (_chart.renderTitle()) { | |
_g.selectAll("g." + _sliceCssClass) | |
.data(pieData) | |
.select("title") | |
.text(function (d) { | |
return _chart.title()(d); | |
}); | |
} | |
} | |
function removeElements(slices) { | |
slices.exit().remove(); | |
} | |
function highlightFilter() { | |
if (_chart.hasFilter()) { | |
_chart.selectAll("g." + _sliceCssClass).each(function (d) { | |
if (_chart.isSelectedSlice(d)) { | |
_chart.highlightSelected(this); | |
} else { | |
_chart.fadeDeselected(this); | |
} | |
}); | |
} else { | |
_chart.selectAll("g." + _sliceCssClass).each(function (d) { | |
_chart.resetHighlight(this); | |
}); | |
} | |
} | |
_chart.innerRadius = function (r) { | |
if (!arguments.length) return _innerRadius; | |
_innerRadius = r; | |
return _chart; | |
}; | |
_chart.radius = function (r) { | |
if (!arguments.length) return _radius; | |
_radius = r; | |
return _chart; | |
}; | |
_chart.cx = function () { | |
return _chart.width() / 2; | |
}; | |
_chart.cy = function () { | |
return _chart.height() / 2; | |
}; | |
_chart.buildArcs = function () { | |
return d3.svg.arc().outerRadius(_radius).innerRadius(_innerRadius); | |
}; | |
_chart.isSelectedSlice = function (d) { | |
return _chart.hasFilter(_chart.keyAccessor()(d.data)); | |
}; | |
_chart.doRedraw = function () { | |
drawChart(); | |
return _chart; | |
}; | |
_chart.minAngleForLabel = function (_) { | |
if (!arguments.length) return _minAngleForLabel; | |
_minAngleForLabel = _; | |
return _chart; | |
}; | |
_chart.slicesCap = function (_) { | |
if (!arguments.length) return _slicesCap; | |
_slicesCap = _; | |
return _chart; | |
}; | |
_chart.othersLabel = function (_) { | |
if (!arguments.length) return _othersLabel; | |
_othersLabel = _; | |
return _chart; | |
}; | |
_chart.othersGrouper = function (_) { | |
if (!arguments.length) return _othersGrouper; | |
_othersGrouper = _; | |
return _chart; | |
}; | |
function calculateDataPie() { | |
return d3.layout.pie().sort(null).value(function (d) { | |
return _chart.valueAccessor()(d); | |
}); | |
} | |
function sliceTooSmall(d) { | |
var angle = (d.endAngle - d.startAngle); | |
return isNaN(angle) || angle < _minAngleForLabel; | |
} | |
function sliceHasNoData(data) { | |
return _chart.valueAccessor()(data) == 0; | |
} | |
function tweenPie(b) { | |
b.innerRadius = _chart.innerRadius(); | |
var current = this._current; | |
if (isOffCanvas(current)) | |
current = {startAngle: 0, endAngle: 0}; | |
var i = d3.interpolate(current, b); | |
this._current = i(0); | |
return function (t) { | |
return safeArc(i(t), 0, _chart.buildArcs()); | |
}; | |
} | |
function isOffCanvas(current) { | |
return current == null || isNaN(current.startAngle) || isNaN(current.endAngle); | |
} | |
function onClick(d) { | |
_chart.onClick(d.data); | |
} | |
function safeArc(d, i, arc) { | |
var path = arc(d, i); | |
if (path.indexOf("NaN") >= 0) | |
path = "M0,0"; | |
return path; | |
} | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.barChart = function (parent, chartGroup) { | |
var MIN_BAR_WIDTH = 1; | |
var DEFAULT_GAP_BETWEEN_BARS = 2; | |
var _chart = dc.stackableChart(dc.coordinateGridChart({})); | |
var _gap = DEFAULT_GAP_BETWEEN_BARS; | |
var _centerBar = false; | |
var _numberOfBars; | |
var _barWidth; | |
dc.override(_chart, 'rescale', function () { | |
_chart._rescale(); | |
_numberOfBars = null; | |
_barWidth = null; | |
getNumberOfBars(); | |
}); | |
_chart.plotData = function () { | |
var layers = _chart.chartBodyG().selectAll("g.stack") | |
.data(_chart.stackLayers()); | |
calculateBarWidth(); | |
layers | |
.enter() | |
.append("g") | |
.attr("class", function (d, i) { | |
return "stack " + "_" + i; | |
}); | |
layers.each(function (d, i) { | |
var layer = d3.select(this); | |
renderBars(layer, d, i); | |
}); | |
_chart.stackLayers(null); | |
}; | |
function barHeight(d) { | |
return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0))); | |
} | |
function renderBars(layer, d, i) { | |
var bars = layer.selectAll("rect.bar") | |
.data(d.points); | |
bars.enter() | |
.append("rect") | |
.attr("class", "bar") | |
.attr("fill", function (d) { | |
return _chart.colors()(i); | |
}) | |
.append("title").text(_chart.title()); | |
dc.transition(bars, _chart.transitionDuration()) | |
.attr("x", function (d) { | |
var x = _chart.x()(d.x); | |
if (_centerBar) x -= _barWidth / 2; | |
return dc.utils.safeNumber(x); | |
}) | |
.attr("y", function (d) { | |
var y = _chart.y()(d.y + d.y0); | |
if (d.y < 0) | |
y -= barHeight(d); | |
return dc.utils.safeNumber(y); | |
}) | |
.attr("width", _barWidth) | |
.attr("height", function (d) { | |
return barHeight(d); | |
}) | |
.select("title").text(_chart.title()); | |
dc.transition(bars.exit(), _chart.transitionDuration()) | |
.attr("height", 0) | |
.remove(); | |
} | |
function calculateBarWidth() { | |
if (_barWidth == null) { | |
var numberOfBars = _chart.isOrdinal() ? getNumberOfBars() + 1 : getNumberOfBars(); | |
var w = Math.floor((_chart.xAxisLength() - (numberOfBars - 1) * _gap) / numberOfBars); | |
if (w == Infinity || isNaN(w) || w < MIN_BAR_WIDTH) | |
w = MIN_BAR_WIDTH; | |
_barWidth = w; | |
} | |
} | |
function getNumberOfBars() { | |
if (_numberOfBars == null) { | |
_numberOfBars = _chart.xUnitCount(); | |
} | |
return _numberOfBars; | |
} | |
_chart.fadeDeselectedArea = function () { | |
var bars = _chart.chartBodyG().selectAll("rect.bar"); | |
var extent = _chart.brush().extent(); | |
if (_chart.isOrdinal()) { | |
if (_chart.hasFilter()) { | |
bars.classed(dc.constants.SELECTED_CLASS, function (d) { | |
return _chart.hasFilter(_chart.keyAccessor()(d.data)); | |
}); | |
bars.classed(dc.constants.DESELECTED_CLASS, function (d) { | |
return !_chart.hasFilter(_chart.keyAccessor()(d.data)); | |
}); | |
} else { | |
bars.classed(dc.constants.SELECTED_CLASS, false); | |
bars.classed(dc.constants.DESELECTED_CLASS, false); | |
} | |
} else { | |
if (!_chart.brushIsEmpty(extent)) { | |
var start = extent[0]; | |
var end = extent[1]; | |
bars.classed(dc.constants.DESELECTED_CLASS, function (d) { | |
var xValue = _chart.keyAccessor()(d.data); | |
return xValue < start || xValue >= end; | |
}); | |
} else { | |
bars.classed(dc.constants.DESELECTED_CLASS, false); | |
} | |
} | |
}; | |
_chart.centerBar = function (_) { | |
if (!arguments.length) return _centerBar; | |
_centerBar = _; | |
return _chart; | |
}; | |
_chart.gap = function (_) { | |
if (!arguments.length) return _gap; | |
_gap = _; | |
return _chart; | |
}; | |
_chart.extendBrush = function () { | |
var extent = _chart.brush().extent(); | |
if (_chart.round() && !_centerBar) { | |
extent[0] = extent.map(_chart.round())[0]; | |
extent[1] = extent.map(_chart.round())[1]; | |
_chart.chartBodyG().select(".brush") | |
.call(_chart.brush().extent(extent)); | |
} | |
return extent; | |
}; | |
dc.override(_chart, "prepareOrdinalXAxis", function () { | |
return this._prepareOrdinalXAxis(_chart.xUnitCount() + 1); | |
}); | |
_chart.legendHighlight = function (d) { | |
_chart.select('.chart-body').selectAll('rect.bar').filter(function () { | |
return d3.select(this).attr('fill') == d.color; | |
}).classed('highlight', true); | |
_chart.select('.chart-body').selectAll('rect.bar').filter(function () { | |
return d3.select(this).attr('fill') != d.color; | |
}).classed('fadeout', true); | |
}; | |
_chart.legendReset = function (d) { | |
_chart.selectAll('.chart-body').selectAll('rect.bar').filter(function () { | |
return d3.select(this).attr('fill') == d.color; | |
}).classed('highlight', false); | |
_chart.selectAll('.chart-body').selectAll('rect.bar').filter(function () { | |
return d3.select(this).attr('fill') != d.color; | |
}).classed('fadeout', false); | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.lineChart = function (parent, chartGroup) { | |
var DEFAULT_DOT_RADIUS = 5; | |
var TOOLTIP_G_CLASS = "dc-tooltip"; | |
var DOT_CIRCLE_CLASS = "dot"; | |
var Y_AXIS_REF_LINE_CLASS = "yRef"; | |
var X_AXIS_REF_LINE_CLASS = "xRef"; | |
var _chart = dc.stackableChart(dc.coordinateGridChart({})); | |
var _renderArea = false; | |
var _dotRadius = DEFAULT_DOT_RADIUS; | |
_chart.transitionDuration(500); | |
_chart.plotData = function () { | |
var layers = _chart.chartBodyG().selectAll("g.stack") | |
.data(_chart.stackLayers()); | |
var layersEnter = layers | |
.enter() | |
.append("g") | |
.attr("class", function (d, i) { | |
return "stack " + "_" + i; | |
}); | |
drawLine(layersEnter, layers); | |
drawArea(layersEnter, layers); | |
drawDots(layers); | |
_chart.stackLayers(null); | |
}; | |
_chart.renderArea = function (_) { | |
if (!arguments.length) return _renderArea; | |
_renderArea = _; | |
return _chart; | |
}; | |
function drawLine(layersEnter, layers) { | |
var line = d3.svg.line() | |
.x(function (d) { | |
return _chart.x()(d.x); | |
}) | |
.y(function (d) { | |
return _chart.y()(d.y + d.y0); | |
}); | |
layersEnter.append("path") | |
.attr("class", "line") | |
.attr("stroke", function (d, i) { | |
return _chart.colors()(i); | |
}) | |
.attr("fill", function (d, i) { | |
return _chart.colors()(i); | |
}); | |
dc.transition(layers.select("path.line"), _chart.transitionDuration()) | |
.attr("d", function (d) { | |
return safeD(line(d.points)); | |
}); | |
} | |
function drawArea(layersEnter, layers) { | |
if (_renderArea) { | |
var area = d3.svg.area() | |
.x(function (d) { | |
return _chart.x()(d.x); | |
}) | |
.y(function (d) { | |
return _chart.y()(d.y + d.y0); | |
}) | |
.y0(function (d) { | |
return _chart.y()(d.y0); | |
}); | |
layersEnter.append("path") | |
.attr("class", "area") | |
.attr("fill", function (d, i) { | |
return _chart.colors()(i); | |
}) | |
.attr("d", function (d) { | |
return safeD(area(d.points)); | |
}); | |
dc.transition(layers.select("path.area"), _chart.transitionDuration()) | |
.attr("d", function (d) { | |
return safeD(area(d.points)); | |
}); | |
} | |
} | |
function safeD(d){ | |
return d.indexOf("NaN") >= 0 ? "M0,0" : d; | |
}; | |
function drawDots(layersEnter) { | |
if (!_chart.brushOn()) { | |
layersEnter.each(function (d, i) { | |
var layer = d3.select(this); | |
var g = layer.select("g." + TOOLTIP_G_CLASS); | |
if (g.empty()) g = layer.append("g").attr("class", TOOLTIP_G_CLASS); | |
createRefLines(g); | |
var dots = g.selectAll("circle." + DOT_CIRCLE_CLASS) | |
.data(g.datum().points); | |
dots.enter() | |
.append("circle") | |
.attr("class", DOT_CIRCLE_CLASS) | |
.attr("r", _dotRadius) | |
.attr("fill", function (d) { | |
return _chart.colors()(i); | |
}) | |
.style("fill-opacity", 1e-6) | |
.style("stroke-opacity", 1e-6) | |
.on("mousemove", function (d) { | |
var dot = d3.select(this); | |
showDot(dot); | |
showRefLines(dot, g); | |
}) | |
.on("mouseout", function (d) { | |
var dot = d3.select(this); | |
hideDot(dot); | |
hideRefLines(g); | |
}) | |
.append("title").text(_chart.title()); | |
dots.attr("cx", function (d) { | |
return dc.utils.safeNumber(_chart.x()(d.x)); | |
}) | |
.attr("cy", function (d) { | |
return dc.utils.safeNumber(_chart.y()(d.y + d.y0)); | |
}) | |
.select("title").text(_chart.title()); | |
dots.exit().remove(); | |
}); | |
} | |
} | |
function createRefLines(g) { | |
var yRefLine = g.select("path." + Y_AXIS_REF_LINE_CLASS).empty() ? g.append("path").attr("class", Y_AXIS_REF_LINE_CLASS) : g.select("path." + Y_AXIS_REF_LINE_CLASS); | |
yRefLine.style("display", "none").attr("stroke-dasharray", "5,5"); | |
var xRefLine = g.select("path." + X_AXIS_REF_LINE_CLASS).empty() ? g.append("path").attr("class", X_AXIS_REF_LINE_CLASS) : g.select("path." + X_AXIS_REF_LINE_CLASS); | |
xRefLine.style("display", "none").attr("stroke-dasharray", "5,5"); | |
} | |
function showDot(dot) { | |
dot.style("fill-opacity", .8); | |
dot.style("stroke-opacity", .8); | |
return dot; | |
} | |
function showRefLines(dot, g) { | |
var x = dot.attr("cx"); | |
var y = dot.attr("cy"); | |
g.select("path." + Y_AXIS_REF_LINE_CLASS).style("display", "").attr("d", "M0 " + y + "L" + (x) + " " + (y)); | |
g.select("path." + X_AXIS_REF_LINE_CLASS).style("display", "").attr("d", "M" + x + " " + _chart.yAxisHeight() + "L" + x + " " + y); | |
} | |
function hideDot(dot) { | |
dot.style("fill-opacity", 1e-6).style("stroke-opacity", 1e-6); | |
} | |
function hideRefLines(g) { | |
g.select("path." + Y_AXIS_REF_LINE_CLASS).style("display", "none"); | |
g.select("path." + X_AXIS_REF_LINE_CLASS).style("display", "none"); | |
} | |
_chart.dotRadius = function (_) { | |
if (!arguments.length) return _dotRadius; | |
_dotRadius = _; | |
return _chart; | |
}; | |
_chart.legendHighlight = function (d) { | |
_chart.selectAll('.chart-body').selectAll('path').filter(function () { | |
return d3.select(this).attr('fill') == d.color; | |
}).classed('highlight', true); | |
_chart.selectAll('.chart-body').selectAll('path').filter(function () { | |
return d3.select(this).attr('fill') != d.color; | |
}).classed('fadeout', true); | |
}; | |
_chart.legendReset = function (d) { | |
_chart.selectAll('.chart-body').selectAll('path').filter(function () { | |
return d3.select(this).attr('fill') == d.color; | |
}).classed('highlight', false); | |
_chart.selectAll('.chart-body').selectAll('path').filter(function () { | |
return d3.select(this).attr('fill') != d.color; | |
}).classed('fadeout', false); | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.dataCount = function(parent, chartGroup) { | |
var _formatNumber = d3.format(",d"); | |
var _chart = dc.baseChart({}); | |
_chart.doRender = function() { | |
_chart.selectAll(".total-count").text(_formatNumber(_chart.dimension().size())); | |
_chart.selectAll(".filter-count").text(_formatNumber(_chart.group().value())); | |
return _chart; | |
}; | |
_chart.doRedraw = function(){ | |
return _chart.doRender(); | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.dataTable = function(parent, chartGroup) { | |
var LABEL_CSS_CLASS = "dc-table-label"; | |
var ROW_CSS_CLASS = "dc-table-row"; | |
var COLUMN_CSS_CLASS = "dc-table-column"; | |
var GROUP_CSS_CLASS = "dc-table-group"; | |
var _chart = dc.baseChart({}); | |
var _size = 25; | |
var _columns = []; | |
var _sortBy = function(d) { | |
return d; | |
}; | |
var _order = d3.ascending; | |
var _sort; | |
_chart.doRender = function() { | |
_chart.selectAll("tbody").remove(); | |
renderRows(renderGroups()); | |
return _chart; | |
}; | |
function renderGroups() { | |
var groups = _chart.root().selectAll("tbody") | |
.data(nestEntries(), function(d) { | |
return _chart.keyAccessor()(d); | |
}); | |
var rowGroup = groups | |
.enter() | |
.append("tbody"); | |
rowGroup | |
.append("tr") | |
.attr("class", GROUP_CSS_CLASS) | |
.append("td") | |
.attr("class", LABEL_CSS_CLASS) | |
.attr("colspan", _columns.length) | |
.html(function(d) { | |
return _chart.keyAccessor()(d); | |
}); | |
groups.exit().remove(); | |
return rowGroup; | |
} | |
function nestEntries() { | |
if (!_sort) | |
_sort = crossfilter.quicksort.by(_sortBy); | |
var entries = _chart.dimension().top(_size); | |
return d3.nest() | |
.key(_chart.group()) | |
.sortKeys(_order) | |
.sortValues(_order) | |
.entries(_sort(entries, 0, entries.length)); | |
} | |
function renderRows(groups) { | |
var rows = groups.order() | |
.selectAll("tr." + ROW_CSS_CLASS) | |
.data(function(d) { | |
return d.values; | |
}); | |
var rowEnter = rows.enter() | |
.append("tr") | |
.attr("class", ROW_CSS_CLASS); | |
for (var i = 0; i < _columns.length; ++i) { | |
var f = _columns[i]; | |
rowEnter.append("td") | |
.attr("class", COLUMN_CSS_CLASS + " _" + i) | |
.html(function(d) { | |
return f(d); | |
}); | |
} | |
rows.exit().remove(); | |
return rows; | |
} | |
_chart.doRedraw = function() { | |
return _chart.doRender(); | |
}; | |
_chart.size = function(s) { | |
if (!arguments.length) return _size; | |
_size = s; | |
return _chart; | |
}; | |
_chart.columns = function(_) { | |
if (!arguments.length) return _columns; | |
_columns = _; | |
return _chart; | |
}; | |
_chart.sortBy = function(_) { | |
if (!arguments.length) return _sortBy; | |
_sortBy = _; | |
return _chart; | |
}; | |
_chart.order = function(_) { | |
if (!arguments.length) return _order; | |
_order = _; | |
return _chart; | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.bubbleChart = function(parent, chartGroup) { | |
var _chart = dc.abstractBubbleChart(dc.coordinateGridChart({})); | |
var _elasticRadius = false; | |
_chart.transitionDuration(750); | |
var bubbleLocator = function(d) { | |
return "translate(" + (bubbleX(d)) + "," + (bubbleY(d)) + ")"; | |
}; | |
_chart.elasticRadius = function(_) { | |
if (!arguments.length) return _elasticRadius; | |
_elasticRadius = _; | |
return _chart; | |
}; | |
_chart.plotData = function() { | |
if (_elasticRadius) | |
_chart.r().domain([_chart.rMin(), _chart.rMax()]); | |
_chart.r().range([_chart.MIN_RADIUS, _chart.xAxisLength() * _chart.maxBubbleRelativeSize()]); | |
var bubbleG = _chart.chartBodyG().selectAll("g." + _chart.BUBBLE_NODE_CLASS) | |
.data(_chart.group().all()); | |
renderNodes(bubbleG); | |
updateNodes(bubbleG); | |
removeNodes(bubbleG); | |
_chart.fadeDeselectedArea(); | |
}; | |
function renderNodes(bubbleG) { | |
var bubbleGEnter = bubbleG.enter().append("g"); | |
bubbleGEnter | |
.attr("class", _chart.BUBBLE_NODE_CLASS) | |
.attr("transform", bubbleLocator) | |
.append("circle").attr("class", function(d, i) { | |
return _chart.BUBBLE_CLASS + " _" + i; | |
}) | |
.on("click", _chart.onClick) | |
.attr("fill", _chart.initBubbleColor) | |
.attr("r", 0); | |
dc.transition(bubbleG, _chart.transitionDuration()) | |
.attr("r", function(d) { | |
return _chart.bubbleR(d); | |
}) | |
.attr("opacity", function(d) { | |
return (_chart.bubbleR(d) > 0) ? 1 : 0; | |
}); | |
_chart.doRenderLabel(bubbleGEnter); | |
_chart.doRenderTitles(bubbleGEnter); | |
} | |
function updateNodes(bubbleG) { | |
dc.transition(bubbleG, _chart.transitionDuration()) | |
.attr("transform", bubbleLocator) | |
.selectAll("circle." + _chart.BUBBLE_CLASS) | |
.attr("fill", _chart.updateBubbleColor) | |
.attr("r", function(d) { | |
return _chart.bubbleR(d); | |
}) | |
.attr("opacity", function(d) { | |
return (_chart.bubbleR(d) > 0) ? 1 : 0; | |
}); | |
_chart.doUpdateLabels(bubbleG); | |
_chart.doUpdateTitles(bubbleG); | |
} | |
function removeNodes(bubbleG) { | |
bubbleG.exit().remove(); | |
} | |
function bubbleX(d) { | |
var x = _chart.x()(_chart.keyAccessor()(d)) + _chart.margins().left; | |
if (isNaN(x)) | |
x = 0; | |
return x; | |
} | |
function bubbleY(d) { | |
var y = _chart.margins().top + _chart.y()(_chart.valueAccessor()(d)); | |
if (isNaN(y)) | |
y = 0; | |
return y; | |
} | |
_chart.renderBrush = function(g) { | |
// override default x axis brush from parent chart | |
}; | |
_chart.redrawBrush = function(g) { | |
// override default x axis brush from parent chart | |
_chart.fadeDeselectedArea(); | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.compositeChart = function (parent, chartGroup) { | |
var SUB_CHART_CLASS = "sub"; | |
var _chart = dc.coordinateGridChart({}); | |
var _children = []; | |
_chart.transitionDuration(500); | |
dc.override(_chart, "generateG", function () { | |
var g = this._generateG(); | |
for (var i = 0; i < _children.length; ++i) { | |
var child = _children[i]; | |
generateChildG(child, i); | |
if (child.dimension() == null) child.dimension(_chart.dimension()); | |
if (child.group() == null) child.group(_chart.group()); | |
child.chartGroup(_chart.chartGroup()); | |
child.svg(_chart.svg()); | |
child.xUnits(_chart.xUnits()); | |
child.transitionDuration(_chart.transitionDuration()); | |
child.brushOn(_chart.brushOn()); | |
} | |
return g; | |
}); | |
function generateChildG(child, i) { | |
child.generateG(_chart.g()); | |
child.g().attr("class", SUB_CHART_CLASS + " _" + i); | |
} | |
_chart.plotData = function () { | |
for (var i = 0; i < _children.length; ++i) { | |
var child = _children[i]; | |
if (child.g() == null) { | |
generateChildG(child, i); | |
} | |
child.x(_chart.x()); | |
child.y(_chart.y()); | |
child.xAxis(_chart.xAxis()); | |
child.yAxis(_chart.yAxis()); | |
child.plotData(); | |
child.activateRenderlets(); | |
} | |
}; | |
_chart.fadeDeselectedArea = function () { | |
for (var i = 0; i < _children.length; ++i) { | |
var child = _children[i]; | |
child.brush(_chart.brush()); | |
child.fadeDeselectedArea(); | |
} | |
}; | |
_chart.compose = function (charts) { | |
_children = charts; | |
for (var i = 0; i < _children.length; ++i) { | |
var child = _children[i]; | |
child.height(_chart.height()); | |
child.width(_chart.width()); | |
child.margins(_chart.margins()); | |
} | |
return _chart; | |
}; | |
_chart.children = function () { | |
return _children; | |
}; | |
function getAllYAxisMinFromChildCharts() { | |
var allMins = []; | |
for (var i = 0; i < _children.length; ++i) { | |
allMins.push(_children[i].yAxisMin()); | |
} | |
return allMins; | |
} | |
_chart.yAxisMin = function () { | |
return d3.min(getAllYAxisMinFromChildCharts()); | |
}; | |
function getAllYAxisMaxFromChildCharts() { | |
var allMaxes = []; | |
for (var i = 0; i < _children.length; ++i) { | |
allMaxes.push(_children[i].yAxisMax()); | |
} | |
return allMaxes; | |
} | |
_chart.yAxisMax = function () { | |
return dc.utils.add(d3.max(getAllYAxisMaxFromChildCharts()), _chart.yAxisPadding()); | |
}; | |
function getAllXAxisMinFromChildCharts() { | |
var allMins = []; | |
for (var i = 0; i < _children.length; ++i) { | |
allMins.push(_children[i].xAxisMin()); | |
} | |
return allMins; | |
} | |
_chart.xAxisMin = function () { | |
return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding()); | |
}; | |
function getAllXAxisMaxFromChildCharts() { | |
var allMaxes = []; | |
for (var i = 0; i < _children.length; ++i) { | |
allMaxes.push(_children[i].xAxisMax()); | |
} | |
return allMaxes; | |
} | |
_chart.xAxisMax = function () { | |
return dc.utils.add(d3.max(getAllXAxisMaxFromChildCharts()), _chart.xAxisPadding()); | |
}; | |
_chart.legendables = function () { | |
var items = []; | |
for (var j = 0; j < _children.length; ++j) { | |
var childChart = _children[j]; | |
childChart.allGroups().forEach(function (g, i) { | |
items.push(dc.utils.createLegendable(childChart, g, i, childChart.getValueAccessorByIndex(i))); | |
}); | |
} | |
return items; | |
}; | |
_chart.legendHighlight = function (d) { | |
for (var j = 0; j < _children.length; ++j) { | |
var child = _children[j]; | |
child.legendHighlight(d); | |
} | |
}; | |
_chart.legendReset = function (d) { | |
for (var j = 0; j < _children.length; ++j) { | |
var child = _children[j]; | |
child.legendReset(d); | |
} | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.geoChoroplethChart = function (parent, chartGroup) { | |
var _chart = dc.colorChart(dc.baseChart({})); | |
_chart.colorAccessor(function (d, i) { | |
return d; | |
}); | |
var _geoPath = d3.geo.path(); | |
var _projectionFlag; | |
var _geoJsons = []; | |
_chart.doRender = function () { | |
_chart.resetSvg(); | |
for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) { | |
var states = _chart.svg().append("g") | |
.attr("class", "layer" + layerIndex); | |
var regionG = states.selectAll("g." + geoJson(layerIndex).name) | |
.data(geoJson(layerIndex).data) | |
.enter() | |
.append("g") | |
.attr("class", geoJson(layerIndex).name); | |
regionG | |
.append("path") | |
.attr("fill", "white") | |
.attr("d", _geoPath); | |
regionG.append("title"); | |
plotData(layerIndex); | |
} | |
_projectionFlag = false; | |
}; | |
function plotData(layerIndex) { | |
var maxValue = dc.utils.groupMax(_chart.group(), _chart.valueAccessor()); | |
var data = generateLayeredData(); | |
if (isDataLayer(layerIndex)) { | |
var regionG = renderRegionG(layerIndex); | |
renderPaths(regionG, layerIndex, data, maxValue); | |
renderTitle(regionG, layerIndex, data); | |
} | |
} | |
function generateLayeredData() { | |
var data = {}; | |
var groupAll = _chart.group().all(); | |
for (var i = 0; i < groupAll.length; ++i) { | |
data[_chart.keyAccessor()(groupAll[i])] = _chart.valueAccessor()(groupAll[i]); | |
} | |
return data; | |
} | |
function isDataLayer(layerIndex) { | |
return geoJson(layerIndex).keyAccessor; | |
} | |
function renderRegionG(layerIndex) { | |
var regionG = _chart.svg() | |
.selectAll(layerSelector(layerIndex)) | |
.classed("selected", function (d) { | |
return isSelected(layerIndex, d); | |
}) | |
.classed("deselected", function (d) { | |
return isDeselected(layerIndex, d); | |
}) | |
.attr("class", function (d) { | |
var layerNameClass = geoJson(layerIndex).name; | |
var regionClass = dc.utils.nameToId(geoJson(layerIndex).keyAccessor(d)); | |
var baseClasses = layerNameClass + " " + regionClass; | |
if (isSelected(layerIndex, d)) baseClasses += " selected"; | |
if (isDeselected(layerIndex, d)) baseClasses += " deselected"; | |
return baseClasses; | |
}); | |
return regionG; | |
} | |
function layerSelector(layerIndex) { | |
return "g.layer" + layerIndex + " g." + geoJson(layerIndex).name; | |
} | |
function isSelected(layerIndex, d) { | |
return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d)); | |
} | |
function isDeselected(layerIndex, d) { | |
return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d)); | |
} | |
function getKey(layerIndex, d) { | |
return geoJson(layerIndex).keyAccessor(d); | |
} | |
function geoJson(index) { | |
return _geoJsons[index]; | |
} | |
function renderPaths(regionG, layerIndex, data, maxValue) { | |
var paths = regionG | |
.select("path") | |
.attr("fill", function (d) { | |
var currentFill = d3.select(this).attr("fill"); | |
if (currentFill) | |
return currentFill; | |
return "none"; | |
}) | |
.on("click", function (d) { | |
return _chart.onClick(d, layerIndex); | |
}); | |
dc.transition(paths, _chart.transitionDuration()).attr("fill", function (d, i) { | |
return _chart.getColor(data[geoJson(layerIndex).keyAccessor(d)], i); | |
}); | |
} | |
_chart.onClick = function (d, layerIndex) { | |
var selectedRegion = geoJson(layerIndex).keyAccessor(d); | |
dc.events.trigger(function () { | |
_chart.filter(selectedRegion); | |
dc.redrawAll(_chart.chartGroup()); | |
}); | |
}; | |
function renderTitle(regionG, layerIndex, data) { | |
if (_chart.renderTitle()) { | |
regionG.selectAll("title").text(function (d) { | |
var key = getKey(layerIndex, d); | |
var value = data[key]; | |
return _chart.title()({key: key, value: value}); | |
}); | |
} | |
} | |
_chart.doRedraw = function () { | |
for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) { | |
plotData(layerIndex); | |
if(_projectionFlag) { | |
_chart.svg().selectAll("g." + geoJson(layerIndex).name + " path").attr("d", _geoPath) | |
}; | |
} | |
_projectionFlag = false | |
}; | |
_chart.overlayGeoJson = function (json, name, keyAccessor) { | |
for (var i = 0; i < _geoJsons.length; ++i) { | |
if (_geoJsons[i].name == name) { | |
_geoJsons[i].data = json; | |
_geoJsons[i].keyAccessor = keyAccessor; | |
return _chart | |
} | |
} | |
_geoJsons.push({name: name, data: json, keyAccessor: keyAccessor}); | |
return _chart; | |
}; | |
_chart.projection = function (projection) { | |
_geoPath.projection(projection); | |
_projectionFlag = true; | |
return _chart; | |
}; | |
_chart.geoJsons = function () { | |
return _geoJsons; | |
}; | |
_chart.removeGeoJson = function (name) { | |
var geoJsons = []; | |
for (var i = 0; i < _geoJsons.length; ++i) { | |
var layer = _geoJsons[i]; | |
if (layer.name != name) { | |
geoJsons.push(layer); | |
} | |
} | |
_geoJsons = geoJsons; | |
return _chart; | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.bubbleOverlay = function(root, chartGroup) { | |
var BUBBLE_OVERLAY_CLASS = "bubble-overlay"; | |
var BUBBLE_NODE_CLASS = "node"; | |
var BUBBLE_CLASS = "bubble"; | |
var _chart = dc.abstractBubbleChart(dc.baseChart({})); | |
var _g; | |
var _points = []; | |
_chart.transitionDuration(750); | |
_chart.radiusValueAccessor(function(d) { | |
return d.value; | |
}); | |
_chart.point = function(name, x, y) { | |
_points.push({name: name, x: x, y: y}); | |
return _chart; | |
}; | |
_chart.doRender = function() { | |
_g = initOverlayG(); | |
_chart.r().range([_chart.MIN_RADIUS, _chart.width() * _chart.maxBubbleRelativeSize()]); | |
initializeBubbles(); | |
_chart.fadeDeselectedArea(); | |
return _chart; | |
}; | |
function initOverlayG() { | |
_g = _chart.select("g." + BUBBLE_OVERLAY_CLASS); | |
if (_g.empty()) | |
_g = _chart.svg().append("g").attr("class", BUBBLE_OVERLAY_CLASS); | |
return _g; | |
} | |
function initializeBubbles() { | |
var data = mapData(); | |
_points.forEach(function(point) { | |
var nodeG = getNodeG(point, data); | |
var circle = nodeG.select("circle." + BUBBLE_CLASS); | |
if (circle.empty()) | |
circle = nodeG.append("circle") | |
.attr("class", BUBBLE_CLASS) | |
.attr("r", 0) | |
.attr("fill", _chart.initBubbleColor) | |
.on("click", _chart.onClick); | |
dc.transition(circle, _chart.transitionDuration()) | |
.attr("r", function(d) { | |
return _chart.bubbleR(d); | |
}); | |
_chart.doRenderLabel(nodeG); | |
_chart.doRenderTitles(nodeG); | |
}); | |
} | |
function mapData() { | |
var data = {}; | |
_chart.group().all().forEach(function(datum) { | |
data[_chart.keyAccessor()(datum)] = datum; | |
}); | |
return data; | |
} | |
function getNodeG(point, data) { | |
var bubbleNodeClass = BUBBLE_NODE_CLASS + " " + dc.utils.nameToId(point.name); | |
var nodeG = _g.select("g." + dc.utils.nameToId(point.name)); | |
if (nodeG.empty()) { | |
nodeG = _g.append("g") | |
.attr("class", bubbleNodeClass) | |
.attr("transform", "translate(" + point.x + "," + point.y + ")"); | |
} | |
nodeG.datum(data[point.name]); | |
return nodeG; | |
} | |
_chart.doRedraw = function() { | |
updateBubbles(); | |
_chart.fadeDeselectedArea(); | |
return _chart; | |
}; | |
function updateBubbles() { | |
var data = mapData(); | |
_points.forEach(function(point) { | |
var nodeG = getNodeG(point, data); | |
var circle = nodeG.select("circle." + BUBBLE_CLASS); | |
dc.transition(circle, _chart.transitionDuration()) | |
.attr("r", function(d) { | |
return _chart.bubbleR(d); | |
}) | |
.attr("fill", _chart.updateBubbleColor); | |
_chart.doUpdateLabels(nodeG); | |
_chart.doUpdateTitles(nodeG); | |
}); | |
} | |
_chart.debug = function(flag) { | |
if(flag){ | |
var debugG = _chart.select("g." + dc.constants.DEBUG_GROUP_CLASS); | |
if(debugG.empty()) | |
debugG = _chart.svg() | |
.append("g") | |
.attr("class", dc.constants.DEBUG_GROUP_CLASS); | |
var debugText = debugG.append("text") | |
.attr("x", 10) | |
.attr("y", 20); | |
debugG | |
.append("rect") | |
.attr("width", _chart.width()) | |
.attr("height", _chart.height()) | |
.on("mousemove", function() { | |
var position = d3.mouse(debugG.node()); | |
var msg = position[0] + ", " + position[1]; | |
debugText.text(msg); | |
}); | |
}else{ | |
_chart.selectAll(".debug").remove(); | |
} | |
return _chart; | |
}; | |
_chart.anchor(root, chartGroup); | |
return _chart; | |
};dc.rowChart = function (parent, chartGroup) { | |
var _g; | |
var _labelOffsetX = 10; | |
var _labelOffsetY = 15; | |
var _gap = 5; | |
var _rowCssClass = "row"; | |
var _chart = dc.marginable(dc.colorChart(dc.baseChart({}))); | |
var _x; | |
var _elasticX; | |
var _xAxis = d3.svg.axis().orient("bottom"); | |
function calculateAxisScale() { | |
if (!_x || _elasticX) { | |
_x = d3.scale.linear().domain([0, d3.max(_chart.group().all(), _chart.valueAccessor())]) | |
.range([0, _chart.effectiveWidth()]); | |
_xAxis.scale(_x); | |
} | |
} | |
function drawAxis() { | |
var axisG = _g.select("g.axis"); | |
calculateAxisScale(); | |
if (axisG.empty()) | |
axisG = _g.append("g").attr("class", "axis") | |
.attr("transform", "translate(0, " + _chart.effectiveHeight() + ")"); | |
dc.transition(axisG, _chart.transitionDuration()) | |
.call(_xAxis); | |
} | |
_chart.doRender = function () { | |
_chart.resetSvg(); | |
_g = _chart.svg() | |
.append("g") | |
.attr("transform", "translate(" + _chart.margins().left + "," + _chart.margins().top + ")"); | |
drawAxis(); | |
drawGridLines(); | |
drawChart(); | |
return _chart; | |
}; | |
_chart.title(function (d) { | |
return _chart.keyAccessor()(d) + ": " + _chart.valueAccessor()(d); | |
}); | |
_chart.label(function (d) { | |
return _chart.keyAccessor()(d); | |
}); | |
_chart.x = function(x){ | |
if(!arguments.length) return _x; | |
_x = x; | |
return _chart; | |
}; | |
function drawGridLines() { | |
_g.selectAll("g.tick") | |
.select("line.grid-line") | |
.remove(); | |
_g.selectAll("g.tick") | |
.append("line") | |
.attr("class", "grid-line") | |
.attr("x1", 0) | |
.attr("y1", 0) | |
.attr("x2", 0) | |
.attr("y2", function (d) { | |
return -_chart.effectiveHeight(); | |
}); | |
} | |
function drawChart() { | |
drawAxis(); | |
drawGridLines(); | |
var rows = _g.selectAll("g." + _rowCssClass) | |
.data(_chart.group().all()); | |
createElements(rows); | |
removeElements(rows); | |
updateElements(rows); | |
} | |
function createElements(rows) { | |
var rowEnter = rows.enter() | |
.append("g") | |
.attr("class", function (d, i) { | |
return _rowCssClass + " _" + i; | |
}); | |
rowEnter.append("rect").attr("width", 0); | |
createLabels(rowEnter); | |
updateLabels(rows); | |
} | |
function removeElements(rows) { | |
rows.exit().remove(); | |
} | |
function updateElements(rows) { | |
var height = rowHeight(); | |
rows = rows.attr("transform",function (d, i) { | |
return "translate(0," + ((i + 1) * _gap + i * height) + ")"; | |
}).select("rect") | |
.attr("height", height) | |
.attr("fill", _chart.getColor) | |
.on("click", onClick) | |
.classed("deselected", function (d) { | |
return (_chart.hasFilter()) ? !_chart.isSelectedRow(d) : false; | |
}) | |
.classed("selected", function (d) { | |
return (_chart.hasFilter()) ? _chart.isSelectedRow(d) : false; | |
}); | |
dc.transition(rows, _chart.transitionDuration()) | |
.attr("width", function (d) { | |
return _x(_chart.valueAccessor()(d)); | |
}); | |
createTitles(rows); | |
} | |
function createTitles(rows) { | |
if (_chart.renderTitle()) { | |
rows.selectAll("title").remove(); | |
rows.append("title").text(function (d) { | |
return _chart.title()(d); | |
}); | |
} | |
} | |
function createLabels(rowEnter) { | |
if (_chart.renderLabel()) { | |
rowEnter.append("text") | |
.on("click", onClick); | |
} | |
} | |
function updateLabels(rows) { | |
if (_chart.renderLabel()) { | |
rows.select("text") | |
.attr("x", _labelOffsetX) | |
.attr("y", _labelOffsetY) | |
.attr("class", function (d, i) { | |
return _rowCssClass + " _" + i; | |
}) | |
.text(function (d) { | |
return _chart.label()(d); | |
}); | |
} | |
} | |
function numberOfRows() { | |
return _chart.group().all().length; | |
} | |
function rowHeight() { | |
var n = numberOfRows(); | |
return (_chart.effectiveHeight() - (n + 1) * _gap) / n; | |
} | |
function onClick(d) { | |
_chart.onClick(d); | |
} | |
_chart.doRedraw = function () { | |
drawChart(); | |
return _chart; | |
}; | |
_chart.xAxis = function () { | |
return _xAxis; | |
}; | |
_chart.gap = function (g) { | |
if (!arguments.length) return _gap; | |
_gap = g; | |
return _chart; | |
}; | |
_chart.elasticX = function (_) { | |
if (!arguments.length) return _elasticX; | |
_elasticX = _; | |
return _chart; | |
}; | |
_chart.labelOffsetX = function (o) { | |
if (!arguments.length) return _labelOffsetX; | |
_labelOffsetX = o; | |
return _chart; | |
}; | |
_chart.labelOffsetY = function (o) { | |
if (!arguments.length) return _labelOffsetY; | |
_labelOffsetY = o; | |
return _chart; | |
}; | |
_chart.isSelectedRow = function (d) { | |
return _chart.hasFilter(_chart.keyAccessor()(d)); | |
}; | |
return _chart.anchor(parent, chartGroup); | |
}; | |
dc.legend = function () { | |
var LABEL_GAP = 2; | |
var _legend = {}, | |
_parent, | |
_x = 0, | |
_y = 0, | |
_itemHeight = 12, | |
_gap = 5; | |
var _g; | |
_legend.parent = function (p) { | |
if (!arguments.length) return _parent; | |
_parent = p; | |
return _legend; | |
}; | |
_legend.render = function () { | |
_g = _parent.svg().append("g") | |
.attr("class", "dc-legend") | |
.attr("transform", "translate(" + _x + "," + _y + ")"); | |
var itemEnter = _g.selectAll('g.dc-legend-item') | |
.data(_parent.legendables()) | |
.enter() | |
.append("g") | |
.attr("class", "dc-legend-item") | |
.attr("transform", function (d, i) { | |
return "translate(0," + i * legendItemHeight() + ")"; | |
}) | |
.on("mouseover", function(d){ | |
_parent.legendHighlight(d); | |
}) | |
.on("mouseout", function (d) { | |
_parent.legendReset(d); | |
}); | |
itemEnter | |
.append("rect") | |
.attr("width", _itemHeight) | |
.attr("height", _itemHeight) | |
.attr("fill", function(d){return d.color;}); | |
itemEnter.append("text") | |
.text(function(d){return d.name;}) | |
.attr("x", _itemHeight + LABEL_GAP) | |
.attr("y", function(){return _itemHeight / 2 + (this.clientHeight?this.clientHeight:13) / 2 - 2}); | |
}; | |
function legendItemHeight() { | |
return _gap + _itemHeight; | |
} | |
_legend.x = function (x) { | |
if (!arguments.length) return _x; | |
_x = x; | |
return _legend; | |
}; | |
_legend.y = function (y) { | |
if (!arguments.length) return _y; | |
_y = y; | |
return _legend; | |
}; | |
_legend.gap = function (gap) { | |
if (!arguments.length) return _gap; | |
_gap = gap; | |
return _legend; | |
}; | |
_legend.itemHeight = function (h) { | |
if (!arguments.length) return _itemHeight; | |
_itemHeight = h; | |
return _legend; | |
}; | |
return _legend; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang='en'> | |
<head> | |
<meta charset='utf-8'> | |
<title>dc.js Experiment</title> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<script src='crossfilter.js' type='text/javascript'></script> | |
<script src='dc.js' type='text/javascript'></script> | |
<script src='jquery-1.9.1.min.js' type='text/javascript'></script> | |
<script src='bootstrap.min.js' type='text/javascript'></script> | |
<link href='bootstrap.min.css' rel='stylesheet' type='text/css'> | |
<link href='dc.css' rel='stylesheet' type='text/css'> | |
<style type="text/css"></style> | |
<style> | |
h4 span { | |
font-size:14px; | |
font-weight:normal; | |
} | |
h2 { | |
float: right; | |
} | |
h2 span { | |
font-size:14px; | |
font-weight:normal; | |
} | |
</style> | |
</head> | |
<body> | |
<div class='container' style='font: 12px sans-serif;'> | |
<div class="dc-data-count" style="float: left;"> | |
<h2>Part 1 Crimes | |
<span> | |
<span class="filter-count"></span> | |
selected out of | |
<span class="total-count"></span> | |
records | | |
<a href="javascript:dc.filterAll(); dc.renderAll();">Reset All</a> | |
</span> | |
</h2> | |
</div> | |
<div class='row'> | |
<div class='span6' id='dc-magnitude-chart'> | |
<h4>Crimes by Day</h4> | |
</div> | |
<div class='span4' id='dc-dayweek-chart'> | |
<h4>Crimes by Day of Week</h4> | |
</div> | |
</div> | |
<div class='row'> | |
<div class='span12' id='dc-time-chart'> | |
<h4>Crimes by Date</h4> | |
</div> | |
</div> | |
<div class='row'> | |
<div class='span4' id='dc-dayweek-chart'> | |
<h4>Crimes by Day of Week</h4> | |
</div> | |
<!-- <div class='span4' id='blank1'> | |
<h4>Blank 1</h4> | |
</div> | |
<div class='span4' id='blank2'> | |
<h4>Blank 2</h4> | |
</div> --> | |
</div> | |
<!-- <div class='container' style='font: 12px sans-serif;'> | |
<div class="dc-data-count" style="float: left;"> | |
<h2>New Zealand Earthquakes | |
<span> | |
<span class="filter-count"></span> | |
selected out of | |
<span class="total-count"></span> | |
records | | |
<a href="javascript:dc.filterAll(); dc.renderAll();">Reset All</a> | |
</span> | |
</h2> | |
</div> | |
<div class='row'> | |
<div class='span6' id='dc-magnitude-chart'> | |
<h4> | |
Number of Events by Magnitude | |
<span> | |
<a class="reset" | |
href="javascript:magnitudeChart.filterAll();dc.redrawAll();" | |
style="display: none;"> | |
reset | |
</a> | |
</span> | |
</h4> | |
</div> | |
<div class='span6' id='dc-depth-chart'> | |
<h4> | |
Events by Depth (km) | |
<span> | |
<a class="reset" | |
href="javascript:depthChart.filterAll();dc.redrawAll();" | |
style="display: none;"> | |
reset | |
</a> | |
</span> | |
</h4> | |
</div> | |
</div> | |
<div class='row'> | |
<div class='span12' id='dc-time-chart'> | |
<h4> | |
Events per hour | |
<span> | |
<a class="reset" | |
href="javascript:timeChart.filterAll();dc.redrawAll();" | |
style="display: none;"> | |
reset | |
</a> | |
</span> | |
</h4> | |
</div> | |
</div> | |
<div class='row'> | |
<div class='span4' id='dc-dayweek-chart'> | |
<h4> | |
Day of the Week | |
<span> | |
<a class="reset" | |
href="javascript:dayOfWeekChart.filterAll();dc.redrawAll();" | |
style="display: none;"> | |
reset | |
</a> | |
</span> | |
</h4> | |
<div class="clearfix"></div> | |
</div> | |
<div class='span4' id='dc-island-chart'> | |
<h4> | |
North or South Island | |
<span> | |
<a class="reset" | |
href="javascript:islandChart.filterAll();dc.redrawAll();" | |
style="display: none;"> | |
reset | |
</a> | |
</span> | |
</h4> | |
</div> | |
<div class='span4' id='blank2'> | |
<h4>Blank 2</h4> | |
</div> | |
</div> --> | |
<div class='row-fluid'> | |
<div class='span12'> | |
<table class='table table-hover' id='dc-table-graph'> | |
<thead> | |
<tr class='header'> | |
<th>Date</th> | |
<th>UCR</th> | |
<th>Day</th> | |
</tr> | |
</thead> | |
</table> | |
</div> | |
</div> | |
</div> | |
<script type="text/javascript"> | |
// Create the dc.js chart objects & link to div | |
var dataTable = dc.dataTable("#dc-table-graph"); | |
var magnitudeChart = dc.barChart("#dc-magnitude-chart"); | |
// var depthChart = dc.barChart("#dc-depth-chart"); | |
var dayOfWeekChart = dc.rowChart("#dc-dayweek-chart"); | |
// var islandChart = dc.pieChart("#dc-island-chart"); | |
var timeChart = dc.lineChart("#dc-time-chart"); | |
// load data from a csv file | |
d3.csv("ucrdata.csv", function (data) { | |
// format our data | |
//var dtgFormat = d3.time.format("%Y-%m-%dT%H:%M:%S"); | |
//var dtgFormat2 = d3.time.format("%a %e %b %H:%M"); | |
var dtgFormat2 = d3.time.format("%m/%d/%y"); | |
data.forEach(function(d) { | |
// console.log(d); | |
//d.dtg1 = d.origintime.substr(0,10) + " " + d.origintime.substr(11,8); | |
// d.dtg = dtgFormat.parse(d.origintime.substr(0,19)); | |
d.dtg2 = dtgFormat2.parse(d.date); | |
// d.lat = +d.latitude; | |
// d.long = +d.longitude; | |
// d.mag = d3.round(+d.magnitude,1); | |
// d.depth = d3.round(+d.depth,0); | |
//d.date = d.date; | |
// d.time = d.time; | |
d.ucr= d.ucr; | |
d.mag = d.magnitude; | |
}); | |
// Run the data through crossfilter and load our 'facts' | |
var facts = crossfilter(data); | |
var all = facts.groupAll(); | |
// Create datatable dimension | |
var magValue = facts.dimension(function (d) { | |
// console.log(d); | |
return d.mag; | |
}); | |
var magValueGroupCount = magValue.group() | |
.reduceCount(function(d) { return d.mag; }) // counts | |
var volumeByDay = facts.dimension(function(d) { | |
return d3.time.day(d.dtg2); | |
}); | |
var timeDimension = facts.dimension(function (d) { | |
return d.dtg2; | |
}); | |
var volumeByDayGroup = volumeByDay.group() | |
.reduceCount(function(d) { return d.dtg2; }); | |
// row chart Day of Week | |
var dayOfWeek = facts.dimension(function (d) { | |
var day = d.dtg2.getDay(); | |
switch (day) { | |
case 0: | |
return "0.Sun"; | |
case 1: | |
return "1.Mon"; | |
case 2: | |
return "2.Tue"; | |
case 3: | |
return "3.Wed"; | |
case 4: | |
return "4.Thu"; | |
case 5: | |
return "5.Fri"; | |
case 6: | |
return "6.Sat"; | |
} | |
}); | |
var dayOfWeekGroup = dayOfWeek.group(); | |
// count all the facts | |
dc.dataCount(".dc-data-count") | |
.dimension(facts) | |
.group(all); | |
// Setup the charts | |
// // count all the facts | |
// dc.dataCount(".dc-data-count") | |
// .dimension(facts) | |
// .group(all); | |
// // Magnitide Bar Graph Counted | |
// magnitudeChart.width(480) | |
// .height(150) | |
// .margins({top: 10, right: 10, bottom: 20, left: 40}) | |
// .dimension(magValue) | |
// .group(magValueGroupCount) | |
// .transitionDuration(500) | |
// .centerBar(true) | |
// .gap(65) // 65 = norm | |
// // .filter([3, 5]) | |
// .x(d3.scale.linear().domain([0.5, 7.5])) | |
// .elasticY(true) | |
// .xAxis().tickFormat(); | |
// // Depth bar graph | |
// depthChart.width(480) | |
// .height(150) | |
// .margins({top: 10, right: 10, bottom: 20, left: 40}) | |
// .dimension(depthValue) | |
// .group(depthValueGroup) | |
// .transitionDuration(500) | |
// .centerBar(true) | |
// .gap(1) | |
// .x(d3.scale.linear().domain([0, 100])) | |
// .elasticY(true) | |
// .xAxis().tickFormat(function(v) {return v;}); | |
// // time graph | |
// timeChart.width(960) | |
// .height(150) | |
// .transitionDuration(500) | |
// // .mouseZoomable(true) | |
// .margins({top: 10, right: 10, bottom: 20, left: 40}) | |
// .dimension(volumeByHour) | |
// .group(volumeByHourGroup) | |
// // .brushOn(false) // added for title | |
// .title(function(d){ | |
// return dtgFormat2(d.data.key) | |
// + "\nNumber of Events: " + d.data.value; | |
// }) | |
// .elasticY(true) | |
// .x(d3.time.scale().domain(d3.extent(data, function(d) { return d.dtg; }))) | |
// .xAxis(); | |
// // row chart day of week | |
// dayOfWeekChart.width(300) | |
// .height(220) | |
// .margins({top: 5, left: 10, right: 10, bottom: 20}) | |
// .dimension(dayOfWeek) | |
// .group(dayOfWeekGroup) | |
// .colors(d3.scale.category10()) | |
// .label(function (d){ | |
// return d.key.split(".")[1]; | |
// }) | |
// .title(function(d){return d.value;}) | |
// .elasticX(true) | |
// .xAxis().ticks(4); | |
// // islands pie chart | |
// islandChart.width(250) | |
// .height(220) | |
// .radius(100) | |
// .innerRadius(30) | |
// .dimension(islands) | |
// .title(function(d){return d.value;}) | |
// .group(islandsGroup); | |
magnitudeChart.width(480) | |
.height(150) | |
.margins({top: 10, right: 10, bottom: 20, left: 40}) | |
.dimension(magValue) | |
.group(magValueGroupCount) | |
.transitionDuration(500) | |
.centerBar(true) | |
//.gap(65) | |
.gap(40) | |
.filter([3, 5]) | |
.x(d3.scale.linear().domain([0.5, 7.5])) | |
.elasticY(true) | |
.xAxis().tickFormat(); | |
// time graph | |
timeChart.width(960) | |
.height(150) | |
.transitionDuration(500) | |
// .mouseZoomable(true) | |
.margins({top: 10, right: 10, bottom: 20, left: 40}) | |
.dimension(volumeByDay) | |
.group(volumeByDayGroup) | |
// .brushOn(false) | |
.title(function(d){ | |
return dtgFormat2(d.data.key) | |
+ "\nNumber of Events: " + d.data.value; | |
}) | |
.elasticY(true) | |
.x(d3.time.scale().domain(d3.extent(data, function(d) { return d.dtg2; }))) | |
.xAxis(); | |
// row chart day of week | |
dayOfWeekChart.width(300) | |
.height(220) | |
.margins({top: 5, left: 10, right: 10, bottom: 20}) | |
.dimension(dayOfWeek) | |
.group(dayOfWeekGroup) | |
.colors(d3.scale.category10()) | |
.label(function (d){ | |
return d.key.split(".")[1]; | |
}) | |
.title(function(d){return d.value;}) | |
.elasticX(true) | |
.xAxis().ticks(4); | |
// Table of earthquake data | |
dataTable.width(960).height(800) | |
.dimension(timeDimension) | |
.group(function(d) { return "UCR Table" | |
}) | |
.size(100) | |
.columns([ | |
function(d) { return d.dtg2; }, | |
//function(d) { return d.time; }, | |
function(d) { return d.ucr; }, | |
function(d) { return d.mag; }, | |
// function(d) { return d.depth; }, | |
// function(d) { return d.mag; }, | |
// function(d) { return '<a href=\"http://maps.google.com/maps?z=12&t=m&q=loc:' + d.lat + '+' + d.long +"\" target=\"_blank\">Google Map</a>"}, | |
// function(d) { return '<a href=\"http://www.openstreetmap.org/?mlat=' + d.lat + '&mlon=' + d.long +'&zoom=12'+ "\" target=\"_blank\"> OSM Map</a>"} | |
]) | |
.sortBy(function(d){ return d.dtg2; }) | |
.order(d3.ascending); | |
// Render the Charts | |
dc.renderAll(); | |
}); | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license | |
//@ sourceMappingURL=jquery.min.map | |
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; | |
return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) | |
}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.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 contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
incident | date | magnitude | time | crime | location type | ucr | hundred | address | |
---|---|---|---|---|---|---|---|---|---|
14372403 | 10/1/14 | 3.0 | 00:01:00 | TRANSIT FACILITY | LARCENY | [HUND_BLOCK]:100 CENTRAL AV | StreetAddress (42.660487, -73.767583) | ||
14376683 | 10/4/14 | 2.0 | 10:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:0 SECOND ST | StreetAddress (42.658268, -73.753152) | |
14377775 | 10/5/14 | 1.0 | 01:30:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:0 SECOND ST | StreetAddress (42.658268, -73.753152) | |
14378074 | 10/5/14 | 1.0 | 14:45:00 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:100 LARK ST | StreetAddress (42.658834, -73.761085) | ||
14378089 | 10/5/14 | 1.0 | 15:00:00 | VARIETY CONVENIENCE | ROBBERY | [HUND_BLOCK]:0 N SWAN ST | StreetAddress (42.658896, -73.753499) | ||
14378615 | 10/12/14 | 7.0 | 19:00:00 | STREET | LARCENY | [HUND_BLOCK]:200 ELK ST | StreetAddress (42.660629, -73.765670) | ||
14379700 | 10/6/14 | 2.0 | 09:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 LIVINGSTON AV | StreetAddress (42.659761, -73.751879) | |
14381340 | 10/7/14 | 6.0 | 17:00:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:0 WESTERN AV | StreetAddress (42.659226, -73.768959) | |
14382870 | 10/8/14 | 4.0 | 18:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:100 THIRD ST | StreetAddress (42.661403, -73.756707) | |
14386130 | 10/10/14 | 6.0 | 17:15:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:100 ELK ST | StreetAddress (42.657466, -73.762044) | |
14386698 | 10/11/14 | 6.0 | 22:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:0 N LAKE AV | StreetAddress (42.661873, -73.773280) | |
14387968 | 10/12/14 | 1.0 | 08:55:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:CLINTON AV & LEXINGTON AV | Intersection (42.662474, -73.764188) | |
14388672 | 10/12/14 | 1.0 | 21:19:00 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:0 HENRY JOHNSON BL | StreetAddress (42.660389, -73.762198) | ||
14390843 | 10/14/14 | 3.0 | 12:00:00 | THEFT FROM BUILDING | OTHER OUTSIDE LOCATI | LARCENY | [HUND_BLOCK]:100 HENRY JOHNSON BL | StreetAddress (42.661946, -73.760504) | |
14391468 | 10/14/14 | 3.0 | 20:30:00 | THEFT FROM MOTOR VEH | STREET | MV_LARCENY | [HUND_BLOCK]:200 CLINTON AV | StreetAddress (42.658921, -73.758113) | |
14392098 | 10/15/14 | 5.0 | 16:00:00 | THEFT FROM BUILDING | SCHOOL | LARCENY | [HUND_BLOCK]:200 WASHINGTON AV | StreetAddress (42.658357, -73.766228) | |
14392900 | 10/15/14 | 4.0 | 11:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:100 LARK ST | StreetAddress (42.658914, -73.761003) | ||
14395280 | 10/17/14 | 3.0 | 18:30:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:BRADFORD ST & LEXINGTON AV | Intersection (42.659700, -73.767860) | |
14395780 | 10/17/14 | 6.0 | 12:16:00 | THEFT FROM BUILDING | BARBER BEAUTY SHOP | LARCENY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.657667, -73.764350) | |
14397932 | 10/19/14 | 7.0 | 20:30:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:100 LIVINGSTON AV | StreetAddress (42.660797, -73.753658) | ||
14398536 | 10/19/14 | 7.0 | 01:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:300 WASHINGTON AV | StreetAddress (42.658805, -73.767631) | |
14400097 | 10/20/14 | 2.0 | 18:50:00 | THEFT FROM BUILDING | CLOTHING STORE | LARCENY | [HUND_BLOCK]:100 CENTRAL AV | StreetAddress (42.661216, -73.768430) | |
14400830 | 10/21/14 | 2.0 | 23:00:00 | THEFT FROM BUILDING | RESTAURANT | LARCENY | [HUND_BLOCK]:100 HENRY JOHNSON BL | StreetAddress (42.663087, -73.759300) | |
14400960 | 10/21/14 | 2.0 | 18:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:200 COLONIE STREET | StreetAddress (42.662774, -73.754996) | |
14402528 | 10/22/14 | 7.0 | 07:00:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:300 WASHINGTON AV | StreetAddress (42.659886, -73.768926) | |
14402998 | 10/22/14 | 3.0 | 18:30:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:400 WASHINGTON AV | StreetAddress (42.663133, -73.774343) | ||
14403049 | 10/22/14 | 2.0 | 12:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:0 S LAKE AV | StreetAddress (42.660627, -73.774607) | |
14404954 | 10/24/14 | 5.0 | 18:00:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:0 SECOND ST | StreetAddress (42.657934, -73.752593) | |
14405611 | 10/24/14 | 6.0 | 16:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:200 FIRST ST | StreetAddress (42.660625, -73.759145) | ||
14409002 | 10/27/14 | 2.0 | 10:04:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:100 CENTRAL AV | StreetAddress (42.661123, -73.768322) | |
14409389 | 10/27/14 | 2.0 | 15:15:00 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:200 SECOND ST | StreetAddress (42.662151, -73.759960) | ||
14409449 | 10/27/14 | 6.0 | 13:30:00 | OTHER PUBLIC ACCESS | LARCENY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.658334, -73.765106) | ||
14411875 | 10/29/14 | 6.0 | 12:29:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:0 FIRST ST | StreetAddress (42.657674, -73.754017) | |
14412210 | 10/29/14 | 4.0 | 15:30:00 | THEFT FROM BUILDING | OTHER RETAIL STORE | LARCENY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.657667, -73.764350) | |
14412527 | 10/29/14 | 4.0 | 14:30:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:400 CLINTON AV | StreetAddress (42.663008, -73.765136) | |
14413575 | 10/30/14 | 3.0 | 21:26:00 | THEFT FROM BUILDING | RESTAURANT | LARCENY | [HUND_BLOCK]:100 HENRY JOHNSON BLVD | StreetAddress (42.663087, -73.759300) | |
14414703 | 10/31/14 | 5.0 | 22:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:STATE STREET & SPRAGUE PLACE | Intersection (42.658285, -73.768471) | |
14414909 | 10/31/14 | 4.0 | 09:00:00 | STREET | MV_LARCENY | [HUND_BLOCK]:200 SPRUCE ST | StreetAddress (42.657681, -73.760814) | ||
14416411 | 11/1/14 | 7.0 | 06:10:00 | STREET | MV_LARCENY | [HUND_BLOCK]:0 BRADFORD ST | StreetAddress (42.660270, -73.768498) | ||
14416448 | 11/1/14 | 6.0 | 22:53:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:WESTERN AV & S LAKE AV | Intersection (42.660907, -73.774305) | |
14416744 | 11/1/14 | 7.0 | 04:30:00 | STREET | MV_LARCENY | [HUND_BLOCK]:HENRY JOHNSON BLVD & FIRST ST | Intersection (42.661618, -73.760828) | ||
14416756 | 11/1/14 | 3.0 | 10:00:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:100 COLONIE ST | StreetAddress (42.660407, -73.751855) | |
14416861 | 11/1/14 | 7.0 | 01:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 SPRING ST | StreetAddress (42.663100, -73.775570) | |
14416989 | 11/1/14 | 7.0 | 01:00:00 | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 SPRING ST | StreetAddress (42.663100, -73.775570) | ||
14420265 | 11/4/14 | 3.0 | 03:55:00 | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 WESTERN AV | StreetAddress (42.660988, -73.774527) | ||
14424219 | 11/6/14 | 5.0 | 18:45:00 | STREET | AGGRAVATED_ASSAULT | [HUND_BLOCK]:ORANGE ST & HENRY JOHNSON BLVD | Intersection (42.660406, -73.762180) | ||
14424826 | 11/7/14 | 5.0 | 15:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:200 FIRST ST | StreetAddress (42.662799, -73.762799) | ||
14425478 | 11/7/14 | 6.0 | 17:25:00 | OTHER PUBLIC ACCESS | LARCENY | [HUND_BLOCK]:0 LARK ST | StreetAddress (42.661379, -73.757606) | ||
14425629 | 11/7/14 | 6.0 | 19:50:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:0 HENRY JOHNSON BL | StreetAddress (42.660389, -73.762198) | |
14425686 | 11/7/14 | 6.0 | 16:30:00 | THEFT FROM BUILDING | STREET | LARCENY | [HUND_BLOCK]:100 CLINTON AV | StreetAddress (42.657507, -73.755660) | |
14426655 | 11/8/14 | 7.0 | 14:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:200 SHERMAN ST | StreetAddress (42.662839, -73.769127) | |
14427669 | 11/9/14 | 6.0 | 13:00:00 | THEFT FROM MOTOR VEH | PUBLIC TRANSIT VEHIC | LARCENY | [HUND_BLOCK]:200 CENTRAL AV | StreetAddress (42.662425, -73.769808) | |
14427816 | 11/9/14 | 6.0 | 17:00:00 | THEFT FROM BUILDING | STREET | LARCENY | [HUND_BLOCK]:0 S LAKE AV | StreetAddress (42.659892, -73.775399) | |
14427927 | 11/9/14 | 2.0 | 16:00:00 | SINGLE FAMILY HOME | BURGLARY | [HUND_BLOCK]:100 SPRING ST | StreetAddress (42.663100, -73.775570) | ||
14429089 | 11/10/14 | 6.0 | 11:30:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:300 ORANGE ST | StreetAddress (42.660278, -73.761963) | |
14430755 | 11/11/14 | 3.0 | 18:37:00 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:200 SHERIDAN AV | StreetAddress (42.658845, -73.761151) | ||
14433122 | 11/13/14 | 5.0 | 14:04:33 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:200 SECOND ST | StreetAddress (42.662151, -73.759960) | ||
14436090 | 11/15/14 | 7.0 | 15:00:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:LEXINGTON AV & ELK STREET | Intersection (42.660892, -73.765964) | |
14437147 | 11/16/14 | 1.0 | 15:20:00 | STREET | ROBBERY | [HUND_BLOCK]:0 LEXINGTON AV | StreetAddress (42.660963, -73.765861) | ||
14437849 | 11/17/14 | 1.0 | 21:30:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:200 ELK ST | StreetAddress (42.660525, -73.765553) | |
14438118 | 11/17/14 | 7.0 | 08:00:00 | THEFT FROM BUILDING | AUTO SHOP | LARCENY | [HUND_BLOCK]:200 CENTRAL AV | StreetAddress (42.662289, -73.769659) | |
14438324 | 11/17/14 | 2.0 | 08:45:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:0 LARK ST | StreetAddress (42.661379, -73.757606) | |
14439787 | 11/18/14 | 3.0 | 15:31:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:200 CLINTON AV | StreetAddress (42.659325, -73.758822) | ||
14443868 | 11/21/14 | 4.0 | 11:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:400 STATE ST | StreetAddress (42.658249, -73.768408) | |
14444693 | 11/21/14 | 6.0 | 18:30:00 | STREET | LARCENY | [HUND_BLOCK]:100 LARK ST | StreetAddress (42.658834, -73.761085) | ||
14446847 | 11/23/14 | 1.0 | 18:45:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:300 WASHINGTON AV | StreetAddress (42.660921, -73.770146) | |
14447168 | 11/24/14 | 1.0 | 18:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:100 LARK ST | StreetAddress (42.657662, -73.762293) | ||
14447950 | 11/24/14 | 2.0 | 15:20:00 | OTHER OUTSIDE LOCATI | LARCENY | [HUND_BLOCK]:ROBIN ST & WASHINGTON AV | Intersection (42.661230, -73.770510) | ||
14448029 | 11/25/14 | 2.0 | 10:00:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:0 WESTERN AV | StreetAddress (42.659250, -73.769033) | |
14449359 | 11/25/14 | 1.0 | 10:45:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 SPRING ST FLOOR 1 | StreetAddress (42.663100, -73.775570) | |
14449598 | 11/25/14 | 4.0 | 08:00:00 | THEFT FROM BUILDING | FINANCIAL INSTITUTIO | LARCENY | [HUND_BLOCK]:300 CLINTON AV | StreetAddress (42.662206, -73.763730) | |
14449781 | 11/25/14 | 1.0 | 07:30:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:300 CLINTON AV | StreetAddress (42.662354, -73.763983) | |
14452839 | 11/28/14 | 5.0 | 16:00:00 | CLOTHING STORE | BURGLARY | [HUND_BLOCK]:100 CENTRAL AV | StreetAddress (42.660287, -73.767350) | ||
14453446 | 11/28/14 | 4.0 | 14:00:00 | STREET | MV_LARCENY | [HUND_BLOCK]:200 SECOND ST | StreetAddress (42.662935, -73.761354) | ||
14456404 | 12/1/14 | 2.0 | 06:13:40 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:300 ORANGE ST | StreetAddress (42.661379, -73.763899) | |
14456583 | 12/1/14 | 6.0 | 18:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:0 THIRD ST | StreetAddress (42.660420, -73.754956) | ||
14456830 | 12/1/14 | 6.0 | 08:00:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:300 WASHINGTON AV | StreetAddress (42.659213, -73.768075) | |
14458358 | 12/2/14 | 2.0 | 18:00:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:200 FIRST ST | StreetAddress (42.661961, -73.761400) | |
14459735 | 12/3/14 | 6.0 | 15:00:00 | THEFT FROM BUILDING | OTHER OUTSIDE LOCATI | ROBBERY | [HUND_BLOCK]:100 WESTERN AV | StreetAddress (42.661200, -73.775110) | |
14460577 | 12/4/14 | 6.0 | 20:05:00 | SINGLE FAMILY HOME | BURGLARY | [HUND_BLOCK]:100 FIRST ST | StreetAddress (42.660288, -73.758570) | ||
14460988 | 12/4/14 | 5.0 | 12:25:00 | RESIDENTIAL FACILITY | AGGRAVATED_ASSAULT | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.658461, -73.765254) | ||
14461453 | 12/4/14 | 5.0 | 17:55:00 | STREET | ROBBERY | [HUND_BLOCK]:ROBIN ST & SHERMAN ST | Intersection (42.662393, -73.768607) | ||
14463211 | 12/5/14 | 6.0 | 19:45:00 | BAR | BURGLARY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.659204, -73.766117) | ||
14463523 | 12/6/14 | 7.0 | 01:00:00 | STREET | AGGRAVATED_ASSAULT | [HUND_BLOCK]:0 CENTRAL AVE | StreetAddress (42.658068, -73.764810) | ||
14464321 | 12/6/14 | 7.0 | 16:30:00 | RESTAURANT | BURGLARY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.659204, -73.766117) | ||
14467589 | 12/9/14 | 2.0 | 18:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:400 WASHINGTON AVE | StreetAddress (42.663016, -73.774142) | |
14467788 | 12/9/14 | 3.0 | 13:00:00 | STREET | AGGRAVATED_ASSAULT | [HUND_BLOCK]:200 ORANGE ST | StreetAddress (42.657795, -73.757709) | ||
14467814 | 12/9/14 | 7.0 | 21:15:00 | BAR | BURGLARY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.659204, -73.766117) | ||
14467983 | 12/9/14 | 7.0 | 09:30:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:100 COLONIE ST | StreetAddress (42.660407, -73.751855) | |
14470629 | 12/11/14 | 5.0 | 08:00:00 | THEFT FROM MOTOR VEH | PARKING LOT | LARCENY | [HUND_BLOCK]:0 LARK ST | StreetAddress (42.661379, -73.757606) | |
14470681 | 12/20/14 | 5.0 | 13:30:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.659204, -73.766117) | ||
14471760 | 12/12/14 | 6.0 | 11:04:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:100 LIVINGSTON AV | StreetAddress (42.660844, -73.753735) | ||
14472020 | 12/12/14 | 6.0 | 12:30:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:400 STATE ST | StreetAddress (42.657899, -73.767791) | |
14472381 | 12/12/14 | 6.0 | 19:30:00 | STREET | AGGRAVATED_ASSAULT | [HUND_BLOCK]:ORANGE ST & LEXINGTON AV | Intersection (42.661916, -73.764767) | ||
14473187 | 12/13/14 | 5.0 | 14:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:0 SECOND ST | StreetAddress (42.659450, -73.755191) | ||
14473193 | 12/13/14 | 7.0 | 11:00:00 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:UNKNOWN ADDRESS AT LARK & ORANGE | Intersection (42.659411, -73.760494) | ||
14473481 | 12/13/14 | 7.0 | 16:15:00 | STREET | ROBBERY | [HUND_BLOCK]:SECOND & HENRY JOHNSON BL | Intersection (42.662273, -73.760180) | ||
14476911 | 12/16/14 | 3.0 | 08:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:0 ROBIN ST | StreetAddress (42.663008, -73.767952) | |
14477319 | 12/16/14 | 3.0 | 15:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:200 SECOND ST APT 2 | StreetAddress (42.662935, -73.761354) | ||
14477352 | 12/16/14 | 1.0 | 00:00:00 | THEFT FROM BUILDING | STREET | ROBBERY | [HUND_BLOCK]:WASHINGTON AV & HENRY JOHNSON BL | Intersection (42.657951, -73.765393) | |
14478247 | 12/17/14 | 3.0 | 11:00:00 | THEFT FROM MOTOR VEH | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:0 LARK ST | StreetAddress (42.660125, -73.758950) | |
14481308 | 12/19/14 | 5.0 | 12:30:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 LIVINGSTON AV M4 | StreetAddress (42.659761, -73.751879) | |
14484256 | 12/21/14 | 1.0 | 08:00:00 | THEFT FROM BUILDING | SINGLE FAMILY HOME | LARCENY | [HUND_BLOCK]:300 ORANGE ST | StreetAddress (42.660376, -73.762129) | |
14485160 | 12/22/14 | 1.0 | 02:10:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 SHERMAN ST | StreetAddress (42.661201, -73.767269) | |
14485248 | 12/22/14 | 2.0 | 22:30:00 | THEFT FROM MOTOR VEH | STREET | LARCENY | [HUND_BLOCK]:0 ALBANY PLAN OF UNION AV - WASHINGTON P | Intersection (42.658285, -73.768470) | |
14486830 | 12/23/14 | 2.0 | 12:00:00 | MULTIPLE DWELLING | BURGLARY | [HUND_BLOCK]:0 WESTERN AV | StreetAddress (42.659393, -73.769476) | ||
14486941 | 12/23/14 | 2.0 | 21:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:100 THIRD ST 1ST FL | StreetAddress (42.662655, -73.758834) | |
14487451 | 12/23/14 | 3.0 | 16:44:00 | THEFT FROM BUILDING | CLOTHING STORE | LARCENY | [HUND_BLOCK]:200 CENTRAL AV | StreetAddress (42.662154, -73.769510) | |
14490650 | 12/26/14 | 3.0 | 17:00:00 | THEFT FROM BUILDING | OTHER RETAIL STORE | LARCENY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.657667, -73.764350) | |
14492151 | 12/27/14 | 6.0 | 23:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:200 ELK ST | StreetAddress (42.659634, -73.764572) | |
14493371 | 12/28/14 | 1.0 | 10:29:00 | STREET | ROBBERY | [HUND_BLOCK]:100 HENRY JOHNSON BL | StreetAddress (42.663087, -73.759300) | ||
14493669 | 12/28/14 | 1.0 | 15:10:00 | THEFT FROM BUILDING | LIQUOR STORE | LARCENY | [HUND_BLOCK]:0 CENTRAL AV | StreetAddress (42.658150, -73.764900) | |
14494536 | 12/29/14 | 1.0 | 16:00:00 | THEFT FROM BUILDING | MULTIPLE DWELLING | LARCENY | [HUND_BLOCK]:LARK ST (BETWEEN SHERIDAN AV & O | Intersection (42.658816, -73.761102) | |
14495321 | 12/29/14 | 2.0 | 18:31:01 | MULTIPLE DWELLING | AGGRAVATED_ASSAULT | [HUND_BLOCK]:200 SHERIDAN AV | StreetAddress (42.659723, -73.762585) | ||
14496273 | 12/30/14 | 1.0 | 03:00:00 | STREET | AGGRAVATED_ASSAULT | [HUND_BLOCK]:200 LIVINGSTON AV | StreetAddress (42.661349, -73.754586) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment