Mercurial > repos > iuc > tooldistillator
comparison test-data/quast/quast_report.html @ 0:6e868bf6c38e draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/tooldistillator commit 491c6fc94851aab68cb7529dd6b6fbc6caa84bf2
author | iuc |
---|---|
date | Tue, 30 Apr 2024 08:42:33 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:6e868bf6c38e |
---|---|
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"]; | |
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":"12 April 2023, Wednesday, 09:50:51","assembliesNames":["TEST"],"referenceName":"","order":[0],"report":[["Genome statistics",[{"metricName":"Complete BUSCO (%)","quality":"More is better","values":["0.00"],"isMain":true},{"metricName":"Partial BUSCO (%)","quality":"Less is better","values":["0.00"],"isMain":true}]],["Reads mapping",[]],["Misassemblies",[]],["Unaligned",[]],["Mismatches",[{"metricName":"# N's per 100 kbp","quality":"Less is better","values":["0.00"],"isMain":true},{"metricName":"# N's","quality":"Less is better","values":[0],"isMain":false}]],["Statistics without reference",[{"metricName":"# contigs","quality":"Equal","values":[62],"isMain":true},{"metricName":"# contigs (>= 0 bp)","quality":"Equal","values":[100],"isMain":false},{"metricName":"# contigs (>= 1000 bp)","quality":"Equal","values":[58],"isMain":false},{"metricName":"# contigs (>= 5000 bp)","quality":"Equal","values":[48],"isMain":false},{"metricName":"# contigs (>= 10000 bp)","quality":"Equal","values":[41],"isMain":false},{"metricName":"# contigs (>= 25000 bp)","quality":"Equal","values":[28],"isMain":false},{"metricName":"# contigs (>= 50000 bp)","quality":"Equal","values":[20],"isMain":false},{"metricName":"Largest contig","quality":"More is better","values":[436224],"isMain":true},{"metricName":"Total length","quality":"More is better","values":[3017519],"isMain":true},{"metricName":"Total length (>= 0 bp)","quality":"More is better","values":[3027634],"isMain":false},{"metricName":"Total length (>= 1000 bp)","quality":"More is better","values":[3015201],"isMain":true},{"metricName":"Total length (>= 5000 bp)","quality":"More is better","values":[2996428],"isMain":false},{"metricName":"Total length (>= 10000 bp)","quality":"More is better","values":[2944723],"isMain":true},{"metricName":"Total length (>= 25000 bp)","quality":"More is better","values":[2735277],"isMain":false},{"metricName":"Total length (>= 50000 bp)","quality":"More is better","values":[2421445],"isMain":true},{"metricName":"N50","quality":"More is better","values":[99915],"isMain":false},{"metricName":"N90","quality":"More is better","values":[27780],"isMain":false},{"metricName":"auN","quality":"More is better","values":["154096.4"],"isMain":false},{"metricName":"L50","quality":"Less is better","values":[8],"isMain":false},{"metricName":"L90","quality":"Less is better","values":[28],"isMain":false},{"metricName":"GC (%)","quality":"Equal","values":["37.31"],"isMain":false}]],["K-mer-based statistics",[]],["Predicted genes",[]],["Similarity statistics",[]],["Reference statistics",[]]],"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":["TEST"],"lists_of_lengths":[[436224,252900,206370,168397,132811,115359,113419,99915,97190,92075,86662,82418,81741,81694,71911,66886,64537,62649,55461,52826,48115,47790,45935,44497,35306,35051,29358,27780,24296,23952,18776,17346,16026,15602,15587,15306,13750,13168,12357,12074,11206,9892,8939,7812,6929,6828,5969,5336,3276,2262,2083,1817,1775,1642,1578,1526,1515,1299,652,607,534,525]]} | |
4653 </div> | |
4654 <div id='assemblies-lengths-json'> | |
4655 {{ assembliesLengths }} | |
4656 </div> | |
4657 <div id='reference-length-json'> | |
4658 {{ referenceLength }} | |
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,14.45637956215023,14.45637956225023,22.8374369805128,22.837436980612797,29.676499137205102,29.6764991373051,35.25714336844275,35.25714336854275,39.65847439568732,39.65847439578732,43.48144949542986,43.48144949552986,47.24013336784292,47.240133367942924,50.55129727435022,50.55129727445022,53.772155204325145,53.77215520442515,56.82350301688241,56.823503016982414,59.6954650492673,59.6954650493673,62.426781736916986,62.42678173701699,65.13566277461716,65.13566277471716,67.84298624134595,67.84298624144596,70.22610296737155,70.22610296747155,72.44269215869063,72.44269215879063,74.58143594124843,74.58143594134843,76.65761176648763,76.65761176658764,78.49557865252878,78.49557865262878,80.24622214474871,80.24622214484872,81.84074400194332,81.84074400204332,83.42449542156984,83.42449542166985,84.94677249753855,84.94677249763855,86.42139452974448,86.42139452984448,87.59142858752504,87.59142858762505,88.75301199429067,88.75301199439068,89.72593047467142,89.72593047477142,90.64655433818312,90.64655433828312,91.451719110965,91.451719111065,92.24548378982867,92.24548378992867,92.86771682299266,92.86771682309266,93.4425599308571,93.4425599309571,93.97365849229118,93.97365849239118,94.4907057751749,94.4907057752749,95.0072559609401,95.0072559610401,95.5144938606849,95.5144938607849,95.97016621933449,95.97016621943449,96.40655120978526,96.40655120988527,96.81605981602767,96.81605981612768,97.21618985663387,97.21618985673388,97.58755454398133,97.58755454408133,97.91537352374583,97.91537352384583,98.21161026657992,98.21161026667993,98.4704984459087,98.4704984460087,98.7001241748602,98.70012417496021,98.92640278321363,98.92640278331363,99.12421429657941,99.12421429667941,99.30104831154335,99.30104831164336,99.40961432222961,99.40961432232962,99.48457656770347,99.48457656780347,99.5536067875629,99.5536067876629,99.61382181852045,99.61382181862045,99.67264497754613,99.67264497764613,99.72706054212087,99.72706054222087,99.77935515898989,99.77935515908989,99.82992650584802,99.82992650594802,99.88013331481923,99.88013331491923,99.92318192528366,99.92318192538366,99.94478908003562,99.94478908013562,99.964904943432,99.964904943532,99.98260160085157,99.98260160095157,100.0,100.0000000001]],"coord_y":[[436224,436224,436224,252900,252900,206370,206370,168397,168397,132811,132811,115359,115359,113419,113419,99915,99915,97190,97190,92075,92075,86662,86662,82418,82418,81741,81741,81694,81694,71911,71911,66886,66886,64537,64537,62649,62649,55461,55461,52826,52826,48115,48115,47790,47790,45935,45935,44497,44497,35306,35306,35051,35051,29358,29358,27780,27780,24296,24296,23952,23952,18776,18776,17346,17346,16026,16026,15602,15602,15587,15587,15306,15306,13750,13750,13168,13168,12357,12357,12074,12074,11206,11206,9892,9892,8939,8939,7812,7812,6929,6929,6828,6828,5969,5969,5336,5336,3276,3276,2262,2262,2083,2083,1817,1817,1775,1775,1642,1642,1578,1578,1526,1526,1515,1515,1299,1299,652,652,607,607,534,534,525,525,0.0]],"filenames":["TEST"]} | |
4665 </div> | |
4666 <div id='coord-ngx-json'> | |
4667 {{ coordNGx }} | |
4668 </div> | |
4669 <div id='coord-nax-json'> | |
4670 {{ coordNAx }} | |
4671 </div> | |
4672 <div id='coord-ngax-json'> | |
4673 {{ coordNGAx }} | |
4674 </div> | |
4675 <div id='coord-misassemblies-json'> | |
4676 {{ coordmisassemblies }} | |
4677 </div> | |
4678 <div id='features-in-contigs-json'> | |
4679 {{ featuresInContigs }} | |
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":["TEST"],"reference_index":null,"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,1,0,0,1,2,1,1,8,9,12,23,35,61,95,116,157,220,277,347,457,580,713,942,1109,1276,1469,1593,1822,1890,1935,1942,1965,1885,1759,1570,1320,1103,862,701,537,433,295,196,142,95,82,45,30,22,15,10,6,5,1,2,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,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,1,12,44,2,1,2,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/contig_size_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> |