| 0 | 1 <!DOCTYPE html> | 
|  | 2 <html lang="en"> | 
|  | 3 <head> | 
|  | 4     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" > | 
|  | 5 | 
|  | 6     <style rel="stylesheet"> | 
|  | 7 /*! | 
|  | 8  * Bootstrap v2.0.4 | 
|  | 9  * | 
|  | 10  * Copyright 2012 Twitter, Inc | 
|  | 11  * Licensed under the Apache License v2.0 | 
|  | 12  * http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 13  * | 
|  | 14  * Designed and built with all the love in the world @twitter by @mdo and @fat. | 
|  | 15  */ | 
|  | 16 .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} | 
|  | 17 .clearfix:after{clear:both;} | 
|  | 18 .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} | 
|  | 19 .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} | 
|  | 20 .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} | 
|  | 21 .tooltip.top{margin-top:-2px;} | 
|  | 22 .tooltip.right{margin-left:2px;} | 
|  | 23 .tooltip.bottom{margin-top:2px;} | 
|  | 24 .tooltip.left{margin-left:-2px;} | 
|  | 25 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} | 
|  | 26 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} | 
|  | 27 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} | 
|  | 28 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} | 
|  | 29 .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | 
|  | 30 .tooltip-arrow{position:absolute;width:0;height:0;} | 
|  | 31 | 
|  | 32 </style> | 
|  | 33 | 
|  | 34     <style rel="stylesheet"> | 
|  | 35 /* Main things */ | 
|  | 36 html, body, div, span, h1, h3, h4, h5, h6, blockquote, pre, | 
|  | 37 em, sub, sup, dl, dt, dd, ol, ul, li, | 
|  | 38 fieldset, form, label, | 
|  | 39 table, caption, tbody, tfoot, thead, | 
|  | 40 article, aside, canvas, details, figure, figcaption, footer, header, hgroup, | 
|  | 41 menu, nav, output, section, time { | 
|  | 42     margin: 0; | 
|  | 43     padding: 0; | 
|  | 44     border: 0; | 
|  | 45     font-size: 100%; | 
|  | 46     font: inherit; | 
|  | 47     vertical-align: baseline; | 
|  | 48 } | 
|  | 49 body { | 
|  | 50     margin: 0; | 
|  | 51     font-family: Lucida Grande, Verdana, Arial, sans-serif; | 
|  | 52     font-size: 12px; | 
|  | 53     color: black; | 
|  | 54     padding-bottom: 30px; | 
|  | 55 } | 
|  | 56 a { | 
|  | 57     text-decoration: none; | 
|  | 58     /*color: #0c4f72;*/ | 
|  | 59     color: #0077B5; | 
|  | 60     border-bottom: 1px solid #487b95; | 
|  | 61     border-color: #487b95; /* #487b95 */ | 
|  | 62     border-color: rgba(12, 79, 114, 0.2); /* #0c4f72; */ /* #a0d2eb; */ /*rgba(0, 88, cc, 0.3);*/ | 
|  | 63 } | 
|  | 64 a:visited { | 
|  | 65     text-decoration: none; | 
|  | 66     color: #8C66B2; | 
|  | 67     border-bottom: 1px solid #8c66b2; | 
|  | 68     border-color: #8c66b2; | 
|  | 69     border-color: rgba(102, 51, 153, 0.2); | 
|  | 70 } | 
|  | 71 a:hover { | 
|  | 72     text-decoration: none; | 
|  | 73     color: #b33; /* #0088cc; */ | 
|  | 74     border-bottom: 1px solid #ffcccc; | 
|  | 75     border-color: #ffcccc; | 
|  | 76     border-color: rgba(255, 0, 0, 0.2); /* #55b2e0; */ /*#005580;*/ | 
|  | 77 } | 
|  | 78 a.dark_bg_link { | 
|  | 79     color: white; /* #0088cc; */ | 
|  | 80     border-bottom: 1px solid #cccccc; | 
|  | 81     border-color: #cccccc; | 
|  | 82 } | 
|  | 83 a.dark_bg_link:hover { | 
|  | 84     color: white; /* #0088cc; */ | 
|  | 85     border-bottom: 1px solid white; | 
|  | 86 } | 
|  | 87 | 
|  | 88 .leading_link_dot { | 
|  | 89     border-bottom: white solid 1px; | 
|  | 90 } | 
|  | 91 | 
|  | 92 a.header_link, a.header_link:hover, a.header_link:visited { | 
|  | 93     color: black; | 
|  | 94     border-bottom: 1px solid #bbb; | 
|  | 95 } | 
|  | 96 | 
|  | 97 | 
|  | 98 .dotted-link { | 
|  | 99     cursor: pointer; | 
|  | 100     text-decoration: none; | 
|  | 101     /*color: #0c4f72;*/ | 
|  | 102     color: #0077B5; | 
|  | 103     border-bottom: 1px dashed #487b95; | 
|  | 104     border-color: #487b95; /* #487b95 */ | 
|  | 105     border-color: rgba(12, 79, 114, 0.2); | 
|  | 106 } | 
|  | 107 .dotted-link:hover { | 
|  | 108     text-decoration: none; | 
|  | 109     color: #b33 !important; | 
|  | 110     border-bottom: 1px dashed #b33 !important; | 
|  | 111     border-color: rgba(255, 0, 0, 0.2) !important; | 
|  | 112 } | 
|  | 113 .js:visited { | 
|  | 114     color: #0077B5; | 
|  | 115     border-bottom: 1px dashed #487b95; | 
|  | 116     border-color: #487b95; | 
|  | 117     border-color: rgba(12, 79, 114, 0.2); | 
|  | 118 } | 
|  | 119 | 
|  | 120 .selected-switch { | 
|  | 121     background-color: #fafad2; | 
|  | 122 } | 
|  | 123 | 
|  | 124 .json-code { | 
|  | 125     display: none; | 
|  | 126 } | 
|  | 127 .smallcapitals { | 
|  | 128     font-size: .875em; | 
|  | 129     letter-spacing: .15em; | 
|  | 130     margin-right: -.15em; | 
|  | 131 } | 
|  | 132 .highlight { | 
|  | 133     background-color:#FFF9B5; | 
|  | 134     padding: 0 3px; | 
|  | 135     margin-left: -3px; | 
|  | 136 } | 
|  | 137 | 
|  | 138 ul.list { | 
|  | 139     list-style-type: none; | 
|  | 140     padding: 0 0 0 2em; | 
|  | 141     margin: -0.5em 0 0 0; | 
|  | 142 } | 
|  | 143 ul.list li { | 
|  | 144     margin-bottom: 0.7em; | 
|  | 145 } | 
|  | 146 | 
|  | 147 ul.mdash { | 
|  | 148     margin: -1em 0 0 0; | 
|  | 149     padding: 0 0 0 2em; | 
|  | 150 } | 
|  | 151 ul.mdash li { | 
|  | 152     margin-bottom: 0.7em; | 
|  | 153     list-style-type: none; | 
|  | 154     text-indent: -1.3em; | 
|  | 155     behavior: expression(!this.before ? this.before = this.innerHTML = '— ' + this.innerHTML : ''); | 
|  | 156 } | 
|  | 157 ul.mdash li:before { | 
|  | 158     content: '\2014\a0'; | 
|  | 159 } | 
|  | 160 | 
|  | 161 .small_line_indent { | 
|  | 162     height: 0; | 
|  | 163     margin-top: -7px; | 
|  | 164 } | 
|  | 165 /************/ | 
|  | 166 | 
|  | 167 /* Tooltips */ | 
|  | 168 .tooltip { | 
|  | 169     font-size: 0.9em; | 
|  | 170     margin-bottom: 5px; | 
|  | 171 } | 
|  | 172 .tooltip.in { | 
|  | 173     opacity: 1; | 
|  | 174 } | 
|  | 175 .tooltip-inner { | 
|  | 176     text-align: left; | 
|  | 177 } | 
|  | 178 .tooltip-link, | 
|  | 179 .tooltip-link:visited { | 
|  | 180     text-decoration: none; | 
|  | 181     color: #000; | 
|  | 182     border-bottom: 1px dashed #bbb; | 
|  | 183     cursor: hand; | 
|  | 184 } | 
|  | 185 .tooltip-link:hover { | 
|  | 186     text-decoration: none; | 
|  | 187     color: #b33; | 
|  | 188     border-bottom: 1px dashed #b33; | 
|  | 189 } | 
|  | 190 /************/ | 
|  | 191 | 
|  | 192 /*********/ | 
|  | 193 | 
|  | 194 .hs { | 
|  | 195     /* Полупробел для | 
|  | 196   разделения разрядов чисел: | 
|  | 197   10<span class="hs"></span>000 */ | 
|  | 198     margin-left: .2em; | 
|  | 199 } | 
|  | 200 | 
|  | 201 .rhs { | 
|  | 202     /* Полупробел на случай, | 
|  | 203   если реальный пробел важен, | 
|  | 204   например между ценой и валютой: | 
|  | 205   1<span class="rhs"> </span>$ */ | 
|  | 206     font-size: 50%; | 
|  | 207     line-height: 1; | 
|  | 208 } | 
|  | 209 | 
|  | 210 /*9490<span class="rhs"> </span>€<br/>*/ | 
|  | 211 /*12<span class="hs"></span>650<span class="rhs"> </span>$<br/>*/ | 
|  | 212 /*379<span class="hs"></span>000<span*/ | 
|  | 213 /*class="rhs"> </span><span class="b-rub">Р</span><br/>*/ | 
|  | 214 /*100<span class="hs"></span>500<span class="rhs"> </span>+*/ | 
|  | 215 | 
|  | 216 /* for wrapping long words with no spaces */ | 
|  | 217 /* http://stackoverflow.com/questions/3247358/css-how-do-i-wrap-text-with-no-whitespace-inside-a-td */ | 
|  | 218 .wrapword { | 
|  | 219     white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */ | 
|  | 220     white-space: -pre-wrap;      /* Opera 4-6 */ | 
|  | 221     white-space: -o-pre-wrap;    /* Opera 7 */ | 
|  | 222     white-space: pre-wrap;       /* css-3 */ | 
|  | 223     word-wrap: break-word;       /* Internet Explorer 5.5+ */ | 
|  | 224     word-break: break-all; | 
|  | 225     white-space: normal; | 
|  | 226 } | 
|  | 227 | 
|  | 228 | 
|  | 229 .space_1px { | 
|  | 230     height: 1px; | 
|  | 231 } | 
|  | 232 .space_2px { | 
|  | 233     height: 2px; | 
|  | 234 } | 
|  | 235 .space_3px { | 
|  | 236     height: 3px; | 
|  | 237 } | 
|  | 238 .space_4px { | 
|  | 239     height: 4px; | 
|  | 240 } | 
|  | 241 .space_5px { | 
|  | 242     height: 5px; | 
|  | 243 } | 
|  | 244 .space_6px { | 
|  | 245     height: 6px; | 
|  | 246 } | 
|  | 247 .space_7px { | 
|  | 248     height: 7px; | 
|  | 249 } | 
|  | 250 .space_8px { | 
|  | 251     height: 8px; | 
|  | 252 } | 
|  | 253 .space_9px { | 
|  | 254     height: 9px; | 
|  | 255 } | 
|  | 256 .space_10px { | 
|  | 257     height: 10px; | 
|  | 258 } | 
|  | 259 .layout-table { | 
|  | 260     width: 99%; | 
|  | 261     border-spacing: 0; | 
|  | 262 } | 
|  | 263 | 
|  | 264 .layout-table td.layout-table-td { | 
|  | 265     vertical-align: top; | 
|  | 266     padding: 0; | 
|  | 267 } | 
|  | 268 .layout-table td.layout-table-fst-td { | 
|  | 269     min-width: 400px; | 
|  | 270     padding-right: 50px; | 
|  | 271 } | 
|  | 272 .layout-table td.layout-table-snd-td { | 
|  | 273     min-width: 200px; | 
|  | 274 } | 
|  | 275 .layout-table td.layout-table-trd-td { | 
|  | 276 } | 
|  | 277 | 
|  | 278 .top-panel { | 
|  | 279     background-color: #444; | 
|  | 280     color: white; | 
|  | 281     min-width: 650px; | 
|  | 282     padding: 8px 10px 0 147px; | 
|  | 283     min-height: 70px; | 
|  | 284     text-shadow: -1px -1px 0 #111; | 
|  | 285 } | 
|  | 286 .top-panel span { | 
|  | 287     color: white; | 
|  | 288 } | 
|  | 289 .top-panel a { | 
|  | 290     color: white; | 
|  | 291     border-bottom: 1px solid white; | 
|  | 292 } | 
|  | 293 #to_main_menu_button a { | 
|  | 294     border-bottom: none; | 
|  | 295 } | 
|  | 296 .page_title { | 
|  | 297     margin-top: -3px; | 
|  | 298     margin-bottom: -3px; | 
|  | 299     color: white; | 
|  | 300 } | 
|  | 301 .page_subtitle { | 
|  | 302     line-height: 100%; | 
|  | 303     white-space: nowrap; | 
|  | 304 } | 
|  | 305 .content { | 
|  | 306     margin-left: 147px; | 
|  | 307     width: 90%; | 
|  | 308     /*padding-top: 20px;*/ | 
|  | 309     margin-bottom: 0; | 
|  | 310     /*padding-bottom: 50px;*/ | 
|  | 311 /*{#        padding-right: 20px;#}*/ | 
|  | 312 } | 
|  | 313 .p_after_content { | 
|  | 314     margin-left: 147px; | 
|  | 315 } | 
|  | 316 .links_after_content{ | 
|  | 317     font-size: 14px; | 
|  | 318 } | 
|  | 319 | 
|  | 320 p { | 
|  | 321     display: block; | 
|  | 322     font-size: 12px; | 
|  | 323 } | 
|  | 324 | 
|  | 325 h1 { | 
|  | 326     display: block; | 
|  | 327     font-size: 26px; | 
|  | 328     padding: 0 -3px 0 5px; | 
|  | 329     -webkit-margin-before: 5px; | 
|  | 330     -webkit-margin-after: 0px; | 
|  | 331     -webkit-margin-start: 0px; | 
|  | 332     -webkit-margin-end: 0px; | 
|  | 333     font-weight: bold; | 
|  | 334 } | 
|  | 335 | 
|  | 336 #header { | 
|  | 337     display: block; | 
|  | 338     width: 100%; | 
|  | 339     margin-bottom: 10px; | 
|  | 340 } | 
|  | 341 | 
|  | 342 .logo_img { | 
|  | 343     height: 40px; | 
|  | 344     margin-bottom: -10px; | 
|  | 345     margin-left: -6px; | 
|  | 346     margin-right: -7px; | 
|  | 347 } | 
|  | 348 </style> | 
|  | 349 | 
|  | 350     <style rel="stylesheet"> | 
|  | 351 .report-and-plots { | 
|  | 352     margin-top: 15px; | 
|  | 353 } | 
|  | 354 | 
|  | 355 /****************/ | 
|  | 356 /* REPORT TABLE */ | 
|  | 357 .report { | 
|  | 358     margin: 0 100px 50px 0; | 
|  | 359     float: left; | 
|  | 360     font-size: 1em; | 
|  | 361 } | 
|  | 362 | 
|  | 363 #main_report { | 
|  | 364     /*min-width: 600px;*/ | 
|  | 365 } | 
|  | 366 | 
|  | 367 /*#extended_link {*/ | 
|  | 368     /*margin-top: 5px;*/ | 
|  | 369 /*}*/ | 
|  | 370 | 
|  | 371 #ref_report { | 
|  | 372     /*min-width: 300px;*/ | 
|  | 373     margin-right: 0; | 
|  | 374     margin-bottom: 20px; | 
|  | 375     /*margin-right: 200px;*/ | 
|  | 376 } | 
|  | 377 | 
|  | 378 .report td { | 
|  | 379     margin: 0; | 
|  | 380     padding: 2px 0.6em 0 14px; | 
|  | 381     /*min-width: 100px;*/ | 
|  | 382     max-width: 400px; | 
|  | 383     white-space: nowrap; | 
|  | 384 } | 
|  | 385 .report td.number { | 
|  | 386     text-align: right; | 
|  | 387 } | 
|  | 388 | 
|  | 389 .report tr.top_row_tr td, | 
|  | 390 .report tr.group_header td { | 
|  | 391     font-weight: bold; | 
|  | 392     border-bottom: 1px solid #ddd; | 
|  | 393 } | 
|  | 394 .report tr.group_header td { | 
|  | 395     height: 20px; | 
|  | 396     vertical-align: bottom; | 
|  | 397 } | 
|  | 398 | 
|  | 399 #ref_report tr.top_row_tr td, | 
|  | 400 #ref_report tr.group_header td { | 
|  | 401     font-weight: normal; | 
|  | 402 } | 
|  | 403 | 
|  | 404 .report tr td:first-child { | 
|  | 405     padding-left: 0; | 
|  | 406 } | 
|  | 407 .report tr td:last-child { | 
|  | 408     padding-right: 0; | 
|  | 409 } | 
|  | 410 | 
|  | 411 .report tr.row_hidden, tr.group_empty { | 
|  | 412     display: none; | 
|  | 413 } | 
|  | 414 | 
|  | 415 .report tr.secondary_hidden { | 
|  | 416     display: none; | 
|  | 417 } | 
|  | 418 | 
|  | 419 /*.report td.secondary_td {*/ | 
|  | 420 	/*padding-left: 10px !important;*/ | 
|  | 421 /*}*/ | 
|  | 422 | 
|  | 423 span.heatmap_legend { | 
|  | 424     font-size: 11px; | 
|  | 425     display: inline-block; | 
|  | 426 } | 
|  | 427 | 
|  | 428 #heatmap_header { | 
|  | 429     margin-right: 30px; | 
|  | 430 } | 
|  | 431 | 
|  | 432 #combined_reference_length { | 
|  | 433     padding-top: 1px; | 
|  | 434     padding-bottom: 15px; | 
|  | 435 } | 
|  | 436 | 
|  | 437 span.metric-name.expandable { | 
|  | 438     margin-left: -13px; | 
|  | 439 } | 
|  | 440 | 
|  | 441 span.metric-name.secondary { | 
|  | 442     margin-left: 13px; | 
|  | 443 } | 
|  | 444 | 
|  | 445 span.metric-name.expandable.collapsed::before { | 
|  | 446     content: '+ '; | 
|  | 447     color: #CCC; | 
|  | 448     cursor: pointer; | 
|  | 449 } | 
|  | 450 | 
|  | 451 span.metric-name.expandable.expanded::before { | 
|  | 452     content: '\2212\a0';  /* &minus  */ | 
|  | 453     color: #CCC; | 
|  | 454     cursor: pointer; | 
|  | 455 } | 
|  | 456 | 
|  | 457 .report_legend { | 
|  | 458     padding-left: 15px;  /* compensate drag handles */ | 
|  | 459 } | 
|  | 460 | 
|  | 461 #contigs_are_ordered { | 
|  | 462     z-index: 0; | 
|  | 463     position: relative; | 
|  | 464 } | 
|  | 465 | 
|  | 466 | 
|  | 467 /*.report .report-table-header { | 
|  | 468     font-weight: bold; | 
|  | 469 }*/ | 
|  | 470 | 
|  | 471 /*.report thead td { | 
|  | 472     border-bottom: 1px solid #bbb; | 
|  | 473 }*/ | 
|  | 474 | 
|  | 475 | 
|  | 476 /*************/ | 
|  | 477 /* Draggable */ | 
|  | 478 table.moving_table { | 
|  | 479     box-shadow: -0px 0px 5px 1px #888888; | 
|  | 480     -moz-box-shadow: -0px 0px 5px 1px #888888; | 
|  | 481     -webkit-box-shadow: -0px 0px 5px 1px #888888; | 
|  | 482     /*outline: 1px solid #888888;*/ | 
|  | 483     background-color: white; | 
|  | 484     z-index: 3 !important; | 
|  | 485 } | 
|  | 486 | 
|  | 487 table.draggable .drag_handle { | 
|  | 488     padding: 2px 1px 0 1px; | 
|  | 489     margin: 0 2px 0 1px; | 
|  | 490 | 
|  | 491     cursor: grab; | 
|  | 492     cursor: -moz-grab; | 
|  | 493     cursor: -webkit-grab; | 
|  | 494 } | 
|  | 495 | 
|  | 496 table.draggable .drag_handle .drag_image { | 
|  | 497     height: 9px; | 
|  | 498     width: 9px; | 
|  | 499     display: inline-block; | 
|  | 500     background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVQImV2OsQ3FIAxEz2AhCAukyATZf5ZMQI8okZUjhfWj6F/pd09n6b1f1wUgxkgSAACS53lqSmnfdxHBLyJCMucsc877vv201nobKSUl2VoLIeATksdxKEmf+UqOxczGGDHGP7Ztm5qZmfmkYx8upehaq/fu4P2WZK1VAdRaAbjqXghBVR9BvlQcgtQsKgAAAABJRU5ErkJggg==") no-repeat; | 
|  | 501 } | 
|  | 502 | 
|  | 503 table.draggable .drag_handle:active, | 
|  | 504 table.draggable td.cell_of_moving_table .drag_handle { | 
|  | 505     cursor: grabbing !important; | 
|  | 506     cursor: -moz-grabbing !important; | 
|  | 507     cursor: -webkit-grabbing !important; | 
|  | 508 } | 
|  | 509 | 
|  | 510 /* Override the styles for the first and the last columns of the table.report. | 
|  | 511    The cloned table contains a single column which is both first and last, | 
|  | 512    and we don't need it to inherit those styles. */ | 
|  | 513 table.draggable td.cell_of_moving_table { | 
|  | 514     padding-left: 14px !important; | 
|  | 515     padding-right: 0.6em !important; | 
|  | 516 } | 
|  | 517 | 
|  | 518 table.draggable td.hovered_column_td { | 
|  | 519     background-color: #cccccc; | 
|  | 520 } | 
|  | 521 | 
|  | 522 table.draggable td.second_through_last_col_headers_td { | 
|  | 523     padding-left: 0 !important;  /* compensate handle images */ | 
|  | 524 } | 
|  | 525 | 
|  | 526 table.draggable td.cell_of_empty_space * { | 
|  | 527     visibility: hidden; | 
|  | 528 } | 
|  | 529 | 
|  | 530 table.draggable td.cell_of_empty_space { | 
|  | 531     border: none !important; | 
|  | 532   /*border-left: 1px solid #888888; | 
|  | 533     border-right: 1px solid #888888; | 
|  | 534     margin-right: -1px !important; | 
|  | 535     margin-left: -1px !important;  */ | 
|  | 536 } | 
|  | 537 | 
|  | 538 /*table.draggable td.bottom_cell_of_empty_space { | 
|  | 539     border-bottom: 1px solid #888888  !important; | 
|  | 540 } | 
|  | 541 | 
|  | 542 table.draggable td.top_cell_of_empty_space { | 
|  | 543     border-top: 1px solid #888888  !important; | 
|  | 544     /*margin-top: -1px; | 
|  | 545 }*/ | 
|  | 546 | 
|  | 547 table.draggable td.top_cell_of_empty_space { | 
|  | 548 } | 
|  | 549 | 
|  | 550 table.draggable td.left_to_cell_of_empty_space { | 
|  | 551     /*outline-left: 1px solid #888888;*/ | 
|  | 552 } | 
|  | 553 | 
|  | 554 table.draggable td.right_to_cell_of_empty_space { | 
|  | 555     /*outline-right: 1px solid #888888;*/ | 
|  | 556 } | 
|  | 557 | 
|  | 558 /********/ | 
|  | 559 /* META */ | 
|  | 560 #main_ref_genome { | 
|  | 561 | 
|  | 562 } | 
|  | 563 | 
|  | 564 table#refgenome td.last_row { | 
|  | 565     border-top: 1px solid #ddd; | 
|  | 566 } | 
|  | 567 | 
|  | 568 /************/ | 
|  | 569 /* PLOTTING */ | 
|  | 570 .plot-switch { | 
|  | 571     margin-left: 10px; | 
|  | 572 } | 
|  | 573 | 
|  | 574 .plot-mis-type-switch { | 
|  | 575     margin-left: 23px; | 
|  | 576 } | 
|  | 577 | 
|  | 578 .plot-wrapper { | 
|  | 579     padding-right: 80px; | 
|  | 580 } | 
|  | 581 | 
|  | 582 .plot-header { | 
|  | 583     margin-left: 0; | 
|  | 584     font-weight: bold; | 
|  | 585     height: 1.5em; | 
|  | 586     display: block; | 
|  | 587 } | 
|  | 588 | 
|  | 589 .plots { | 
|  | 590     margin-left: -30px; | 
|  | 591     margin-right: 70px; | 
|  | 592     margin-top: 2px; | 
|  | 593     margin-bottom: 50px; | 
|  | 594     float: left; | 
|  | 595 } | 
|  | 596 .plots td { | 
|  | 597     vertical-align: top; | 
|  | 598     white-space: nowrap; | 
|  | 599 } | 
|  | 600 | 
|  | 601 .plots div#plots-switches, tr#plots-into-tr p { | 
|  | 602     padding-left: 30px; | 
|  | 603 } | 
|  | 604 | 
|  | 605 #legend-placeholder { | 
|  | 606     min-width: 80px; | 
|  | 607     margin-top: -2px; | 
|  | 608     margin-left: -5px; | 
|  | 609     position: relative; | 
|  | 610     z-index: 0; | 
|  | 611 } | 
|  | 612 | 
|  | 613 .legendColorBox div { | 
|  | 614     display: none; | 
|  | 615 } | 
|  | 616 | 
|  | 617 #legend-placeholder td { | 
|  | 618     vertical-align: top; | 
|  | 619     white-space: nowrap; | 
|  | 620 } | 
|  | 621 | 
|  | 622 #plot-placeholder { | 
|  | 623     width: 986px; | 
|  | 624     height: 600px; | 
|  | 625 | 
|  | 626     /* for auto sizing plots when resizing the page | 
|  | 627     min-width: 500px; | 
|  | 628     min-height: 500px; | 
|  | 629     width: 100%; | 
|  | 630     min-height: 400px; | 
|  | 631     height: 50%;    */ | 
|  | 632 | 
|  | 633     margin-left: -55px; | 
|  | 634     margin-right: 20px; | 
|  | 635     float: left; | 
|  | 636 | 
|  | 637     z-index: 2; | 
|  | 638 } | 
|  | 639 | 
|  | 640 #change-assembly { | 
|  | 641     white-space: nowrap; | 
|  | 642     width: 0; | 
|  | 643 } | 
|  | 644 | 
|  | 645 /*************/ | 
|  | 646 /* Plot tips */ | 
|  | 647 #plot_tip { | 
|  | 648     position: absolute; | 
|  | 649     opacity: 1; | 
|  | 650     padding: 2px 5px 2px 5px; | 
|  | 651 | 
|  | 652     z-index: 1; | 
|  | 653 } | 
|  | 654 | 
|  | 655 #plot_tip_vertical_rule, #plot_tip_horizontal_rule { | 
|  | 656     position: absolute; | 
|  | 657     border: 1px solid #BBB; | 
|  | 658     z-index: -2; | 
|  | 659 } | 
|  | 660 | 
|  | 661 #plot_tip_vertical_rule { | 
|  | 662     border-left: 1px; | 
|  | 663 } | 
|  | 664 | 
|  | 665 #plot_tip_horizontal_rule { | 
|  | 666     border-top: 1px; | 
|  | 667 } | 
|  | 668 | 
|  | 669 .white_stroked { | 
|  | 670     color: black; | 
|  | 671     background-color: white; | 
|  | 672     text-shadow: | 
|  | 673         -3px -3px 0 white, | 
|  | 674         3px -3px 0 white, | 
|  | 675         -3px 3px 0 white, | 
|  | 676         3px 3px 0 white; | 
|  | 677 } | 
|  | 678 | 
|  | 679 img.icon_plot { | 
|  | 680     width: 14px; | 
|  | 681     height: 12px; | 
|  | 682     display: inline-block; | 
|  | 683     content: ''; | 
|  | 684     background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7oGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU1NzcyLCAyMDE0LzAxLzEzLTE5OjQ0OjAwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA4LTA3VDIxOjE2OjMyKzAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDphYjJhNzRkZi04MjcxLTQ1NjctOTgxNy0zNTVkNTAwNmQ5OTk8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmVlMTJmZGRkLWVkNzgtNDE5Yi05OTA3LWU0OTk5MmQ1MjY0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjQzY2E0MmJhLWQ2YmItNGQ5MC05MDQ0LTc2NDJiMjgxNGVjZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMTowMjo1NSswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFiMmE3NGRmLTgyNzEtNDU2Ny05ODE3LTM1NWQ1MDA2ZDk5OTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6T8SobAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAD7SURBVHjaYvz//z8DOYCJgUxAHY393d3PGRgYPqDjG4sWfnh348ZzZLUsyJz///5JwNjPP/1guPbuG4MJ63cGtn9/GQSlpfhx2sjCx/ft8apVDF/OnmF4zcjG8OL7H4YDxy8wfPcMYnjNyv0Np8bf378xiGqpMzz9/Z/h7c6dDKab5jA4mOsyPPr+n+Hhq/cMOJ3K9OMbw0cdfYY3nxkYDPlvMHxh/MbALyvH4IklcFA0sjAzc737ysAg9vc3g4CmBoOApgayNBcyhxE5ASRERDwX4OXk5GDnYPjy8xcDAyMjA8P//wy/f/1mUFRW/l5RVy+JVePgTjmAAQCr211NDit/xwAAAABJRU5ErkJggg=="); | 
|  | 685 } | 
|  | 686 | 
|  | 687 #sortRefsBtn label { | 
|  | 688     display: block; | 
|  | 689     margin-left: 20px; | 
|  | 690 } | 
|  | 691 #sortRefsBtn input { | 
|  | 692     float: left; | 
|  | 693     margin-left: -20px; | 
|  | 694     margin-right: 7px; | 
|  | 695 } | 
|  | 696 | 
|  | 697 #mincontig { | 
|  | 698     margin-bottom: 0; | 
|  | 699 } | 
|  | 700 </style> | 
|  | 701 | 
|  | 702 | 
|  | 703     <script type="text/javascript"> | 
|  | 704 /*! jQuery v1.8.2 jquery.com | jquery.org/license */ | 
|  | 705 (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,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%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); | 
|  | 706 </script> | 
|  | 707 | 
|  | 708 <script type="text/javascript"> | 
|  | 709 (function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=aB.options.lineWidth;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}/*H.stroke()*/}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show||aP.dashes.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery); | 
|  | 710 </script> | 
|  | 711 | 
|  | 712 <script type="text/javascript"> | 
|  | 713 if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()}; | 
|  | 714 </script> | 
|  | 715 | 
|  | 716 <script type="text/javascript"> | 
|  | 717 /* | 
|  | 718  * jQuery.flot.dashes | 
|  | 719  * | 
|  | 720  * options = { | 
|  | 721  *   series: { | 
|  | 722  *     dashes: { | 
|  | 723  * | 
|  | 724  *       // show | 
|  | 725  *       // default: false | 
|  | 726  *       // Whether to show dashes for the series. | 
|  | 727  *       show: <boolean>, | 
|  | 728  * | 
|  | 729  *       // lineWidth | 
|  | 730  *       // default: 2 | 
|  | 731  *       // The width of the dashed line in pixels. | 
|  | 732  *       lineWidth: <number>, | 
|  | 733  * | 
|  | 734  *       // dashLength | 
|  | 735  *       // default: 10 | 
|  | 736  *       // Controls the length of the individual dashes and the amount of | 
|  | 737  *       // space between them. | 
|  | 738  *       // If this is a number, the dashes and spaces will have that length. | 
|  | 739  *       // If this is an array, it is read as [ dashLength, spaceLength ] | 
|  | 740  *       dashLength: <number> or <array[2]> | 
|  | 741  *     } | 
|  | 742  *   } | 
|  | 743  * } | 
|  | 744  */ | 
|  | 745 (function($){ | 
|  | 746 | 
|  | 747   function init(plot) { | 
|  | 748 | 
|  | 749     plot.hooks.processDatapoints.push(function(plot, series, datapoints) { | 
|  | 750 | 
|  | 751       if (!series.dashes.show) return; | 
|  | 752 | 
|  | 753       plot.hooks.draw.push(function(plot, ctx) { | 
|  | 754 | 
|  | 755         var plotOffset = plot.getPlotOffset(), | 
|  | 756             axisx = series.xaxis, | 
|  | 757             axisy = series.yaxis; | 
|  | 758 | 
|  | 759         function plotDashes(xoffset, yoffset) { | 
|  | 760 | 
|  | 761           var points = datapoints.points, | 
|  | 762               ps = datapoints.pointsize, | 
|  | 763               prevx = null, | 
|  | 764               prevy = null, | 
|  | 765               dashRemainder = 0, | 
|  | 766               dashOn = true, | 
|  | 767               dashOnLength, | 
|  | 768               dashOffLength; | 
|  | 769 | 
|  | 770           if (series.dashes.dashLength[0]) { | 
|  | 771             dashOnLength = series.dashes.dashLength[0]; | 
|  | 772             if (series.dashes.dashLength[1]) { | 
|  | 773               dashOffLength = series.dashes.dashLength[1]; | 
|  | 774             } else { | 
|  | 775               dashOffLength = dashOnLength; | 
|  | 776             } | 
|  | 777           } else { | 
|  | 778             dashOffLength = dashOnLength = series.dashes.dashLength; | 
|  | 779           } | 
|  | 780 | 
|  | 781           ctx.beginPath(); | 
|  | 782 | 
|  | 783           for (var i = ps; i < points.length; i += ps) { | 
|  | 784 | 
|  | 785             var x1 = points[i - ps], | 
|  | 786                 y1 = points[i - ps + 1], | 
|  | 787                 x2 = points[i], | 
|  | 788                 y2 = points[i + 1]; | 
|  | 789 | 
|  | 790             if (x1 == null || x2 == null) continue; | 
|  | 791 | 
|  | 792             // clip with ymin | 
|  | 793             if (y1 <= y2 && y1 < axisy.min) { | 
|  | 794               if (y2 < axisy.min) continue;   // line segment is outside | 
|  | 795               // compute new intersection point | 
|  | 796               x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; | 
|  | 797               y1 = axisy.min; | 
|  | 798             } else if (y2 <= y1 && y2 < axisy.min) { | 
|  | 799               if (y1 < axisy.min) continue; | 
|  | 800               x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; | 
|  | 801               y2 = axisy.min; | 
|  | 802             } | 
|  | 803 | 
|  | 804             // clip with ymax | 
|  | 805             if (y1 >= y2 && y1 > axisy.max) { | 
|  | 806               if (y2 > axisy.max) continue; | 
|  | 807               x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; | 
|  | 808               y1 = axisy.max; | 
|  | 809             } else if (y2 >= y1 && y2 > axisy.max) { | 
|  | 810               if (y1 > axisy.max) continue; | 
|  | 811               x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; | 
|  | 812               y2 = axisy.max; | 
|  | 813             } | 
|  | 814 | 
|  | 815             // clip with xmin | 
|  | 816             if (x1 <= x2 && x1 < axisx.min) { | 
|  | 817               if (x2 < axisx.min) continue; | 
|  | 818               y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; | 
|  | 819               x1 = axisx.min; | 
|  | 820             } else if (x2 <= x1 && x2 < axisx.min) { | 
|  | 821               if (x1 < axisx.min) continue; | 
|  | 822               y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; | 
|  | 823               x2 = axisx.min; | 
|  | 824             } | 
|  | 825 | 
|  | 826             // clip with xmax | 
|  | 827             if (x1 >= x2 && x1 > axisx.max) { | 
|  | 828               if (x2 > axisx.max) continue; | 
|  | 829               y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; | 
|  | 830               x1 = axisx.max; | 
|  | 831             } else if (x2 >= x1 && x2 > axisx.max) { | 
|  | 832               if (x1 > axisx.max) continue; | 
|  | 833               y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; | 
|  | 834               x2 = axisx.max; | 
|  | 835             } | 
|  | 836 | 
|  | 837             if (x1 != prevx || y1 != prevy) { | 
|  | 838               ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset); | 
|  | 839             } | 
|  | 840 | 
|  | 841             var ax1 = axisx.p2c(x1) + xoffset, | 
|  | 842                 ay1 = axisy.p2c(y1) + yoffset, | 
|  | 843                 ax2 = axisx.p2c(x2) + xoffset, | 
|  | 844                 ay2 = axisy.p2c(y2) + yoffset, | 
|  | 845                 dashOffset; | 
|  | 846 | 
|  | 847             function lineSegmentOffset(segmentLength) { | 
|  | 848 | 
|  | 849               var c = Math.sqrt(Math.pow(ax2 - ax1, 2) + Math.pow(ay2 - ay1, 2)); | 
|  | 850 | 
|  | 851               if (c <= segmentLength) { | 
|  | 852                 return { | 
|  | 853                   deltaX: ax2 - ax1, | 
|  | 854                   deltaY: ay2 - ay1, | 
|  | 855                   distance: c, | 
|  | 856                   remainder: segmentLength - c | 
|  | 857                 } | 
|  | 858               } else { | 
|  | 859                 var xsign = ax2 > ax1 ? 1 : -1, | 
|  | 860                     ysign = ay2 > ay1 ? 1 : -1; | 
|  | 861                 return { | 
|  | 862                   deltaX: xsign * Math.sqrt(Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))), | 
|  | 863                   deltaY: ysign * Math.sqrt(Math.pow(segmentLength, 2) - Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))), | 
|  | 864                   distance: segmentLength, | 
|  | 865                   remainder: 0 | 
|  | 866                 }; | 
|  | 867               } | 
|  | 868             } | 
|  | 869             //-end lineSegmentOffset | 
|  | 870 | 
|  | 871             do { | 
|  | 872 | 
|  | 873               dashOffset = lineSegmentOffset( | 
|  | 874                   dashRemainder > 0 ? dashRemainder : | 
|  | 875                     dashOn ? dashOnLength : dashOffLength); | 
|  | 876 | 
|  | 877               if (dashOffset.deltaX != 0 || dashOffset.deltaY != 0) { | 
|  | 878                 if (dashOn) { | 
|  | 879                   ctx.lineTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY); | 
|  | 880                 } else { | 
|  | 881                   ctx.moveTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY); | 
|  | 882                 } | 
|  | 883               } | 
|  | 884 | 
|  | 885               dashOn = !dashOn; | 
|  | 886               dashRemainder = dashOffset.remainder; | 
|  | 887               ax1 += dashOffset.deltaX; | 
|  | 888               ay1 += dashOffset.deltaY; | 
|  | 889 | 
|  | 890             } while (dashOffset.distance > 0); | 
|  | 891 | 
|  | 892             prevx = x2; | 
|  | 893             prevy = y2; | 
|  | 894           } | 
|  | 895 | 
|  | 896           ctx.stroke(); | 
|  | 897         } | 
|  | 898         //-end plotDashes | 
|  | 899 | 
|  | 900         ctx.save(); | 
|  | 901         ctx.translate(plotOffset.left, plotOffset.top); | 
|  | 902         ctx.lineJoin = 'round'; | 
|  | 903 | 
|  | 904         var lw = series.dashes.lineWidth, | 
|  | 905             sw = series.shadowSize; | 
|  | 906 | 
|  | 907         // FIXME: consider another form of shadow when filling is turned on | 
|  | 908         if (lw > 0 && sw > 0) { | 
|  | 909           // draw shadow as a thick and thin line with transparency | 
|  | 910           ctx.lineWidth = sw; | 
|  | 911           ctx.strokeStyle = "rgba(0,0,0,0.1)"; | 
|  | 912           // position shadow at angle from the mid of line | 
|  | 913           var angle = Math.PI/18; | 
|  | 914           plotDashes(Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2)); | 
|  | 915           ctx.lineWidth = sw/2; | 
|  | 916           plotDashes(Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4)); | 
|  | 917         } | 
|  | 918 | 
|  | 919         ctx.lineWidth = lw; | 
|  | 920         ctx.strokeStyle = series.color; | 
|  | 921 | 
|  | 922         if (lw > 0) { | 
|  | 923           plotDashes(0, 0); | 
|  | 924         } | 
|  | 925 | 
|  | 926         ctx.restore(); | 
|  | 927 | 
|  | 928       }); | 
|  | 929       //-end draw hook | 
|  | 930 | 
|  | 931     }); | 
|  | 932     //-end processDatapoints hook | 
|  | 933 | 
|  | 934   } | 
|  | 935   //-end init | 
|  | 936 | 
|  | 937   $.plot.plugins.push({ | 
|  | 938     init: init, | 
|  | 939     options: { | 
|  | 940       series: { | 
|  | 941         dashes: { | 
|  | 942           show: false, | 
|  | 943           lineWidth: 2, | 
|  | 944           dashLength: 10 | 
|  | 945         } | 
|  | 946       } | 
|  | 947     }, | 
|  | 948     name: 'dashes', | 
|  | 949     version: '0.1' | 
|  | 950   }); | 
|  | 951 | 
|  | 952 })(jQuery) | 
|  | 953 | 
|  | 954 | 
|  | 955 </script> | 
|  | 956 | 
|  | 957 <script type="text/javascript"> | 
|  | 958 | 
|  | 959 var cumulative = { | 
|  | 960     isInitialized: false, | 
|  | 961 | 
|  | 962     maxX: 0, | 
|  | 963     maxY: 0, | 
|  | 964     maxYTick: 0, | 
|  | 965     series: null, | 
|  | 966     showWithData: null, | 
|  | 967     colors: [], | 
|  | 968 | 
|  | 969     draw: function(name, title, colors, filenames, listsOfLengths, refLengths, tickX, | 
|  | 970                    placeholder, legendPlaceholder, glossary, order, scalePlaceholder) { | 
|  | 971 | 
|  | 972         $(scalePlaceholder).empty(); | 
|  | 973 | 
|  | 974         if (!this.isInitialized) { | 
|  | 975             //    div.html( | 
|  | 976             //        "<span class='plot-header'>" + addTooltipIfDefinitionExists(glossary, title) + "</span>" + | 
|  | 977             //        "<div class='plot-placeholder' id='cumulative-plot-placeholder'></div>" | 
|  | 978             //    ); | 
|  | 979             cumulative.series = []; | 
|  | 980             var plotsN = filenames.length; | 
|  | 981             var refLength = 0; | 
|  | 982             if (refLengths) { | 
|  | 983                 for (var i = 0, size = refLengths.length; i < size; i++) | 
|  | 984                     refLength += refLengths[i]; | 
|  | 985             } | 
|  | 986             if (refLength) { | 
|  | 987                 cumulative.maxY = refLength; | 
|  | 988             } | 
|  | 989 | 
|  | 990             cumulative.colors = colors; | 
|  | 991 | 
|  | 992             function addCumulativeLenData(label, index, color, lengths, isRef) { | 
|  | 993                 if (!(lengths instanceof Array)) | 
|  | 994                     lengths = [lengths]; | 
|  | 995                 var size = lengths.length; | 
|  | 996                 var points = { | 
|  | 997                     data: new Array(size + 1), | 
|  | 998                     label: label, | 
|  | 999                     number: index, | 
|  | 1000                     color: color | 
|  | 1001                 }; | 
|  | 1002 | 
|  | 1003                 points.data[0] = [0, 0]; | 
|  | 1004 | 
|  | 1005                 var y = 0; | 
|  | 1006                 for (var j = 0; j < size; j++) { | 
|  | 1007                     y += lengths[j]; | 
|  | 1008                     points.data[j+1] = [j+1, y]; | 
|  | 1009                     if (y > cumulative.maxY) { | 
|  | 1010                         cumulative.maxY = y; | 
|  | 1011                     } | 
|  | 1012                 } | 
|  | 1013 | 
|  | 1014                 if (size > cumulative.maxX) { | 
|  | 1015                     cumulative.maxX = size; | 
|  | 1016                 } | 
|  | 1017                 if (isRef){ | 
|  | 1018                     points.isReference = true; | 
|  | 1019                     points.dashes = {show: true, lineWidth: 1}; | 
|  | 1020                     if (size < cumulative.maxX) { | 
|  | 1021                         points.data[size + 1] = [cumulative.maxX, y]; | 
|  | 1022                     } | 
|  | 1023                 } | 
|  | 1024                 return points; | 
|  | 1025             } | 
|  | 1026 | 
|  | 1027             for (var i = 0; i < plotsN; i++) { | 
|  | 1028                 var lengths = listsOfLengths[order[i]]; | 
|  | 1029                 var asm_name = filenames[order[i]]; | 
|  | 1030                 var color = colors[order[i]]; | 
|  | 1031                 cumulative.series[i] = addCumulativeLenData(asm_name, i, color, lengths); | 
|  | 1032             } | 
|  | 1033 | 
|  | 1034 //            var lineColors = []; | 
|  | 1035 // | 
|  | 1036 //            for (i = 0; i < colors.length; i++) { | 
|  | 1037 //                lineColors.push(changeColor(colors[i], 0.9, false)); | 
|  | 1038 //            } | 
|  | 1039 | 
|  | 1040             for (i = 0; i < plotsN; i++) { | 
|  | 1041                 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) { | 
|  | 1042                     cumulative.series[i].dashes = { | 
|  | 1043                         show: true, | 
|  | 1044                         lineWidth: 1 | 
|  | 1045                     }; | 
|  | 1046                 } | 
|  | 1047                 else { | 
|  | 1048                     cumulative.series[i].lines = { | 
|  | 1049                         show: true, | 
|  | 1050                         lineWidth: 1 | 
|  | 1051                     }; | 
|  | 1052                 } | 
|  | 1053             } | 
|  | 1054 | 
|  | 1055             for (i = 0; i < plotsN; i++) { | 
|  | 1056                 cumulative.colors.push(cumulative.series[i].color); | 
|  | 1057             } | 
|  | 1058 | 
|  | 1059             //cumulative.maxYTick = getMaxDecimalTick(cumulative.maxY); | 
|  | 1060 | 
|  | 1061             if (refLengths) { | 
|  | 1062                 size = refLengths.length; | 
|  | 1063                 var ref_label = 'reference, ' + toPrettyString(refLength, 'bp'); | 
|  | 1064                 cumulative.series.push(addCumulativeLenData(ref_label, i, '#000000', refLengths, true)); | 
|  | 1065                 cumulative.colors.push('#000000'); | 
|  | 1066             } | 
|  | 1067 | 
|  | 1068 | 
|  | 1069             //    if (referenceLength) { | 
|  | 1070             //        yaxes.push({ | 
|  | 1071             //            ticks: [referenceLength], | 
|  | 1072             //            min: 0, | 
|  | 1073             //            max: maxYTick, | 
|  | 1074             //            position: 'right', | 
|  | 1075             ////            labelWidth: 50, | 
|  | 1076             //            reserveSpace: true, | 
|  | 1077             //            tickFormatter: function (val, axis) { | 
|  | 1078             //                return '<div style="">' + toPrettyStringWithDimension(referenceLength, 'bp') + | 
|  | 1079             //                    ' <span style="margin-left: -0.2em;">(reference)</span></div>'; | 
|  | 1080             //            }, | 
|  | 1081             //            minTickSize: 1, | 
|  | 1082             //        }); | 
|  | 1083             //    } | 
|  | 1084             var yaxis = { | 
|  | 1085                 min: 0, | 
|  | 1086                 //max: cumulative.maxYTick, | 
|  | 1087                 labelWidth: 120, | 
|  | 1088                 reserveSpace: true, | 
|  | 1089                 lineWidth: 0.5, | 
|  | 1090                 color: '#000000', | 
|  | 1091                 tickFormatter: getBpTickFormatter(cumulative.maxY), | 
|  | 1092                 minTickSize: 1 | 
|  | 1093             }; | 
|  | 1094             var yaxes = [yaxis]; | 
|  | 1095 | 
|  | 1096             cumulative.showWithData = function(series, colors) { | 
|  | 1097                 var plot = $.plot(placeholder, series, { | 
|  | 1098                     shadowSize: 0, | 
|  | 1099                     colors: cumulative.colors, | 
|  | 1100                     legend: { | 
|  | 1101                         container: $('useless-invisible-element-that-does-not-even-exist'), | 
|  | 1102                     }, | 
|  | 1103                     //            legend: { | 
|  | 1104                     //                container: legendPlaceholder, | 
|  | 1105                     //                position: 'se', | 
|  | 1106                     //                labelBoxBorderColor: '#FFF', | 
|  | 1107                     //                labelFormatter: labelFormatter, | 
|  | 1108                     //            }, | 
|  | 1109                     grid: { | 
|  | 1110                         borderWidth: 1, | 
|  | 1111                         hoverable: true, | 
|  | 1112                         autoHighlight: false, | 
|  | 1113                         mouseActiveRadius: 1000 | 
|  | 1114                     }, | 
|  | 1115                     yaxes: yaxes, | 
|  | 1116                     xaxis: { | 
|  | 1117                         min: 0, | 
|  | 1118                         max: cumulative.maxX, | 
|  | 1119                         lineWidth: 0.5, | 
|  | 1120                         color: '#000', | 
|  | 1121                         tickFormatter: getContigNumberTickFormatter(cumulative.maxX, tickX), | 
|  | 1122                         minTickSize: tickX | 
|  | 1123                     } | 
|  | 1124                 }); | 
|  | 1125 | 
|  | 1126                 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right'); | 
|  | 1127             }; | 
|  | 1128 | 
|  | 1129             cumulative.isInitialized = true; | 
|  | 1130         } | 
|  | 1131 | 
|  | 1132         addLegendClickEvents(cumulative, filenames.length, showPlotWithInfo, refLengths); | 
|  | 1133 | 
|  | 1134         showPlotWithInfo(cumulative); | 
|  | 1135 | 
|  | 1136         $('#contigs_are_ordered').show(); | 
|  | 1137     }, | 
|  | 1138 }; | 
|  | 1139 | 
|  | 1140 </script> | 
|  | 1141 | 
|  | 1142 <script type="text/javascript"> | 
|  | 1143 | 
|  | 1144 var nx = { | 
|  | 1145     nx: { | 
|  | 1146         isInitialized: false, | 
|  | 1147         maxY: 0, | 
|  | 1148         maxYTick: 0, | 
|  | 1149         series: null, | 
|  | 1150         showWithData: null | 
|  | 1151     }, | 
|  | 1152 | 
|  | 1153     nax: { | 
|  | 1154         isInitialized: false, | 
|  | 1155         maxY: 0, | 
|  | 1156         maxYTick: 0, | 
|  | 1157         series: null, | 
|  | 1158         showWithData: null | 
|  | 1159     }, | 
|  | 1160 | 
|  | 1161     ngx: { | 
|  | 1162         isInitialized: false, | 
|  | 1163         maxY: 0, | 
|  | 1164         maxYTick: 0, | 
|  | 1165         series: null, | 
|  | 1166         showWithData: null | 
|  | 1167     }, | 
|  | 1168 | 
|  | 1169     ngax: { | 
|  | 1170         isInitialized: false, | 
|  | 1171         maxY: 0, | 
|  | 1172         maxYTick: 0, | 
|  | 1173         series: null, | 
|  | 1174         showWithData: null | 
|  | 1175     }, | 
|  | 1176 | 
|  | 1177     draw: function (name, title, colors, filenames, data, refPlotValue, tickX, | 
|  | 1178                     placeholder, legendPlaceholder, glossary, order, scalePlaceholder) { | 
|  | 1179 | 
|  | 1180         $(scalePlaceholder).empty(); | 
|  | 1181 | 
|  | 1182         var coordX = data.coord_x; | 
|  | 1183         var coordY = data.coord_y; | 
|  | 1184 | 
|  | 1185         var cur_filenames = data.filenames; | 
|  | 1186         var info = nx[name]; | 
|  | 1187 | 
|  | 1188         if (!info.isInitialized) { | 
|  | 1189             var plotsN = cur_filenames.length; | 
|  | 1190             info.series = new Array(plotsN); | 
|  | 1191 | 
|  | 1192             for (var i = 0; i < plotsN; i++) { | 
|  | 1193                 var index = $.inArray(cur_filenames[order[i]], filenames); | 
|  | 1194                 var plot_coordX = coordX[order[i]]; | 
|  | 1195                 var plot_coordY = coordY[order[i]]; | 
|  | 1196                 var size = plot_coordX.length; | 
|  | 1197 | 
|  | 1198                 info.series[i] = { | 
|  | 1199                     data: [], | 
|  | 1200                     label: filenames[index], | 
|  | 1201                     number: index, | 
|  | 1202                     color: colors[index] | 
|  | 1203                 }; | 
|  | 1204                 info.series[i].data.push([0.0, plot_coordY[0]]); | 
|  | 1205                 var currentLen = 0; | 
|  | 1206                 var x = 0.0; | 
|  | 1207 | 
|  | 1208                 for (var k = 0; k < size; k++) { | 
|  | 1209                     info.series[i].data.push([plot_coordX[k], plot_coordY[k]]); | 
|  | 1210                 } | 
|  | 1211 | 
|  | 1212                 if (info.series[i].data[0][1] > info.maxY) { | 
|  | 1213                     info.maxY = info.series[i].data[0][1]; | 
|  | 1214                 } | 
|  | 1215 | 
|  | 1216                 var lastPt = info.series[i].data[info.series[i].data.length-1]; | 
|  | 1217                 info.series[i].data.push([lastPt[0], 0]); | 
|  | 1218             } | 
|  | 1219 | 
|  | 1220             for (i = 0; i < plotsN; i++) { | 
|  | 1221                 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) { | 
|  | 1222                     info.series[i].dashes = { | 
|  | 1223                         show: true, | 
|  | 1224                         lineWidth: 1 | 
|  | 1225                     }; | 
|  | 1226                 } | 
|  | 1227                 else { | 
|  | 1228                     info.series[i].lines = { | 
|  | 1229                         show: true, | 
|  | 1230                         lineWidth: 1 | 
|  | 1231                     }; | 
|  | 1232                 } | 
|  | 1233             } | 
|  | 1234 | 
|  | 1235             // for (i = 0; i < plotsN; i++) { | 
|  | 1236             //     plotsData[i].points = { | 
|  | 1237             //         show: true, | 
|  | 1238             //         radius: 1, | 
|  | 1239             //         fill: 1, | 
|  | 1240             //         fillColor: false, | 
|  | 1241             //     } | 
|  | 1242             // } | 
|  | 1243 | 
|  | 1244             info.showWithData = function(series, colors) { | 
|  | 1245                 var plot = $.plot(placeholder, series, { | 
|  | 1246                         shadowSize: 0, | 
|  | 1247                         colors: colors, | 
|  | 1248                         legend: { | 
|  | 1249                             container: $('useless-invisible-element-that-does-not-even-exist'), | 
|  | 1250                         }, | 
|  | 1251                         grid: { | 
|  | 1252                             borderWidth: 1, | 
|  | 1253                             hoverable: true, | 
|  | 1254                             autoHighlight: false, | 
|  | 1255                             mouseActiveRadius: 1000 | 
|  | 1256                         }, | 
|  | 1257                         yaxis: { | 
|  | 1258                             min: 0, | 
|  | 1259 //                        max: info.maxY, | 
|  | 1260                             labelWidth: 120, | 
|  | 1261                             reserveSpace: true, | 
|  | 1262                             lineWidth: 0.5, | 
|  | 1263                             color: '#000', | 
|  | 1264                             tickFormatter: getBpTickFormatter(info.maxY), | 
|  | 1265                             minTickSize: 1 | 
|  | 1266                         }, | 
|  | 1267                         xaxis: { | 
|  | 1268                             min: 0, | 
|  | 1269                             max: 100, | 
|  | 1270                             lineWidth: 0.5, | 
|  | 1271                             color: '#000', | 
|  | 1272                             tickFormatter: function (val, axis) { | 
|  | 1273                                 if (val == 100) { | 
|  | 1274                                     return ' x<span class="rhs"> </span>=<span class="rhs"> </span>100%' | 
|  | 1275                                 } else { | 
|  | 1276                                     return val; | 
|  | 1277                                 } | 
|  | 1278                             } | 
|  | 1279                         }, | 
|  | 1280                         minTickSize: tickX | 
|  | 1281                     } | 
|  | 1282                 ); | 
|  | 1283 | 
|  | 1284                 var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 1285                 firstLabel.prepend(title + '<span class="rhs"> </span>=<span class="rhs"> </span>'); | 
|  | 1286 | 
|  | 1287                 bindTip(placeholder, series, plot, toPrettyString, 1, '%', 'top right'); | 
|  | 1288 | 
|  | 1289             }; | 
|  | 1290 | 
|  | 1291             info.isInitialized = true; | 
|  | 1292         } | 
|  | 1293 | 
|  | 1294         addLegendClickEvents(info, filenames.length, showPlotWithInfo); | 
|  | 1295         showPlotWithInfo(info); | 
|  | 1296     } | 
|  | 1297 }; | 
|  | 1298 | 
|  | 1299 | 
|  | 1300 | 
|  | 1301 </script> | 
|  | 1302 | 
|  | 1303 <script type="text/javascript"> | 
|  | 1304 | 
|  | 1305 var normal_scale_span = | 
|  | 1306     "<span class='selected-switch'>" + | 
|  | 1307         'Normal' + | 
|  | 1308         "</span>"; | 
|  | 1309 var normal_scale_a = | 
|  | 1310     "<a class='dotted-link' onClick='setNormalScale()'>" + | 
|  | 1311         'Normal' + | 
|  | 1312         "</a>"; | 
|  | 1313 var log_scale_span = | 
|  | 1314     "<span class='selected-switch'>" + | 
|  | 1315         'logarithmic' + | 
|  | 1316         "</span>"; | 
|  | 1317 var log_scale_a = | 
|  | 1318     "<a class='dotted-link' onClick='setLogScale()'>" + | 
|  | 1319         'logarithmic' + | 
|  | 1320         "</a>"; | 
|  | 1321 | 
|  | 1322 var show_all_span = | 
|  | 1323     "<span class='selected-switch gc'>" + | 
|  | 1324         'Back to overview' + | 
|  | 1325         "</span>"; | 
|  | 1326 var show_all_a = | 
|  | 1327     "   <a class='dotted-link' onClick='showAll()'>" + | 
|  | 1328         'Back to overview' + | 
|  | 1329         "</a>"; | 
|  | 1330 | 
|  | 1331 var gc = { | 
|  | 1332     isInitialized: false, | 
|  | 1333 | 
|  | 1334     maxY: 0, | 
|  | 1335     plot: null, | 
|  | 1336     series: null, | 
|  | 1337     showWithData: null, | 
|  | 1338     minPow: 0, | 
|  | 1339     ticks: null, | 
|  | 1340     placeholder: null, | 
|  | 1341     legendPlaceholder: null, | 
|  | 1342     colors: null, | 
|  | 1343     yAxisLabeled: false, | 
|  | 1344 | 
|  | 1345     show_all_el: show_all_span, | 
|  | 1346     reference: false, | 
|  | 1347 | 
|  | 1348     normal_scale_el: null, | 
|  | 1349     log_scale_el: null, | 
|  | 1350 | 
|  | 1351     draw: function(name, title, colors, filenames, gcInfos, reflen, tickX, | 
|  | 1352                    placeholder, legendPlaceholder, glossary, order, scalePlaceholder) { | 
|  | 1353         gc.normal_scale_el = normal_scale_span; | 
|  | 1354         gc.log_scale_el = log_scale_a; | 
|  | 1355         $(scalePlaceholder).html( | 
|  | 1356             "<div id='change-scale' style='margin-right: 3px; visibility: hidden;'>" + | 
|  | 1357                 "<span id='normal_scale_label'>" + | 
|  | 1358                 gc.normal_scale_el + | 
|  | 1359                 "</span> / " + | 
|  | 1360                 "<span id='log_scale_label'>" + | 
|  | 1361                 gc.log_scale_el + | 
|  | 1362                 "</span> scale" + | 
|  | 1363                 "</div>" | 
|  | 1364         ); | 
|  | 1365 | 
|  | 1366         var refIndex = gcInfos.reference_index; | 
|  | 1367         if (!gc.isInitialized) { | 
|  | 1368             gc.legendPlaceholder = legendPlaceholder; | 
|  | 1369             gc.placeholder = placeholder; | 
|  | 1370             gc.colors = colors; | 
|  | 1371             gc.filenames = filenames; | 
|  | 1372 | 
|  | 1373             var bin_size = 1.0; | 
|  | 1374             var plotsN = filenames.length; | 
|  | 1375             gc.series = new Array(plotsN + 1); | 
|  | 1376             gc.series[0] = new Array(plotsN); | 
|  | 1377 | 
|  | 1378             gc.maxY = 0; | 
|  | 1379             var minY = Number.MAX_VALUE; | 
|  | 1380 | 
|  | 1381             function updateMinY(y) { | 
|  | 1382                 if (y < minY && y != 0) { | 
|  | 1383                     minY = y; | 
|  | 1384                 } | 
|  | 1385             } | 
|  | 1386             function updateMaxY(y) { | 
|  | 1387                 if (y > gc.maxY) { | 
|  | 1388                     gc.maxY = y; | 
|  | 1389                 } | 
|  | 1390             } | 
|  | 1391 | 
|  | 1392             for (var i = 0; i < plotsN; i++) { | 
|  | 1393                 gc.series[0][i] = { | 
|  | 1394                     data: [], | 
|  | 1395                     label: filenames[order[i]], | 
|  | 1396                     number: order[i], | 
|  | 1397                     color: colors[order[i]] | 
|  | 1398                 }; | 
|  | 1399             } | 
|  | 1400 | 
|  | 1401             function makeSeriesFromDistributions(distributionsXandY, series_i, plot_i) { | 
|  | 1402                 var distributionsX = distributionsXandY[0]; | 
|  | 1403                 var distributionsY = distributionsXandY[1]; | 
|  | 1404 | 
|  | 1405                 for (var j = 0; j < distributionsX.length; j++) { | 
|  | 1406                     var x = distributionsX[j]; | 
|  | 1407                     var y = distributionsY[j]; | 
|  | 1408                     gc.series[series_i][plot_i].data.push([x, y]); | 
|  | 1409                     updateMinY(y); | 
|  | 1410                     updateMaxY(y); | 
|  | 1411                 } | 
|  | 1412             } | 
|  | 1413 | 
|  | 1414             function makeSeries(listsOfGCInfo, listOfGcDistributions, seriesIdx) { | 
|  | 1415                 for (var i = 0; i < plotsN; i++) { | 
|  | 1416                     if (listsOfGCInfo) { | 
|  | 1417                         makeSeriesFromInfo(listsOfGCInfo[order[i]], seriesIdx, i); | 
|  | 1418                     } else { | 
|  | 1419                         makeSeriesFromDistributions(listOfGcDistributions[order[i]], seriesIdx, i); | 
|  | 1420                     } | 
|  | 1421                 } | 
|  | 1422             } | 
|  | 1423 | 
|  | 1424             var listsOfGCInfo = gcInfos.lists_of_gc_info; | 
|  | 1425             var listOfGcDistributions = gcInfos.list_of_GC_distributions; | 
|  | 1426             makeSeries(listsOfGCInfo, listOfGcDistributions, 0); | 
|  | 1427 | 
|  | 1428             function makeSeriesFromInfo(GC_info, series_i, i) { | 
|  | 1429                 var cur_bin = 0.0; | 
|  | 1430 | 
|  | 1431                 var x = cur_bin; | 
|  | 1432                 var y = filterAndSumGcInfo(GC_info, function(GC_percent) { | 
|  | 1433                     return GC_percent == cur_bin; | 
|  | 1434                 }); | 
|  | 1435                 gc.series[series_i][i].data.push([x, y]); | 
|  | 1436 | 
|  | 1437                 updateMinY(y); | 
|  | 1438                 updateMaxY(y); | 
|  | 1439 | 
|  | 1440                 while (cur_bin < 100.0 - bin_size) { | 
|  | 1441                     cur_bin += bin_size; | 
|  | 1442 | 
|  | 1443                     x = cur_bin; | 
|  | 1444                     y = filterAndSumGcInfo(GC_info, function(GC_percent) { | 
|  | 1445                         return GC_percent > (cur_bin - bin_size) && GC_percent <= cur_bin; | 
|  | 1446                     }); | 
|  | 1447                     gc.series[series_i][i].data.push([x, y]); | 
|  | 1448 | 
|  | 1449                     updateMinY(y); | 
|  | 1450                     updateMaxY(y); | 
|  | 1451                 } | 
|  | 1452 | 
|  | 1453                 x = 100.0; | 
|  | 1454                 y = filterAndSumGcInfo(GC_info, function(GC_percent) { | 
|  | 1455                     return GC_percent > cur_bin && GC_percent <= 100.0; | 
|  | 1456                 }); | 
|  | 1457 | 
|  | 1458                 gc.series[series_i][i].data.push([x, y]); | 
|  | 1459 | 
|  | 1460                 updateMinY(y); | 
|  | 1461                 updateMaxY(y); | 
|  | 1462             } | 
|  | 1463 | 
|  | 1464             for (i = 0; i < plotsN; i++) { | 
|  | 1465                 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) { | 
|  | 1466                     gc.series[0][i].dashes = { | 
|  | 1467                         show: true, | 
|  | 1468                         lineWidth: 1 | 
|  | 1469                     }; | 
|  | 1470                 } | 
|  | 1471                 else { | 
|  | 1472                     gc.series[0][i].lines = { | 
|  | 1473                         show: true, | 
|  | 1474                         lineWidth: 1 | 
|  | 1475                     }; | 
|  | 1476                 } | 
|  | 1477             } | 
|  | 1478 | 
|  | 1479             if (refIndex) { | 
|  | 1480                 gc.reference = true; | 
|  | 1481                 gc.series[0].push({ | 
|  | 1482                     data: [], | 
|  | 1483                     label: 'reference', | 
|  | 1484                     isReference: true, | 
|  | 1485                     number: filenames.length, | 
|  | 1486                     lines: {}, | 
|  | 1487                     dashes: { | 
|  | 1488                         show: true, | 
|  | 1489                         lineWidth: 1 | 
|  | 1490                     }, | 
|  | 1491                     color: '#000000' | 
|  | 1492                 }); | 
|  | 1493                 if (listsOfGCInfo) { | 
|  | 1494                     makeSeriesFromInfo(listsOfGCInfo[refIndex], 0, refIndex); | 
|  | 1495                 } else { | 
|  | 1496                     makeSeriesFromDistributions(listOfGcDistributions[refIndex], 0, refIndex); | 
|  | 1497                 } | 
|  | 1498                 gc.colors.push('#000000') | 
|  | 1499             } | 
|  | 1500 | 
|  | 1501             if (gcInfos.list_of_GC_contigs_distributions) { | 
|  | 1502                 listOfGcDistributions = gcInfos.list_of_GC_contigs_distributions; | 
|  | 1503                 var maxY = 0; | 
|  | 1504                 for (var file_n = 0; file_n < filenames.length; file_n++) { | 
|  | 1505                     gc.series[file_n + 1] = new Array(1); | 
|  | 1506                     gc.series[file_n + 1][0] = { | 
|  | 1507                         data: [], | 
|  | 1508                         label: filenames[order[file_n]], | 
|  | 1509                         number: order[file_n], | 
|  | 1510                         color: colors[order[file_n]], | 
|  | 1511                         bars: { | 
|  | 1512                             show: true, | 
|  | 1513                             lineWidth: 0.6, | 
|  | 1514                             fill: 0.6, | 
|  | 1515                             barWidth: 5 | 
|  | 1516                         } | 
|  | 1517                     }; | 
|  | 1518 | 
|  | 1519                     var distributionsX = listOfGcDistributions[file_n][0]; | 
|  | 1520                     var distributionsY = listOfGcDistributions[file_n][1]; | 
|  | 1521 | 
|  | 1522                     for (var j = 0; j < distributionsX.length; j++) { | 
|  | 1523                         var x = distributionsX[j]; | 
|  | 1524                         var y = distributionsY[j]; | 
|  | 1525                         gc.series[file_n + 1][0].data.push([x, y]); | 
|  | 1526                         maxY = Math.max(maxY, y); | 
|  | 1527                     } | 
|  | 1528                 } | 
|  | 1529                 for (var file_n = 0; file_n < filenames.length; file_n++) { | 
|  | 1530                     gc.series[file_n + 1][0].maxY = maxY; | 
|  | 1531                 } | 
|  | 1532             } | 
|  | 1533             // Calculate the minimum possible non-zero Y to clip useless bottoms | 
|  | 1534             // of logarithmic plots. | 
|  | 1535             var maxYTick = getMaxDecimalTick(gc.maxY); | 
|  | 1536             gc.minPow = Math.round(Math.log(minY) / Math.log(10)); | 
|  | 1537             gc.ticks = []; | 
|  | 1538             for (var pow = gc.minPow; Math.pow(10, pow) < maxYTick; pow++) { | 
|  | 1539                 gc.ticks.push(Math.pow(10, pow)); | 
|  | 1540             } | 
|  | 1541             gc.ticks.push(Math.pow(10, pow)); | 
|  | 1542 | 
|  | 1543             gc.isInitialized = true; | 
|  | 1544         } | 
|  | 1545 | 
|  | 1546         gc.showWithData = showInNormalScaleWithData; | 
|  | 1547         if (gcInfos.list_of_GC_contigs_distributions) { | 
|  | 1548             createLegend(gc.filenames, gc.colors, 0, gc.reference); | 
|  | 1549         } | 
|  | 1550         addLegendClickEvents(gc, filenames.length, showPlotWithInfo, false, 0); | 
|  | 1551 | 
|  | 1552         showPlotWithInfo(gc, 0); | 
|  | 1553 | 
|  | 1554         $('#change-scale').css('visibility', 'visible'); | 
|  | 1555         $('#gc_info').show(); | 
|  | 1556     } | 
|  | 1557 }; | 
|  | 1558 | 
|  | 1559 function showAll() { | 
|  | 1560     $('#change-scale').show(); | 
|  | 1561     $('#gc_info').show(); | 
|  | 1562     $('#gc_contigs_info').hide(); | 
|  | 1563     createLegend(gc.filenames, gc.colors, 0, gc.reference); | 
|  | 1564 | 
|  | 1565     gc.show_all_el = show_all_span; | 
|  | 1566     gc.showWithData = gc.log_scale_el == log_scale_a ? showInNormalScaleWithData : showInLogarithmicScaleWithData; | 
|  | 1567 | 
|  | 1568     $('#show_all_label').html(gc.show_all_el); | 
|  | 1569     showPlotWithInfo(gc, 0); | 
|  | 1570 } | 
|  | 1571 | 
|  | 1572 function showPlot(index) { | 
|  | 1573     $('#change-scale').hide(); | 
|  | 1574     $('#gc_info').hide(); | 
|  | 1575     $('#gc_contigs_info').show(); | 
|  | 1576     createLegend([gc.filenames[index - 1]], [gc.colors[index - 1]], index); | 
|  | 1577 | 
|  | 1578     gc.show_all_el = show_all_a; | 
|  | 1579     gc.showWithData = showOneAssembly; | 
|  | 1580 | 
|  | 1581     $('#show_all_label').html(gc.show_all_el); | 
|  | 1582     showPlotWithInfo(gc, index); | 
|  | 1583 } | 
|  | 1584 | 
|  | 1585 function showOneAssembly(series, colors) { | 
|  | 1586     if (series == null) { | 
|  | 1587         return; | 
|  | 1588     } | 
|  | 1589 | 
|  | 1590     gc.plot = $.plot(gc.placeholder, series, { | 
|  | 1591             shadowSize: 0, | 
|  | 1592             colors: colors, | 
|  | 1593             legend: { | 
|  | 1594                 container: $('useless-invisible-element-that-does-not-even-exist') | 
|  | 1595             }, | 
|  | 1596             grid: { | 
|  | 1597                 hoverable: true, | 
|  | 1598                 borderWidth: 1, | 
|  | 1599                 autoHighlight: false, | 
|  | 1600                 mouseActiveRadius: 1000 | 
|  | 1601             }, | 
|  | 1602             yaxis: { | 
|  | 1603                 min: 0, | 
|  | 1604                 max: series[0].maxY * 1.1, | 
|  | 1605                 labelWidth: 120, | 
|  | 1606                 reserveSpace: true, | 
|  | 1607                 lineWidth: 0.5, | 
|  | 1608                 color: '#000', | 
|  | 1609                 tickFormatter: getJustNumberTickFormatter(gc.maxY), | 
|  | 1610                 minTickSize: 1 | 
|  | 1611             }, | 
|  | 1612             xaxis: { | 
|  | 1613                 min: 0, | 
|  | 1614                 max: 100, | 
|  | 1615                 lineWidth: 0.5, | 
|  | 1616                 color: '#000', | 
|  | 1617                 tickFormatter: function (val, axis) { | 
|  | 1618                     if (val == 100) { | 
|  | 1619                         return ' 100% GC' | 
|  | 1620                     } else { | 
|  | 1621                         return val; | 
|  | 1622                     } | 
|  | 1623                 } | 
|  | 1624             }, | 
|  | 1625             minTickSize: 1 | 
|  | 1626         } | 
|  | 1627     ); | 
|  | 1628 | 
|  | 1629     var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 1630     firstLabel.append(' contigs'); | 
|  | 1631     unBindTips(gc.placeholder); | 
|  | 1632     bindTip(gc.placeholder, series, gc.plot, getIntervalToPrettyString(5), 1, '%<span class="rhs"> </span>GC', 'top right'); | 
|  | 1633 } | 
|  | 1634 | 
|  | 1635 function showInNormalScaleWithData(series, colors) { | 
|  | 1636     if (series == null || gc.maxY == null) | 
|  | 1637         return; | 
|  | 1638 | 
|  | 1639     gc.yAxisLabeled = false; | 
|  | 1640 | 
|  | 1641     gc.plot = $.plot(gc.placeholder, series, { | 
|  | 1642             shadowSize: 0, | 
|  | 1643             colors: colors, | 
|  | 1644             legend: { | 
|  | 1645                 container: $('useless-invisible-element-that-does-not-even-exist'), | 
|  | 1646             }, | 
|  | 1647             grid: { | 
|  | 1648                 borderWidth: 1, | 
|  | 1649                 hoverable: true, | 
|  | 1650                 autoHighlight: false, | 
|  | 1651                 mouseActiveRadius: 1000, | 
|  | 1652             }, | 
|  | 1653             yaxis: { | 
|  | 1654                 min: 0, | 
|  | 1655 //                max: gc.maxY + 0.1 * gc.maxY, | 
|  | 1656                 labelWidth: 120, | 
|  | 1657                 reserveSpace: true, | 
|  | 1658                 lineWidth: 0.5, | 
|  | 1659                 color: '#000', | 
|  | 1660                 tickFormatter: windowsTickFormatter, | 
|  | 1661                 minTickSize: 1 | 
|  | 1662             }, | 
|  | 1663             xaxis: { | 
|  | 1664                 min: 0, | 
|  | 1665                 max: 100, | 
|  | 1666                 lineWidth: 0.5, | 
|  | 1667                 color: '#000', | 
|  | 1668                 tickFormatter: function (val, axis) { | 
|  | 1669                     if (val == 100) { | 
|  | 1670                         return ' 100% GC' | 
|  | 1671                     } else { | 
|  | 1672                         return val; | 
|  | 1673                     } | 
|  | 1674                 } | 
|  | 1675             }, | 
|  | 1676             minTickSize: 1 | 
|  | 1677         } | 
|  | 1678     ); | 
|  | 1679 | 
|  | 1680     var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 1681     firstLabel.append(' windows'); | 
|  | 1682     bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '%<span class="rhs"> </span>GC', 'top right'); | 
|  | 1683 } | 
|  | 1684 | 
|  | 1685 | 
|  | 1686 function showInLogarithmicScaleWithData(series, colors) { | 
|  | 1687     if (series == null || gc.maxY == null || gc.minPow == null) { | 
|  | 1688         return; | 
|  | 1689     } | 
|  | 1690 | 
|  | 1691     gc.yAxisLabeled = false; | 
|  | 1692 | 
|  | 1693     gc.plot = $.plot(gc.placeholder, series, { | 
|  | 1694             shadowSize: 0, | 
|  | 1695             colors: colors, | 
|  | 1696             legend: { | 
|  | 1697                 container: $('useless-invisible-element-that-does-not-even-exist'), | 
|  | 1698             }, | 
|  | 1699             grid: { | 
|  | 1700                 hoverable: true, | 
|  | 1701                 borderWidth: 1, | 
|  | 1702                 autoHighlight: false, | 
|  | 1703                 mouseActiveRadius: 1000 | 
|  | 1704             }, | 
|  | 1705             yaxis: { | 
|  | 1706                 min: Math.pow(10, gc.minPow), | 
|  | 1707 //                max: gc.maxY, | 
|  | 1708                 labelWidth: 120, | 
|  | 1709                 reserveSpace: true, | 
|  | 1710                 lineWidth: 0.5, | 
|  | 1711                 color: '#000', | 
|  | 1712                 tickFormatter: windowsTickFormatter, | 
|  | 1713                 minTickSize: 1, | 
|  | 1714                 ticks: gc.ticks, | 
|  | 1715 | 
|  | 1716                 transform:  function(v) { | 
|  | 1717                     return Math.log(v + 0.0001)/*move away from zero*/ / Math.log(10); | 
|  | 1718                 }, | 
|  | 1719                 inverseTransform: function(v) { | 
|  | 1720                     return Math.pow(v, 10); | 
|  | 1721                 }, | 
|  | 1722                 tickDecimals: 3 | 
|  | 1723             }, | 
|  | 1724             xaxis: { | 
|  | 1725                 min: 0, | 
|  | 1726                 max: 100, | 
|  | 1727                 lineWidth: 0.5, | 
|  | 1728                 color: '#000', | 
|  | 1729                 tickFormatter: function (val, axis) { | 
|  | 1730                     if (val == 100) { | 
|  | 1731                         return ' 100%<span class="rhs"> </span>GC' | 
|  | 1732                     } else { | 
|  | 1733                         return val; | 
|  | 1734                     } | 
|  | 1735                 } | 
|  | 1736             }, | 
|  | 1737             minTickSize: 1 | 
|  | 1738         } | 
|  | 1739     ); | 
|  | 1740 | 
|  | 1741     var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 1742     firstLabel.append(' windows'); | 
|  | 1743     bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '% GC', 'top right'); | 
|  | 1744 } | 
|  | 1745 | 
|  | 1746 | 
|  | 1747 function setLogScale() { | 
|  | 1748     gc.normal_scale_el = normal_scale_a; | 
|  | 1749     gc.log_scale_el = log_scale_span; | 
|  | 1750     gc.showWithData = showInLogarithmicScaleWithData; | 
|  | 1751 | 
|  | 1752     $('#normal_scale_label').html(gc.normal_scale_el); | 
|  | 1753     $('#log_scale_label').html(gc.log_scale_el); | 
|  | 1754     showPlotWithInfo(gc, 0); | 
|  | 1755 } | 
|  | 1756 | 
|  | 1757 | 
|  | 1758 function setNormalScale() { | 
|  | 1759     gc.normal_scale_el = normal_scale_span; | 
|  | 1760     gc.log_scale_el = log_scale_a; | 
|  | 1761     gc.showWithData = showInNormalScaleWithData; | 
|  | 1762 | 
|  | 1763     $('#normal_scale_label').html(gc.normal_scale_el); | 
|  | 1764     $('#log_scale_label').html(gc.log_scale_el); | 
|  | 1765     showPlotWithInfo(gc, 0); | 
|  | 1766 } | 
|  | 1767 | 
|  | 1768 | 
|  | 1769 | 
|  | 1770 function filterAndSumGcInfo(GC_info, condition) { | 
|  | 1771     var contigs_lengths_cur_bin = []; | 
|  | 1772     for (var j = 0; j < GC_info.length; j++) { | 
|  | 1773         var GC = GC_info[j]; | 
|  | 1774         var contig_length = GC[0]; | 
|  | 1775         var GC_percent = GC[1]; | 
|  | 1776 | 
|  | 1777         if (condition(GC_percent) == true) { | 
|  | 1778             contigs_lengths_cur_bin.push(contig_length); | 
|  | 1779         } | 
|  | 1780     } | 
|  | 1781     var val_bp = 0; | 
|  | 1782     for (var j = 0; j < contigs_lengths_cur_bin.length; j++) { | 
|  | 1783         val_bp += contigs_lengths_cur_bin[j]; | 
|  | 1784     } | 
|  | 1785     return val_bp; | 
|  | 1786 } | 
|  | 1787 | 
|  | 1788 function createLegend(labels, colors, index, reference) { | 
|  | 1789     var selectedAssemblies = getSelectedAssemblies(labels); | 
|  | 1790     $('#legend-placeholder').empty(); | 
|  | 1791     var selectors = ""; | 
|  | 1792 | 
|  | 1793     labels.forEach(function(label, i) { | 
|  | 1794         var link = index ? '' : '<span id="' + labels[i] + '-switch"' + "class='plot-gc-type-switch dotted-link'>by contigs<br></span><br>"; | 
|  | 1795         var assemblyIdx = gc.filenames.indexOf(label); | 
|  | 1796         addLabelToLegend(assemblyIdx, label, selectedAssemblies, colors, link); | 
|  | 1797     }); | 
|  | 1798     if (reference) { | 
|  | 1799         isChecked = (selectedAssemblies.length > 0 && selectedAssemblies.indexOf(gc.filenames.length.toString())) != -1 ? 'checked="checked"' : ""; | 
|  | 1800         $('#legend-placeholder').append( | 
|  | 1801             '<div id="reference-label">' + | 
|  | 1802                 '<label for="reference" style="color: #000000;">' + | 
|  | 1803                 '<input type="checkbox" name="' + gc.filenames.length + | 
|  | 1804                 '" checked="' + isChecked + '" id="reference"> ' + 'reference' + | 
|  | 1805                 '</label>' + | 
|  | 1806                 '</div>' | 
|  | 1807         ); | 
|  | 1808     } | 
|  | 1809     if (index > 0) { | 
|  | 1810         for (var filenames_n = 0; filenames_n < gc.filenames.length; filenames_n++){ | 
|  | 1811             selectors += '<br><span id="' + gc.filenames[filenames_n] + '-switch" ' + | 
|  | 1812                 "class='plot-switch dotted-link'>" + | 
|  | 1813                 gc.filenames[filenames_n] + "</span>"; | 
|  | 1814         } | 
|  | 1815         $('#legend-placeholder').append( | 
|  | 1816             "<br><br><div id='change-assembly' style='margin-right: 3px;'>" + | 
|  | 1817                 "<span id='show_all_label'>" + | 
|  | 1818                 gc.show_all_el + | 
|  | 1819                 "</span><br>" + selectors + | 
|  | 1820                 "</div>" | 
|  | 1821         ); | 
|  | 1822     } | 
|  | 1823     addLinksToSwitches(index - 1); | 
|  | 1824     addLegendClickEvents(gc, gc.series.length, showPlotWithInfo, false, index); | 
|  | 1825 } | 
|  | 1826 | 
|  | 1827 function addLinksToSwitches(index) { | 
|  | 1828     var filenames = gc.filenames; | 
|  | 1829     for (filenames_n = 0; filenames_n < filenames.length; filenames_n++){ | 
|  | 1830         var switchSpan = document.getElementById(filenames[filenames_n] + "-switch"); | 
|  | 1831         $(switchSpan).click(getToggleSwitchFunction(filenames_n + 1)); | 
|  | 1832         if (filenames_n == index) { | 
|  | 1833             switchSpan.className = 'plot-switch selected-switch gc'; | 
|  | 1834         } | 
|  | 1835     } | 
|  | 1836 } | 
|  | 1837 | 
|  | 1838 function getToggleSwitchFunction(index) { | 
|  | 1839     return function() { | 
|  | 1840         if (index > 0) { | 
|  | 1841             showPlot(index); | 
|  | 1842         } | 
|  | 1843         else { | 
|  | 1844             showAll(); | 
|  | 1845         } | 
|  | 1846     }; | 
|  | 1847 } | 
|  | 1848 </script> | 
|  | 1849 | 
|  | 1850 <script type="text/javascript"> | 
|  | 1851 | 
|  | 1852 var frc = { | 
|  | 1853     genes: { | 
|  | 1854         isInitialized: false, | 
|  | 1855 | 
|  | 1856         maxY: 0, | 
|  | 1857         maxYTick: 0, | 
|  | 1858         series: null, | 
|  | 1859         showWithData: null, | 
|  | 1860 | 
|  | 1861         yAxisLabeled: false | 
|  | 1862     }, | 
|  | 1863 | 
|  | 1864     operons: { | 
|  | 1865         isInitialized: false, | 
|  | 1866 | 
|  | 1867         maxY: 0, | 
|  | 1868         maxYTick: 0, | 
|  | 1869         series: null, | 
|  | 1870         showWithData: null, | 
|  | 1871 | 
|  | 1872         yAxisLabeled: false | 
|  | 1873     }, | 
|  | 1874 | 
|  | 1875     misassemblies: { | 
|  | 1876         isInitialized: false, | 
|  | 1877 | 
|  | 1878         maxY: 0, | 
|  | 1879         maxYTick: 0, | 
|  | 1880         series: null, | 
|  | 1881         showWithData: null, | 
|  | 1882 | 
|  | 1883         yAxisLabeled: false | 
|  | 1884     }, | 
|  | 1885 | 
|  | 1886     draw: function (name, title, colors, filenames, data, refGenesNumber, tickX, | 
|  | 1887                     placeholder, legendPlaceholder, glossary, order, scalePlaceholder) { | 
|  | 1888 //    div.html( | 
|  | 1889 //        "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" + | 
|  | 1890 //        "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>" | 
|  | 1891 //    ); | 
|  | 1892         $(scalePlaceholder).empty(); | 
|  | 1893 | 
|  | 1894         var info = frc[name]; | 
|  | 1895         var coordX = data.coord_x; | 
|  | 1896         var coordY = data.coord_y; | 
|  | 1897 | 
|  | 1898         info.yAxisLabeled = false; | 
|  | 1899         var cur_filenames = data.filenames; | 
|  | 1900         if (!info.isInitialized) { | 
|  | 1901             var plotsN = cur_filenames.length; | 
|  | 1902             info.series = new Array(plotsN); | 
|  | 1903 | 
|  | 1904             info.maxY = 0; | 
|  | 1905             info.maxX = 0; | 
|  | 1906 | 
|  | 1907             for (var i = 0; i < plotsN; i++) { | 
|  | 1908                 var index = $.inArray(cur_filenames[order[i]], filenames); | 
|  | 1909                 var plot_coordX = coordX[order[i]]; | 
|  | 1910                 var plot_coordY = coordY[order[i]]; | 
|  | 1911                 var featureSpace = plot_coordX[plot_coordX.length - 1]; | 
|  | 1912                 var maxY = plot_coordY[plot_coordY.length - 1]; | 
|  | 1913 | 
|  | 1914                 info.series[i] = { | 
|  | 1915                     data: [], | 
|  | 1916                     label: filenames[index], | 
|  | 1917                     number: index, | 
|  | 1918                     color: colors[index] | 
|  | 1919                 }; | 
|  | 1920 | 
|  | 1921                 info.series[i].data.push([0.0, plot_coordY[0]]); | 
|  | 1922 | 
|  | 1923                 if (featureSpace > info.maxX) { | 
|  | 1924                     info.maxX = featureSpace; | 
|  | 1925                 } | 
|  | 1926                 for (var k = 0; k < plot_coordX.length; k++) { | 
|  | 1927                     info.series[i].data.push([plot_coordX[k], plot_coordY[k]]); | 
|  | 1928                 } | 
|  | 1929 | 
|  | 1930                 if (maxY > info.maxY) { | 
|  | 1931                     info.maxY = maxY; | 
|  | 1932                 } | 
|  | 1933             } | 
|  | 1934 | 
|  | 1935             for (i = 0; i < plotsN; i++) { | 
|  | 1936                 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) { | 
|  | 1937                     info.series[i].dashes = { | 
|  | 1938                         show: true, | 
|  | 1939                         lineWidth: 1 | 
|  | 1940                     }; | 
|  | 1941                 } | 
|  | 1942                 else { | 
|  | 1943                     info.series[i].lines = { | 
|  | 1944                         show: true, | 
|  | 1945                         lineWidth: 1 | 
|  | 1946                     }; | 
|  | 1947                 } | 
|  | 1948             } | 
|  | 1949 | 
|  | 1950             info.showWithData = function(series, colors) { | 
|  | 1951                 var plot = $.plot(placeholder, series, { | 
|  | 1952                     shadowSize: 0, | 
|  | 1953                     colors: colors, | 
|  | 1954                     legend: { | 
|  | 1955                         container: $('useless-invisible-element-that-does-not-even-exist') | 
|  | 1956                     }, | 
|  | 1957                     grid: { | 
|  | 1958                         borderWidth: 1, | 
|  | 1959                         hoverable: true, | 
|  | 1960                         autoHighlight: false, | 
|  | 1961                         mouseActiveRadius: 1000, | 
|  | 1962                     }, | 
|  | 1963                     yaxis: { | 
|  | 1964                         min: 0, | 
|  | 1965                         max: Math.max(100, info.maxY), | 
|  | 1966                         labelWidth: 145, | 
|  | 1967                         reserveSpace: true, | 
|  | 1968                         lineWidth: 0.5, | 
|  | 1969                         color: '#000', | 
|  | 1970                         tickFormatter: getPercentTickFormatter(Math.max(100, info.maxY)), | 
|  | 1971                         minTickSize: 1 | 
|  | 1972                     }, | 
|  | 1973                     xaxis: { | 
|  | 1974                         min: 0, | 
|  | 1975                         max: info.maxX, | 
|  | 1976                         lineWidth: 0.5, | 
|  | 1977                         color: '#000', | 
|  | 1978                         tickFormatter: getJustNumberTickFormatter(info.maxX, ' ' + name), | 
|  | 1979                         minTickSize: tickX | 
|  | 1980                     } | 
|  | 1981                 }); | 
|  | 1982 | 
|  | 1983                 var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 1984                 firstLabel.prepend('Genome coverage<span class="rhs"> </span>=<span class="rhs"> </span>'); | 
|  | 1985 | 
|  | 1986                 bindTip(placeholder, series, plot, frcNumberToPrettyString, tickX, name, 'bottom right', false, '%'); | 
|  | 1987             }; | 
|  | 1988 | 
|  | 1989             info.isInitialized = true; | 
|  | 1990         } | 
|  | 1991 | 
|  | 1992         addLegendClickEvents(info, filenames.length, showPlotWithInfo, refGenesNumber); | 
|  | 1993         showPlotWithInfo(info); | 
|  | 1994         $('#frc_info').show(); | 
|  | 1995         $('.frc_plot_name').html(name); | 
|  | 1996     } | 
|  | 1997 }; | 
|  | 1998 | 
|  | 1999 | 
|  | 2000 | 
|  | 2001 </script> | 
|  | 2002 | 
|  | 2003 <script type="text/javascript"> | 
|  | 2004 | 
|  | 2005 /**********/ | 
|  | 2006 /* COLORS */ | 
|  | 2007 | 
|  | 2008 // var colors = ["#FF5900", "#008FFF", "#168A16", "#7C00FF", "#00B7FF", "#FF0080", "#7AE01B", "#782400", "#E01B6A"]; | 
|  | 2009 var standard_colors = [ | 
|  | 2010     '#FF0000', //red | 
|  | 2011     '#0000FF', //blue | 
|  | 2012     '#008000', //green | 
|  | 2013     '#FFA500', //orange | 
|  | 2014     '#FF00FF', //fushua | 
|  | 2015     '#CCCC00', //yellow | 
|  | 2016     '#800000', //maroon | 
|  | 2017     '#00CCCC', //aqua | 
|  | 2018     '#808080', //gray | 
|  | 2019     '#800080', //purple | 
|  | 2020     '#808000', //olive | 
|  | 2021     '#000080', //navy | 
|  | 2022     '#008080', //team | 
|  | 2023     '#00FF00', //lime | 
|  | 2024 ]; | 
|  | 2025 | 
|  | 2026 function distinctColors(count) { | 
|  | 2027     var colors = []; | 
|  | 2028     for(var hue = 0; hue < 360; hue += 360 / count) { | 
|  | 2029         var color = hsvToRgb(hue, 100, 100); | 
|  | 2030         var colorStr = '#' + color[0].toString(16) + color[1].toString(16) + color[2].toString(16); | 
|  | 2031         colors.push(); | 
|  | 2032     } | 
|  | 2033     return colors; | 
|  | 2034 } | 
|  | 2035 | 
|  | 2036 /**************/ | 
|  | 2037 /* FORMATTING */ | 
|  | 2038 function isIntegral(num) { | 
|  | 2039     return num % 1 === 0; | 
|  | 2040 } | 
|  | 2041 | 
|  | 2042 function isFractional(num) { | 
|  | 2043     return !isIntegral(num); | 
|  | 2044 } | 
|  | 2045 | 
|  | 2046 function getIntervalToPrettyString(interval) { | 
|  | 2047     return function(num, unit) { | 
|  | 2048         return intervalToPrettyString(interval, num, unit); | 
|  | 2049     } | 
|  | 2050 } | 
|  | 2051 | 
|  | 2052 function intervalToPrettyString(interval, num, unit) { | 
|  | 2053     if (typeof num === 'number') { | 
|  | 2054         var str = toPrettyString(num); | 
|  | 2055         str += '-' + toPrettyString(num + interval); | 
|  | 2056         str += (unit ? '<span class="rhs"> </span>' + unit : ''); | 
|  | 2057         return str; | 
|  | 2058     } else { | 
|  | 2059         return num; | 
|  | 2060     } | 
|  | 2061 } | 
|  | 2062 | 
|  | 2063 function toPrettyString(num, unit) { | 
|  | 2064     if (typeof num === 'number') { | 
|  | 2065         var str; | 
|  | 2066         if (num <= 9999) { | 
|  | 2067             if (isFractional(num)) { | 
|  | 2068                 if (isIntegral(num * 10)) { | 
|  | 2069                     str = num.toFixed(1); | 
|  | 2070                 } else if (isIntegral(num * 100) || num >= 100) { | 
|  | 2071                     str = num.toFixed(2); | 
|  | 2072                 } else { | 
|  | 2073                     str = num.toFixed(3); | 
|  | 2074                     if (str.slice(-1) == '0') | 
|  | 2075                         str = str.slice(0, -1); | 
|  | 2076                 } | 
|  | 2077             } else { | 
|  | 2078                 str = num.toFixed(0); | 
|  | 2079             } | 
|  | 2080         } else { | 
|  | 2081             str = num.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,'$1<span class="hs"></span>'); | 
|  | 2082         } | 
|  | 2083         str += (unit ? '<span class="rhs"> </span>' + unit : ''); | 
|  | 2084         return str; | 
|  | 2085     } else { | 
|  | 2086         return num; | 
|  | 2087     } | 
|  | 2088 } | 
|  | 2089 | 
|  | 2090         //elif isinstance(value, float): | 
|  | 2091         //    if value == 0.0: | 
|  | 2092         //        return '0' | 
|  | 2093         //    if human_readable: | 
|  | 2094         //        if unit == '%': | 
|  | 2095         //            value *= 100 | 
|  | 2096         //        precision = 2 | 
|  | 2097         //        for i in range(10, 1, -1): | 
|  | 2098         //            if abs(value) < 1./(10**i): | 
|  | 2099         //                precision = i + 1 | 
|  | 2100         //                break | 
|  | 2101         //        return '{value:.{precision}f}{unit_str}'.format(**locals()) | 
|  | 2102         //    else: | 
|  | 2103         //        return str(value) | 
|  | 2104 | 
|  | 2105 | 
|  | 2106 function refToPrettyString(num, refs) { | 
|  | 2107     return refs[Math.round(num)-1]; | 
|  | 2108 } | 
|  | 2109 | 
|  | 2110 function ordinalNumberToPrettyString(num, unit, tickX) { | 
|  | 2111     num = num * tickX; | 
|  | 2112     var numStr = num.toString(); | 
|  | 2113     var lastDigit = numStr[numStr.length-1]; | 
|  | 2114     var beforeLastDigit = numStr[numStr.length-2]; | 
|  | 2115 | 
|  | 2116     var res = toPrettyString(num); | 
|  | 2117 | 
|  | 2118     if (lastDigit == '1' && beforeLastDigit != '1') { | 
|  | 2119         res += "st"; | 
|  | 2120     } else if (lastDigit == '2' && beforeLastDigit != '1') { | 
|  | 2121         res += "nd"; | 
|  | 2122     } else if (lastDigit == '3' && beforeLastDigit != '1') { | 
|  | 2123         res += "rd"; | 
|  | 2124     } else { | 
|  | 2125         res += 'th'; | 
|  | 2126     } | 
|  | 2127 | 
|  | 2128     res += (unit ? '<span class="rhs"> </span>' + unit : ''); | 
|  | 2129 | 
|  | 2130     return res; | 
|  | 2131 } | 
|  | 2132 | 
|  | 2133 function frcNumberToPrettyString(num, unit, tickX, index) { | 
|  | 2134     if (index % 2 == 0 && num > 0) num--; | 
|  | 2135     return toPrettyString(num) + ' ' + unit; | 
|  | 2136 } | 
|  | 2137 | 
|  | 2138 function getMaxDecimalTick(maxY) { | 
|  | 2139     var maxYTick = maxY; | 
|  | 2140     if (maxY <= 100000000000) { | 
|  | 2141         maxYTick = Math.ceil((maxY+1)/10000000000)*10000000000; | 
|  | 2142     } if (maxY <= 10000000000) { | 
|  | 2143         maxYTick = Math.ceil((maxY+1)/1000000000)*1000000000; | 
|  | 2144     } if (maxY <= 1000000000) { | 
|  | 2145         maxYTick = Math.ceil((maxY+1)/100000000)*100000000; | 
|  | 2146     } if (maxY <= 100000000) { | 
|  | 2147         maxYTick = Math.ceil((maxY+1)/10000000)*10000000; | 
|  | 2148     } if (maxY <= 10000000) { | 
|  | 2149         maxYTick = Math.ceil((maxY+1)/1000000)*1000000; | 
|  | 2150     } if (maxY <= 1000000) { | 
|  | 2151         maxYTick = Math.ceil((maxY+1)/100000)*100000; | 
|  | 2152     } if (maxY <= 100000) { | 
|  | 2153         maxYTick = Math.ceil((maxY+1)/10000)*10000; | 
|  | 2154     } if (maxY <= 10000) { | 
|  | 2155         maxYTick = Math.ceil((maxY+1)/1000)*1000; | 
|  | 2156     } if (maxY <= 1000) { | 
|  | 2157         maxYTick = Math.ceil((maxY+1)/100)*100. | 
|  | 2158     } if (maxY <= 100) { | 
|  | 2159         maxYTick = Math.ceil((maxY+1)/10)*10. | 
|  | 2160     } | 
|  | 2161     return maxYTick; | 
|  | 2162 } | 
|  | 2163 | 
|  | 2164 function getBpTickFormatter(maxY, additionalText) { | 
|  | 2165     additionalText = additionalText || ''; | 
|  | 2166 | 
|  | 2167     return function(val, axis) { | 
|  | 2168         var res; | 
|  | 2169         if (val == 0) { | 
|  | 2170             res = 0; | 
|  | 2171 | 
|  | 2172         } else if (axis.max >= 1000000) { | 
|  | 2173             res = val / 1000000; | 
|  | 2174 | 
|  | 2175             if (val > axis.max - 1 || val + axis.tickSize >= 1000000000) { | 
|  | 2176                 res = additionalText + toPrettyString(res, 'Mbp'); | 
|  | 2177             } else { | 
|  | 2178                 res = toPrettyString(res); | 
|  | 2179             } | 
|  | 2180         } else if (axis.max >= 1000) { | 
|  | 2181             res = val / 1000; | 
|  | 2182 | 
|  | 2183             if (val > axis.max - 1 || val + axis.tickSize >= 1000000) { | 
|  | 2184                 res = additionalText + toPrettyString(res, 'kbp'); | 
|  | 2185             } else { | 
|  | 2186                 res = toPrettyString(res); | 
|  | 2187             } | 
|  | 2188         } else if (axis.max >= 1) { | 
|  | 2189             res = val; | 
|  | 2190 | 
|  | 2191             if (val > axis.max - 1 || val + axis.tickSize >= 1000) { | 
|  | 2192                 res = additionalText + toPrettyString(res, 'bp'); | 
|  | 2193             } else { | 
|  | 2194                 res = toPrettyString(res); | 
|  | 2195             } | 
|  | 2196         } | 
|  | 2197         return res; | 
|  | 2198     } | 
|  | 2199 } | 
|  | 2200 | 
|  | 2201 function windowsTickFormatter(v, axis) { | 
|  | 2202     return toPrettyString(v); | 
|  | 2203 //    var val = v.toFixed(0); | 
|  | 2204 //    if (!gc.yAxisLabeled && val > gc.maxY) { | 
|  | 2205 //        gc.yAxisLabeled = true; | 
|  | 2206 //        var res = val + ' window'; | 
|  | 2207 //        if (val > 1) { | 
|  | 2208 //            res += 's' | 
|  | 2209 //        } | 
|  | 2210 //        return res; | 
|  | 2211 //    } else { | 
|  | 2212 //        return val; | 
|  | 2213 //    } | 
|  | 2214 } | 
|  | 2215 | 
|  | 2216 function getBpLogTickFormatter(maxY) { | 
|  | 2217     return getBpTickFormatter(maxY); | 
|  | 2218 } | 
|  | 2219 | 
|  | 2220 function getContigNumberTickFormatter(maxX, tickX) { | 
|  | 2221     return function (val, axis) { | 
|  | 2222         if (typeof axis.tickSize == 'number' && val > maxX - axis.tickSize) { | 
|  | 2223             return "       " + ordinalNumberToPrettyString(val, 'contig', tickX); | 
|  | 2224         } else { | 
|  | 2225             return val * tickX; | 
|  | 2226         } | 
|  | 2227     } | 
|  | 2228 } | 
|  | 2229 | 
|  | 2230 function getJustNumberTickFormatter(maxY, additionalText) { | 
|  | 2231     return function (val, axis) { | 
|  | 2232         additionalText = additionalText || ''; | 
|  | 2233         if (val > axis.max - axis.tickSize) { | 
|  | 2234             res = toPrettyString(val) + additionalText; | 
|  | 2235         } else { | 
|  | 2236             res = toPrettyString(val); | 
|  | 2237         } | 
|  | 2238         return res; | 
|  | 2239     } | 
|  | 2240 } | 
|  | 2241 | 
|  | 2242 function getPercentTickFormatter(maxY, additionalText) { | 
|  | 2243     return function (val, axis) { | 
|  | 2244         additionalText = additionalText || ''; | 
|  | 2245         if (val > maxY + 1 || val == 100) { | 
|  | 2246             res = additionalText + toPrettyString(val, '%'); | 
|  | 2247         } else { | 
|  | 2248             res = toPrettyString(val); | 
|  | 2249         } | 
|  | 2250         return res; | 
|  | 2251     } | 
|  | 2252 } | 
|  | 2253 | 
|  | 2254 function trim(str) { | 
|  | 2255     return str.replace(/^\s+/g, ''); | 
|  | 2256 } | 
|  | 2257 | 
|  | 2258 function initial_spaces_to_nbsp(str, metricName) { | 
|  | 2259     if (metricName.length > 0 && metricName[0] == ' ') { | 
|  | 2260         str = '   ' + str; | 
|  | 2261     } | 
|  | 2262     return str; | 
|  | 2263 } | 
|  | 2264 | 
|  | 2265 function containsObject(obj, list) { | 
|  | 2266     var i; | 
|  | 2267     for (i = 0; i < list.length; i++) { | 
|  | 2268         if (list[i] === obj) { | 
|  | 2269             return true; | 
|  | 2270         } | 
|  | 2271     } | 
|  | 2272 | 
|  | 2273     return false; | 
|  | 2274 } | 
|  | 2275 | 
|  | 2276 function addLegendClickEvents(info, numLegendItems, showPlotWithInfo, showReference, index) { | 
|  | 2277     if (showReference) numLegendItems++; | 
|  | 2278     for (var i = 0; i < numLegendItems; i++) { | 
|  | 2279         $('#legend-placeholder input[name=' + i + ']').click(function() { | 
|  | 2280             showPlotWithInfo(info, index); | 
|  | 2281         }); | 
|  | 2282     } | 
|  | 2283 } | 
|  | 2284 | 
|  | 2285 /*********************/ | 
|  | 2286 /* GLOSSARY TOOLTIPS */ | 
|  | 2287 function addTooltipIfDefinitionExists(glossary, metricName) { | 
|  | 2288     metricName = trim(metricName); | 
|  | 2289 | 
|  | 2290     if (containsObject(metricName, Object.keys(glossary))) { | 
|  | 2291         return '<a class="tooltip-link" rel="tooltip" title="' + | 
|  | 2292             metricName + ' ' + glossary[metricName] + '">' + metricName + '</a>'; | 
|  | 2293     } else { | 
|  | 2294         return metricName; | 
|  | 2295     } | 
|  | 2296 } | 
|  | 2297 | 
|  | 2298 /*************/ | 
|  | 2299 /* PLOT TIPS */ | 
|  | 2300 function bindTip(placeholder, series, plot, xToPrettyStringFunction, tickX, xUnit, position, summaryPlots, unitY) { | 
|  | 2301     var prevPoint = null; | 
|  | 2302     var prevIndex = null; | 
|  | 2303 | 
|  | 2304     $(placeholder).bind("plothover", function(event, pos, item) { | 
|  | 2305         if (dragTable && dragTable.isDragging) | 
|  | 2306             return; | 
|  | 2307 | 
|  | 2308         if (item) { | 
|  | 2309             if (prevPoint != item.dataIndex || (summaryPlots && item.seriesIndex != prevIndex)) { | 
|  | 2310                 prevPoint = item.dataIndex; | 
|  | 2311                 prevIndex = item.seriesIndex; | 
|  | 2312                 var x = item.datapoint[0]; | 
|  | 2313 | 
|  | 2314                 showTip(item.pageX, item.pageY, plot.offset(), | 
|  | 2315                     plot.width(), plot.height(), | 
|  | 2316                     series, item.seriesIndex, x, item.dataIndex, | 
|  | 2317                     xToPrettyStringFunction(x, xUnit, tickX, item.dataIndex) + ':', | 
|  | 2318                     position, summaryPlots, unitY); | 
|  | 2319             } | 
|  | 2320         } else { | 
|  | 2321             $('#plot_tip').hide(); | 
|  | 2322             $('#plot_tip_vertical_rule').hide(); | 
|  | 2323             $('#plot_tip_horizontal_rule').hide(); | 
|  | 2324             prevPoint = null; | 
|  | 2325         } | 
|  | 2326     }); | 
|  | 2327 } | 
|  | 2328 | 
|  | 2329 function unBindTips(placeholder) { | 
|  | 2330     $(placeholder).unbind("plothover"); | 
|  | 2331 } | 
|  | 2332 | 
|  | 2333 var tipElementExists = false; | 
|  | 2334 function showTip(pageX, pageY, offset, plotWidth, plotHeight, | 
|  | 2335                  series, centralSeriesIndex, xPos, xIndex, xStr, position, summaryPlots, unitY) { | 
|  | 2336     const LINE_HEIGHT = 16; // pixels | 
|  | 2337 | 
|  | 2338     position = ((position != null) ? position : 'bottom right'); | 
|  | 2339 //    pageY -= LINE_HEIGHT * (centralSeriesIndex + 1.5); | 
|  | 2340 | 
|  | 2341     var directions = position.split(' '); | 
|  | 2342 | 
|  | 2343     if (!tipElementExists) { | 
|  | 2344         $('<div id="plot_tip" class="white_stroked"></div>').appendTo('body'); | 
|  | 2345 | 
|  | 2346         $('<div id="plot_tip_vertical_rule"></div>').css({ | 
|  | 2347             height: plotHeight, | 
|  | 2348         }).appendTo('body'); | 
|  | 2349 | 
|  | 2350         $('<div id="plot_tip_horizontal_rule"></div>').css({ | 
|  | 2351             width: plotWidth, | 
|  | 2352         }).appendTo('body'); | 
|  | 2353 | 
|  | 2354         tipElementExists = true; | 
|  | 2355     } | 
|  | 2356 | 
|  | 2357     $('#plot_tip').html('').css({ | 
|  | 2358         top: pageY + 5 - ((directions[0] == 'top') ? LINE_HEIGHT * (series.length + 2) : 0), | 
|  | 2359         left: pageX + 10, | 
|  | 2360     }).show(); | 
|  | 2361 | 
|  | 2362     $('#plot_tip_vertical_rule').html('').css({ | 
|  | 2363         top: offset.top, | 
|  | 2364         left: pageX, | 
|  | 2365     }).show(); | 
|  | 2366 | 
|  | 2367     $('#plot_tip_horizontal_rule').html('').css({ | 
|  | 2368         top: pageY, | 
|  | 2369         left: offset.left, | 
|  | 2370     }).show(); | 
|  | 2371 | 
|  | 2372     $('<div>' + xStr + '</div>').css({ | 
|  | 2373         height: LINE_HEIGHT, | 
|  | 2374     }).appendTo('#plot_tip'); | 
|  | 2375 | 
|  | 2376     var sortedYsAndColors = []; | 
|  | 2377     for (var i = 0; i < series.length; i++) { | 
|  | 2378         if (!summaryPlots || (summaryPlots && series[i].data[xIndex] != undefined && series[i].data[xIndex][1] != null)) { | 
|  | 2379             sortedYsAndColors.push({ | 
|  | 2380                 y: summaryPlots ? series[i].data[xIndex][1] : (i == centralSeriesIndex ? (series[i].data[xIndex] || series[i].data[series[i].data.length - 1])[1] : | 
|  | 2381                     findNearestPoint(series[i].data, xPos)), | 
|  | 2382                 color: series[i].color, | 
|  | 2383                 label: (series[i].isReference ? 'Reference' : series[i].label), | 
|  | 2384                 isCurrent: i == centralSeriesIndex, | 
|  | 2385             }); | 
|  | 2386         } | 
|  | 2387     } | 
|  | 2388     sortedYsAndColors.sort(function(a, b) { return a.y < b.y;}); | 
|  | 2389 | 
|  | 2390     for (i = 0; i < sortedYsAndColors.length; i++) { | 
|  | 2391         var item = sortedYsAndColors[i]; | 
|  | 2392 | 
|  | 2393         $('<div id="tip_line' + i + '">' + toPrettyString(item.y) + (unitY ? unitY : '') + | 
|  | 2394             ', <span style="color: ' + item.color + ';">' + item.label + '</span></div>').css({ | 
|  | 2395             height: LINE_HEIGHT, | 
|  | 2396             "font-weight": item.isCurrent ? "bold" : "normal", | 
|  | 2397         }).appendTo('#plot_tip'); | 
|  | 2398     } | 
|  | 2399 } | 
|  | 2400 | 
|  | 2401 function findNearestPoint(points, x) { | 
|  | 2402     for (var i = 0; i < points.length; i++) { | 
|  | 2403         if (points[i][0] >= x) return points[i][1]; | 
|  | 2404     } | 
|  | 2405     return points[points.length-1][1] | 
|  | 2406 } | 
|  | 2407 | 
|  | 2408 function addLabelToLegend(idx, label, selectedLabels, colors, link) { | 
|  | 2409     var isChecked = (selectedLabels.length > 0 && selectedLabels.indexOf(idx.toString())) != -1 ? 'checked="checked"' : ""; | 
|  | 2410     $('#legend-placeholder').append('<div>' + | 
|  | 2411         '<label for="' + label + '" style="color: ' + colors[idx] + '">' + | 
|  | 2412         '<input type="checkbox" name="' + idx + '"' + isChecked + ' id="' + label + '"> ' + label + '</label>' + | 
|  | 2413         (link ? '<br>' + link : '') + '</div>'); | 
|  | 2414 } | 
|  | 2415 | 
|  | 2416 function getSelectedAssemblies(labels) { | 
|  | 2417     var selectedAssemblies = []; | 
|  | 2418     var labelsMatch = false; | 
|  | 2419     var legendLabels = []; | 
|  | 2420     $('#legend-placeholder input[type="checkbox"]').each(function() { | 
|  | 2421         legendLabels.push($(this).attr('id')); | 
|  | 2422     }); | 
|  | 2423     if (labels.every(function(label, i) { return ($.inArray(label, legendLabels) != -1 || label == 'reference')}) ) { | 
|  | 2424         labelsMatch = true; | 
|  | 2425     } | 
|  | 2426     if (labelsMatch) { | 
|  | 2427         $('#legend-placeholder input:checked[type="checkbox"]').each(function() { | 
|  | 2428             selectedAssemblies.push($(this).attr('name')); | 
|  | 2429         }); | 
|  | 2430     } | 
|  | 2431     else { | 
|  | 2432         selectedAssemblies = Array.apply(null, {length: labels}).map(Number.call, Number); | 
|  | 2433     } | 
|  | 2434     return selectedAssemblies; | 
|  | 2435 } | 
|  | 2436 | 
|  | 2437 // Cookie functions based on http://www.quirksmode.org/js/cookies.html | 
|  | 2438 // Cookies won't work for local files. | 
|  | 2439 | 
|  | 2440 var createCookie = function(name, value, days) { | 
|  | 2441     var expires = ''; | 
|  | 2442     if (days) { | 
|  | 2443         var date = new Date(); | 
|  | 2444         date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); | 
|  | 2445         expires = '; expires=' + date.toGMTString(); | 
|  | 2446     } | 
|  | 2447     var path = document.location.pathname; | 
|  | 2448     document.cookie = name + '=' + value + expires + '; path=' + path; | 
|  | 2449 }; | 
|  | 2450 | 
|  | 2451 var readCookie = function(name) { | 
|  | 2452     var nameEQ = name + '='; | 
|  | 2453     var ca = document.cookie.split(';'); | 
|  | 2454     for(var i = 0; i < ca.length; i++) { | 
|  | 2455         var c = ca[i]; | 
|  | 2456         while (c.charAt(0) == ' ') { | 
|  | 2457             c = c.substring(1, c.length); | 
|  | 2458         } | 
|  | 2459         if (c.indexOf(nameEQ) == 0) { | 
|  | 2460             return c.substring(nameEQ.length, c.length); | 
|  | 2461         } | 
|  | 2462     } | 
|  | 2463     return null; | 
|  | 2464 }; | 
|  | 2465 | 
|  | 2466 var eraseCookie = function(name) { | 
|  | 2467     createCookie(name, '', -1); | 
|  | 2468 }; | 
|  | 2469 | 
|  | 2470 | 
|  | 2471 // Dean's forEach: http://dean.edwards.name/base/forEach.js | 
|  | 2472 /*forEach, version 1.0 | 
|  | 2473  Copyright 2006, Dean Edwards | 
|  | 2474  License: http://www.opensource.org/licenses/mit-license.php */ | 
|  | 2475 | 
|  | 2476 // array-like enumeration | 
|  | 2477 if (!Array.forEach) { // mozilla already supports this | 
|  | 2478     Array.forEach = function(array, block, context) { | 
|  | 2479         for (var i = 0; i < array.length; i++) { | 
|  | 2480             block.call(context, array[i], i, array); | 
|  | 2481         } | 
|  | 2482     }; | 
|  | 2483 } | 
|  | 2484 | 
|  | 2485 // generic enumeration | 
|  | 2486 Function.prototype.forEach = function(object, block, context) { | 
|  | 2487     for (var key in object) { | 
|  | 2488         if (typeof this.prototype[key] == "undefined") { | 
|  | 2489             block.call(context, object[key], key, object); | 
|  | 2490         } | 
|  | 2491     } | 
|  | 2492 }; | 
|  | 2493 | 
|  | 2494 // character enumeration | 
|  | 2495 String.forEach = function(string, block, context) { | 
|  | 2496     Array.forEach(string.split(""), function(chr, index) { | 
|  | 2497         block.call(context, chr, index, string); | 
|  | 2498     }); | 
|  | 2499 }; | 
|  | 2500 | 
|  | 2501 // globally resolve forEach enumeration | 
|  | 2502 var forEach = function(object, block, context) { | 
|  | 2503     if (object) { | 
|  | 2504         if (object instanceof Function) {                 // functions have a "length" property | 
|  | 2505             Function.forEach(object, block, context); | 
|  | 2506 | 
|  | 2507         } else if (object.each instanceof Function) {     // jQuery | 
|  | 2508             object.each(function(i, elt) { | 
|  | 2509                 block(elt); | 
|  | 2510             }, context); | 
|  | 2511 | 
|  | 2512         } else if (object.forEach instanceof Function) {  // the object implements a custom forEach method | 
|  | 2513             object.forEach(block, context); | 
|  | 2514 | 
|  | 2515         } else if (typeof object == "string") {           // a string | 
|  | 2516             String.forEach(object, block, context); | 
|  | 2517 | 
|  | 2518         } else if (typeof object.length == "number") {    // array-like object | 
|  | 2519             Array.forEach(object, block, context); | 
|  | 2520 | 
|  | 2521         } else { | 
|  | 2522             Object.forEach(object, block, context); | 
|  | 2523         } | 
|  | 2524     } | 
|  | 2525 }; | 
|  | 2526 | 
|  | 2527 | 
|  | 2528 jQuery.fn.exists = function(){ | 
|  | 2529     return jQuery(this).length > 0; | 
|  | 2530 }; | 
|  | 2531 | 
|  | 2532 | 
|  | 2533 function Range(from, to) { | 
|  | 2534     var r  = []; | 
|  | 2535     for (var i = from; i < to; i++) { | 
|  | 2536         r.push(i); | 
|  | 2537     } | 
|  | 2538     return r; | 
|  | 2539 } | 
|  | 2540 | 
|  | 2541 | 
|  | 2542 | 
|  | 2543 </script> | 
|  | 2544 | 
|  | 2545 <script type="text/javascript"> | 
|  | 2546 /** | 
|  | 2547  * HSV to RGB color conversion | 
|  | 2548  * | 
|  | 2549  * H runs from 0 to 360 degrees | 
|  | 2550  * S and V run from 0 to 100 | 
|  | 2551  * | 
|  | 2552  * Ported from the excellent java algorithm by Eugene Vishnevsky at: | 
|  | 2553  * http://www.cs.rit.edu/~ncs/color/t_convert.html | 
|  | 2554  */ | 
|  | 2555 function hsvToRgb(h, s, v) { | 
|  | 2556     var r, g, b; | 
|  | 2557     var i; | 
|  | 2558     var f, p, q, t; | 
|  | 2559 | 
|  | 2560     // Make sure our arguments stay in-range | 
|  | 2561     h = Math.max(0, Math.min(360, h)); | 
|  | 2562     s = Math.max(0, Math.min(100, s)); | 
|  | 2563     v = Math.max(0, Math.min(100, v)); | 
|  | 2564 | 
|  | 2565     // We accept saturation and value arguments from 0 to 100 because that's | 
|  | 2566     // how Photoshop represents those values. Internally, however, the | 
|  | 2567     // saturation and value are calculated from a range of 0 to 1. We make | 
|  | 2568     // That conversion here. | 
|  | 2569     s /= 100; | 
|  | 2570     v /= 100; | 
|  | 2571 | 
|  | 2572     if(s == 0) { | 
|  | 2573         // Achromatic (grey) | 
|  | 2574         r = g = b = v; | 
|  | 2575         return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; | 
|  | 2576     } | 
|  | 2577 | 
|  | 2578     h /= 60; // sector 0 to 5 | 
|  | 2579     i = Math.floor(h); | 
|  | 2580     f = h - i; // factorial part of h | 
|  | 2581     p = v * (1 - s); | 
|  | 2582     q = v * (1 - s * f); | 
|  | 2583     t = v * (1 - s * (1 - f)); | 
|  | 2584 | 
|  | 2585     switch(i) { | 
|  | 2586         case 0: | 
|  | 2587             r = v; | 
|  | 2588             g = t; | 
|  | 2589             b = p; | 
|  | 2590             break; | 
|  | 2591 | 
|  | 2592         case 1: | 
|  | 2593             r = q; | 
|  | 2594             g = v; | 
|  | 2595             b = p; | 
|  | 2596             break; | 
|  | 2597 | 
|  | 2598         case 2: | 
|  | 2599             r = p; | 
|  | 2600             g = v; | 
|  | 2601             b = t; | 
|  | 2602             break; | 
|  | 2603 | 
|  | 2604         case 3: | 
|  | 2605             r = p; | 
|  | 2606             g = q; | 
|  | 2607             b = v; | 
|  | 2608             break; | 
|  | 2609 | 
|  | 2610         case 4: | 
|  | 2611             r = t; | 
|  | 2612             g = p; | 
|  | 2613             b = v; | 
|  | 2614             break; | 
|  | 2615 | 
|  | 2616         default: // case 5: | 
|  | 2617             r = v; | 
|  | 2618             g = p; | 
|  | 2619             b = q; | 
|  | 2620     } | 
|  | 2621 | 
|  | 2622     return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; | 
|  | 2623 } | 
|  | 2624 | 
|  | 2625 function hslToRgb(h, s, l){ | 
|  | 2626     var r, g, b; | 
|  | 2627 | 
|  | 2628     if(s == 0) { | 
|  | 2629         r = g = b = l; // achromatic | 
|  | 2630     } else { | 
|  | 2631         function hue2rgb(p, q, t){ | 
|  | 2632             if(t < 0) t += 1; | 
|  | 2633             if(t > 1) t -= 1; | 
|  | 2634             if(t < 1/6) return p + (q - p) * 6 * t; | 
|  | 2635             if(t < 1/2) return q; | 
|  | 2636             if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; | 
|  | 2637             return p; | 
|  | 2638         } | 
|  | 2639 | 
|  | 2640         var q = l < 0.5 ? l * (1 + s) : l + s - l * s; | 
|  | 2641         var p = 2 * l - q; | 
|  | 2642         r = hue2rgb(p, q, h + 1/3); | 
|  | 2643         g = hue2rgb(p, q, h); | 
|  | 2644         b = hue2rgb(p, q, h - 1/3); | 
|  | 2645     } | 
|  | 2646 | 
|  | 2647     return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; | 
|  | 2648 } | 
|  | 2649 </script> | 
|  | 2650 | 
|  | 2651 <script type="text/javascript"> | 
|  | 2652 | 
|  | 2653 var gns = { | 
|  | 2654     features: { | 
|  | 2655         isInitialized: false, | 
|  | 2656 | 
|  | 2657         maxY: 0, | 
|  | 2658         maxYTick: 0, | 
|  | 2659         series: null, | 
|  | 2660         showWithData: null, | 
|  | 2661 | 
|  | 2662         yAxisLabeled: false | 
|  | 2663     }, | 
|  | 2664 | 
|  | 2665     operons: { | 
|  | 2666         isInitialized: false, | 
|  | 2667 | 
|  | 2668         maxY: 0, | 
|  | 2669         maxYTick: 0, | 
|  | 2670         series: null, | 
|  | 2671         showWithData: null, | 
|  | 2672 | 
|  | 2673         yAxisLabeled: false | 
|  | 2674     }, | 
|  | 2675 | 
|  | 2676     draw: function (name, title, colors, filenames, data, refFeaturesNumber, tickX, | 
|  | 2677                     placeholder, legendPlaceholder, glossary, order, scalePlaceholder) { | 
|  | 2678 //    div.html( | 
|  | 2679 //        "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" + | 
|  | 2680 //        "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>" | 
|  | 2681 //    ); | 
|  | 2682         $(scalePlaceholder).empty(); | 
|  | 2683 | 
|  | 2684         var info = gns[name]; | 
|  | 2685 | 
|  | 2686         info.yAxisLabeled = false; | 
|  | 2687         var cur_filenames = data.filenames; | 
|  | 2688         if (!info.isInitialized) { | 
|  | 2689             var filesFeatureInContigs = data.filesFeatureInContigs; | 
|  | 2690             var kind = data.kind; | 
|  | 2691 | 
|  | 2692             var plotsN = cur_filenames.length; | 
|  | 2693             info.series = new Array(plotsN); | 
|  | 2694 | 
|  | 2695             info.maxY = 0; | 
|  | 2696             info.maxX = 0; | 
|  | 2697 | 
|  | 2698             if (refFeaturesNumber) { | 
|  | 2699                 info.maxY = refFeaturesNumber; | 
|  | 2700             } | 
|  | 2701 | 
|  | 2702             for (var fi = 0; fi < plotsN; fi++) { | 
|  | 2703                 var index = $.inArray(cur_filenames[order[fi]], filenames); | 
|  | 2704                 var filename = filenames[index]; | 
|  | 2705                 var featureInContigs = filesFeatureInContigs[filename]; | 
|  | 2706 | 
|  | 2707                 info.series[fi] = { | 
|  | 2708                     data: [[0, 0]], | 
|  | 2709                     label: filenames[index], | 
|  | 2710                     number: index, | 
|  | 2711                     color: colors[index] | 
|  | 2712                 }; | 
|  | 2713 | 
|  | 2714                 var contigNo = 0; | 
|  | 2715                 var totalFull = 0; | 
|  | 2716 | 
|  | 2717                 for (var k = 0; k < featureInContigs.length; k++) { | 
|  | 2718                     contigNo += 1; | 
|  | 2719                     totalFull += featureInContigs[k]; | 
|  | 2720 | 
|  | 2721                     info.series[fi].data.push([contigNo, totalFull]); | 
|  | 2722 | 
|  | 2723                     if (info.series[fi].data[k][1] > info.maxY) { | 
|  | 2724                         info.maxY = info.series[fi].data[k][1]; | 
|  | 2725                     } | 
|  | 2726                 } | 
|  | 2727 | 
|  | 2728                 if (featureInContigs.length > info.maxX) { | 
|  | 2729                     info.maxX = featureInContigs.length; | 
|  | 2730                 } | 
|  | 2731             } | 
|  | 2732 | 
|  | 2733             for (i = 0; i < plotsN; i++) { | 
|  | 2734                 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) { | 
|  | 2735                     info.series[i].dashes = { | 
|  | 2736                         show: true, | 
|  | 2737                         lineWidth: 1 | 
|  | 2738                     }; | 
|  | 2739                 } | 
|  | 2740                 else { | 
|  | 2741                     info.series[i].lines = { | 
|  | 2742                         show: true, | 
|  | 2743                         lineWidth: 1 | 
|  | 2744                     }; | 
|  | 2745                 } | 
|  | 2746             } | 
|  | 2747 | 
|  | 2748             //    for (i = 0; i < plotsN; i++) { | 
|  | 2749             //        plotsData[i].points = { | 
|  | 2750             //            show: true, | 
|  | 2751             //            radius: 1, | 
|  | 2752             //            fill: 1, | 
|  | 2753             //            fillColor: false, | 
|  | 2754             //        } | 
|  | 2755             //    } | 
|  | 2756 | 
|  | 2757             if (refFeaturesNumber) { | 
|  | 2758                 info.series.push({ | 
|  | 2759                     data: [[0, refFeaturesNumber], [info.maxX, refFeaturesNumber]], | 
|  | 2760                     label: 'reference, ' + toPrettyString(refFeaturesNumber, 'features'), | 
|  | 2761                     isReference: true, | 
|  | 2762                     dashes: { | 
|  | 2763                         show: true, | 
|  | 2764                         lineWidth: 1 | 
|  | 2765                     }, | 
|  | 2766                     yaxis: 1, | 
|  | 2767                     number: filenames.length, | 
|  | 2768                     color: '#000000' | 
|  | 2769                 }); | 
|  | 2770 | 
|  | 2771                 colors.push('#000000'); | 
|  | 2772             } | 
|  | 2773 | 
|  | 2774             info.showWithData = function(series, colors) { | 
|  | 2775                 var plot = $.plot(placeholder, series, { | 
|  | 2776                     shadowSize: 0, | 
|  | 2777                     colors: colors, | 
|  | 2778                     legend: { | 
|  | 2779                         container: $('useless-invisible-element-that-does-not-even-exist'), | 
|  | 2780                     }, | 
|  | 2781                     grid: { | 
|  | 2782                         borderWidth: 1, | 
|  | 2783                         hoverable: true, | 
|  | 2784                         autoHighlight: false, | 
|  | 2785                         mouseActiveRadius: 1000, | 
|  | 2786                     }, | 
|  | 2787                     yaxis: { | 
|  | 2788                         min: 0, | 
|  | 2789 //                        max: info.maxY, | 
|  | 2790                         labelWidth: 120, | 
|  | 2791                         reserveSpace: true, | 
|  | 2792                         lineWidth: 0.5, | 
|  | 2793                         color: '#000', | 
|  | 2794                         tickFormatter: function (val, axis) { | 
|  | 2795 //                            if (!info.yAxisLabeled && val > info.maxY) { | 
|  | 2796 //                                info.yAxisLabeled = true; | 
|  | 2797 //                                var res = val + ' ' + kind; | 
|  | 2798 //                                if (val > 1) { | 
|  | 2799 //                                    res += 's' | 
|  | 2800 //                                } | 
|  | 2801 //                                return res; | 
|  | 2802 //                            } else { | 
|  | 2803                             return val; | 
|  | 2804 //                            } | 
|  | 2805                         }, | 
|  | 2806                         minTickSize: 1 | 
|  | 2807                     }, | 
|  | 2808                     xaxis: { | 
|  | 2809                         min: 0, | 
|  | 2810                         max: info.maxX, | 
|  | 2811                         lineWidth: 0.5, | 
|  | 2812                         color: '#000', | 
|  | 2813                         tickFormatter: getContigNumberTickFormatter(info.maxX, tickX), | 
|  | 2814                         minTickSize: tickX | 
|  | 2815                     }, | 
|  | 2816                 }); | 
|  | 2817 | 
|  | 2818                 var firstLabel = $('.yAxis .tickLabel').last(); | 
|  | 2819                 firstLabel.append(' ' + name); | 
|  | 2820 | 
|  | 2821                 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right'); | 
|  | 2822             }; | 
|  | 2823 | 
|  | 2824             info.isInitialized = true; | 
|  | 2825         } | 
|  | 2826 | 
|  | 2827         addLegendClickEvents(info, filenames.length, showPlotWithInfo, refFeaturesNumber); | 
|  | 2828 | 
|  | 2829         showPlotWithInfo(info); | 
|  | 2830 | 
|  | 2831         $('#contigs_are_ordered').show(); | 
|  | 2832     } | 
|  | 2833 }; | 
|  | 2834 | 
|  | 2835 | 
|  | 2836 | 
|  | 2837 </script> | 
|  | 2838 | 
|  | 2839 <script type="text/javascript"> | 
|  | 2840 /* | 
|  | 2841  DT v1.0 | 
|  | 2842  June 26, 2008 | 
|  | 2843  Dan Vanderkam, http://danvk.org/DT/ | 
|  | 2844  http://code.google.com/p/DT/ | 
|  | 2845 | 
|  | 2846  This is code was based on: | 
|  | 2847  - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable) | 
|  | 2848  - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/) | 
|  | 2849  - A discussion of permuting table columns on comp.lang.javascript | 
|  | 2850 | 
|  | 2851  Licensed under the MIT license. | 
|  | 2852  */ | 
|  | 2853 | 
|  | 2854 // Here's the notice from Mike Hall's draggable script: | 
|  | 2855 //***************************************************************************** | 
|  | 2856 // Do not remove this notice. | 
|  | 2857 // | 
|  | 2858 // Copyright 2001 by Mike Hall. | 
|  | 2859 // See http://www.brainjar.com for terms of use. | 
|  | 2860 //***************************************************************************** | 
|  | 2861 | 
|  | 2862 var classes = { | 
|  | 2863     cell_of_emptySpace: 'cell_of_empty_space', | 
|  | 2864     cell_of_movingTable: 'cell_of_moving_table', | 
|  | 2865     newTable: 'moving_table', | 
|  | 2866     handle: 'drag_handle', | 
|  | 2867     hoveredCell: 'hovered_column_td', | 
|  | 2868     assemblyName: 'assembly_name', | 
|  | 2869 | 
|  | 2870     bottomCell_of_emptySpace: 'bottom_cell_of_empty_space', | 
|  | 2871     topCell_of_emptySpace: 'top_cell_of_empty_space', | 
|  | 2872     leftToCell_of_emptySpace: 'left_to_cell_of_empty_space', | 
|  | 2873     rightToCell_of_emptySpace: 'right_to_cell_of_empty_space', | 
|  | 2874 | 
|  | 2875     mainReportTable_id: 'main_report_table', | 
|  | 2876     totalReportJson_id: 'total-report-json', | 
|  | 2877 }; | 
|  | 2878 | 
|  | 2879 var dragTable = { | 
|  | 2880     isDragging: false, | 
|  | 2881 | 
|  | 2882     // How far should the mouse move before it's considered a drag, not a click? | 
|  | 2883     dragRadius2: 0, // 100, | 
|  | 2884     setMinDragDistance: function(x) { | 
|  | 2885         DT.dragRadius2 = x * x; | 
|  | 2886     }, | 
|  | 2887 | 
|  | 2888     // How long should cookies persist? (in days) | 
|  | 2889     cookieDays: 365, | 
|  | 2890     setCookieDays: function(x) { | 
|  | 2891         DT.cookieDays = x; | 
|  | 2892     }, | 
|  | 2893 | 
|  | 2894     // Determine browser and version. | 
|  | 2895     // TODO: eliminate browser sniffing except where it's really necessary. | 
|  | 2896     Browser: function() { | 
|  | 2897         var ua, s, i; | 
|  | 2898 | 
|  | 2899         this.isIE    = false; | 
|  | 2900         this.isNS    = false; | 
|  | 2901         this.version = null; | 
|  | 2902         ua = navigator.userAgent; | 
|  | 2903 | 
|  | 2904         s = "MSIE"; | 
|  | 2905         if ((i = ua.indexOf(s)) >= 0) { | 
|  | 2906             this.isIE = true; | 
|  | 2907             this.version = parseFloat(ua.substr(i + s.length)); | 
|  | 2908             return; | 
|  | 2909         } | 
|  | 2910 | 
|  | 2911         s = "Netscape6/"; | 
|  | 2912         if ((i = ua.indexOf(s)) >= 0) { | 
|  | 2913             this.isNS = true; | 
|  | 2914             this.version = parseFloat(ua.substr(i + s.length)); | 
|  | 2915             return; | 
|  | 2916         } | 
|  | 2917 | 
|  | 2918         // Treat any other "Gecko" browser as NS 6.1. | 
|  | 2919         s = "Gecko"; | 
|  | 2920         if ((i = ua.indexOf(s)) >= 0) { | 
|  | 2921             this.isNS = true; | 
|  | 2922             this.version = 6.1; | 
|  | 2923             return; | 
|  | 2924         } | 
|  | 2925     }, | 
|  | 2926     browser: null, | 
|  | 2927 | 
|  | 2928     // Detect all draggable tables and attach handlers to their headers. | 
|  | 2929     init: function() { | 
|  | 2930         // Don't initialize twice | 
|  | 2931         if (arguments.callee.done) | 
|  | 2932             return; | 
|  | 2933         else | 
|  | 2934             arguments.callee.done = true; | 
|  | 2935 | 
|  | 2936 //    if (_dgtimer) | 
|  | 2937 //      clearInterval(_dgtimer); | 
|  | 2938 | 
|  | 2939         if (!document.createElement || !document.getElementsByTagName) | 
|  | 2940             return; | 
|  | 2941 | 
|  | 2942         DT.dragObj.zIndex = 0; | 
|  | 2943         DT.browser = new DT.Browser(); | 
|  | 2944         forEach(document.getElementsByTagName('table'), function(table) { | 
|  | 2945             if ($(table).hasClass('draggable')) { | 
|  | 2946                 DT.makeDraggable(table); | 
|  | 2947             } | 
|  | 2948         }); | 
|  | 2949     }, | 
|  | 2950 | 
|  | 2951     // The thead business is taken straight from sorttable. | 
|  | 2952     makeDraggable: function(table) { | 
|  | 2953         DT.dragObj.table = table; | 
|  | 2954 | 
|  | 2955         if (table.getElementsByTagName('thead').length == 0) { | 
|  | 2956             thead = document.createElement('thead'); | 
|  | 2957             thead.appendChild(table.rows[0]); | 
|  | 2958             table.insertBefore(thead, table.firstChild); | 
|  | 2959         } | 
|  | 2960 | 
|  | 2961         // Safari doesn't support table.tHead, sigh | 
|  | 2962         if (table.tHead == null) { | 
|  | 2963             table.tHead = table.getElementsByTagName('thead')[0]; | 
|  | 2964         } | 
|  | 2965 | 
|  | 2966         var handles = $('.' + classes.handle) || table.tHead.rows[0].cells; | 
|  | 2967 | 
|  | 2968         forEach(handles, function(handle) { | 
|  | 2969             handle.onmousedown = DT.dragStart; | 
|  | 2970         }); | 
|  | 2971     }, | 
|  | 2972 | 
|  | 2973     // Global object to hold drag information. | 
|  | 2974     dragObj: {}, | 
|  | 2975 | 
|  | 2976     getEventPosition: function(event) { | 
|  | 2977         var x, y; | 
|  | 2978         if (DT.browser.isIE) { | 
|  | 2979             x = window.event.clientX + document.documentElement.scrollLeft | 
|  | 2980                 + document.body.scrollLeft; | 
|  | 2981             y = window.event.clientY + document.documentElement.scrollTop | 
|  | 2982                 + document.body.scrollTop; | 
|  | 2983             return {x: x, y: y}; | 
|  | 2984         } | 
|  | 2985         return {x: event.pageX, y: event.pageY}; | 
|  | 2986     }, | 
|  | 2987 | 
|  | 2988     // Determine the position of this element on the page. Many thanks to Magnus | 
|  | 2989     // Kristiansen for help making this work with "position: fixed" elements. | 
|  | 2990     getPositionOnThePage: function(elt, stopAtRelative) { | 
|  | 2991         var ex = 0, ey = 0; | 
|  | 2992         do { | 
|  | 2993             var curStyle = DT.browser.isIE ? elt.currentStyle | 
|  | 2994                 : window.getComputedStyle(elt, ''); | 
|  | 2995             var supportFixed = !(DT.browser.isIE && | 
|  | 2996                 DT.browser.version < 7); | 
|  | 2997             if (stopAtRelative && curStyle.position == 'relative') { | 
|  | 2998                 break; | 
|  | 2999             } else if (supportFixed && curStyle.position == 'fixed') { | 
|  | 3000                 // Get the fixed el's offset | 
|  | 3001                 ex += parseInt(curStyle.left, 10); | 
|  | 3002                 ey += parseInt(curStyle.top, 10); | 
|  | 3003                 // Compensate for scrolling | 
|  | 3004                 ex += document.body.scrollLeft; | 
|  | 3005                 ey += document.body.scrollTop; | 
|  | 3006                 // End the loop | 
|  | 3007                 break; | 
|  | 3008             } else { | 
|  | 3009                 ex += elt.offsetLeft; | 
|  | 3010                 ey += elt.offsetTop; | 
|  | 3011             } | 
|  | 3012         } while (elt = elt.offsetParent); | 
|  | 3013         return {x: ex, y: ey}; | 
|  | 3014     }, | 
|  | 3015 | 
|  | 3016     // MouseDown handler -- sets up the appropriate mousemove/mouseup handlers | 
|  | 3017     // and fills in the global DT.dragObj object. | 
|  | 3018     dragStart: function(event, id) { | 
|  | 3019         DT.isDragging = true; | 
|  | 3020 | 
|  | 3021         var drag_obj = DT.dragObj; | 
|  | 3022 | 
|  | 3023         var browser = DT.browser; | 
|  | 3024         var clicked_node = browser.isIE ? window.event.srcElement : event.target; | 
|  | 3025         var pos = DT.getEventPosition(event); | 
|  | 3026 | 
|  | 3027         var table = $(clicked_node).closest('table')[0]; | 
|  | 3028         var top_cell = $(clicked_node).closest('td, th')[0]; | 
|  | 3029         drag_obj.topCell = top_cell; | 
|  | 3030         drag_obj.table = table; | 
|  | 3031 | 
|  | 3032         var col_index = top_cell.cellIndex; | 
|  | 3033         drag_obj.movingColIndex = drag_obj.startIndex = col_index; | 
|  | 3034         drag_obj.movingColWidth = $(top_cell).width(); | 
|  | 3035 | 
|  | 3036         // Since a column header can't be dragged directly, duplicate its contents | 
|  | 3037         // in a div and drag that instead. | 
|  | 3038         var new_table = DT.fullCopy(table, false); | 
|  | 3039 | 
|  | 3040         // Copy the entire column | 
|  | 3041         var forEachSection = function(table, func) { | 
|  | 3042             if (table.tHead) { | 
|  | 3043                 func(table.tHead); | 
|  | 3044             } | 
|  | 3045             forEach(table.tBodies, function(tbody) { | 
|  | 3046                 func(tbody); | 
|  | 3047             }); | 
|  | 3048             if (table.tFoot) { | 
|  | 3049                 func(table.tFoot); | 
|  | 3050             } | 
|  | 3051         }; | 
|  | 3052 | 
|  | 3053         forEachSection(table, function(sec) { | 
|  | 3054             var new_sec = DT.fullCopy(sec, false); | 
|  | 3055 | 
|  | 3056             forEach(sec.rows, function(row) { | 
|  | 3057                 var cell = row.cells[col_index]; | 
|  | 3058                 var new_tr = DT.fullCopy(row, false); | 
|  | 3059                 if (row.offsetHeight) new_tr.style.height = row.offsetHeight + "px"; | 
|  | 3060                 var new_td = DT.fullCopy(cell, true); | 
|  | 3061                 if (cell.offsetWidth) new_td.style.width = cell.offsetWidth + "px !important"; | 
|  | 3062                 new_tr.appendChild(new_td); | 
|  | 3063                 new_sec.appendChild(new_tr); | 
|  | 3064             }); | 
|  | 3065 | 
|  | 3066             new_table.appendChild(new_sec); | 
|  | 3067         }); | 
|  | 3068 | 
|  | 3069         var obj_pos = DT.getPositionOnThePage(top_cell, true); | 
|  | 3070         new_table.style.position = "absolute"; | 
|  | 3071         new_table.style.left = obj_pos.x + "px"; | 
|  | 3072         new_table.style.top = obj_pos.y + "px"; | 
|  | 3073         // new_table.style.width = dragObj.origNode.offsetWidth + "px"; | 
|  | 3074         // new_table.style.height = dragObj.origNode.offsetHeight + "px"; | 
|  | 3075 | 
|  | 3076         // Hold off adding the element until this is clearly a drag. | 
|  | 3077         drag_obj.addedNode = false; | 
|  | 3078 | 
|  | 3079         drag_obj.tableContainer = drag_obj.table.parentNode || document.body; | 
|  | 3080         drag_obj.newTable = new_table; | 
|  | 3081 | 
|  | 3082         // Save starting positions of cursor and element. | 
|  | 3083         drag_obj.startPos = pos; | 
|  | 3084         drag_obj.prevPos = pos; | 
|  | 3085         drag_obj.elStartLeft = parseInt(drag_obj.newTable.style.left, 10); | 
|  | 3086         drag_obj.elStartTop = parseInt(drag_obj.newTable.style.top,  10); | 
|  | 3087 | 
|  | 3088         if (isNaN(drag_obj.elStartLeft)) drag_obj.elStartLeft = 0; | 
|  | 3089         if (isNaN(drag_obj.elStartTop))  drag_obj.elStartTop  = 0; | 
|  | 3090 | 
|  | 3091         // Update element's z-index. | 
|  | 3092         drag_obj.newTable.style.zIndex = ++drag_obj.zIndex; | 
|  | 3093 | 
|  | 3094         // Capture mousemove and mouseup events on the page. | 
|  | 3095         if (browser.isIE) { | 
|  | 3096             document.attachEvent("onmousemove", DT.dragMove); | 
|  | 3097             document.attachEvent("onmouseup",   DT.dragEnd); | 
|  | 3098             window.event.cancelBubble = true; | 
|  | 3099             window.event.returnValue = false; | 
|  | 3100         } else { | 
|  | 3101             document.addEventListener("mousemove", DT.dragMove, true); | 
|  | 3102             document.addEventListener("mouseup",   DT.dragEnd, true); | 
|  | 3103             event.preventDefault(); | 
|  | 3104         } | 
|  | 3105     }, | 
|  | 3106 | 
|  | 3107     // Move the floating column header with the mouse | 
|  | 3108     // TODO: Reorder columns as the mouse moves for a more interactive feel. | 
|  | 3109     dragMove: function(event) { | 
|  | 3110         var x, y; | 
|  | 3111         var drag_obj = DT.dragObj; | 
|  | 3112         var col_index = drag_obj.movingColIndex; | 
|  | 3113 | 
|  | 3114         // Get cursor position with respect to the page. | 
|  | 3115         var pos = DT.getEventPosition(event); | 
|  | 3116 | 
|  | 3117         var full_dx = drag_obj.startPos.x - pos.x; | 
|  | 3118         var full_dy = drag_obj.startPos.y - pos.y; | 
|  | 3119 | 
|  | 3120         if (!drag_obj.addedNode && full_dx * full_dx + full_dy * full_dy > DT.dragRadius2) { | 
|  | 3121             // Real dragging has began, the following block performs once | 
|  | 3122 | 
|  | 3123             // Attach a moving table | 
|  | 3124             drag_obj.tableContainer.insertBefore(drag_obj.newTable, drag_obj.table); | 
|  | 3125             drag_obj.addedNode = true; | 
|  | 3126 | 
|  | 3127             // Add classes for the dragged column (original and the clone) | 
|  | 3128             $(drag_obj.newTable).addClass(classes.newTable); | 
|  | 3129             $(DT.getColumn(drag_obj.newTable)).addClass(classes.cell_of_movingTable); | 
|  | 3130 | 
|  | 3131             $(DT.getColumn(drag_obj.table, col_index)).addClass(classes.cell_of_emptySpace); | 
|  | 3132             $(DT.getColumn(drag_obj.table, col_index)[0]).addClass(classes.topCell_of_emptySpace); | 
|  | 3133             var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible'); | 
|  | 3134             $(visibleCells[visibleCells.length - 1]).addClass(classes.bottomCell_of_emptySpace); | 
|  | 3135 | 
|  | 3136             DT.addStylesForAdjacentColumns(col_index); | 
|  | 3137         } | 
|  | 3138 | 
|  | 3139         // Move drag element by the same amount the cursor has moved. | 
|  | 3140         var style = drag_obj.newTable.style; | 
|  | 3141         style.left = (drag_obj.elStartLeft + pos.x - drag_obj.startPos.x) + "px"; | 
|  | 3142         style.top  = (drag_obj.elStartTop  + pos.y - drag_obj.startPos.y) + "px"; | 
|  | 3143 | 
|  | 3144         if (DT.browser.isIE) { | 
|  | 3145             window.event.cancelBubble = true; | 
|  | 3146             window.event.returnValue = false; | 
|  | 3147         } else { | 
|  | 3148             event.preventDefault(); | 
|  | 3149         } | 
|  | 3150 | 
|  | 3151         // If moving over an adjacent column, do swapping, swapping with the adjacent column | 
|  | 3152         var column_pos_x = DT.getPositionOnThePage(DT.getColumn(drag_obj.newTable)[0]).x; | 
|  | 3153         var column_center_x = column_pos_x + drag_obj.movingColWidth / 2; | 
|  | 3154         var hovered_col_index = DT.getColumnAtPosition(drag_obj.table, column_center_x); | 
|  | 3155 | 
|  | 3156         var dx = drag_obj.prevPos.x - pos.x; | 
|  | 3157 | 
|  | 3158         if (DT.isSuitableColumnToSwap(hovered_col_index, col_index)) { | 
|  | 3159             if (dx < 0 && hovered_col_index > col_index ||  // moving right | 
|  | 3160                 dx > 0 && hovered_col_index < col_index) {  // moving left | 
|  | 3161                 DT.removeStylesForAdjacentColumns(col_index); | 
|  | 3162                 DT.moveColumn(drag_obj.table, col_index, hovered_col_index); | 
|  | 3163                 DT.addStylesForAdjacentColumns(hovered_col_index); | 
|  | 3164                 drag_obj.movingColIndex = hovered_col_index; | 
|  | 3165             } | 
|  | 3166         } | 
|  | 3167         drag_obj.prevPos = pos; | 
|  | 3168     }, | 
|  | 3169 | 
|  | 3170     removeStylesForAdjacentColumns: function(oldIndex) { | 
|  | 3171         var table = DT.dragObj.table; | 
|  | 3172         var rows = table.rows; | 
|  | 3173         var oldColumn = DT.getColumn(table, oldIndex); | 
|  | 3174         $(DT.getColumn(table, oldIndex - 1)).removeClass(classes.leftToCell_of_emptySpace); | 
|  | 3175         $(DT.getColumn(table, oldIndex + 1)).removeClass(classes.rightToCell_of_emptySpace); | 
|  | 3176     }, | 
|  | 3177 | 
|  | 3178     addStylesForAdjacentColumns: function(index) { | 
|  | 3179         var table = DT.dragObj.table; | 
|  | 3180         var rows = table.rows; | 
|  | 3181         var column = DT.getColumn(table, index); | 
|  | 3182         $(DT.getColumn(table, index - 1)).addClass(classes.leftToCell_of_emptySpace); | 
|  | 3183         $(DT.getColumn(table, index + 1)).addClass(classes.rightToCell_of_emptySpace); | 
|  | 3184     }, | 
|  | 3185 | 
|  | 3186     // Stop capturing mousemove and mouseup events. | 
|  | 3187     // Determine which (if any) column we're over and shuffle the table. | 
|  | 3188     dragEnd: function(event) { | 
|  | 3189         if (DT.browser.isIE) { | 
|  | 3190             document.detachEvent("onmousemove", DT.dragMove); | 
|  | 3191             document.detachEvent("onmouseup", DT.dragEnd); | 
|  | 3192         } else { | 
|  | 3193             document.removeEventListener("mousemove", DT.dragMove, true); | 
|  | 3194             document.removeEventListener("mouseup", DT.dragEnd, true); | 
|  | 3195         } | 
|  | 3196 | 
|  | 3197         var drag_obj = DT.dragObj; | 
|  | 3198         var col_index = drag_obj.movingColIndex; | 
|  | 3199 | 
|  | 3200         // If the floating header wasn't added, the mouse didn't move far enough. | 
|  | 3201         if (drag_obj.addedNode) { | 
|  | 3202             // TODO: Move with animation | 
|  | 3203             var final_pos = DT.getPositionOnThePage(DT.getColumn(drag_obj.table, col_index)[0]); | 
|  | 3204 | 
|  | 3205             $(drag_obj.newTable).animate({ | 
|  | 3206                 left: final_pos.x, | 
|  | 3207                 top: final_pos.y, | 
|  | 3208             }, 'fast', function() { | 
|  | 3209                 $(drag_obj.newTable).remove(); | 
|  | 3210                 $(DT.getColumn(drag_obj.table, col_index)).removeClass(classes.cell_of_emptySpace); | 
|  | 3211                 $(DT.getColumn(drag_obj.table, col_index)[0]).removeClass(classes.topCell_of_emptySpace); | 
|  | 3212                 var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible'); | 
|  | 3213                 $(visibleCells[visibleCells.length - 1]).removeClass(classes.bottomCell_of_emptySpace); | 
|  | 3214 | 
|  | 3215                 DT.removeStylesForAdjacentColumns(col_index); | 
|  | 3216             }); | 
|  | 3217 | 
|  | 3218             DT.storeDrag(drag_obj.table); | 
|  | 3219         } | 
|  | 3220         DT.isDragging = false; | 
|  | 3221     }, | 
|  | 3222 | 
|  | 3223     moveColumn: function(table, index, nextIndex) { | 
|  | 3224         forEach(table.rows, function(row) { | 
|  | 3225             var startCell = $(row.cells[index]); | 
|  | 3226             var finishCell = $(row.cells[nextIndex]); | 
|  | 3227 | 
|  | 3228             // startCell.animate({ | 
|  | 3229             // left: finishCell.offset().left, | 
|  | 3230             // }, 'slow', function() { | 
|  | 3231             if (nextIndex > index) { | 
|  | 3232                 startCell.before(finishCell); | 
|  | 3233             } else { | 
|  | 3234                 startCell.after(finishCell); | 
|  | 3235             } | 
|  | 3236             // }); | 
|  | 3237         }); | 
|  | 3238     }, | 
|  | 3239 | 
|  | 3240     // clone an element, copying its style and class. | 
|  | 3241     fullCopy: function(elt, deep) { | 
|  | 3242         if (!elt) { | 
|  | 3243             return null; | 
|  | 3244         } | 
|  | 3245         var new_elt = elt.cloneNode(deep); | 
|  | 3246         new_elt.className = elt.className; | 
|  | 3247         $(new_elt).addClass('clone'); | 
|  | 3248         forEach(elt.style, function(value, key, object) { | 
|  | 3249             if (value == null) return; | 
|  | 3250             if (typeof(value) == "string" && value.length == 0) return; | 
|  | 3251 | 
|  | 3252             new_elt.style[key] = elt.style[key]; | 
|  | 3253         }); | 
|  | 3254         return new_elt; | 
|  | 3255     }, | 
|  | 3256 | 
|  | 3257     getColumn: function(table, index) { | 
|  | 3258         index = typeof index !== 'undefined' ? index : 0; | 
|  | 3259 | 
|  | 3260         if (index < 0 || index >= table.rows[0].cells.length) { | 
|  | 3261             return []; | 
|  | 3262 | 
|  | 3263         } else { | 
|  | 3264             var column = []; | 
|  | 3265             forEach(table.rows, function(row) { | 
|  | 3266                 column.push(row.cells[index]); | 
|  | 3267             }); | 
|  | 3268             return column; | 
|  | 3269         } | 
|  | 3270     }, | 
|  | 3271 | 
|  | 3272     isSuitableColumnToSwap: function(targetIndex, movingColIndex) { | 
|  | 3273         if (targetIndex != -1) { | 
|  | 3274             if (typeof movingColIndex === 'undefined' || targetIndex != movingColIndex) {  // check if equals the moving one | 
|  | 3275                 var top_cell = $(DT.getColumn(DT.dragObj.table, targetIndex)[0]); | 
|  | 3276                 if (top_cell.find('.' + classes.handle).addBack('.' + classes.handle).exists()) { | 
|  | 3277                     return true; | 
|  | 3278                 } | 
|  | 3279             } | 
|  | 3280         } | 
|  | 3281         return false; | 
|  | 3282     }, | 
|  | 3283 | 
|  | 3284     // Which column does the x value fall inside of? x should include scrollLeft. | 
|  | 3285     getColumnAtPosition: function(table, x) { | 
|  | 3286         var header = table.tHead.rows[0].cells; | 
|  | 3287         for (var i = 0; i < header.length; i++) { | 
|  | 3288             //var left = header[i].offsetLeft; | 
|  | 3289             var pos = DT.getPositionOnThePage(header[i]); | 
|  | 3290             //if (left <= x && x <= left + header[i].offsetWidth) { | 
|  | 3291             var px = pos.x; | 
|  | 3292             var ow = header[i].offsetWidth; | 
|  | 3293             var xpow = pos.x + header[i].offsetWidth; | 
|  | 3294             if (pos.x <= x && x <= pos.x + header[i].offsetWidth) { | 
|  | 3295                 return i; | 
|  | 3296             } | 
|  | 3297         } | 
|  | 3298         return -1; | 
|  | 3299     }, | 
|  | 3300 | 
|  | 3301     // Store a column swap in a cookie for posterity. | 
|  | 3302     storeDrag: function(table) { | 
|  | 3303         var order = []; | 
|  | 3304         forEach(table.rows[0].cells, function(cell) { | 
|  | 3305             var pos = cell.getAttribute('position'); | 
|  | 3306             if (pos) | 
|  | 3307                 order.push(pos); | 
|  | 3308         }); | 
|  | 3309 | 
|  | 3310         var order_string = order[0]; | 
|  | 3311         for (var i = 1; i < order.length; i++) | 
|  | 3312             order_string += ' ' + order[i]; | 
|  | 3313 | 
|  | 3314         DT.storeInCookies(order_string); | 
|  | 3315         DT.sendOrderToServer(order_string); | 
|  | 3316     }, | 
|  | 3317 | 
|  | 3318     storeInCookies: function(string) { | 
|  | 3319         if (navigator.cookieEnabled) { | 
|  | 3320             var cookieName = 'order'; | 
|  | 3321             createCookie(cookieName, string, DT.cookieDays); | 
|  | 3322         } | 
|  | 3323     }, | 
|  | 3324 | 
|  | 3325     sendOrderToServer: function(string) { | 
|  | 3326         if (document.reportId) { | 
|  | 3327             $.ajax({ | 
|  | 3328                 type: 'GET', | 
|  | 3329                 url: '/reorder-report-columns', | 
|  | 3330                 dataType: 'json', | 
|  | 3331                 data: { | 
|  | 3332                     reportId: document.reportId, | 
|  | 3333                     order: string, | 
|  | 3334                 }, | 
|  | 3335             }); | 
|  | 3336         } | 
|  | 3337     }, | 
|  | 3338 }; | 
|  | 3339 | 
|  | 3340 var DT = dragTable; | 
|  | 3341 | 
|  | 3342 /* ****************************************************************** | 
|  | 3343  Supporting functions: bundled here to avoid depending on a library | 
|  | 3344  ****************************************************************** */ | 
|  | 3345 | 
|  | 3346 | 
|  | 3347 //// Dean Edwards/Matthias Miller/John Resig | 
|  | 3348 //// has a hook for DT.init already been added? (see below) | 
|  | 3349 //var dgListenOnLoad = false; | 
|  | 3350 // | 
|  | 3351 ///* for Mozilla/Opera9 */ | 
|  | 3352 //if (document.addEventListener) { | 
|  | 3353 //  dgListenOnLoad = true; | 
|  | 3354 //  document.addEventListener("DOMContentLoaded", DT.init, false); | 
|  | 3355 //} | 
|  | 3356 // | 
|  | 3357 ///* for Internet Explorer */ | 
|  | 3358 ///*@cc_on @*/ | 
|  | 3359 ///*@if (@_win32) | 
|  | 3360 //  dgListenOnLoad = true; | 
|  | 3361 //  document.write("<script id=__dt_onload defer src=//0)><\/script>"); | 
|  | 3362 //  var script = document.getElementById("__dt_onload"); | 
|  | 3363 //  script.onreadystatechange = function() { | 
|  | 3364 //    if (this.readyState == "complete") { | 
|  | 3365 //      DT.init(); // call the onload handler | 
|  | 3366 //    } | 
|  | 3367 //  }; | 
|  | 3368 ///*@end @*/ | 
|  | 3369 // | 
|  | 3370 ///* for Safari */ | 
|  | 3371 //if (/WebKit/i.test(navigator.userAgent)) { // sniff | 
|  | 3372 //  dgListenOnLoad = true; | 
|  | 3373 //  var _dgtimer = setInterval(function() { | 
|  | 3374 //    if (/loaded|complete/.test(document.readyState)) { | 
|  | 3375 //      DT.init(); // call the onload handler | 
|  | 3376 //    } | 
|  | 3377 //  }, 10); | 
|  | 3378 //} | 
|  | 3379 // | 
|  | 3380 ///* for other browsers */ | 
|  | 3381 ///* Avoid this unless it's absolutely necessary (it breaks sorttable) */ | 
|  | 3382 //if (!dgListenOnLoad) { | 
|  | 3383 //  window.onload = DT.init; | 
|  | 3384 //} | 
|  | 3385 | 
|  | 3386 </script> | 
|  | 3387 | 
|  | 3388 <script type="text/javascript"> | 
|  | 3389 /*! HTML5 Shiv vpre3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed | 
|  | 3390   Uncompressed source: https://github.com/aFarkas/html5shiv  */ | 
|  | 3391 (function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){if(!l.shivMethods)return c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="<xyz></xyz>",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b)})(this,document) | 
|  | 3392 </script> | 
|  | 3393 | 
|  | 3394 <script type="text/javascript"> | 
|  | 3395 /** | 
|  | 3396 * Bootstrap.js by @fat & @mdo | 
|  | 3397 * plugins: bootstrap-tooltip.js | 
|  | 3398 * Copyright 2012 Twitter, Inc. | 
|  | 3399 * http://www.apache.org/licenses/LICENSE-2.0.txt | 
|  | 3400 */ | 
|  | 3401 !function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e+4,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},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(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.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",title:"",delay:0}}(window.jQuery) | 
|  | 3402 </script> | 
|  | 3403 | 
|  | 3404 <script type="text/javascript"> | 
|  | 3405 /*! | 
|  | 3406 * Bootstrap.js by @fat & @mdo | 
|  | 3407 * Copyright 2012 Twitter, Inc. | 
|  | 3408 * http://www.apache.org/licenses/LICENSE-2.0.txt | 
|  | 3409 */ | 
|  | 3410 !function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!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(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},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(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.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",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),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.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery); | 
|  | 3411 </script> | 
|  | 3412 | 
|  | 3413 <script type="text/javascript"> | 
|  | 3414 /* =========================================================== | 
|  | 3415  * bootstrap-tooltip.js v2.0.4 | 
|  | 3416  * http://twitter.github.com/bootstrap/javascript.html#tooltips | 
|  | 3417  * Inspired by the original jQuery.tipsy by Jason Frame | 
|  | 3418  * =========================================================== | 
|  | 3419  * Copyright 2012 Twitter, Inc. | 
|  | 3420  * | 
|  | 3421  * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 3422  * you may not use this file except in compliance with the License. | 
|  | 3423  * You may obtain a copy of the License at | 
|  | 3424  * | 
|  | 3425  * http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 3426  * | 
|  | 3427  * Unless required by applicable law or agreed to in writing, software | 
|  | 3428  * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 3429  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 3430  * See the License for the specific language governing permissions and | 
|  | 3431  * limitations under the License. | 
|  | 3432  * ========================================================== */ | 
|  | 3433 | 
|  | 3434 | 
|  | 3435 !function ($) { | 
|  | 3436 | 
|  | 3437   "use strict"; // jshint ;_; | 
|  | 3438 | 
|  | 3439 | 
|  | 3440  /* TOOLTIP PUBLIC CLASS DEFINITION | 
|  | 3441   * =============================== */ | 
|  | 3442 | 
|  | 3443   var Tooltip = function (element, options) { | 
|  | 3444     this.init('tooltip', element, options) | 
|  | 3445   }; | 
|  | 3446 | 
|  | 3447   Tooltip.prototype = { | 
|  | 3448 | 
|  | 3449     constructor: Tooltip | 
|  | 3450 | 
|  | 3451   , init: function (type, element, options) { | 
|  | 3452       var eventIn | 
|  | 3453         , eventOut; | 
|  | 3454 | 
|  | 3455       this.type = type; | 
|  | 3456       this.$element = $(element); | 
|  | 3457       this.options = this.getOptions(options); | 
|  | 3458       this.enabled = true; | 
|  | 3459 | 
|  | 3460       if (this.options.trigger != 'manual') { | 
|  | 3461         eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'; | 
|  | 3462         eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'; | 
|  | 3463         this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this)); | 
|  | 3464         this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this)); | 
|  | 3465       } | 
|  | 3466 | 
|  | 3467       this.options.selector ? | 
|  | 3468         (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : | 
|  | 3469         this.fixTitle(); | 
|  | 3470     } | 
|  | 3471 | 
|  | 3472   , getOptions: function (options) { | 
|  | 3473       options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) | 
|  | 3474 | 
|  | 3475       if (options.delay && typeof options.delay == 'number') { | 
|  | 3476         options.delay = { | 
|  | 3477           show: options.delay | 
|  | 3478         , hide: options.delay | 
|  | 3479         }; | 
|  | 3480       } | 
|  | 3481 | 
|  | 3482       return options; | 
|  | 3483     } | 
|  | 3484 | 
|  | 3485   , enter: function (e) { | 
|  | 3486       if (dragTable && dragTable.isDragging) | 
|  | 3487           return; | 
|  | 3488 | 
|  | 3489       var self = $(e.currentTarget)[this.type](this._options).data(this.type); | 
|  | 3490 | 
|  | 3491       if (!self.options.delay || !self.options.delay.show) self.show(); | 
|  | 3492 | 
|  | 3493       clearTimeout(this.timeout); | 
|  | 3494       self.hoverState = 'in'; | 
|  | 3495       this.timeout = setTimeout( | 
|  | 3496           function() { if (self.hoverState == 'in') self.show(); }, | 
|  | 3497           self.options.delay.show | 
|  | 3498       ); | 
|  | 3499     } | 
|  | 3500 | 
|  | 3501   , leave: function (e) { | 
|  | 3502       var self = $(e.currentTarget)[this.type](this._options).data(this.type); | 
|  | 3503 | 
|  | 3504       if (this.timeout) clearTimeout(this.timeout); | 
|  | 3505       if (!self.options.delay || !self.options.delay.hide) self.hide(); | 
|  | 3506 | 
|  | 3507       self.hoverState = 'out'; | 
|  | 3508       this.timeout = setTimeout( | 
|  | 3509           function() { if (self.hoverState == 'out') self.hide() }, | 
|  | 3510           self.options.delay.hide | 
|  | 3511       ); | 
|  | 3512     } | 
|  | 3513 | 
|  | 3514   , show: function () { | 
|  | 3515       var $tip | 
|  | 3516         , inside | 
|  | 3517         , pos | 
|  | 3518         , actualWidth | 
|  | 3519         , actualHeight | 
|  | 3520         , placement | 
|  | 3521         , tp; | 
|  | 3522 | 
|  | 3523       if (this.hasContent() && this.enabled) { | 
|  | 3524         $tip = this.tip(); | 
|  | 3525         this.setContent(); | 
|  | 3526 | 
|  | 3527         if (this.options.animation) { | 
|  | 3528           $tip.addClass('fade'); | 
|  | 3529         } | 
|  | 3530 | 
|  | 3531         placement = typeof this.options.placement == 'function' ? | 
|  | 3532           this.options.placement.call(this, $tip[0], this.$element[0]) : | 
|  | 3533           this.options.placement; | 
|  | 3534 | 
|  | 3535         inside = /in/.test(placement); | 
|  | 3536 | 
|  | 3537         $tip | 
|  | 3538           .remove() | 
|  | 3539           .css({ top: 0, left: 0, display: 'block' }) | 
|  | 3540           .appendTo(inside ? this.$element : document.body); | 
|  | 3541 | 
|  | 3542         pos = this.getPosition(inside); | 
|  | 3543 | 
|  | 3544         actualWidth = $tip[0].offsetWidth; | 
|  | 3545         actualHeight = $tip[0].offsetHeight; | 
|  | 3546 | 
|  | 3547         switch (inside ? placement.split(' ')[1] : placement) { | 
|  | 3548           case 'bottom': | 
|  | 3549             tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}; | 
|  | 3550             break; | 
|  | 3551           case 'top': // modificated by Vlad Saveliev: +4px to top position | 
|  | 3552             tp = {top: pos.top - actualHeight + 4, left: pos.left + pos.width / 2 - actualWidth / 2}; | 
|  | 3553             break; | 
|  | 3554           case 'left': | 
|  | 3555             tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}; | 
|  | 3556             break; | 
|  | 3557           case 'right': | 
|  | 3558             tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}; | 
|  | 3559             break; | 
|  | 3560         } | 
|  | 3561 | 
|  | 3562         $tip | 
|  | 3563           .css(tp) | 
|  | 3564           .addClass(placement) | 
|  | 3565           .addClass('in'); | 
|  | 3566       } | 
|  | 3567     } | 
|  | 3568 | 
|  | 3569   , isHTML: function(text) { | 
|  | 3570       // html string detection logic adapted from jQuery | 
|  | 3571       return typeof text != 'string' | 
|  | 3572         || ( text.charAt(0) === "<" | 
|  | 3573           && text.charAt( text.length - 1 ) === ">" | 
|  | 3574           && text.length >= 3 | 
|  | 3575         ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text); | 
|  | 3576     } | 
|  | 3577 | 
|  | 3578   , setContent: function () { | 
|  | 3579       var $tip = this.tip() | 
|  | 3580         , title = this.getTitle(); | 
|  | 3581 | 
|  | 3582       $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title); | 
|  | 3583       $tip.removeClass('fade in top bottom left right'); | 
|  | 3584     } | 
|  | 3585 | 
|  | 3586   , hide: function () { | 
|  | 3587       var that = this | 
|  | 3588         , $tip = this.tip(); | 
|  | 3589 | 
|  | 3590       $tip.removeClass('in'); | 
|  | 3591 | 
|  | 3592       function removeWithAnimation() { | 
|  | 3593         var timeout = setTimeout(function () { | 
|  | 3594           $tip.off($.support.transition.end).remove() | 
|  | 3595         }, 500); | 
|  | 3596 | 
|  | 3597         $tip.one($.support.transition.end, function () { | 
|  | 3598           clearTimeout(timeout); | 
|  | 3599           $tip.remove(); | 
|  | 3600         }) | 
|  | 3601       } | 
|  | 3602 | 
|  | 3603       $.support.transition && this.$tip.hasClass('fade') ? | 
|  | 3604         removeWithAnimation() : | 
|  | 3605         $tip.remove() | 
|  | 3606     } | 
|  | 3607 | 
|  | 3608   , fixTitle: function () { | 
|  | 3609       var $e = this.$element; | 
|  | 3610       if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { | 
|  | 3611         $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title'); | 
|  | 3612       } | 
|  | 3613     } | 
|  | 3614 | 
|  | 3615   , hasContent: function () { | 
|  | 3616       return this.getTitle(); | 
|  | 3617     } | 
|  | 3618 | 
|  | 3619   , getPosition: function (inside) { | 
|  | 3620       return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { | 
|  | 3621         width: this.$element[0].offsetWidth | 
|  | 3622       , height: this.$element[0].offsetHeight | 
|  | 3623       }) | 
|  | 3624     } | 
|  | 3625 | 
|  | 3626   , getTitle: function () { | 
|  | 3627       var title | 
|  | 3628         , $e = this.$element | 
|  | 3629         , o = this.options; | 
|  | 3630 | 
|  | 3631       title = $e.attr('data-original-title') | 
|  | 3632         || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title); | 
|  | 3633 | 
|  | 3634       return title; | 
|  | 3635     } | 
|  | 3636 | 
|  | 3637   , tip: function () { | 
|  | 3638       return this.$tip = this.$tip || $(this.options.template); | 
|  | 3639     } | 
|  | 3640 | 
|  | 3641   , validate: function () { | 
|  | 3642       if (!this.$element[0].parentNode) { | 
|  | 3643         this.hide(); | 
|  | 3644         this.$element = null; | 
|  | 3645         this.options = null; | 
|  | 3646       } | 
|  | 3647     } | 
|  | 3648 | 
|  | 3649   , enable: function () { | 
|  | 3650       this.enabled = true; | 
|  | 3651     } | 
|  | 3652 | 
|  | 3653   , disable: function () { | 
|  | 3654       this.enabled = false; | 
|  | 3655     } | 
|  | 3656 | 
|  | 3657   , toggleEnabled: function () { | 
|  | 3658       this.enabled = !this.enabled; | 
|  | 3659     } | 
|  | 3660 | 
|  | 3661   , toggle: function () { | 
|  | 3662       this[this.tip().hasClass('in') ? 'hide' : 'show'](); | 
|  | 3663     } | 
|  | 3664 | 
|  | 3665   }; | 
|  | 3666 | 
|  | 3667 | 
|  | 3668  /* TOOLTIP PLUGIN DEFINITION | 
|  | 3669   * ========================= */ | 
|  | 3670 | 
|  | 3671   $.fn.tooltip = function ( option ) { | 
|  | 3672     return this.each(function () { | 
|  | 3673       var $this = $(this) | 
|  | 3674         , data = $this.data('tooltip') | 
|  | 3675         , options = typeof option == 'object' && option; | 
|  | 3676       if (!data) $this.data('tooltip', (data = new Tooltip(this, options))); | 
|  | 3677       if (typeof option == 'string') data[option](); | 
|  | 3678     }) | 
|  | 3679   }; | 
|  | 3680 | 
|  | 3681   $.fn.tooltip.Constructor = Tooltip; | 
|  | 3682 | 
|  | 3683   $.fn.tooltip.defaults = { | 
|  | 3684     animation: true | 
|  | 3685   , placement: 'top' | 
|  | 3686   , selector: false | 
|  | 3687   , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' | 
|  | 3688   , trigger: 'hover' | 
|  | 3689   , title: '' | 
|  | 3690   , delay: 0 | 
|  | 3691   }; | 
|  | 3692 | 
|  | 3693 }(window.jQuery); | 
|  | 3694 | 
|  | 3695 </script> | 
|  | 3696 | 
|  | 3697 <script type="text/javascript"> | 
|  | 3698 function showPlotWithInfo(info, index) { | 
|  | 3699     var newSeries = []; | 
|  | 3700     var newColors = []; | 
|  | 3701     var oldSeries = info.series; | 
|  | 3702     var usingSeries; | 
|  | 3703     var sortOrder; | 
|  | 3704     if ($("input[name=sortRefs]")[0]) | 
|  | 3705         sortOrder = getSortOrder(); | 
|  | 3706     if (index != undefined) { | 
|  | 3707         oldSeries = info.series[index]; | 
|  | 3708     } | 
|  | 3709     if (sortOrder == 'alphabet') { | 
|  | 3710         usingSeries = []; | 
|  | 3711         sortedRefs = info.references.slice(0).sort(); | 
|  | 3712         for(var i = 0; i < oldSeries.length; i++) { | 
|  | 3713             usingSeries.push($.extend(true, {}, oldSeries[i])); | 
|  | 3714             for(var j = 0; j < info.references.length; j++) { | 
|  | 3715                 usingSeries[i].data[j][1] = oldSeries[i].data[info.references.indexOf(sortedRefs[j])][1]; | 
|  | 3716             } | 
|  | 3717         } | 
|  | 3718     } | 
|  | 3719     else usingSeries = oldSeries; | 
|  | 3720     $('#legend-placeholder').find('input[type="checkbox"]:checked').each(function() { | 
|  | 3721         var number = $(this).attr('name'); | 
|  | 3722         if (number && usingSeries && usingSeries.length > 0) { | 
|  | 3723             var i = 0; | 
|  | 3724             do { | 
|  | 3725                 var series = usingSeries[i]; | 
|  | 3726                 i++; | 
|  | 3727             } while (i <= usingSeries.length && (series == null || series.number != number)); | 
|  | 3728             // | 
|  | 3729             if (i <= usingSeries.length) { | 
|  | 3730                 newSeries.push(series); | 
|  | 3731                 newColors.push(series.color); | 
|  | 3732             } else { | 
|  | 3733                 console.log('no series with number ' + number); | 
|  | 3734             } | 
|  | 3735         } | 
|  | 3736     }); | 
|  | 3737     if (sortOrder) sortReferences(sortOrder, info); | 
|  | 3738 | 
|  | 3739     if (newSeries.length === 0) { | 
|  | 3740         newSeries.push({ | 
|  | 3741             data: [] | 
|  | 3742         }); | 
|  | 3743         newColors.push('#FFF'); | 
|  | 3744     } | 
|  | 3745 | 
|  | 3746     info.showWithData(newSeries, newColors); | 
|  | 3747 } | 
|  | 3748 | 
|  | 3749 function recoverOrderFromCookies() { | 
|  | 3750     if (!navigator.cookieEnabled) | 
|  | 3751         return null; | 
|  | 3752 | 
|  | 3753     var order_string = readCookie("order"); | 
|  | 3754     if (!order_string) | 
|  | 3755         return null; | 
|  | 3756 | 
|  | 3757     var order = []; | 
|  | 3758     var fail = false; | 
|  | 3759     forEach(order_string.split(' '), function(val) { | 
|  | 3760         val = parseInt(val); | 
|  | 3761         if (isNaN(val)) | 
|  | 3762             fail = true; | 
|  | 3763         else | 
|  | 3764             order.push(val); | 
|  | 3765     }); | 
|  | 3766 | 
|  | 3767     if (fail) | 
|  | 3768         return null; | 
|  | 3769 | 
|  | 3770     return order; | 
|  | 3771 } | 
|  | 3772 | 
|  | 3773 | 
|  | 3774 function readJson(what) { | 
|  | 3775     var result; | 
|  | 3776     try { | 
|  | 3777         result = JSON.parse($('#' + what + '-json').html()); | 
|  | 3778     } catch (e) { | 
|  | 3779         result = null; | 
|  | 3780     } | 
|  | 3781     return result; | 
|  | 3782 } | 
|  | 3783 | 
|  | 3784 | 
|  | 3785 function getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) { | 
|  | 3786     return function() { | 
|  | 3787         this.parentNode.getElementsByClassName('selected-switch')[0].className = 'plot-switch dotted-link'; | 
|  | 3788         this.className = 'plot-switch selected-switch'; | 
|  | 3789         togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) | 
|  | 3790     }; | 
|  | 3791 } | 
|  | 3792 | 
|  | 3793 function togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) { | 
|  | 3794     var plotPlaceholder = document.getElementById('plot-placeholder'); | 
|  | 3795     var legendPlaceholder = document.getElementById('legend-placeholder'); | 
|  | 3796     var scalePlaceholder = document.getElementById('scale-placeholder'); | 
|  | 3797 | 
|  | 3798     var glossary = JSON.parse($('#glossary-json').html()); | 
|  | 3799 | 
|  | 3800     if (name === 'cumulative') { | 
|  | 3801         $(plotPlaceholder).addClass('cumulative-plot-placeholder'); | 
|  | 3802     } else { | 
|  | 3803         $(plotPlaceholder).removeClass('cumulative-plot-placeholder'); | 
|  | 3804     } | 
|  | 3805 | 
|  | 3806     $('#contigs_are_ordered').hide(); | 
|  | 3807     $('#gc_info').hide(); | 
|  | 3808     $('#gc_contigs_info').hide(); | 
|  | 3809     $('#frc_info').hide(); | 
|  | 3810 | 
|  | 3811     var selectedAssemblies = getSelectedAssemblies(assembliesNames); | 
|  | 3812     var sortBtnClass; | 
|  | 3813     if ($("input[name=sortRefs]")[0]) { | 
|  | 3814         sortBtnClass = getSortRefsRule(); | 
|  | 3815     } | 
|  | 3816     $('#legend-placeholder').empty(); | 
|  | 3817     assembliesNames.forEach(function(filename, i) { | 
|  | 3818         addLabelToLegend(i, filename, selectedAssemblies, colors); | 
|  | 3819     }); | 
|  | 3820     if (refPlotValue) { | 
|  | 3821         $('#legend-placeholder').append( | 
|  | 3822             '<div id="reference-label">' + | 
|  | 3823                 '<label for="reference" style="color: #000000;">' + | 
|  | 3824                 '<input type="checkbox" name="' + assembliesNames.length + | 
|  | 3825                 '" checked="checked" id="reference"> ' + 'reference' + | 
|  | 3826                 '</label>' + | 
|  | 3827                 '</div>' | 
|  | 3828         ); | 
|  | 3829     } | 
|  | 3830     if (sortBtnClass) { | 
|  | 3831         addSortRefsBtn(sortBtnClass); | 
|  | 3832     } | 
|  | 3833 | 
|  | 3834     drawPlot(name, title, colors, assembliesNames, data, refPlotValue, tickX, | 
|  | 3835         plotPlaceholder, legendPlaceholder, glossary, order, scalePlaceholder); | 
|  | 3836 } | 
|  | 3837 | 
|  | 3838 function makePlot(firstPlot, assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) { | 
|  | 3839     var switchSpan = document.createElement('span'); | 
|  | 3840     switchSpan.id = name + '-switch'; | 
|  | 3841     switchSpan.innerHTML = title; | 
|  | 3842     var plotsSwitchesDiv = document.getElementById('plots-switches'); | 
|  | 3843     plotsSwitchesDiv.appendChild(switchSpan); | 
|  | 3844 | 
|  | 3845     if (firstPlot) { | 
|  | 3846         switchSpan.className = 'plot-switch selected-switch'; | 
|  | 3847         togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX); | 
|  | 3848     } else { | 
|  | 3849         switchSpan.className = 'plot-switch dotted-link'; | 
|  | 3850     } | 
|  | 3851 | 
|  | 3852     $(switchSpan).click(getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX)); | 
|  | 3853 } | 
|  | 3854 </script> | 
|  | 3855 | 
|  | 3856 <script type="text/javascript"> | 
|  | 3857 String.prototype.trunc = | 
|  | 3858     function(n){ | 
|  | 3859         return this.substr(0, n-1) + (this.length > n ? '…' : ''); | 
|  | 3860     }; | 
|  | 3861 | 
|  | 3862 | 
|  | 3863 function getColor (hue, lightness) { | 
|  | 3864     lightness = lightness ? lightness : 92; | 
|  | 3865     var rgb = hslToRgb(hue / 360, 0.8, lightness / 100); | 
|  | 3866     return '#' + rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16); | 
|  | 3867 } | 
|  | 3868 | 
|  | 3869 function getMedian (x) { | 
|  | 3870     if (x.length == 0) return null; | 
|  | 3871     if (x.length % 2 == 1) return x[(x.length - 1) / 2]; | 
|  | 3872     else return (x[(x.length / 2) - 1] + x[(x.length / 2)]) / 2; | 
|  | 3873 } | 
|  | 3874 | 
|  | 3875 function toggleSecondary(event, caller) { | 
|  | 3876     event = event || window.event; | 
|  | 3877     if(event.target.nodeName == "IMG") return; | 
|  | 3878     if (!caller.hasClass('primary') || caller.hasClass('not_extend')) { | 
|  | 3879         return; | 
|  | 3880     } | 
|  | 3881     var nextRow = caller.next('.content-row'); | 
|  | 3882     $(caller).find('.metric-name').toggleClass('collapsed').toggleClass('expanded'); | 
|  | 3883 | 
|  | 3884     while (!nextRow.hasClass('primary') && (nextRow.length > 0)) { | 
|  | 3885         nextRow.toggleClass('secondary_hidden'); | 
|  | 3886         nextRow.find('.left_column_td').css('background-color', '#E8E8E8'); | 
|  | 3887         nextRow = nextRow.next('.content-row'); | 
|  | 3888     } | 
|  | 3889 } | 
|  | 3890 | 
|  | 3891 function setUpHeatMap(table) { | 
|  | 3892 | 
|  | 3893     (function () { | 
|  | 3894         $(function () { | 
|  | 3895             $('tr.group_empty').removeClass('row_hidden'); | 
|  | 3896         }); | 
|  | 3897     })(); | 
|  | 3898 | 
|  | 3899     $('#main_report').append(table); | 
|  | 3900     var rows = $('#main_report_table').find('.content-row'); | 
|  | 3901     var showHeatmap = false; | 
|  | 3902     for (var rows_n = 0; rows_n < rows.length; rows_n++) { | 
|  | 3903         if ($(rows[rows_n]).find('td[number]').length > 1) { | 
|  | 3904             showHeatmap = true; | 
|  | 3905             break | 
|  | 3906         } | 
|  | 3907     } | 
|  | 3908 | 
|  | 3909     if (showHeatmap) { | 
|  | 3910         var canvas = document.getElementById('gradientHeatmap'); | 
|  | 3911           var context = canvas.getContext('2d'); | 
|  | 3912           context.rect(0, 0, canvas.width, canvas.height); | 
|  | 3913 | 
|  | 3914           var gradient = context.createLinearGradient(0, 0, canvas.width, canvas.height); | 
|  | 3915           gradient.addColorStop(0, getColor(0, 65)); | 
|  | 3916           gradient.addColorStop(0.5, 'white'); | 
|  | 3917           gradient.addColorStop(1, getColor(240, 65)); | 
|  | 3918           canvas.style.border = "0px solid rgba(0, 0, 0, .1)"; | 
|  | 3919           context.fillStyle = gradient; | 
|  | 3920           context.fill(); | 
|  | 3921           $('#heatmaps_chbox').change(function(){ | 
|  | 3922                if($(this).is(':checked')) toggleHeatMap('on'); | 
|  | 3923                else toggleHeatMap('off'); | 
|  | 3924             }); | 
|  | 3925           toggleHeatMap('on'); | 
|  | 3926           $('#heatmap_header').show(); | 
|  | 3927     } | 
|  | 3928 } | 
|  | 3929 | 
|  | 3930 function toggleHeatMap(state){ | 
|  | 3931     var rows = $('#main_report_table').find('.content-row'); | 
|  | 3932     for (var rows_n = 0; rows_n < rows.length; rows_n++) { | 
|  | 3933         var cells = $(rows[rows_n]).find('td[number]'); | 
|  | 3934         if (state == 'on') { | 
|  | 3935             var quality = $(rows[rows_n]).attr('quality'); | 
|  | 3936             heatMapOneRow(cells, quality); | 
|  | 3937         } | 
|  | 3938         else cells.each(function (i) { | 
|  | 3939             $(this).css('background', 'white'); | 
|  | 3940             $(this).css('color', 'black'); | 
|  | 3941         }); | 
|  | 3942     } | 
|  | 3943 } | 
|  | 3944 | 
|  | 3945 function heatMapOneRow (cells, quality) { | 
|  | 3946     if (quality == 'Equal') | 
|  | 3947         return; | 
|  | 3948     var BLUE_HUE = 240; | 
|  | 3949     var BLUE_OUTER_BRT = 55; | 
|  | 3950     var BLUE_INNER_BRT = 65; | 
|  | 3951 | 
|  | 3952     var RED_HUE = 0; | 
|  | 3953     var RED_OUTER_BRT = 50; | 
|  | 3954     var RED_INNER_BRT = 60; | 
|  | 3955 | 
|  | 3956     var MIN_NORMAL_BRT = 80; | 
|  | 3957     var MEDIAN_BRT = 100; | 
|  | 3958 | 
|  | 3959     var numbers = $.map(cells, function (cell) { | 
|  | 3960         return parseFloat($(cell).attr('number')); | 
|  | 3961     }); | 
|  | 3962 | 
|  | 3963     var min = Math.min.apply(null, numbers); | 
|  | 3964     var max = Math.max.apply(null, numbers); | 
|  | 3965 | 
|  | 3966     var topHue = BLUE_HUE; | 
|  | 3967     var lowHue = RED_HUE; | 
|  | 3968 | 
|  | 3969     var innerTopBrt = BLUE_INNER_BRT; | 
|  | 3970     var outerTopBrt = BLUE_OUTER_BRT; | 
|  | 3971     var innerLowBrt = RED_INNER_BRT; | 
|  | 3972     var outerLowBrt = RED_OUTER_BRT; | 
|  | 3973 | 
|  | 3974     if (quality == 'Less is better') { | 
|  | 3975         topHue = RED_HUE; | 
|  | 3976         lowHue = BLUE_HUE; | 
|  | 3977 | 
|  | 3978         innerTopBrt = RED_INNER_BRT; | 
|  | 3979         outerTopBrt = RED_OUTER_BRT; | 
|  | 3980         innerLowBrt = BLUE_INNER_BRT; | 
|  | 3981         outerLowBrt = BLUE_OUTER_BRT; | 
|  | 3982     } | 
|  | 3983 | 
|  | 3984     var twoCols = cells.length == 2; | 
|  | 3985 | 
|  | 3986     if (max == min) { | 
|  | 3987         $(cells).css('color', MEDIAN_BRT); | 
|  | 3988     } else { | 
|  | 3989         var sortedValues = numbers.slice().sort(function(a, b) { | 
|  | 3990           return a - b; | 
|  | 3991         }); | 
|  | 3992         var median = getMedian(sortedValues); | 
|  | 3993         var l = numbers.length; | 
|  | 3994         var q1 = sortedValues[Math.floor((l - 1) / 4)]; | 
|  | 3995         var q3 = sortedValues[Math.floor((l - 1) * 3 / 4)]; | 
|  | 3996 | 
|  | 3997         var d = q3 - q1; | 
|  | 3998         var low_outer_fence = q1 - 3 * d; | 
|  | 3999         var low_inner_fence = q1 - 1.5 * d; | 
|  | 4000         var top_inner_fence = q3 + 1.5 * d; | 
|  | 4001         var top_outer_fence = q3 + 3 * d; | 
|  | 4002         cells.each(function (i) { | 
|  | 4003             var number = numbers[i]; | 
|  | 4004             if (number < low_outer_fence) { | 
|  | 4005                 $(this).css('background', getColor(lowHue, twoCols ? null : outerLowBrt)); | 
|  | 4006                 if (twoCols != true) $(this).css('color', 'white'); | 
|  | 4007             } | 
|  | 4008             else if (number < low_inner_fence) { | 
|  | 4009                 $(this).css('background', getColor(lowHue, twoCols ? null : innerLowBrt)); | 
|  | 4010             } | 
|  | 4011             else if (number < median) { | 
|  | 4012                 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (median - low_inner_fence); | 
|  | 4013                 var brt = Math.round(MEDIAN_BRT - (median - number) * k); | 
|  | 4014                 $(this).css('background', getColor(lowHue, twoCols ? null : brt)); | 
|  | 4015             } | 
|  | 4016             else if (number > top_inner_fence) { | 
|  | 4017                 $(this).css('background', getColor(topHue, twoCols ? null : innerTopBrt)); | 
|  | 4018             } | 
|  | 4019             else if (number > top_outer_fence) { | 
|  | 4020                 $(this).css('background', getColor(topHue, twoCols ? null : outerTopBrt)); | 
|  | 4021                 if (twoCols != true) $(this).css('color', 'white'); | 
|  | 4022             } | 
|  | 4023             else if (number > median) { | 
|  | 4024                 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (top_inner_fence - median); | 
|  | 4025                 var brt = Math.round(MEDIAN_BRT - (number - median) * k); | 
|  | 4026                 $(this).css('background', getColor(topHue, twoCols ? null : brt)); | 
|  | 4027             } | 
|  | 4028         }); | 
|  | 4029     } | 
|  | 4030 } | 
|  | 4031 function extendedClick() { | 
|  | 4032     $('.row_to_hide').toggleClass('row_hidden'); | 
|  | 4033 | 
|  | 4034     var link = $('#extended_report_link'); | 
|  | 4035     if (link.html() == 'Extended report') { | 
|  | 4036         link.html('Short report'); | 
|  | 4037     } else { | 
|  | 4038         link.html('Extended report'); | 
|  | 4039     } | 
|  | 4040 } | 
|  | 4041 | 
|  | 4042 function buildExtendedLinkClick() { | 
|  | 4043     return '<p id="extended_link"><a class="dotted-link" id="extended_report_link" onclick="extendedClick($(this))">Extended report</a></p>'; | 
|  | 4044 } | 
|  | 4045 | 
|  | 4046 function appendIcarusLinks() { | 
|  | 4047     if (icarusLinks = readJson('icarus')) { | 
|  | 4048         if (icarusLinks.links != undefined) { | 
|  | 4049             var links = ''; | 
|  | 4050             for (var link_n = 0; link_n < icarusLinks.links.length; link_n++) { | 
|  | 4051                 //links += '<a href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>' | 
|  | 4052                 links += '<a class="btn btn-default btn-xs" role="button" href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>' | 
|  | 4053             } | 
|  | 4054             $('#icarus').html(links); | 
|  | 4055         } | 
|  | 4056     } | 
|  | 4057 } | 
|  | 4058 | 
|  | 4059 </script> | 
|  | 4060 | 
|  | 4061 | 
|  | 4062     <script type="text/javascript"> | 
|  | 4063         var colors = ["#FF0000","#0000FF"]; | 
|  | 4064         var broken_scaffolds_labels = []; | 
|  | 4065     </script> | 
|  | 4066     <script type="text/javascript"> | 
|  | 4067 function addRow(metric, mainMetrics, rowName, group_n, order, glossary, isExpandable, isPrimary) { | 
|  | 4068     (function(group_n) { | 
|  | 4069         var id_group = '#group_' + group_n; | 
|  | 4070         $(function() { | 
|  | 4071             $(id_group).removeClass('group_empty'); | 
|  | 4072         }); | 
|  | 4073     })(group_n); | 
|  | 4074 | 
|  | 4075     var table = ''; | 
|  | 4076     metricName = metric.metricName; | 
|  | 4077     var quality = metric.quality; | 
|  | 4078     var values = metric.values; | 
|  | 4079 | 
|  | 4080     var trClass = 'content-row'; | 
|  | 4081     if (metric.isMain || $.inArray(metricName, mainMetrics) > -1) { | 
|  | 4082         (function(group_n) { | 
|  | 4083             var id_group = '#group_' + group_n; | 
|  | 4084             $(function() { | 
|  | 4085                 $(id_group).removeClass('row_hidden'); | 
|  | 4086                 $(id_group).removeClass('row_to_hide'); | 
|  | 4087             }); | 
|  | 4088         })(group_n); | 
|  | 4089     } else { | 
|  | 4090         trClass = 'content-row row_hidden row_to_hide'; | 
|  | 4091     } | 
|  | 4092     var tdClass = ''; | 
|  | 4093     if (!isPrimary) { | 
|  | 4094         trClass += ' secondary_hidden'; | 
|  | 4095         tdClass = 'secondary_td'; | 
|  | 4096     } | 
|  | 4097     else { | 
|  | 4098         trClass += ' primary'; | 
|  | 4099     } | 
|  | 4100     if (isExpandable) { | 
|  | 4101         table += | 
|  | 4102             '<tr class="' + trClass + '" quality="' + quality + '" onclick="toggleSecondary(event, $(this))">' + | 
|  | 4103             '<td class="left_column_td ' + tdClass + '">' + | 
|  | 4104             '<span class="metric-name expandable collapsed">' + | 
|  | 4105                initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) + | 
|  | 4106             '</span></td>'; | 
|  | 4107     } | 
|  | 4108     else { | 
|  | 4109         table += | 
|  | 4110             '<tr class="' + trClass + '" quality="' + quality + '">' + | 
|  | 4111             '<td class="left_column_td"><span class="metric-name">' + | 
|  | 4112             initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) + | 
|  | 4113             '</span>' + | 
|  | 4114             '</td>'; | 
|  | 4115     } | 
|  | 4116     for (var val_n = 0; val_n < values.length; val_n++) { | 
|  | 4117         value = values[order[val_n]]; | 
|  | 4118 | 
|  | 4119         if (value === null || value === '') { | 
|  | 4120             table += '<td><span>-</span></td>'; | 
|  | 4121         } else { | 
|  | 4122             if (typeof value === 'number') { | 
|  | 4123                 table += | 
|  | 4124                     '<td number="' + value + '"><span>' | 
|  | 4125                         + toPrettyString(value) + '</span></td>'; | 
|  | 4126             } else { | 
|  | 4127                 var result = /([0-9\.]+)(.*)/.exec(value); | 
|  | 4128                 var num = parseFloat(result[1]); | 
|  | 4129                 var rest = result[2]; | 
|  | 4130     //                        alert('value = ' + value + ' result = ' + result); | 
|  | 4131 | 
|  | 4132     //                        var num = parseFloat(value); | 
|  | 4133 | 
|  | 4134                 if (num !== null) { | 
|  | 4135                     table += '<td number="' + num + '"><span>' + toPrettyString(num) + rest + '</span></td>'; | 
|  | 4136                 } else { | 
|  | 4137                     table += '<td><span>' + value + '</span></td>'; | 
|  | 4138                 } | 
|  | 4139             } | 
|  | 4140         } | 
|  | 4141     } | 
|  | 4142     return table; | 
|  | 4143 } | 
|  | 4144 | 
|  | 4145 function getSubRows(subReports, groupName, metricName) { | 
|  | 4146     rows = []; | 
|  | 4147     if (subReports) { | 
|  | 4148         for (var report_n = 0; report_n < subReports.length; report_n++) { | 
|  | 4149             subReport = subReports[report_n]; | 
|  | 4150             for (var group_n = 0; group_n < subReport.length; group_n++) { | 
|  | 4151                 if (subReport[group_n][0] != groupName) | 
|  | 4152                     continue; | 
|  | 4153                 metrics = subReport[group_n][1]; | 
|  | 4154                 for (var metric_n = 0; metric_n < metrics.length; metric_n++) { | 
|  | 4155                     if (metrics[metric_n].metricName == metricName) | 
|  | 4156                         rows.push(metrics[metric_n]) | 
|  | 4157                 } | 
|  | 4158             } | 
|  | 4159         } | 
|  | 4160     } | 
|  | 4161     return rows; | 
|  | 4162 } | 
|  | 4163 | 
|  | 4164 function buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics) { | 
|  | 4165     var report = totalReport.report, | 
|  | 4166         date = totalReport.date, | 
|  | 4167         minContig = totalReport.minContig, | 
|  | 4168         referenceName = totalReport.referenceName, | 
|  | 4169         subReports = totalReport.subreports, | 
|  | 4170         subReferences = totalReport.subreferences; | 
|  | 4171     $('#report_date').html('<p>' + date + '</p>'); | 
|  | 4172     var extraInfo = '<p>All statistics are based on contigs of size >= ' + minContig + | 
|  | 4173         '<span class="rhs"> </span>bp, unless otherwise noted (e.g., "# contigs (>= 0 bp)" and "Total length (>= 0 bp)" include all contigs).</p>'; | 
|  | 4174     $('#extrainfo').html(extraInfo); | 
|  | 4175     $('#plot-caption').show(); | 
|  | 4176 | 
|  | 4177     var table = ''; | 
|  | 4178     table += '<table cellspacing="0" class="report_table draggable" id="main_report_table">'; | 
|  | 4179 | 
|  | 4180     if (referenceName) { | 
|  | 4181         $('#reference_name').show().find('.val').html(referenceName); | 
|  | 4182     } | 
|  | 4183 | 
|  | 4184     if (report[0][0] == 'Genome statistics') {  // if first section is empty (no reference), swap it and w/o reference statistics | 
|  | 4185         var genomeMetrics = report[0][1]; | 
|  | 4186         var isSectionEmpty = true; | 
|  | 4187         for (var index = 0; index < genomeMetrics.length; index++) { | 
|  | 4188             if (genomeMetrics[index].isMain || $.inArray(genomeMetrics[index].metric_name, mainMetrics) > -1) | 
|  | 4189                 isSectionEmpty = false; | 
|  | 4190         } | 
|  | 4191         if (isSectionEmpty) { | 
|  | 4192             for (var group_n = 0; group_n < report.length; group_n++) { | 
|  | 4193                 if (report[group_n][0] == 'Statistics without reference') { | 
|  | 4194                     report[0] = report.splice(group_n, 1, report[0])[0]; | 
|  | 4195                 } | 
|  | 4196             } | 
|  | 4197         } | 
|  | 4198     } | 
|  | 4199 | 
|  | 4200     for (var group_n = 0; group_n < report.length; group_n++) { | 
|  | 4201         var group = report[group_n]; | 
|  | 4202         var groupName = group[0]; | 
|  | 4203         var metrics = group[1]; | 
|  | 4204         var width = assembliesNames.length + 1; | 
|  | 4205 | 
|  | 4206         if (groupName == 'Reference statistics') { | 
|  | 4207             var referenceValues = {}; | 
|  | 4208             for (var metric_n = 0; metric_n < metrics.length; metric_n++) { | 
|  | 4209                 var metric = metrics[metric_n]; | 
|  | 4210                 var metricName = metric.metricName; | 
|  | 4211                 var value = metric.values[0]; | 
|  | 4212                 referenceValues[metricName] = value; | 
|  | 4213             } | 
|  | 4214             var refLen = referenceValues['Reference length']; | 
|  | 4215             var refFragments = referenceValues['Reference fragments']; | 
|  | 4216             var refGC = referenceValues['Reference GC (%)']; | 
|  | 4217             var refFeatures = referenceValues['Reference genomic features']; | 
|  | 4218             var refOperons = referenceValues['Reference operons']; | 
|  | 4219             var refChr = referenceValues['Reference chromosomes']; | 
|  | 4220             var totalReads = referenceValues['# total reads']; | 
|  | 4221             var refMappedReads = referenceValues['Reference mapped (%)']; | 
|  | 4222             var refPairedReads = referenceValues['Reference properly paired (%)']; | 
|  | 4223             var estRefLen = referenceValues['Estimated reference length']; | 
|  | 4224 | 
|  | 4225             if (refLen) | 
|  | 4226                 $('#reference_length').show().find('.val').html(toPrettyString(refLen)); | 
|  | 4227             else if (estRefLen) | 
|  | 4228                 $('#est_reference_length').show().find('.val').html(toPrettyString(estRefLen)); | 
|  | 4229             if (refFragments) { | 
|  | 4230                 $('#reference_fragments').show().find('.val').html(refFragments); | 
|  | 4231                 if (refFragments > 1) | 
|  | 4232                     $('#reference_fragments').find('.plural_ending').show(); | 
|  | 4233             } | 
|  | 4234             if (refGC) | 
|  | 4235                 $('#reference_gc').show().find('.val').html(toPrettyString(refGC)); | 
|  | 4236             if (refFeatures) | 
|  | 4237                 $('#reference_features').show().find('.val').html(toPrettyString(refFeatures)); | 
|  | 4238             if (refOperons) | 
|  | 4239                 $('#reference_operons').show().find('.val').html(toPrettyString(refOperons)); | 
|  | 4240             if (refChr) { | 
|  | 4241                 $('#reference_chr').show().find('.val').html(refChr); | 
|  | 4242                 if (refChr > 1) | 
|  | 4243                     $('#reference_chr').find('.plural_ending').show(); | 
|  | 4244             } | 
|  | 4245             if (totalReads) | 
|  | 4246                 $('#total_reads').show().find('.val').html(toPrettyString(totalReads)); | 
|  | 4247             if (refMappedReads !== undefined) | 
|  | 4248                 $('#reference_mapped_reads').show().find('.val').html(toPrettyString(refMappedReads)); | 
|  | 4249             if (refPairedReads !== undefined) | 
|  | 4250                 $('#reference_paired_reads').show().find('.val').html(toPrettyString(refPairedReads)); | 
|  | 4251             continue; | 
|  | 4252         } | 
|  | 4253 | 
|  | 4254         if (group_n == 0) { | 
|  | 4255             table += '<tr class="top_row_tr"><td id="top_left_td" class="left_column_td"><span>' + groupName + '</span></td>'; | 
|  | 4256 | 
|  | 4257             for (var assembly_n = 0; assembly_n < assembliesNames.length; assembly_n++) { | 
|  | 4258                 var assemblyName = assembliesNames[order[assembly_n]]; | 
|  | 4259                 if (assemblyName.length > 30) { | 
|  | 4260                     assemblyName = | 
|  | 4261                         '<span class="tooltip-link" rel="tooltip" title="' + assemblyName + '">' + | 
|  | 4262                             assemblyName.trunc(30) + | 
|  | 4263                             '</span>' | 
|  | 4264                 } | 
|  | 4265 | 
|  | 4266                 table += '<td class="second_through_last_col_headers_td" position="' + order[assembly_n] + '">' + | 
|  | 4267                     '<span class="drag_handle"><span class="drag_image"></span></span>' + | 
|  | 4268                     '<span class="assembly_name">' + assemblyName + '</span>' + | 
|  | 4269                     '</td>'; | 
|  | 4270             } | 
|  | 4271 | 
|  | 4272         } else { | 
|  | 4273             table += | 
|  | 4274                 '<tr class="group_header row_to_hide row_hidden group_empty" id="group_' + group_n + '">' + | 
|  | 4275                     '<td class="left_column_td"><span>' + groupName + '</span></td>'; //colspan="' + width + '" | 
|  | 4276             for (var i = 1; i < width; i++) { | 
|  | 4277                 table += '<td></td>'; | 
|  | 4278             } | 
|  | 4279             table += '</tr>'; | 
|  | 4280         } | 
|  | 4281 | 
|  | 4282         for (metric_n = 0; metric_n < metrics.length; metric_n++) { | 
|  | 4283             isExpandable = false; | 
|  | 4284             isPrimary = true; | 
|  | 4285             metricName = metrics[metric_n].metricName; | 
|  | 4286             subRows = getSubRows(subReports, groupName, metricName); | 
|  | 4287             if (subRows && subRows.length > 0) { | 
|  | 4288                 isExpandable = true; | 
|  | 4289                 table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary); | 
|  | 4290                 for (var rows_n = 0; rows_n < subRows.length; rows_n++) { | 
|  | 4291                     isExpandable = false; | 
|  | 4292                     isPrimary = false; | 
|  | 4293                     table += addRow(subRows[rows_n], mainMetrics, subReferences[rows_n], group_n, order, glossary, isExpandable, isPrimary); | 
|  | 4294                 } | 
|  | 4295             } | 
|  | 4296             else table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary); | 
|  | 4297         } | 
|  | 4298         table += '</tr>'; | 
|  | 4299     } | 
|  | 4300     table += '</table>'; | 
|  | 4301 | 
|  | 4302     table += buildExtendedLinkClick(); | 
|  | 4303 | 
|  | 4304     setUpHeatMap(table); | 
|  | 4305 } | 
|  | 4306 | 
|  | 4307 </script> | 
|  | 4308 | 
|  | 4309 | 
|  | 4310     <script type="text/javascript"> | 
|  | 4311 | 
|  | 4312 function buildReport() { | 
|  | 4313     var assembliesNames; | 
|  | 4314     var order; | 
|  | 4315 | 
|  | 4316     var totalReport = null; | 
|  | 4317     var qualities = null; | 
|  | 4318     var mainMetrics = null; | 
|  | 4319     var contigsLens = null; | 
|  | 4320     var coordNx = null; | 
|  | 4321     var contigsLensNx = null; | 
|  | 4322     var alignedContigsLens = null; | 
|  | 4323     var refLengths = null; | 
|  | 4324     var contigs = null; | 
|  | 4325     var featuresInContigs = null; | 
|  | 4326     var operonsInContigs = null; | 
|  | 4327     var gcInfos = null; | 
|  | 4328 | 
|  | 4329     var glossary = JSON.parse($('#glossary-json').html()); | 
|  | 4330 | 
|  | 4331     var plotsSwitchesDiv = document.getElementById('plots-switches'); | 
|  | 4332     var toRemoveRefLabel = true; | 
|  | 4333     var firstPlot = true; | 
|  | 4334 | 
|  | 4335     /****************/ | 
|  | 4336     /* Total report */ | 
|  | 4337 | 
|  | 4338     if (!(totalReport = readJson('total-report'))) { | 
|  | 4339         console.log("Error: cannot read #total-report-json"); | 
|  | 4340         return 1; | 
|  | 4341     } | 
|  | 4342 | 
|  | 4343     assembliesNames = totalReport.assembliesNames; | 
|  | 4344 | 
|  | 4345     order = recoverOrderFromCookies() || totalReport.order || Range(0, assembliesNames.length); | 
|  | 4346 | 
|  | 4347     buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics); | 
|  | 4348 | 
|  | 4349     if (refLengths = readJson('reference-length')) | 
|  | 4350         refLengths = refLengths.reflen; | 
|  | 4351 | 
|  | 4352     /****************/ | 
|  | 4353     /* Plots        */ | 
|  | 4354 | 
|  | 4355     while (assembliesNames.length > colors.length) {  // colors is defined in utils.js | 
|  | 4356         colors = colors.concat(colors); | 
|  | 4357     } | 
|  | 4358 | 
|  | 4359     $(plotsSwitchesDiv).html('<b>Plots:</b>'); | 
|  | 4360 | 
|  | 4361     var selectedAssemblies = Array.apply(null, {length: assembliesNames}).map(Number.call, Number); | 
|  | 4362     assembliesNames.forEach(function(filename, i) { | 
|  | 4363         addLabelToLegend(i, filename, selectedAssemblies, colors) | 
|  | 4364     }); | 
|  | 4365 | 
|  | 4366     var tickX = 1; | 
|  | 4367     if (tickX = readJson('tick-x')) | 
|  | 4368         tickX = tickX.tickX; | 
|  | 4369 | 
|  | 4370     if (contigsLens = readJson('contigs-lengths')) { | 
|  | 4371         makePlot(firstPlot, assembliesNames, order, 'cumulative', 'Cumulative length', cumulative.draw, contigsLens.lists_of_lengths, refLengths, tickX); | 
|  | 4372         firstPlot = false; | 
|  | 4373     } | 
|  | 4374 | 
|  | 4375     if (coordNx = readJson('coord-nx')) { | 
|  | 4376         makePlot(firstPlot, assembliesNames, order, 'nx', 'Nx', nx.draw, { | 
|  | 4377                 coord_x: coordNx.coord_x, | 
|  | 4378                 coord_y: coordNx.coord_y, | 
|  | 4379                 filenames: coordNx.filenames | 
|  | 4380             }, | 
|  | 4381             null, null | 
|  | 4382         ); | 
|  | 4383         firstPlot = false; | 
|  | 4384     } | 
|  | 4385 | 
|  | 4386     if (coordNx = readJson('coord-nax')) { | 
|  | 4387         makePlot(firstPlot, assembliesNames, order, 'nax', 'NAx', nx.draw, { | 
|  | 4388                 coord_x: coordNx.coord_x, | 
|  | 4389                 coord_y: coordNx.coord_y, | 
|  | 4390                 filenames: coordNx.filenames | 
|  | 4391             }, | 
|  | 4392             null, null | 
|  | 4393         ); | 
|  | 4394         firstPlot = false; | 
|  | 4395     } | 
|  | 4396 | 
|  | 4397     if (coordNx = readJson('coord-ngx')) { | 
|  | 4398         makePlot(firstPlot, assembliesNames, order, 'ngx', 'NGx', nx.draw, { | 
|  | 4399                 coord_x: coordNx.coord_x, | 
|  | 4400                 coord_y: coordNx.coord_y, | 
|  | 4401                 filenames: coordNx.filenames | 
|  | 4402             }, | 
|  | 4403             null, null | 
|  | 4404         ); | 
|  | 4405         firstPlot = false; | 
|  | 4406     } | 
|  | 4407 | 
|  | 4408     if (coordNx = readJson('coord-ngax')) { | 
|  | 4409         makePlot(firstPlot, assembliesNames, order, 'ngax', 'NGAx', nx.draw, { | 
|  | 4410                 coord_x: coordNx.coord_x, | 
|  | 4411                 coord_y: coordNx.coord_y, | 
|  | 4412                 filenames: coordNx.filenames | 
|  | 4413             }, | 
|  | 4414             null, null | 
|  | 4415         ); | 
|  | 4416         firstPlot = false; | 
|  | 4417     } | 
|  | 4418 | 
|  | 4419     if (coordMisassemblies = readJson('coord-misassemblies')) { | 
|  | 4420         makePlot(firstPlot, assembliesNames, order, 'misassemblies', 'Misassemblies', frc.draw,  { | 
|  | 4421                 coord_x: coordMisassemblies.coord_x, | 
|  | 4422                 coord_y: coordMisassemblies.coord_y, | 
|  | 4423                 filenames: coordMisassemblies.filenames | 
|  | 4424             }, | 
|  | 4425             null, 1 | 
|  | 4426         ); | 
|  | 4427         firstPlot = false; | 
|  | 4428     } | 
|  | 4429 | 
|  | 4430     featuresInContigs = readJson('features-in-contigs'); | 
|  | 4431     operonsInContigs = readJson('operons-in-contigs'); | 
|  | 4432 //    if (genesInContigs || operonsInContigs) | 
|  | 4433 //        contigs = readJson('contigs'); | 
|  | 4434 | 
|  | 4435     if (featuresInContigs) { | 
|  | 4436         makePlot(firstPlot, assembliesNames, order, 'features', 'Genomic features', gns.draw,  { | 
|  | 4437                 filesFeatureInContigs: featuresInContigs.features_in_contigs, | 
|  | 4438                 kind: 'gene', | 
|  | 4439                 filenames: featuresInContigs.filenames | 
|  | 4440             }, | 
|  | 4441             featuresInContigs.ref_features_number, tickX | 
|  | 4442         ); | 
|  | 4443         firstPlot = false; | 
|  | 4444     } | 
|  | 4445     if (operonsInContigs) { | 
|  | 4446         makePlot(firstPlot, assembliesNames, order, 'operons', 'Operons', gns.draw, { | 
|  | 4447                 filesFeatureInContigs: operonsInContigs.operons_in_contigs, | 
|  | 4448                 kind: 'operon', | 
|  | 4449                 filenames: operonsInContigs.filenames | 
|  | 4450             }, | 
|  | 4451             operonsInContigs.ref_operons_number, tickX | 
|  | 4452         ); | 
|  | 4453         firstPlot = false; | 
|  | 4454     } | 
|  | 4455     gcInfos = readJson('gc'); | 
|  | 4456     if (gcInfos && (gcInfos.lists_of_gc_info || gcInfos.list_of_GC_distributions)) { | 
|  | 4457         makePlot(firstPlot, assembliesNames, order, 'gc', 'GC content', gc.draw, gcInfos, gcInfos.reference_index); | 
|  | 4458     } | 
|  | 4459 | 
|  | 4460     var noReference = true; | 
|  | 4461     var report = totalReport.report; | 
|  | 4462     for (var group_n = 0; group_n < report.length; group_n++) { | 
|  | 4463         var group = report[group_n]; | 
|  | 4464         var groupName = group[0]; | 
|  | 4465         if (groupName == 'Reference statistics' && group[1].length > 0) { | 
|  | 4466             noReference = false; | 
|  | 4467         } | 
|  | 4468     } | 
|  | 4469     if (noReference) extendAll(); | 
|  | 4470     appendIcarusLinks(); | 
|  | 4471     return 0; | 
|  | 4472 } | 
|  | 4473 | 
|  | 4474 function extendAll() { | 
|  | 4475     $('.row_to_hide').toggleClass('row_hidden'); | 
|  | 4476 | 
|  | 4477     var link = $('#extended_report_link'); | 
|  | 4478     link.hide(); | 
|  | 4479 } | 
|  | 4480 </script> | 
|  | 4481 | 
|  | 4482 | 
|  | 4483     <script type="text/javascript"> | 
|  | 4484         $(function() { | 
|  | 4485 | 
|  | 4486             buildReport(); | 
|  | 4487 | 
|  | 4488             dragTable.init(); | 
|  | 4489 | 
|  | 4490             $("[rel=tooltip]").tooltip({ animation: false, }); | 
|  | 4491         }); | 
|  | 4492     </script> | 
|  | 4493 </head> | 
|  | 4494 | 
|  | 4495 <body> | 
|  | 4496 <div class="top-panel"> | 
|  | 4497     <table class="layout-table"> | 
|  | 4498         <tr> | 
|  | 4499         <td class='layout-table-td'> | 
|  | 4500             <div class="page_title"> | 
|  | 4501                 <h1> | 
|  | 4502                     QUAST | 
|  | 4503                 </h1> | 
|  | 4504                 <p class="page_subtitle"> | 
|  | 4505                     <b>Quality Assessment Tool for Genome Assemblies</b> | 
|  | 4506                     by <a href="http://cab.spbu.ru" class='dark_bg_link'>CAB</a> | 
|  | 4507                 </p> | 
|  | 4508             </div> | 
|  | 4509         </td> | 
|  | 4510         </tr> | 
|  | 4511     </table> | 
|  | 4512 </div> | 
|  | 4513 <div class="content"> | 
|  | 4514     <div id='header'> | 
|  | 4515         <p id='report_date'></p> | 
|  | 4516 | 
|  | 4517         <p id='icarus'></p> | 
|  | 4518         <p id='extrainfo'>Loading...</p> | 
|  | 4519         <p id='per_ref_msg'></p> | 
|  | 4520         <p id='krona'></p> | 
|  | 4521 | 
|  | 4522         <p id="data_set_p"> | 
|  | 4523             <span style="display: none;" id="reference_name">Aligned to | 
|  | 4524                 "<span class='val'></span>" | 
|  | 4525             </span> | 
|  | 4526 | 
|  | 4527             <span style="display: none;" id="combined_reference_name"> | 
|  | 4528                 Combined reference | 
|  | 4529             </span> | 
|  | 4530 | 
|  | 4531             <span style="display: none;" id="est_reference_length">Estimated reference size: | 
|  | 4532                 <span class='val'></span><span class='rhs'> </span>bp | 
|  | 4533             </span> | 
|  | 4534 | 
|  | 4535             <span style="display: none;" id="reference_length">| | 
|  | 4536                 <span class='val'></span><span class='rhs'> </span>bp | 
|  | 4537             </span> | 
|  | 4538 | 
|  | 4539             <span style="display: none;" id="combined_reference_files">| | 
|  | 4540                 <span class='val'></span><span class='rhs'> </span>reference<span style="display: none;" class='plural_ending'>s</span> | 
|  | 4541             </span> | 
|  | 4542 | 
|  | 4543             <span style="display: none;" id="reference_fragments">| | 
|  | 4544                 <span class='val'></span><span class='rhs'> </span>fragment<span style="display: none;" class='plural_ending'>s</span> | 
|  | 4545             </span> | 
|  | 4546 | 
|  | 4547             <span style="display: none;" id="reference_gc">| | 
|  | 4548                 <span class='val'></span><span class='rhs'> </span>% G+C | 
|  | 4549             </span> | 
|  | 4550 | 
|  | 4551             <span style="display: none;" id="reference_chr">| | 
|  | 4552                 <span class='val'></span> chromosome<span style="display: none;" class='plural_ending'>s</span> | 
|  | 4553             </span> | 
|  | 4554 | 
|  | 4555             <span style="display: none;" id="total_reads"><br> | 
|  | 4556                 <span class='val'></span> reads | 
|  | 4557             </span> | 
|  | 4558 | 
|  | 4559             <span style="display: none;" id="reference_mapped_reads">| | 
|  | 4560                 <span class='val'></span>% mapped | 
|  | 4561             </span> | 
|  | 4562 | 
|  | 4563             <span style="display: none;" id="reference_paired_reads">| | 
|  | 4564                 <span class='val'></span>% properly paired | 
|  | 4565             </span> | 
|  | 4566 | 
|  | 4567             <span style="display: none;" id="reference_features"><br> | 
|  | 4568                 <span class='val'></span> genomic features | 
|  | 4569             </span> | 
|  | 4570 | 
|  | 4571             <span style="display: none;" id="reference_operons">| | 
|  | 4572                 <span class='val'></span> operons | 
|  | 4573             </span> | 
|  | 4574         </p> | 
|  | 4575     </div> | 
|  | 4576 | 
|  | 4577     <noscript> | 
|  | 4578         <div style="margin-left: 0;"> | 
|  | 4579             Unfortunately, <span style="font-weight: bold">JavaScript</span> in your | 
|  | 4580             browser <span style="font-weight: bold">is disabled</span> or is not supported.</br> | 
|  | 4581             We need JavaScript to build report and plots. | 
|  | 4582         </div> | 
|  | 4583     </noscript> | 
|  | 4584 | 
|  | 4585     <div class='report-and-plots'> | 
|  | 4586         <div class='report' id='main_report'> | 
|  | 4587             <div id="heatmap_header" style='display: none; float: left;'> | 
|  | 4588                 <div style="padding-right: 10px; display: inline-block; vertical-align:top;"> | 
|  | 4589                     <canvas id="gradientHeatmap" width="150" height="6"></canvas> | 
|  | 4590                     <div style="margin-left: 0; text-align: justify;"> | 
|  | 4591                         <span class="heatmap_legend">Worst</span> | 
|  | 4592                         <span style="margin-left: -5px;" class="heatmap_legend">Median</span> | 
|  | 4593                         <span class="heatmap_legend">Best</span> | 
|  | 4594                         <span class="heatmap_legend" style='width: 100%; height: 0;'></span> | 
|  | 4595                     </div> | 
|  | 4596                 </div> | 
|  | 4597                 <label for="heatmaps_chbox"><input type="checkbox" checked="checked" id="heatmaps_chbox">Show heatmap</label> | 
|  | 4598             </div> | 
|  | 4599             <div style="clear: both;"></div> | 
|  | 4600         </div> | 
|  | 4601         <div class='plots'> | 
|  | 4602             <table style='margin: -3px;'> | 
|  | 4603                 <tr id='all-switches'> | 
|  | 4604                     <td> | 
|  | 4605                         <div id='plots-switches'></div> | 
|  | 4606                     </td> | 
|  | 4607                     <td style='text-align: right; padding-right: 22px;'> | 
|  | 4608                         <span id='scale-placeholder'></span> | 
|  | 4609                     </td> | 
|  | 4610                 </tr> | 
|  | 4611                 <tr> | 
|  | 4612                     <td colspan="2"> | 
|  | 4613                         <div id='plot-placeholder' style=''></div> | 
|  | 4614                     </td> | 
|  | 4615                     <td> | 
|  | 4616                         <div id='legend-placeholder'></div> | 
|  | 4617                     </td> | 
|  | 4618                 </tr> | 
|  | 4619                 <tr> | 
|  | 4620                     <td colspan="3" id="plot-caption" style="display: none;"> | 
|  | 4621                         <p id="contigs_are_ordered">Contigs are ordered from largest (contig #1) to smallest.</p> | 
|  | 4622                         <p id="frc_info">FRCurve: | 
|  | 4623                             Y is the total number of aligned bases divided by the reference length, | 
|  | 4624                             in the contigs having the total number of <span class="frc_plot_name"></span> at most X.</p> | 
|  | 4625                         <p id="gc_info">Contigs are broken into nonoverlapping 100 bp windows. | 
|  | 4626                             Plot shows number of windows for each GC percentage.</p> | 
|  | 4627                         <p id="gc_contigs_info">Plot shows number of contigs with GC percentage in a certain range.</p> | 
|  | 4628                     </td> | 
|  | 4629                 </tr> | 
|  | 4630             </table> | 
|  | 4631         </div> | 
|  | 4632 | 
|  | 4633         <p> | 
|  | 4634             <span id="main_ref_genome"></span> | 
|  | 4635         </p> | 
|  | 4636 | 
|  | 4637         <div style="clear: left"></div> | 
|  | 4638         <div style="clear: right"></div> | 
|  | 4639 | 
|  | 4640         <div class='json-code'> | 
|  | 4641             <div id='total-report-json'> | 
|  | 4642                 {"date":"07 July 2022, Thursday, 16:52:16","assembliesNames":["contig1","contig2"],"referenceName":"dataset_be05aefa-bbf2-47ec-ac87-32bf4b214023","order":[0,1],"report":[["Genome statistics",[{"metricName":"Genome fraction (%)","quality":"More is better","values":["71.579","100.000"],"isMain":true},{"metricName":"Duplication ratio","quality":"Less is better","values":["1.000","1.000"],"isMain":true},{"metricName":"# genomic features","quality":"More is better","values":["7 + 7 part","13 + 1 part"],"isMain":true},{"metricName":"Largest alignment","quality":"More is better","values":[2030,6650],"isMain":true},{"metricName":"Total aligned length","quality":"More is better","values":[4760,6650],"isMain":true},{"metricName":"NG50","quality":"More is better","values":[3980,6650],"isMain":false},{"metricName":"NG90","quality":"More is better","values":[1120,6650],"isMain":false},{"metricName":"auNG","quality":"More is better","values":["2960.4","6650.0"],"isMain":false},{"metricName":"NA50","quality":"More is better","values":[1610,6650],"isMain":false},{"metricName":"NA90","quality":"More is better","values":[null,6650],"isMain":false},{"metricName":"auNA","quality":"More is better","values":["1187.4","6650.0"],"isMain":false},{"metricName":"NGA50","quality":"More is better","values":[1610,6650],"isMain":true},{"metricName":"NGA90","quality":"More is better","values":[null,6650],"isMain":false},{"metricName":"auNGA","quality":"More is better","values":["1198.1","6650.0"],"isMain":false},{"metricName":"LG50","quality":"Less is better","values":[1,1],"isMain":false},{"metricName":"LG90","quality":"Less is better","values":[3,1],"isMain":false},{"metricName":"LA50","quality":"Less is better","values":[2,1],"isMain":false},{"metricName":"LA90","quality":"Less is better","values":[null,1],"isMain":false},{"metricName":"LGA50","quality":"Less is better","values":[2,1],"isMain":true},{"metricName":"LGA90","quality":"Less is better","values":[null,1],"isMain":false},{"metricName":"Complete BUSCO (%)","quality":"More is better","values":["0.00","0.00"],"isMain":true},{"metricName":"Partial BUSCO (%)","quality":"Less is better","values":["0.68","0.00"],"isMain":true}]],["Reads mapping",[]],["Misassemblies",[{"metricName":"# misassemblies","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":"    # relocations","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"    # translocations","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"    # inversions","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# misassembled contigs","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Misassembled contigs length","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":"# local misassemblies","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# scaffold gap ext. mis.","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# scaffold gap loc. mis.","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# unaligned mis. contigs","quality":"Less is better","values":[0,0],"isMain":false}]],["Unaligned",[{"metricName":"# fully unaligned contigs","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Fully unaligned length","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# partially unaligned contigs","quality":"Less is better","values":[1,0],"isMain":false},{"metricName":"Partially unaligned length","quality":"Less is better","values":[1950,0],"isMain":false}]],["Mismatches",[{"metricName":"# mismatches per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# mismatches","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# indels per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# indels","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"    # indels (<= 5 bp)","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"    # indels (> 5 bp)","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Indels length","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# N's per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# N's","quality":"Less is better","values":[0,0],"isMain":false}]],["Statistics without reference",[{"metricName":"# contigs","quality":"Equal","values":[3,1],"isMain":true},{"metricName":"# contigs (>= 0 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"# contigs (>= 1000 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"Largest contig","quality":"More is better","values":[3980,6650],"isMain":true},{"metricName":"Total length","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"Total length (>= 0 bp)","quality":"More is better","values":[6710,6650],"isMain":false},{"metricName":"Total length (>= 1000 bp)","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"N50","quality":"More is better","values":[3980,6650],"isMain":false},{"metricName":"N90","quality":"More is better","values":[1120,6650],"isMain":false},{"metricName":"auN","quality":"More is better","values":["2934.0","6650.0"],"isMain":false},{"metricName":"L50","quality":"Less is better","values":[1,1],"isMain":false},{"metricName":"L90","quality":"Less is better","values":[3,1],"isMain":false},{"metricName":"GC (%)","quality":"Equal","values":["51.28","52.00"],"isMain":false}]],["K-mer-based statistics",[{"metricName":"K-mer-based compl. (%)","quality":"More is better","values":["68.09","100.00"],"isMain":true},{"metricName":"K-mer-based cor. length (%)","quality":"More is better","values":["100.00","100.00"],"isMain":false},{"metricName":"K-mer-based mis. length (%)","quality":"Less is better","values":["0.00","0.00"],"isMain":false},{"metricName":"K-mer-based undef. length (%)","quality":"Less is better","values":["0.00","0.00"],"isMain":false},{"metricName":"# k-mer-based misjoins","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":"    # k-mer-based translocations","quality":"Equal","values":[0,0],"isMain":false},{"metricName":"    # k-mer-based 100kbp relocations","quality":"Equal","values":[0,0],"isMain":false}]],["Predicted genes",[{"metricName":"# predicted rRNA genes","quality":"More is better","values":["0 + 0 part","0 + 0 part"],"isMain":true}]],["Similarity statistics",[{"metricName":"# similar correct contigs","quality":"Equal","values":[0,0],"isMain":false},{"metricName":"# similar misassembled blocks","quality":"Equal","values":[0,0],"isMain":false}]],["Reference statistics",[{"metricName":"Reference length","quality":"Equal","values":[6650,6650],"isMain":false},{"metricName":"Reference fragments","quality":"Equal","values":[1,1],"isMain":false},{"metricName":"Reference GC (%)","quality":"Equal","values":["52.00","52.00"],"isMain":false},{"metricName":"Reference genomic features","quality":"Equal","values":[14,14],"isMain":false},{"metricName":"Reference operons","quality":"Equal","values":[0,0],"isMain":false}]]],"subreferences":[],"subreports":[],"minContig":500} | 
|  | 4643             </div> | 
|  | 4644             <div id='qualities-json'> | 
|  | 4645                 {{ qualities }} | 
|  | 4646             </div> | 
|  | 4647             <div id='main-metrics-json'> | 
|  | 4648                 {{ mainMetrics }} | 
|  | 4649             </div> | 
|  | 4650 | 
|  | 4651             <div id="contigs-lengths-json"> | 
|  | 4652                 {"filenames":["contig1","contig2"],"lists_of_lengths":[[3980,1610,1120],[6650]]} | 
|  | 4653             </div> | 
|  | 4654             <div id='assemblies-lengths-json'> | 
|  | 4655                 {"filenames":["contig1","contig2"],"assemblies_lengths":[6710,6650]} | 
|  | 4656             </div> | 
|  | 4657             <div id='reference-length-json'> | 
|  | 4658                 {"reflen":[6650]} | 
|  | 4659             </div> | 
|  | 4660             <div id='tick-x-json'> | 
|  | 4661                 {"tickX":1} | 
|  | 4662             </div> | 
|  | 4663             <div id='coord-nx-json'> | 
|  | 4664                 {"coord_x":[[0.0,1e-10,59.31445603576751,59.314456035867515,83.30849478390462,83.30849478400462,100.0,100.0000000001],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[3980,3980,3980,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]} | 
|  | 4665             </div> | 
|  | 4666             <div id='coord-ngx-json'> | 
|  | 4667                 {"coord_x":[[0.0,1e-10,59.849624060150376,59.84962406025038,84.06015037593986,84.06015037603986,100.90225563909775,100.90225563919775],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[3980,3980,3980,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]} | 
|  | 4668             </div> | 
|  | 4669             <div id='coord-nax-json'> | 
|  | 4670                 {"coord_x":[[0.0,1e-10,30.253353204172875,30.253353204272873,54.24739195230998,54.247391952409984,70.93889716840536,70.93889716850536],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[2030,2030,2030,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]} | 
|  | 4671             </div> | 
|  | 4672             <div id='coord-ngax-json'> | 
|  | 4673                 {"coord_x":[[0.0,1e-10,30.526315789473685,30.526315789573683,54.73684210526316,54.73684210536316,71.57894736842105,71.57894736852106],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[2030,2030,2030,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]} | 
|  | 4674             </div> | 
|  | 4675             <div id='coord-misassemblies-json'> | 
|  | 4676                 {"coord_x":[[0,1],[0,1]],"coord_y":[[71.57894736842105,71.57894736842105],[100.0,100.0]],"filenames":["contig1","contig2"]} | 
|  | 4677             </div> | 
|  | 4678             <div id='features-in-contigs-json'> | 
|  | 4679                 {"filenames":["contig1","contig2"],"features_in_contigs":{"contig1":[5,0,2],"contig2":[13]},"ref_features_number":14} | 
|  | 4680             </div> | 
|  | 4681             <div id='operons-in-contigs-json'> | 
|  | 4682                 {{ operonsInContigs }} | 
|  | 4683             </div> | 
|  | 4684             <div id='summary-json'> | 
|  | 4685                 [{{ num_contigs }}, | 
|  | 4686                 {{ Largest_alignment }}, | 
|  | 4687                 {{ Total_aligned_length }}, | 
|  | 4688                 {{ num_misassemblies }}, | 
|  | 4689                 {{ Misassembled_contigs_length }}, | 
|  | 4690                 {{ num_mismatches_per_100_kbp }}, | 
|  | 4691                 {{ num_indels_per_100_kbp }}, | 
|  | 4692                 {{ num_N's_per_100_kbp }}, | 
|  | 4693                 {{ Genome_fraction }}, | 
|  | 4694                 {{ Duplication_ratio }}, | 
|  | 4695                 {{ NGA50 }}] | 
|  | 4696             </div> | 
|  | 4697             <div id='misassemblies-json'> | 
|  | 4698                 {{ allMisassemblies }} | 
|  | 4699             </div> | 
|  | 4700             <div id='krona-json'> | 
|  | 4701                 {{ krona }} | 
|  | 4702             </div> | 
|  | 4703             <div id='gc-json'> | 
|  | 4704                 {"filenames":["contig1","contig2"],"reference_index":2,"list_of_GC_distributions":[[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,3,1,0,1,2,1,5,5,5,2,5,4,4,7,1,6,2,5,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,3,2,1,0,0,5,3,4,4,7,3,5,2,4,7,0,10,1,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,3,2,1,0,0,5,3,4,4,7,3,5,2,4,7,0,10,1,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]],"list_of_GC_contigs_distributions":[[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0]],[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]]],"lists_of_gc_info":null} | 
|  | 4705             </div> | 
|  | 4706             <div id='icarus-json'> | 
|  | 4707                 {"links":["icarus_viewers/alignment_viewer.html"],"links_names":["View in Icarus contig browser"]} | 
|  | 4708             </div> | 
|  | 4709         </div> | 
|  | 4710     </div> | 
|  | 4711 | 
|  | 4712     <div class='json-code'> | 
|  | 4713         <div id='glossary-json'> | 
|  | 4714             { | 
|  | 4715     "# contigs"                     : "<span>is the total number of contigs in the assembly.</span>", | 
|  | 4716     "Largest contig"                : "<span>is the length of the longest contig in the assembly.</span>", | 
|  | 4717     "Total length"                  : "<span>is the total number of bases in the assembly.</span>", | 
|  | 4718     "Reference length"              : "<span>is the total number of bases in the reference.</span>", | 
|  | 4719 | 
|  | 4720     "# contigs (>= 0 bp)"           : "<span>is the total number of contigs in the assembly that have size greater than or equal to 0 bp.</span>", | 
|  | 4721     "Total length (>= 0 bp)"        : "<span>is the total number of bases in the contigs having size greater than or equal to 0 bp.</span>", | 
|  | 4722 | 
|  | 4723     "N50"                           : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the assembly. Usually there is no value that produces exactly 50%, so the technical definition is the maximum length x such that using contigs of length at least x accounts for at least 50% of the total assembly length. Similarly, Nx for any x between 0 and 100 could be computed (x% of assembly).</span>", | 
|  | 4724     "NG50"                          : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the reference genome. This metric is computed only if a reference genome is provided.  Similarly, NGx for any x between 0 and 100 could be computed (x% of the reference).</span>", | 
|  | 4725 | 
|  | 4726     "L50"                           : "<span>is the minimum number of contigs that produce half (50%) of the bases of the assembly. In other words, it's the number of contigs of length at least N50. Similarly, Lx for any x between 0 and 100 could be computed.</span>", | 
|  | 4727     "LG50"                          : "<span>is the minimum number of contigs that produce half (50%) of the bases of the reference genome. In other words, it's the number of contigs of length at least NG50. This metric is computed only if a reference genome is provided. Similarly, LGx for any x between 0 and 100 could be computed.</span>", | 
|  | 4728 | 
|  | 4729     "NA50"                          : "<span>is N50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NAx for any x between 0 and 100 could be computed.</span>", | 
|  | 4730     "NGA50"                         : "<span>is NG50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NGAx for any x between 0 and 100 could be computed.</span>", | 
|  | 4731 | 
|  | 4732     "LA50"                          : "<span>is L50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LAx for any x between 0 and 100 could be computed.</span>", | 
|  | 4733     "LGA50"                         : "<span>is LG50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LGAx for any x between 0 and 100 could be computed.</span>", | 
|  | 4734 | 
|  | 4735     "auN"                           : "<span>is the area under the Nx curve.</span>", | 
|  | 4736     "auNG"                          : "<span>is the area under the NGx curve.</span>", | 
|  | 4737     "auNA"                          : "<span>is the area under the NAx curve.</span>", | 
|  | 4738     "auNGA"                         : "<span>is the area under the NGAx curve.</span>", | 
|  | 4739 | 
|  | 4740     "Average %IDY"                  : "<span>is the average of alignment identity percent (alignment accuracy) among all contigs.</span>", | 
|  | 4741     "# misassemblies"               : "<span>is the number of positions in the assembled contigs where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference (<i>relocation</i>) or they overlap on more than 1 kbp (<i>relocation</i>) or flanking sequences align on different strands (<i>inversion</i>) or different chromosomes (<i>translocation</i>).</span>", | 
|  | 4742     "# large block misassemblies"   : "<span>is the number of misassemblies between alignments with length greater than or equal to 3 kbp and with the misassembly threshold equal to 5 kbp (instead of default 1 kbp for regular misassemblies).</span>", | 
|  | 4743     "# misassembled contigs"        : "<span>is the number of contigs that contain misassembly events.</span>", | 
|  | 4744     "Misassembled contigs length"   : "<span>is the number of total bases contained in all contigs that have one or more misassemblies.</span>", | 
|  | 4745 | 
|  | 4746     "# relocations"                 : "<span>is the number of relocation events among all misassembly events. Relocation is a misassembly where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference, or they overlap by more than 1 kbp and both flanking sequences align on the same chromosome.</span>", | 
|  | 4747     "# translocations"              : "<span>is the number of translocation events among all misassembly events. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>", | 
|  | 4748     "# interspecies translocations" : "<span>is the number of interspecies translocation events among all misassembly events. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>", | 
|  | 4749     "# inversions"                  : "<span>is the number of inversion events among all misassembly events. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>", | 
|  | 4750     "# large relocations"           : "<span>is the number of relocation events among all large block misassemblies. Relocation is a misassembly where the left flanking sequence aligns over 5 kbp away from the right flanking sequence on the reference, or they overlap by more than 5 kbp and both flanking sequences align on the same chromosome.</span>", | 
|  | 4751     "# large translocations"        : "<span>is the number of translocation events among all large block misassemblies. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>", | 
|  | 4752     "# large i/s translocations"    : "<span>is the number of interspecies translocation events among all large block misassemblies. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>", | 
|  | 4753     "# large inversions"            : "<span>is the number of inversion events among all large block misassemblies. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>", | 
|  | 4754     "# local misassemblies"         : "<span>is the number of local misassemblies. We define a local misassembly breakpoint as a breakpoint that satisfies these conditions: <ol> <li>Two or more distinct alignments cover the breakpoint.</li> <li>The gap between left and right flanking sequences is less than the misassembly threshold (1 kbp by default).</li> <li>The left and right flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>", | 
|  | 4755     "# scaffold gap ext. mis."      : "<span>is the number of scaffold gap size extensive misassemblies. We define a scaffold gap size misassembly as a breakpoint where the flanking sequences are combined in a scaffold on the wrong distance. These misassemblies are not included in the total number of misassemblies. </span>", | 
|  | 4756     "# scaffold gap loc. mis."      : "<span>is the number of scaffold gap size local misassemblies. Such breakpoints satisfy the local misassembly conditions but they occur inside scaffolds. These misassemblies are not included in the total number of local misassemblies. </span>", | 
|  | 4757     "# possibly misassembled contigs": "<span>is the number of contigs that contain large unaligned fragment (default min length is 500 bp) and thus could possibly contain interspecies translocation with unknown reference.</span>", | 
|  | 4758     "# possible misassemblies"      : "<span>is the number of putative interspecies translocations in possibly misassembled contigs if each large unaligned fragment is supposed to be a fragment of unknown reference.</span>", | 
|  | 4759     "# intergenomic misassemblies"  : "<span>is the number of all found and putative (possible) interspecies translocations.</span>", | 
|  | 4760     "# structural variations"       : "<span>is the number of misassemblies matched with structural variations.</span>", | 
|  | 4761     "# possible TEs"                : "<span>is the number of misassemblies possibly caused by transposable elements (TEs). We define a possible TE as an event that satisfies these conditions: <ol> <li>There are two misassembly breakpoints of the same type around a short alignment (less than 7 kbp by default)</li> <li>The gap between two long flanking sequences on the sides of the short alignment is less than 7 kbp.</li> <li> The long flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>", | 
|  | 4762     "# unaligned mis. contigs"      : "<span>is the number of contigs that have the number of unaligned bases more than 50% of the contig length and a misassembly event in their aligned fragment. Note that such misassemblies are not counted in <i># misassemblies</i> and other <i>misassemblies</i> statistics.</span>", | 
|  | 4763 | 
|  | 4764     "# fully unaligned contigs"     : "<span>is the number of contigs that have no alignment to the reference sequence.</span>", | 
|  | 4765     "Fully unaligned length"        : "<span>is the total number of bases contained in all fully unaligned contigs. Uncalled bases (N's) are not counted.</span>", | 
|  | 4766     "# partially unaligned contigs" : "<span>is the number of contigs that have at least one alignment to the reference sequence but also have at least one unaligned fragment of length ≥ <i>unaligned-part-size threshold</i> (uncalled bases (N's) are not counted towards the fragment length).</span>", | 
|  | 4767     "Partially unaligned length"    : "<span>is the total number of unaligned bases in all partially unaligned contigs. Uncalled bases (N's) are not counted.</span>", | 
|  | 4768 | 
|  | 4769     "# ambiguous contigs"           : "<span>is the number of contigs that have reference alignments of equal quality in multiple locations on the reference.</span>", | 
|  | 4770     "Ambiguous contigs length"      : "<span>is the total number of bases contained in all ambiguous contigs.</span>", | 
|  | 4771 | 
|  | 4772     "Genome fraction (%)"           : "<span>is the total number of aligned bases in the reference, divided by the genome size. A base in the reference genome is counted as aligned if there is at least one contig with at least one alignment to this base. Contigs from repeat regions may map to multiple places, and thus may be counted multiple times in this quantity.</span>", | 
|  | 4773     "GC (%)"                        : "<span>is the total number of G and C nucleotides in the assembly, divided by the total length of the assembly.</span>", | 
|  | 4774     "Reference GC (%)"              : "<span>is the total number of G and C nucleotides in the reference, divided by the total length of the reference.</span>", | 
|  | 4775 | 
|  | 4776     "# mismatches per 100 kbp"      : "<span>is the average number of mismatches per 100,000 aligned bases in the assembly.</span>", | 
|  | 4777     "# mismatches"                  : "<span>is the number of mismatches in all aligned bases in the assembly.</span>", | 
|  | 4778     "# indels per 100 kbp"          : "<span>is the average number of indels per 100,000 aligned bases in the assembly.</span>", | 
|  | 4779     "# indels"                      : "<span>is the number of indels in all aligned bases in the assembly.</span>", | 
|  | 4780     "# indels (<= 5 bp)"            : "<span>is the number of indels of length less than or equal to 5 bp.</span>", | 
|  | 4781     "# indels (> 5 bp)"             : "<span>is the number of indels of length greater than 5 bp.</span>", | 
|  | 4782     "Indels length"                 : "<span>is the number of total bases contained in all indels.</span>", | 
|  | 4783 | 
|  | 4784     "# genomic features"            : "<span>is the number of genomic features (genes, transcripts, CDS) in the assembly (complete and partial), based on a user-provided annotated list of gene positions in the reference genome. A feature counts as 'partially covered' if the assembly contains at least 100 bp of this feature but not the whole feature.</span>", | 
|  | 4785     "# operons"                     : "<span>is the number of operons in the assembly (complete and partial), based on a user-provided annotated list of operon positions in the reference genome. An operon counts as 'partially covered' if the assembly contains at least 100 bp of this operon but not the whole operon.</span>", | 
|  | 4786     "# predicted genes (unique)"    : "<span>is the number of unique genes in the assembly found by a gene prediction tool.</span>", | 
|  | 4787     "# predicted genes (>= 0 bp)"   : "<span>is the number of found genes having length greater than or equal to 0 bp.</span>", | 
|  | 4788 | 
|  | 4789     "Complete BUSCO (%)"            : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a complete form.</span>", | 
|  | 4790     "Partial BUSCO (%)"             : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a partial form.</span>", | 
|  | 4791 | 
|  | 4792     "Cumulative length"             : "<span>plot shows the growth of assembly contig lengths. On the x-axis, contigs are ordered from largest (contig #1) to smallest. The y-axis gives the size of the x largest contigs in the assembly.</span>", | 
|  | 4793     "Nx"                            : "<span>plot shows the Nx metric value as x varies from 0 to 100.</span>  <span>Nx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the total assembly length.</span>", | 
|  | 4794     "NGx"                           : "<span>plot shows the NGx metric value as x varies from 0 to 100.</span> <span>NGx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>", | 
|  | 4795     "NAx"                           : "<span>plot shows the NAx metric value as x varies from 0 to 100.</span> <span>NAx is computed similarly to Nx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken into aligned blocks at misassembly breakpoints. NAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the assembly. This metric is computed only if a reference genome is provided.</span>", | 
|  | 4796     "NGAx"                          : "<span>plot shows the NGAx metric value as x varies from 0 to 100.</span><span>NGAx is computed similarly to NGx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken at misassembly breakpoints. NGAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>", | 
|  | 4797     "GC content"                    : "<span>plot shows the distribution of GC percentage among the contigs, i.e., the total number of bases in contigs with such GC content. Typically, the distribution is approximately Gaussian. However, for some genomes it is not Gaussian. For assembly projects with contaminants, the GC distribution of the contaminants often differs from the reference genome and may give a superposition of multiple curves with different peaks.</span>", | 
|  | 4798 | 
|  | 4799     "Duplication ratio"             : "<span>is the total number of aligned bases in the assembly, divided by the total number of aligned bases in the reference (see the <b>Genome fraction (%)</b> metric). If the assembly contains many contigs that cover the same regions of the reference, its <i>Duplication ratio</i> may be much larger than 1. This may occur due to overestimating repeat multiplicities and due to small overlaps between contigs, among other reasons.</span>", | 
|  | 4800     "Largest alignment"             : "<span>is the length of the largest continuous alignment in the assembly. This metric is always equal to the <i>Largest contig</i> metric but it can be smaller if the largest contig of the assembly contains a misassembly event.</span>", | 
|  | 4801     "Total aligned length"          : "<span>is the total number of aligned bases in the assembly.</span>", | 
|  | 4802     "Avg contig read support"       : "<span>is the average coverage of contigs that have large unique alignments to the reference. Read coverage is extracted from contig names (SPAdes/Velvet naming scheme only).</span>", | 
|  | 4803 | 
|  | 4804     "# N's"                         : "<span>is the total number of uncalled bases (N's) in the assembly.</span>", | 
|  | 4805     "# N's per 100 kbp"             : "<span>is the average number of uncalled bases (N's) per 100,000 assembly bases.</span>", | 
|  | 4806 | 
|  | 4807     "# mapped"                      : "<span>is the number of reads that mapped to the assembly.</span>", | 
|  | 4808     "Mapped (%)"                    : "<span>is the percent of reads that mapped to the assembly.</span>", | 
|  | 4809     "# properly paired"             : "<span>is the number of reads that mapped within expected range and orientation of each other to the assembly.</span>", | 
|  | 4810     "Properly paired (%)"           : "<span>is the percent of reads that mapped within expected range and orientation of each other to the assembly.</span>", | 
|  | 4811     "# singletons"                  : "<span>is the number of reads which do not overlap any other reads.</span>", | 
|  | 4812     "Singletons (%)"                : "<span>is the percent of reads which do not overlap any other reads.</span>", | 
|  | 4813     "# misjoint mates"              : "<span>is the number of reads with mate mapped to a different contig.</span>", | 
|  | 4814     "Misjoint mates (%)"            : "<span>is the percent of reads with mate mapped to a different contig.</span>", | 
|  | 4815     "Avg. coverage depth"           : "<span>is the average depth of coverage.</span>", | 
|  | 4816     "Coverage >= 1x (%)"            : "<span>is the total number of bases with at least 1x coverage, divided by the total length of the assembly.</span>", | 
|  | 4817 | 
|  | 4818     "# similar correct contigs"     : "<span>is the number of correct contigs similar among > 50% assemblies (see Icarus for visualization).</span>", | 
|  | 4819     "# similar misassembled blocks" : "<span>is the number of misassembled blocks similar among > 50% assemblies (see Icarus for visualization).</span>" | 
|  | 4820 } | 
|  | 4821 | 
|  | 4822         </div> | 
|  | 4823     </div> | 
|  | 4824 </div> | 
|  | 4825 </body> | 
|  | 4826 </html> |