From 36102a094de700ee339f6eaeffb8ab16ba4f2f3b Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sat, 15 Mar 2014 14:42:50 -0300 Subject: Squashed 'mod/graphstats/' content from commit b5d0461 git-subtree-dir: mod/graphstats git-subtree-split: b5d046138c5841d55b4497618d5678cb8027c245 --- languages/ca.php | 17 + languages/en.php | 17 + languages/es.php | 17 + languages/pt.php | 14 + lib/timestats.php | 83 + manifest.xml | 17 + pages/graphstats/group.php | 42 + pages/graphstats/timestats.php | 37 + start.php | 72 + vendors/raphaeljs/analytics.js | 141 ++ vendors/raphaeljs/demo-print.css | 20 + vendors/raphaeljs/demo.css | 23 + vendors/raphaeljs/popup.js | 121 + vendors/raphaeljs/raphael.js | 8 + vendors/simile-timeline/CHANGES.txt | 72 + vendors/simile-timeline/LICENSE.txt | 29 + vendors/simile-timeline/README.txt | 88 + .../timeline_ajax/images/bubble-bottom-arrow.png | Bin 0 -> 1087 bytes .../timeline_ajax/images/bubble-bottom-left.png | Bin 0 -> 754 bytes .../timeline_ajax/images/bubble-bottom-right.png | Bin 0 -> 803 bytes .../timeline_ajax/images/bubble-bottom.png | Bin 0 -> 1141 bytes .../timeline_ajax/images/bubble-left-arrow.png | Bin 0 -> 880 bytes .../timeline_ajax/images/bubble-left.png | Bin 0 -> 5670 bytes .../timeline_ajax/images/bubble-right-arrow.png | Bin 0 -> 941 bytes .../timeline_ajax/images/bubble-right.png | Bin 0 -> 5686 bytes .../timeline_ajax/images/bubble-top-arrow.png | Bin 0 -> 793 bytes .../timeline_ajax/images/bubble-top-left.png | Bin 0 -> 560 bytes .../timeline_ajax/images/bubble-top-right.png | Bin 0 -> 676 bytes .../timeline_ajax/images/bubble-top.png | Bin 0 -> 905 bytes .../timeline_ajax/images/close-button.png | Bin 0 -> 624 bytes .../simile-timeline/timeline_ajax/images/copy.png | Bin 0 -> 196 bytes .../timeline_ajax/images/message-bottom-left.png | Bin 0 -> 1339 bytes .../timeline_ajax/images/message-bottom-right.png | Bin 0 -> 2074 bytes .../timeline_ajax/images/message-left.png | Bin 0 -> 717 bytes .../timeline_ajax/images/message-right.png | Bin 0 -> 1892 bytes .../timeline_ajax/images/message-top-left.png | Bin 0 -> 918 bytes .../timeline_ajax/images/message-top-right.png | Bin 0 -> 1604 bytes .../timeline_ajax/scripts/signal.js | 44 + .../timeline_ajax/simile-ajax-api.js | 211 ++ .../timeline_ajax/simile-ajax-bundle.js | 2628 ++++++++++++++++++++ .../timeline_js/images/blue-circle.png | Bin 0 -> 534 bytes .../timeline_js/images/bubble-bottom-arrow.png | Bin 0 -> 1087 bytes .../timeline_js/images/bubble-bottom-left.png | Bin 0 -> 754 bytes .../timeline_js/images/bubble-bottom-right.png | Bin 0 -> 803 bytes .../timeline_js/images/bubble-bottom.png | Bin 0 -> 1141 bytes .../timeline_js/images/bubble-left-arrow.png | Bin 0 -> 880 bytes .../timeline_js/images/bubble-left.png | Bin 0 -> 5670 bytes .../timeline_js/images/bubble-right-arrow.png | Bin 0 -> 941 bytes .../timeline_js/images/bubble-right.png | Bin 0 -> 5686 bytes .../timeline_js/images/bubble-top-arrow.png | Bin 0 -> 793 bytes .../timeline_js/images/bubble-top-left.png | Bin 0 -> 560 bytes .../timeline_js/images/bubble-top-right.png | Bin 0 -> 676 bytes .../timeline_js/images/bubble-top.png | Bin 0 -> 905 bytes .../timeline_js/images/close-button.png | Bin 0 -> 624 bytes .../timeline_js/images/copyright-vertical.png | Bin 0 -> 1695 bytes .../timeline_js/images/copyright.png | Bin 0 -> 1400 bytes .../timeline_js/images/dark-blue-circle.png | Bin 0 -> 551 bytes .../timeline_js/images/dark-green-circle.png | Bin 0 -> 513 bytes .../timeline_js/images/dark-red-circle.png | Bin 0 -> 497 bytes .../timeline_js/images/dull-blue-circle.png | Bin 0 -> 539 bytes .../timeline_js/images/dull-green-circle.png | Bin 0 -> 539 bytes .../timeline_js/images/dull-red-circle.png | Bin 0 -> 532 bytes .../timeline_js/images/gray-circle.png | Bin 0 -> 513 bytes .../timeline_js/images/green-circle.png | Bin 0 -> 544 bytes .../timeline_js/images/message-bottom-left.png | Bin 0 -> 1339 bytes .../timeline_js/images/message-bottom-right.png | Bin 0 -> 2074 bytes .../timeline_js/images/message-left.png | Bin 0 -> 717 bytes .../timeline_js/images/message-right.png | Bin 0 -> 1892 bytes .../timeline_js/images/message-top-left.png | Bin 0 -> 918 bytes .../timeline_js/images/message-top-right.png | Bin 0 -> 1604 bytes .../timeline_js/images/progress-running.gif | Bin 0 -> 1002 bytes .../timeline_js/images/red-circle.png | Bin 0 -> 538 bytes .../timeline_js/images/top-bubble.png | Bin 0 -> 6092 bytes .../timeline_js/scripts/l10n/cs/labellers.js | 30 + .../timeline_js/scripts/l10n/cs/timeline.js | 9 + .../timeline_js/scripts/l10n/de/labellers.js | 27 + .../timeline_js/scripts/l10n/de/timeline.js | 8 + .../timeline_js/scripts/l10n/en/labellers.js | 8 + .../timeline_js/scripts/l10n/en/timeline.js | 9 + .../timeline_js/scripts/l10n/es/labellers.js | 8 + .../timeline_js/scripts/l10n/es/timeline.js | 9 + .../timeline_js/scripts/l10n/fr/labellers.js | 8 + .../timeline_js/scripts/l10n/fr/timeline.js | 9 + .../timeline_js/scripts/l10n/it/labellers.js | 8 + .../timeline_js/scripts/l10n/it/timeline.js | 9 + .../timeline_js/scripts/l10n/nl/labellers.js | 11 + .../timeline_js/scripts/l10n/nl/timeline.js | 9 + .../timeline_js/scripts/l10n/ru/labellers.js | 10 + .../timeline_js/scripts/l10n/ru/timeline.js | 9 + .../timeline_js/scripts/l10n/se/labellers.js | 12 + .../timeline_js/scripts/l10n/se/timeline.js | 9 + .../timeline_js/scripts/l10n/tr/labellers.js | 8 + .../timeline_js/scripts/l10n/tr/timeline.js | 9 + .../timeline_js/scripts/l10n/vi/labellers.js | 26 + .../timeline_js/scripts/l10n/vi/timeline.js | 9 + .../timeline_js/scripts/l10n/zh/labellers.js | 27 + .../timeline_js/scripts/l10n/zh/timeline.js | 9 + .../simile-timeline/timeline_js/timeline-api.js | 277 +++ .../timeline_js/timeline-bundle.css | 232 ++ .../simile-timeline/timeline_js/timeline-bundle.js | 2142 ++++++++++++++++ views/default/graphs/data/timestats.php | 33 + views/default/graphs/timeline.php | 44 + views/default/graphs/timestats.php | 8 + views/default/graphstats/timestats_filter_menu.php | 31 + views/default/groups/profile/activity_module.php | 49 + views/default/js/raphael/analytics.php | 5 + views/default/js/raphael/raphael.php | 3 + views/default/js/timeline.php | 8 + views/json/timeline/group.php | 35 + 109 files changed, 6858 insertions(+) create mode 100644 languages/ca.php create mode 100644 languages/en.php create mode 100644 languages/es.php create mode 100644 languages/pt.php create mode 100644 lib/timestats.php create mode 100644 manifest.xml create mode 100644 pages/graphstats/group.php create mode 100644 pages/graphstats/timestats.php create mode 100644 start.php create mode 100644 vendors/raphaeljs/analytics.js create mode 100644 vendors/raphaeljs/demo-print.css create mode 100644 vendors/raphaeljs/demo.css create mode 100644 vendors/raphaeljs/popup.js create mode 100644 vendors/raphaeljs/raphael.js create mode 100644 vendors/simile-timeline/CHANGES.txt create mode 100644 vendors/simile-timeline/LICENSE.txt create mode 100644 vendors/simile-timeline/README.txt create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-bottom-arrow.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-bottom-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-bottom-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-bottom.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-left-arrow.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-right-arrow.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-top-arrow.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-top-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-top-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/bubble-top.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/close-button.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/copy.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-bottom-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-bottom-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-top-left.png create mode 100644 vendors/simile-timeline/timeline_ajax/images/message-top-right.png create mode 100644 vendors/simile-timeline/timeline_ajax/scripts/signal.js create mode 100644 vendors/simile-timeline/timeline_ajax/simile-ajax-api.js create mode 100644 vendors/simile-timeline/timeline_ajax/simile-ajax-bundle.js create mode 100644 vendors/simile-timeline/timeline_js/images/blue-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-bottom-arrow.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-bottom-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-bottom-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-bottom.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-left-arrow.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-right-arrow.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-top-arrow.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-top-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-top-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/bubble-top.png create mode 100644 vendors/simile-timeline/timeline_js/images/close-button.png create mode 100644 vendors/simile-timeline/timeline_js/images/copyright-vertical.png create mode 100644 vendors/simile-timeline/timeline_js/images/copyright.png create mode 100644 vendors/simile-timeline/timeline_js/images/dark-blue-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/dark-green-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/dark-red-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/dull-blue-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/dull-green-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/dull-red-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/gray-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/green-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-bottom-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-bottom-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-top-left.png create mode 100644 vendors/simile-timeline/timeline_js/images/message-top-right.png create mode 100644 vendors/simile-timeline/timeline_js/images/progress-running.gif create mode 100644 vendors/simile-timeline/timeline_js/images/red-circle.png create mode 100644 vendors/simile-timeline/timeline_js/images/top-bubble.png create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/cs/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/cs/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/de/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/de/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/en/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/en/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/es/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/es/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/fr/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/fr/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/it/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/it/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/nl/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/nl/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/ru/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/ru/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/se/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/se/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/tr/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/tr/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/vi/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/vi/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/zh/labellers.js create mode 100644 vendors/simile-timeline/timeline_js/scripts/l10n/zh/timeline.js create mode 100644 vendors/simile-timeline/timeline_js/timeline-api.js create mode 100644 vendors/simile-timeline/timeline_js/timeline-bundle.css create mode 100644 vendors/simile-timeline/timeline_js/timeline-bundle.js create mode 100644 views/default/graphs/data/timestats.php create mode 100644 views/default/graphs/timeline.php create mode 100644 views/default/graphs/timestats.php create mode 100644 views/default/graphstats/timestats_filter_menu.php create mode 100644 views/default/groups/profile/activity_module.php create mode 100644 views/default/js/raphael/analytics.php create mode 100644 views/default/js/raphael/raphael.php create mode 100644 views/default/js/timeline.php create mode 100644 views/json/timeline/group.php diff --git a/languages/ca.php b/languages/ca.php new file mode 100644 index 000000000..fc4dbd719 --- /dev/null +++ b/languages/ca.php @@ -0,0 +1,17 @@ + 'Implicació', + 'graphstats:graphs' => 'Gràfics', + 'graphstats:timestats' => 'Estadístiques a través del temps', + 'graphstats:groupgraph' => 'Xarxa de grups', + 'timeline' => 'Línea temporal', +); + +add_translation("ca", $catalan); +?> diff --git a/languages/en.php b/languages/en.php new file mode 100644 index 000000000..fc3ed075e --- /dev/null +++ b/languages/en.php @@ -0,0 +1,17 @@ + 'Implication', + 'graphstats:graphs' => 'Graphs', + 'graphstats:timestats' => 'Stats over time', + 'graphstats:groupgraph' => 'Group network', + 'timeline' => 'Timeline', +); + +add_translation("en", $english); +?> diff --git a/languages/es.php b/languages/es.php new file mode 100644 index 000000000..eba4a683e --- /dev/null +++ b/languages/es.php @@ -0,0 +1,17 @@ + 'Implicación', + 'graphstats:graphs' => 'Gráficos', + 'graphstats:timestats' => 'Estadísticas a través del tiempo', + 'graphstats:groupgraph' => 'Red de grupos', + 'timeline' => 'Línea temporal', +); + +add_translation("es", $spanish); +?> diff --git a/languages/pt.php b/languages/pt.php new file mode 100644 index 000000000..891430139 --- /dev/null +++ b/languages/pt.php @@ -0,0 +1,14 @@ + "Gráficos" , +); + +add_translation('pt', $portuguese); + +?> diff --git a/lib/timestats.php b/lib/timestats.php new file mode 100644 index 000000000..739cc79c5 --- /dev/null +++ b/lib/timestats.php @@ -0,0 +1,83 @@ + $type,'subtypes'=>$subtype,'limit' => 1,'order_by'=>'e.time_created asc')); + $firstentity = $entities[0]; + $initial_time = $firstentity->time_created; + $initial_date = getdate($initial_time); + $start_month = mktime(0, 0, 0, $initial_date["mon"], 1, $initial_date["year"]); + $current_date = $start_month; + + // End date + $last_time = time(); + $last_date = getdate($last_time); + + // Interval (week) + $interval = 7*24*60*60; + + + $total = elgg_get_entities(array('types' => $type,'subtypes'=>$subtype,'limit' => 99999, 'count'=>true)); + + $timestats = array(); + while($current_date<$last_time) { + $count = elgg_get_entities(array( + 'types' => $type, + 'subtypes' => $subtype, + 'limit' => 99999, + 'count' => true, + 'created_time_lower' => $current_date, + 'created_time_upper'=>$current_date+$interval + )); + if (empty($count)) + $count = 0; + $accumulated += $count; + $timestats[$current_date] = $relative? $count : $accumulated; + $current_date += $interval; + } + + return $timestats; +} + +function timestats_setup_sidebar_menu(){ + $tabs = array( + 'user' => array( + 'text' => elgg_echo('item:user'), + 'href' => 'graphs/timestats?type=user', + 'priority' => 200, + ), + 'group' => array( + 'text' => elgg_echo('groups'), + 'href' => 'graphs/timestats?type=group', + 'priority' => 300, + ), + ); + + $db_prefix = elgg_get_config('dbprefix'); + $result = get_data("SELECT * from {$db_prefix}entity_subtypes"); + + foreach($result as $row){ + $type = $row->type; + $subtype = $row->subtype; + $tabs[$type.':'.$subtype] = array( + 'text' => elgg_echo("item:$type:$subtype"), + 'href' => "graphs/timestats?type=$type&subtype=$subtype", + 'priority' => 400, + ); + } + + unset($tabs['object:plugin']); + unset($tabs['object:widget']); + + // sets default selected item + if (strpos(full_url(), 'type') === false) { + $tabs['user']['selected'] = true; + } + + foreach ($tabs as $name => $tab) { + $tab['name'] = $name; + + elgg_register_menu_item('page', $tab); + } +} diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 000000000..6eca1568b --- /dev/null +++ b/manifest.xml @@ -0,0 +1,17 @@ + + + Graph Stats + Lorea + 2.0 + bundled + admin + Makes some graphs out of the site + https:/lorea.org/ + GNU Public License version 2 + + elgg_version + 2009030702 + + true + advanced + diff --git a/pages/graphstats/group.php b/pages/graphstats/group.php new file mode 100644 index 000000000..5bb2f2567 --- /dev/null +++ b/pages/graphstats/group.php @@ -0,0 +1,42 @@ +guid) { + forward(); +} + +$title = elgg_echo('graphstats:group'); + +elgg_push_breadcrumb(elgg_echo('graphstats'), "graphs/timestats"); +elgg_push_breadcrumb($group->name, $group->getURL()); +elgg_push_breadcrumb($title); + +elgg_set_page_owner_guid($group_guid); + +if($view != 'json'){ + + $json_url = elgg_get_site_url() . "graphs/group/$group_guid/?view=json"; + + $content = elgg_view('graphs/timeline', array('json_url' => $json_url)); + + $body = elgg_view_layout('content', array( + 'content' => $content, + 'title' => $title, + 'filter' => '', + )); + + echo elgg_view_page($title, $body); + +} else { + + echo elgg_view('timeline/group', array('group_guid' => $group_guid)); + +} diff --git a/pages/graphstats/timestats.php b/pages/graphstats/timestats.php new file mode 100644 index 000000000..6516e145d --- /dev/null +++ b/pages/graphstats/timestats.php @@ -0,0 +1,37 @@ + $type, + 'subtype' => $subtype, + 'relative' => ($filter == 'relative'), +)); + +$content = elgg_view('graphs/timestats', array('table' => $table)); + +$filter = elgg_view('graphstats/timestats_filter_menu', array('selected' => $relative)); + +timestats_setup_sidebar_menu(); + +$body = elgg_view_layout('content', array( + 'content' => $content, + 'title' => $title, + 'filter' => $filter, +)); + +echo elgg_view_page($title, $body); diff --git a/start.php b/start.php new file mode 100644 index 000000000..cf5f2b4f5 --- /dev/null +++ b/start.php @@ -0,0 +1,72 @@ +&subtype=][&relative=true] + * Group network: graphs/groupnetwork/ + * Implication: graphs/implication/ + * Group timeline: graphs/group// + * + * @param array $page + * @return NULL + */ +function graphstats_pagehandler($page){ + $graphstats_dir = elgg_get_plugins_path() . 'graphstats/pages/graphstats'; + + $page_type = $page[0]; + switch ($page_type) { + case 'timestats': + include "$graphstats_dir/timestats.php"; + break; + case 'groupnetwork': + break; + case 'implication': + break; + case 'group': + set_input('group_guid', $page[1]); + include "$graphstats_dir/group.php"; + break; + } +} + +function graphstats_setup_title_button($hook, $type, $params, $return){ + $page_type = $params['segments'][0]; + $group_guid = $params['segments'][1]; + + if($page_type == 'activity'){ + add_translation(get_current_language(), array('graphs:group' => elgg_echo('timeline'))); + elgg_set_page_owner_guid((int) $group_guid); + elgg_register_title_button('graphs', 'group'); + } +} diff --git a/vendors/raphaeljs/analytics.js b/vendors/raphaeljs/analytics.js new file mode 100644 index 000000000..723fb2a12 --- /dev/null +++ b/vendors/raphaeljs/analytics.js @@ -0,0 +1,141 @@ +Raphael.fn.drawGrid = function (x, y, w, h, wv, hv, color) { + color = color || "#000"; + var path = ["M", Math.round(x) + .5, Math.round(y) + .5, "L", Math.round(x + w) + .5, Math.round(y) + .5, Math.round(x + w) + .5, Math.round(y + h) + .5, Math.round(x) + .5, Math.round(y + h) + .5, Math.round(x) + .5, Math.round(y) + .5], + rowHeight = h / hv, + columnWidth = w / wv; + for (var i = 1; i < hv; i++) { + path = path.concat(["M", Math.round(x) + .5, Math.round(y + i * rowHeight) + .5, "H", Math.round(x + w) + .5]); + } + for (i = 1; i < wv; i++) { + path = path.concat(["M", Math.round(x + i * columnWidth) + .5, Math.round(y) + .5, "V", Math.round(y + h) + .5]); + } + return this.path(path.join(",")).attr({stroke: color}); +}; + +$(function () { + $("#data").css({ + position: "absolute", + left: "-9999em", + top: "-9999em" + }); +}); + +window.onload = function () { + function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) { + var l1 = (p2x - p1x) / 2, + l2 = (p3x - p2x) / 2, + a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)), + b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y)); + a = p1y < p2y ? Math.PI - a : a; + b = p3y < p2y ? Math.PI - b : b; + var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2, + dx1 = l1 * Math.sin(alpha + a), + dy1 = l1 * Math.cos(alpha + a), + dx2 = l2 * Math.sin(alpha + b), + dy2 = l2 * Math.cos(alpha + b); + return { + x1: p2x - dx1, + y1: p2y + dy1, + x2: p2x + dx2, + y2: p2y + dy2 + }; + } + // Grab the data + var labels = [], + data = []; + $("#data tfoot th").each(function () { + labels.push($(this).html()); + }); + $("#data tbody td").each(function () { + data.push($(this).html()); + }); + + // Draw + var width = 800, + height = 250, + leftgutter = 30, + bottomgutter = 20, + topgutter = 20, + colorhue = .6 || Math.random(), + color = "hsl(" + [colorhue, .5, .5] + ")", + r = Raphael("holder", width, height), + txt = {font: '12px Helvetica, Arial', fill: "#fff"}, + txt1 = {font: '10px Helvetica, Arial', fill: "#fff"}, + txt2 = {font: '12px Helvetica, Arial', fill: "#000"}, + X = (width - leftgutter) / labels.length, + max = Math.max.apply(Math, data), + Y = (height - bottomgutter - topgutter) / max; + r.drawGrid(leftgutter + X * .5 + .5, topgutter + .5, width - leftgutter - X, height - topgutter - bottomgutter, 10, 10, "#000"); + var path = r.path().attr({stroke: color, "stroke-width": 4, "stroke-linejoin": "round"}), + bgp = r.path().attr({stroke: "none", opacity: .3, fill: color}), + label = r.set(), + lx = 0, ly = 0, + is_label_visible = false, + leave_timer, + blanket = r.set(); + label.push(r.text(60, 12, "24 hits").attr(txt)); + label.push(r.text(60, 27, "22 September 2008").attr(txt1).attr({fill: color})); + label.hide(); + var frame = r.popup(100, 100, label, "right").attr({fill: "#000", stroke: "#666", "stroke-width": 2, "fill-opacity": .7}).hide(); + + var p, bgpp; + for (var i = 0, ii = labels.length; i < ii; i++) { + var y = Math.round(height - bottomgutter - Y * data[i]), + x = Math.round(leftgutter + X * (i + .5)), + t = r.text(x, height - 6, labels[i]).attr(txt).toBack(); + if (!i) { + p = ["M", x, y, "C", x, y]; + bgpp = ["M", leftgutter + X * .5, height - bottomgutter, "L", x, y, "C", x, y]; + } + if (i && i < ii - 1) { + var Y0 = Math.round(height - bottomgutter - Y * data[i - 1]), + X0 = Math.round(leftgutter + X * (i - .5)), + Y2 = Math.round(height - bottomgutter - Y * data[i + 1]), + X2 = Math.round(leftgutter + X * (i + 1.5)); + var a = getAnchors(X0, Y0, x, y, X2, Y2); + p = p.concat([a.x1, a.y1, x, y, a.x2, a.y2]); + bgpp = bgpp.concat([a.x1, a.y1, x, y, a.x2, a.y2]); + } + var dot = r.circle(x, y, 4).attr({fill: "#333", stroke: color, "stroke-width": 2}); + blanket.push(r.rect(leftgutter + X * i, 0, X, height - bottomgutter).attr({stroke: "none", fill: "#fff", opacity: 0})); + var rect = blanket[blanket.length - 1]; + (function (x, y, data, lbl, dot) { + var timer, i = 0; + rect.hover(function () { + clearTimeout(leave_timer); + var side = "right"; + if (x + frame.getBBox().width > width) { + side = "left"; + } + var ppp = r.popup(x, y, label, side, 1), + anim = Raphael.animation({ + path: ppp.path, + transform: ["t", ppp.dx, ppp.dy] + }, 200 * is_label_visible); + lx = label[0].transform()[0][1] + ppp.dx; + ly = label[0].transform()[0][2] + ppp.dy; + frame.show().stop().animate(anim); + label[0].attr({text: data + " hit" + (data == 1 ? "" : "s")}).show().stop().animateWith(frame, anim, {transform: ["t", lx, ly]}, 200 * is_label_visible); + label[1].attr({text: lbl}).show().stop().animateWith(frame, anim, {transform: ["t", lx, ly]}, 200 * is_label_visible); + dot.attr("r", 6); + is_label_visible = true; + }, function () { + dot.attr("r", 4); + leave_timer = setTimeout(function () { + frame.hide(); + label[0].hide(); + label[1].hide(); + is_label_visible = false; + }, 1); + }); + })(x, y, data[i], labels[i], dot); + } + p = p.concat([x, y, x, y]); + bgpp = bgpp.concat([x, y, x, y, "L", x, height - bottomgutter, "z"]); + path.attr({path: p}); + bgp.attr({path: bgpp}); + frame.toFront(); + label[0].toFront(); + label[1].toFront(); + blanket.toFront(); +}; diff --git a/vendors/raphaeljs/demo-print.css b/vendors/raphaeljs/demo-print.css new file mode 100644 index 000000000..04c724be8 --- /dev/null +++ b/vendors/raphaeljs/demo-print.css @@ -0,0 +1,20 @@ +body { + background: #fff; + color: #000; + font: 100.1% "Lucida Grande", Lucida, Verdana, sans-serif; +} +#holder { + height: 480px; + left: 50%; + margin: 0 0 0 -320px; + position: absolute; + top: 0; + width: 640px; +} +#copy { + bottom: 0; + font-size: .7em; + position: absolute; + right: 1em; + text-align: right; +} diff --git a/vendors/raphaeljs/demo.css b/vendors/raphaeljs/demo.css new file mode 100644 index 000000000..a7940af37 --- /dev/null +++ b/vendors/raphaeljs/demo.css @@ -0,0 +1,23 @@ +body { + background: #333; + color: #fff; + font: 300 100.1% "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; +} +#holder { + height: 480px; + left: 50%; + margin: -240px 0 0 -320px; + position: absolute; + top: 50%; + width: 640px; +} +#copy { + bottom: 0; + font: 300 .7em "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; + position: absolute; + right: 1em; + text-align: right; +} +#copy a { + color: #fff; +} diff --git a/vendors/raphaeljs/popup.js b/vendors/raphaeljs/popup.js new file mode 100644 index 000000000..5fd722aa3 --- /dev/null +++ b/vendors/raphaeljs/popup.js @@ -0,0 +1,121 @@ +(function () { +var tokenRegex = /\{([^\}]+)\}/g, + objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, // matches .xxxxx or ["xxxxx"] to run over object properties + replacer = function (all, key, obj) { + var res = obj; + key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) { + name = name || quotedName; + if (res) { + if (name in res) { + res = res[name]; + } + typeof res == "function" && isFunc && (res = res()); + } + }); + res = (res == null || res == obj ? all : res) + ""; + return res; + }, + fill = function (str, obj) { + return String(str).replace(tokenRegex, function (all, key) { + return replacer(all, key, obj); + }); + }; + Raphael.fn.popup = function (X, Y, set, pos, ret) { + pos = String(pos || "top-middle").split("-"); + pos[1] = pos[1] || "middle"; + var r = 5, + bb = set.getBBox(), + w = Math.round(bb.width), + h = Math.round(bb.height), + x = Math.round(bb.x) - r, + y = Math.round(bb.y) - r, + gap = Math.min(h / 2, w / 2, 10), + shapes = { + top: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}l-{right},0-{gap},{gap}-{gap}-{gap}-{left},0a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z", + bottom: "M{x},{y}l{left},0,{gap}-{gap},{gap},{gap},{right},0a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z", + right: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}l0-{bottom}-{gap}-{gap},{gap}-{gap},0-{top}a{r},{r},0,0,1,{r}-{r}z", + left: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}l0,{top},{gap},{gap}-{gap},{gap},0,{bottom}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z" + }, + offset = { + hx0: X - (x + r + w - gap * 2), + hx1: X - (x + r + w / 2 - gap), + hx2: X - (x + r + gap), + vhy: Y - (y + r + h + r + gap), + "^hy": Y - (y - gap) + + }, + mask = [{ + x: x + r, + y: y, + w: w, + w4: w / 4, + h4: h / 4, + right: 0, + left: w - gap * 2, + bottom: 0, + top: h - gap * 2, + r: r, + h: h, + gap: gap + }, { + x: x + r, + y: y, + w: w, + w4: w / 4, + h4: h / 4, + left: w / 2 - gap, + right: w / 2 - gap, + top: h / 2 - gap, + bottom: h / 2 - gap, + r: r, + h: h, + gap: gap + }, { + x: x + r, + y: y, + w: w, + w4: w / 4, + h4: h / 4, + left: 0, + right: w - gap * 2, + top: 0, + bottom: h - gap * 2, + r: r, + h: h, + gap: gap + }][pos[1] == "middle" ? 1 : (pos[1] == "top" || pos[1] == "left") * 2]; + var dx = 0, + dy = 0, + out = this.path(fill(shapes[pos[0]], mask)).insertBefore(set); + switch (pos[0]) { + case "top": + dx = X - (x + r + mask.left + gap); + dy = Y - (y + r + h + r + gap); + break; + case "bottom": + dx = X - (x + r + mask.left + gap); + dy = Y - (y - gap); + break; + case "left": + dx = X - (x + r + w + r + gap); + dy = Y - (y + r + mask.top + gap); + break; + case "right": + dx = X - (x - gap); + dy = Y - (y + r + mask.top + gap); + break; + } + out.translate(dx, dy); + if (ret) { + ret = out.attr("path"); + out.remove(); + return { + path: ret, + dx: dx, + dy: dy + }; + } + set.translate(dx, dy); + return out; + }; +})(); \ No newline at end of file diff --git a/vendors/raphaeljs/raphael.js b/vendors/raphaeljs/raphael.js new file mode 100644 index 000000000..e69ea16a8 --- /dev/null +++ b/vendors/raphaeljs/raphael.js @@ -0,0 +1,8 @@ +// ┌─────────────────────────────────────────────────────────────────────┐ \\ +// │ Raphaël 2.0 - JavaScript Vector Library │ \\ +// ├─────────────────────────────────────────────────────────────────────┤ \\ +// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ +// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com) │ \\ +// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\ +// └─────────────────────────────────────────────────────────────────────┘ \\ +(function(a){var b="0.3.2",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=[];h=a,i=0;for(var s=0,t=f.length;sf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(attr in j)if(j[g](attr))if(U[g](attr)||d.paper.customAttributes[g](attr)){u[attr]=d.attr(attr),u[attr]==null&&(u[attr]=T[attr]),v[attr]=j[attr];switch(U[attr]){case C:w[attr]=(v[attr]-u[attr])/t;break;case"colour":u[attr]=a.getRGB(u[attr]);var A=a.getRGB(v[attr]);w[attr]={r:(A.r-u[attr].r)/t,g:(A.g-u[attr].g)/t,b:(A.b-u[attr].b)/t};break;case"path":var B=bG(u[attr],v[attr]),D=B[1];u[attr]=B[0],w[attr]=[];for(y=0,z=u[attr].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cd(){return this.x+q+this.y+q+this.width+" × "+this.height}function cc(){return this.x+q+this.y}function bR(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bw(a){var b=[];for(var c=0,d=a.length;d-2>c;c+=2){var e=[{x:+a[c],y:+a[c+1]},{x:+a[c],y:+a[c+1]},{x:+a[c+2],y:+a[c+3]},{x:+a[c+4],y:+a[c+5]}];d-4==c?(e[0]={x:+a[c-2],y:+a[c-1]},e[3]=e[2]):c&&(e[0]={x:+a[c-2],y:+a[c-1]}),b.push(["C",(-e[0].x+6*e[1].x+e[2].x)/6,(-e[0].y+6*e[1].y+e[2].y)/6,(e[1].x+6*e[2].x-e[3].x)/6,(e[1].y+6*e[2].y-e[3].y)/6,e[2].x,e[2].y])}return b}function bv(){return this.hex}function bt(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bs(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bs(a,b){for(var c=0,d=a.length;c',bk=bj.firstChild,bk.style.behavior="url(#default#VML)";if(!bk||typeof bk.adj!="object")return a.type=p;bj=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bl=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,initWin&&initWin(h.win)};var bm=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bm=bt(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bm=bt(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bm(b)},bn=function(){return"hsb("+[this.h,this.s,this.b]+")"},bo=function(){return"hsl("+[this.h,this.s,this.l]+")"},bp=function(){return this.hex},bq=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},br=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:bp};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},crl.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=bp;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bn}},a.rgb2hsl=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bo}},a._path2string=function(){return this.join(",").replace(X,"$1")};var bu=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bt(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bv};!W[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bm(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bv},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv}},a),a.hsb=bt(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bt(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bt(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=bt(function(b){if(!b)return null;var c={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=by(b)),d.length||r(b).replace(Y,function(a,b,e){var f=[],g=b.toLowerCase();e.replace($,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(d.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")d.push([b][n](f));else while(f.length>=c[g]){d.push([b][n](f.splice(0,c[g])));if(!c[g])break}}),d.toString=a._path2string;return d}),a.parseTransformString=bt(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=by(b)),d.length||r(b).replace(Z,function(a,b,c){var e=[],f=v.call(b);c.replace($,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d}),a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bD(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bE(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bE(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bE(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bE(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bG=a._path2curve=bt(function(a,b){var c=bA(a),d=b&&bA(b),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bD[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bC(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bC(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bB(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bB(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bB(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bB(b.x,b.y,b.X,b.Y))}return a},h=function(a,b){if(a[b].length>7){a[b].shift();var e=a[b];while(e.length)a.splice(b++,0,["C"][n](e.splice(0,6)));a.splice(b,1),k=x(c.length,d&&d.length||0)}},i=function(a,b,e,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),e.bx=0,e.by=0,e.x=a[g][1],e.y=a[g][2],k=x(c.length,d&&d.length||0))};for(var j=0,k=x(c.length,d&&d.length||0);j=j)return p;o=p}if(j==null)return k},cg=function(b,c){return function(d,e,f){d=bG(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;oe){if(c&&!l.start){m=cf(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cf(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},ch=cg(1),ci=cg(),cj=cg(0,1);a.getTotalLength=ch,a.getPointAtLength=ci,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cj(a,b).end;var d=cj(a,c,1);return b?cj(d,b).end:d},b_.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return ch(this.attrs.path)}},b_.getPointAtLength=function(a){if(this.type=="path")return ci(this.attrs.path,a)},b_.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var ck=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};ck.easeIn=ck["ease-in"]=ck["<"],ck.easeOut=ck["ease-out"]=ck[">"],ck.easeInOut=ck["ease-in-out"]=ck["<>"],ck["back-in"]=ck.backIn,ck["back-out"]=ck.backOut;var cl=[],cm=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cn=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cr(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cr(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cl.length&&cm(cn)},co=function(a){return a>255?255:a<0?0:a};b_.animateWith=function(b,c,d,e,f,g){var h=d?a.animation(d,e,f,g):c;status=b.status(c);return this.animate(h).status(h,status*c.ms/h.ms)},b_.onAnimation=function(a){a?eve.on("anim.frame."+this.id,a):eve.unbind("anim.frame."+this.id);return this},cq.prototype.delay=function(a){var b=new cq(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cq.prototype.repeat=function(a){var b=new cq(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(b instanceof cq)return b;if(a.is(d,"function")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&Q(i)+"%"!=i&&(h=!0,f[i]=b[i]);if(!h)return new cq(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cq({100:f},c)},b_.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cq?b:a.animation(b,c,d,e);cr(g,f,g.percents[0],null,f.attr());return f},b_.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},b_.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cr(a,this,-1,y(b,1));return this}e=cl.length;for(;d.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;b.gradient&&(p.defs.removeChild(b.gradient),delete b.gradient),k=k.replace(/[\(\)\s,\xb0#]/g,"-"),s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?E.opacity/100:E.opacity});case"stroke":E=a.getRGB(p),i.setAttribute(o,E.hex),o=="stroke"&&E[b]("opacity")&&q(i,{"stroke-opacity":E.opacity>1?E.opacity/100:E.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&w(d,d._.arrows.startString),"endString"in d._.arrows&&w(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&u(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){F=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),F&&(G=F.getElementsByTagName("stop"),q(G[G.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var H=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[H]=p,d._.dirty=1,i.setAttribute(o,p)}}B(d,f),i.style.visibility=m},A=1.2,B=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var Y=V.getBoundingClientRect();t.W=m.w=(Y.right-Y.left)/W,t.H=m.h=(Y.bottom-Y.top)/W,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var Z=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var $=0,_=Z.length;$<_;$++)if(Z[$]in i){t._.dirty=1;break}switch(m["text-anchor"]){case"start":t.textpath.style["v-text-align"]="left",t.bbx=t.W/2;break;case"end":t.textpath.style["v-text-align"]="right",t.bbx=-t.W/2;break;default:t.textpath.style["v-text-align"]="center",t.bbx=0}t.textpath.style["v-text-kern"]=!0}},addGradientFill=function(b,f,g){b.attrs=b.attrs||{};var h=b.attrs,i=Math.pow,j,k,l="linear",m=".5 .5";b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){l="radial",b&&c&&(b=d(b),c=d(c),i(b-.5,2)+i(c-.5,2)>.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){B=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}};C(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=removed(b);return!0};var D=a.st;for(var E in A)A[b](E)&&!D[b](E)&&(D[E]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(E))}(window.Raphael) \ No newline at end of file diff --git a/vendors/simile-timeline/CHANGES.txt b/vendors/simile-timeline/CHANGES.txt new file mode 100644 index 000000000..84ea92736 --- /dev/null +++ b/vendors/simile-timeline/CHANGES.txt @@ -0,0 +1,72 @@ +CHANGES.txt + +Version 2.2.0 -- September 23, 2008 +* Prep for 2.2.0: updated RELEASE_NOTES -- LarryK +* Added comments per MPS in timeline-api.js that bundle=true + is needed unless you've installed full source -- LarryK +* Added comments to original-painter.js -- LarryK +* Re-built to pick up new simile-ajax that includes jquery 1.2.6 + -- eob rev 1589 + +Version 2.1.0 -- September 19, 2008 +* Prep for 2.1.0: updated examples, readme. created RELEASE_NOTES LarryK +* Added timeline_libraries.zip to build file. Removed install.sh + -- LarryK rev 1579 +* Event attribute classname is added to the classnames for the event's label + and tape divs. Eg classname of 'hot_event' will result in div classes of + 'timeline-event-label hot_event' and 'timeline-event-tape hot_event' for + the event's Timeline label and tape, respectively. Change is that classname + is now added to the tape's div. -- LarryK rev 1576 +* Re-worked function Timeline.DefaultEventSource.Event in sources.js to use + named arguments (via a hash/anon object) rather than positional arguments. + 19 positional arguments are too many! Now much easier and cleaner to add + additional event attributes. + Note: this is a breaking change for anyone who calls Event directly. But since + the wiki page about dynamic events recommends calling loadXML, etc, I + hoping that this won't cause anyone much pain. And the new format is + MUCH easier to use as a developer. -- LarryK rev 1576 +* New event attribute eventID is a 'cookie' attribute that is stored, not used + by the Timeline library. If you write a custom labeller or event bubble + filler, the attribute can be obtained using the getEventID() method on the + event object. -- LarryK rev 1576 +* New event attribute caption superceedes hoverText. hoverText is deprecated. + For now, it will live on for backwards compatibility. -- LarryK rev 1576 +* Event attributes barImage and barRepeat renamed to tapeImage and tapeRepeat. + No backwards compatibility. (Breaking change from previous checkin) + -- LarryK rev 1576 +* Fix: Event color attribute now properly sets the background color of the bar. + Note that events (where isDuration = true) have opacity applied. See + http://code.google.com/p/simile-widgets/wiki/Timeline_EventSources (LarryK) rev 1569 +* New event attribute barImage sets the event's bar div background-image. + New event attribute barRepeat sets the background-repeat. Default is 'repeat' + Cubism example updated to demonstrate color, textColor, barImage, barRepeat and + hoverText attributes. For a handy stripe generator, see + http://www.stripegenerator.com (LarryK) rev 1569 +* Fix: Event attribute hoverText was not properly processed by JSON or SPARCL sources + (LarryK) rev 1569 +* Build process now creates timeline_source.zip which has source, examples and the + jetty web server. Enables easy access with for folks without svn. (LarryK) rev 1569 +* Added copy of JFK timeline in examples with Dutch locale set. + (LarryK) rev 1560 +* Added forceLocale parameter to timeline-api.js to force a locale for testing + (LarryK) rev 1560 +* Added Dutch localization (Marko) rev 1560 +* Added mouse-wheel scroll. Mouse-wheel acts as left and right arrow keys. Theme + controls whether the mouse-wheel scrolls, zooms or moves the page (if the page + has a scroll-bar). Docs: see webapp/docs/create-timelines.html + (LarryK) rev 1553 +* Additional support in timeline-api for using your own server for Timeline + libraries (LarryK) rev 1553 +* Separation of javascript and css (gm.marko) rev 1326 +* Added mouse-wheel zoom functionality. It operates on a per-band basis, keeping + the date under the mouse cursor static while the timeline around it scales. + Zoom is specified as user-defined steps. Documentation and a working demo in + the webapp/docs/create-timelines.html page (halcyon1981) rev 1418 +* Added support for 'hoverText' - title pop-ups on Exhibit-based timelines + (Vincent.Vazzo) rev 1411 + + +Version 2.0 +* Software changes +* Moved svn repository to Google code + diff --git a/vendors/simile-timeline/LICENSE.txt b/vendors/simile-timeline/LICENSE.txt new file mode 100644 index 000000000..2f3e0503c --- /dev/null +++ b/vendors/simile-timeline/LICENSE.txt @@ -0,0 +1,29 @@ +/* + * (c) Copyright The SIMILE Project 2006. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ diff --git a/vendors/simile-timeline/README.txt b/vendors/simile-timeline/README.txt new file mode 100644 index 000000000..e82a65b9a --- /dev/null +++ b/vendors/simile-timeline/README.txt @@ -0,0 +1,88 @@ + + T I M E L I N E + + + What is this? + ------------- + + Timeline is a DHTML-based AJAXy timeline. + + + Running Timeline + ---------------- + + Timeline consists of static resources, Javascript libraries, + image files and css files. All you really need is to + serve those resources off a web server. Any web server will do. + + Two ways to access the library + + 1. Unzip either timeline_source.zip or timeline_libraries.zip into + a directory served by a webserver. + + timeline_source.zip includes complete source and example files. Use your + browser to see the examples at + .../timeline_directory/src/webapp + + timeline_libraries.zip is the minimum install of the bundled js libraries, + css and image files + + 2. No web server? The timeline project includes a small webserver called + Jetty (use the timeline_source.zip file) + a) install the Java runtime from Sun + b) unzip timeline_source.zip to an install directory + c) Open a shell or command prompt to the install directory and type: + + [win32]> run + [unix/macosx]> chmod +x run; ./run + + and then point your browser to + + http://127.0.0.1:9999/timeline/ + + + How do I customize Timeline? + ---------------------------- + + Refer to the Timeline web site at + http://code.google.com/p/simile-widgets/ + + + Mailing List and Forum + ---------------------- + + Join the community by joining the Google Group SIMILE Widgets + http://groups.google.com/group/simile-widgets/ + + + Licensing and legal issues + -------------------------- + + Timeline is open source software and are licensed under the BSD license + located in the LICENSE.txt file located in the same directory as this very file + you are reading. + + + + Credits + ------- + + This software was created by the SIMILE project and originally written + by the SIMILE development team (in alphabetical order): + + - David Franois Huynh + + + + + --- o --- + + + Thanks for your interest. + + + + + The SIMILE Project + http://simile.mit.edu/ + diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-arrow.png b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-arrow.png new file mode 100644 index 000000000..38c391714 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-arrow.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-left.png b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-left.png new file mode 100644 index 000000000..6d320266f Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-right.png b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-right.png new file mode 100644 index 000000000..e5dc1367c Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-bottom.png b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom.png new file mode 100644 index 000000000..166b05735 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-bottom.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-left-arrow.png b/vendors/simile-timeline/timeline_ajax/images/bubble-left-arrow.png new file mode 100644 index 000000000..5b173cd4e Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-left-arrow.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-left.png b/vendors/simile-timeline/timeline_ajax/images/bubble-left.png new file mode 100644 index 000000000..38267220a Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-right-arrow.png b/vendors/simile-timeline/timeline_ajax/images/bubble-right-arrow.png new file mode 100644 index 000000000..11e287364 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-right-arrow.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-right.png b/vendors/simile-timeline/timeline_ajax/images/bubble-right.png new file mode 100644 index 000000000..f66f87919 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-top-arrow.png b/vendors/simile-timeline/timeline_ajax/images/bubble-top-arrow.png new file mode 100644 index 000000000..524c46e78 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-top-arrow.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-top-left.png b/vendors/simile-timeline/timeline_ajax/images/bubble-top-left.png new file mode 100644 index 000000000..d69841f82 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-top-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-top-right.png b/vendors/simile-timeline/timeline_ajax/images/bubble-top-right.png new file mode 100644 index 000000000..9ab219aea Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-top-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/bubble-top.png b/vendors/simile-timeline/timeline_ajax/images/bubble-top.png new file mode 100644 index 000000000..917defaf5 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/bubble-top.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/close-button.png b/vendors/simile-timeline/timeline_ajax/images/close-button.png new file mode 100644 index 000000000..15f31b3cc Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/close-button.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/copy.png b/vendors/simile-timeline/timeline_ajax/images/copy.png new file mode 100644 index 000000000..cf7cee464 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/copy.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-bottom-left.png b/vendors/simile-timeline/timeline_ajax/images/message-bottom-left.png new file mode 100644 index 000000000..43a9d6167 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-bottom-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-bottom-right.png b/vendors/simile-timeline/timeline_ajax/images/message-bottom-right.png new file mode 100644 index 000000000..bfa4954e1 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-bottom-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-left.png b/vendors/simile-timeline/timeline_ajax/images/message-left.png new file mode 100644 index 000000000..f354376bd Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-right.png b/vendors/simile-timeline/timeline_ajax/images/message-right.png new file mode 100644 index 000000000..4702c2850 Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-top-left.png b/vendors/simile-timeline/timeline_ajax/images/message-top-left.png new file mode 100644 index 000000000..b19b0eaeb Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-top-left.png differ diff --git a/vendors/simile-timeline/timeline_ajax/images/message-top-right.png b/vendors/simile-timeline/timeline_ajax/images/message-top-right.png new file mode 100644 index 000000000..c092555fd Binary files /dev/null and b/vendors/simile-timeline/timeline_ajax/images/message-top-right.png differ diff --git a/vendors/simile-timeline/timeline_ajax/scripts/signal.js b/vendors/simile-timeline/timeline_ajax/scripts/signal.js new file mode 100644 index 000000000..7bfcf2a35 --- /dev/null +++ b/vendors/simile-timeline/timeline_ajax/scripts/signal.js @@ -0,0 +1,44 @@ +/*================================================== + * This file is used to detect that all outstanding + * javascript files have been loaded. You can put + * a function reference into SimileAjax_onLoad + * to have it executed once all javascript files + * have loaded. + *================================================== + */ +(function() { + var substring = SimileAjax.urlPrefix + "scripts/signal.js"; + var heads = document.documentElement.getElementsByTagName("head"); + for (var h = 0; h < heads.length; h++) { + var node = heads[h].firstChild; + while (node != null) { + if (node.nodeType == 1 && node.tagName.toLowerCase() == "script") { + var url = node.src; + var i = url.indexOf(substring); + if (i >= 0) { + heads[h].removeChild(node); // remove it so we won't hit it again + + var count = parseInt(url.substr(substring.length + 1)); + SimileAjax.loadingScriptsCount -= count; + + if (SimileAjax.loadingScriptsCount == 0) { + var f = null; + if (typeof SimileAjax_onLoad == "string") { + f = eval(SimileAjax_onLoad); + SimileAjax_onLoad = null; + } else if (typeof SimileAjax_onLoad == "function") { + f = SimileAjax_onLoad; + SimileAjax_onLoad = null; + } + + if (f != null) { + f(); + } + } + return; + } + } + node = node.nextSibling; + } + } +})(); \ No newline at end of file diff --git a/vendors/simile-timeline/timeline_ajax/simile-ajax-api.js b/vendors/simile-timeline/timeline_ajax/simile-ajax-api.js new file mode 100644 index 000000000..eb9ef1771 --- /dev/null +++ b/vendors/simile-timeline/timeline_ajax/simile-ajax-api.js @@ -0,0 +1,211 @@ +/*================================================== + * Simile Ajax API + * + * Include this file in your HTML file as follows: + * + * + * + *================================================== + */ + +if (typeof SimileAjax == "undefined") { + var SimileAjax = { + loaded: false, + loadingScriptsCount: 0, + error: null, + params: { bundle:"true" } + }; + + SimileAjax.Platform = new Object(); + /* + HACK: We need these 2 things here because we cannot simply append + a "); + return; + } catch (e) { + // fall through + } + } + + var script = doc.createElement("script"); + if (onerror) { + try { script.innerHTML = onerror; } catch(e) {} + script.setAttribute("onerror", onerror); + } + if (charset) { + script.setAttribute("charset", charset); + } + script.type = "text/javascript"; + script.language = "JavaScript"; + script.src = url; + return getHead(doc).appendChild(script); + }; + SimileAjax.includeJavascriptFiles = function(doc, urlPrefix, filenames) { + for (var i = 0; i < filenames.length; i++) { + SimileAjax.includeJavascriptFile(doc, urlPrefix + filenames[i]); + } + SimileAjax.loadingScriptsCount += filenames.length; + SimileAjax.includeJavascriptFile(doc, SimileAjax.urlPrefix + "scripts/signal.js?" + filenames.length); + }; + SimileAjax.includeCssFile = function(doc, url) { + if (doc.body == null) { + try { + doc.write(""); + return; + } catch (e) { + // fall through + } + } + + var link = doc.createElement("link"); + link.setAttribute("rel", "stylesheet"); + link.setAttribute("type", "text/css"); + link.setAttribute("href", url); + getHead(doc).appendChild(link); + }; + SimileAjax.includeCssFiles = function(doc, urlPrefix, filenames) { + for (var i = 0; i < filenames.length; i++) { + SimileAjax.includeCssFile(doc, urlPrefix + filenames[i]); + } + }; + + /** + * Append into urls each string in suffixes after prefixing it with urlPrefix. + * @param {Array} urls + * @param {String} urlPrefix + * @param {Array} suffixes + */ + SimileAjax.prefixURLs = function(urls, urlPrefix, suffixes) { + for (var i = 0; i < suffixes.length; i++) { + urls.push(urlPrefix + suffixes[i]); + } + }; + + /** + * Parse out the query parameters from a URL + * @param {String} url the url to parse, or location.href if undefined + * @param {Object} to optional object to extend with the parameters + * @param {Object} types optional object mapping keys to value types + * (String, Number, Boolean or Array, String by default) + * @return a key/value Object whose keys are the query parameter names + * @type Object + */ + SimileAjax.parseURLParameters = function(url, to, types) { + to = to || {}; + types = types || {}; + + if (typeof url == "undefined") { + url = location.href; + } + var q = url.indexOf("?"); + if (q < 0) { + return to; + } + url = (url+"#").slice(q+1, url.indexOf("#")); // toss the URL fragment + + var params = url.split("&"), param, parsed = {}; + var decode = window.decodeURIComponent || unescape; + for (var i = 0; param = params[i]; i++) { + var eq = param.indexOf("="); + var name = decode(param.slice(0,eq)); + var old = parsed[name]; + if (typeof old == "undefined") { + old = []; + } else if (!(old instanceof Array)) { + old = [old]; + } + parsed[name] = old.concat(decode(param.slice(eq+1))); + } + for (var i in parsed) { + if (!parsed.hasOwnProperty(i)) continue; + var type = types[i] || String; + var data = parsed[i]; + if (!(data instanceof Array)) { + data = [data]; + } + if (type === Boolean && data[0] == "false") { + to[i] = false; // because Boolean("false") === true + } else { + to[i] = type.apply(this, data); + } + } + return to; + }; + + (function() { + var javascriptFiles = [ + "jquery-1.2.6.js", + "platform.js", + "debug.js", + "xmlhttp.js", + "json.js", + "dom.js", + "graphics.js", + "date-time.js", + "string.js", + "html.js", + "data-structure.js", + "units.js", + + "ajax.js", + "history.js", + "window-manager.js" + ]; + var cssFiles = [ + ]; + + if (typeof SimileAjax_urlPrefix == "string") { + SimileAjax.urlPrefix = SimileAjax_urlPrefix; + } else { + var url = SimileAjax.findScript(document, "simile-ajax-api.js"); + if (url == null) { + SimileAjax.error = new Error("Failed to derive URL prefix for Simile Ajax API code files"); + return; + } + + SimileAjax.urlPrefix = url.substr(0, url.indexOf("simile-ajax-api.js")); + } + + SimileAjax.parseURLParameters(url, SimileAjax.params, {bundle:Boolean}); + if (SimileAjax.params.bundle) { + SimileAjax.includeJavascriptFiles(document, SimileAjax.urlPrefix, [ "simile-ajax-bundle.js" ]); + } else { + SimileAjax.includeJavascriptFiles(document, SimileAjax.urlPrefix + "scripts/", javascriptFiles); + } + SimileAjax.includeCssFiles(document, SimileAjax.urlPrefix + "styles/", cssFiles); + + SimileAjax.loaded = true; + })(); +} diff --git a/vendors/simile-timeline/timeline_ajax/simile-ajax-bundle.js b/vendors/simile-timeline/timeline_ajax/simile-ajax-bundle.js new file mode 100644 index 000000000..bd0ed9031 --- /dev/null +++ b/vendors/simile-timeline/timeline_ajax/simile-ajax-bundle.js @@ -0,0 +1,2628 @@ + + +/* jquery-1.2.6.js */ +(function(){var _jQuery=window.jQuery,_$=window.$; +var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context); +}; +var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined; +jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document; +if(selector.nodeType){this[0]=selector; +this.length=1; +return this; +}if(typeof selector=="string"){var match=quickExpr.exec(selector); +if(match&&(match[1]||!context)){if(match[1]){selector=jQuery.clean([match[1]],context); +}else{var elem=document.getElementById(match[3]); +if(elem){if(elem.id!=match[3]){return jQuery().find(selector); +}return jQuery(elem); +}selector=[]; +}}else{return jQuery(context).find(selector); +}}else{if(jQuery.isFunction(selector)){return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector); +}}return this.setArray(jQuery.makeArray(selector)); +},jquery:"1.2.6",size:function(){return this.length; +},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num]; +},pushStack:function(elems){var ret=jQuery(elems); +ret.prevObject=this; +return ret; +},setArray:function(elems){this.length=0; +Array.prototype.push.apply(this,elems); +return this; +},each:function(callback,args){return jQuery.each(this,callback,args); +},index:function(elem){var ret=-1; +return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this); +},attr:function(name,value,type){var options=name; +if(name.constructor==String){if(value===undefined){return this[0]&&jQuery[type||"attr"](this[0],name); +}else{options={}; +options[name]=value; +}}return this.each(function(i){for(name in options){jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name)); +}}); +},css:function(key,value){if((key=="width"||key=="height")&&parseFloat(value)<0){value=undefined; +}return this.attr(key,value,"curCSS"); +},text:function(text){if(typeof text!="object"&&text!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text)); +}var ret=""; +jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8){ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]); +}}); +}); +return ret; +},wrapAll:function(html){if(this[0]){jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this; +while(elem.firstChild){elem=elem.firstChild; +}return elem; +}).append(this); +}return this; +},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html); +}); +},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html); +}); +},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1){this.appendChild(elem); +}}); +},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1){this.insertBefore(elem,this.firstChild); +}}); +},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this); +}); +},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling); +}); +},end:function(){return this.prevObject||jQuery([]); +},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem); +}); +return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems); +},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div"); +container.appendChild(clone); +return jQuery.clean([container.innerHTML])[0]; +}else{return this.cloneNode(true); +}}); +var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined){this[expando]=null; +}}); +if(events===true){this.find("*").andSelf().each(function(i){if(this.nodeType==3){return ; +}var events=jQuery.data(this,"events"); +for(var type in events){for(var handler in events[type]){jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data); +}}}); +}return ret; +},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i); +})||jQuery.multiFilter(selector,this)); +},not:function(selector){if(selector.constructor==String){if(isSimple.test(selector)){return this.pushStack(jQuery.multiFilter(selector,this,true)); +}else{selector=jQuery.multiFilter(selector,this); +}}var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType; +return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector; +}); +},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=="string"?jQuery(selector):jQuery.makeArray(selector)))); +},is:function(selector){return !!selector&&jQuery.multiFilter(selector,this).length>0; +},hasClass:function(selector){return this.is("."+selector); +},val:function(value){if(value==undefined){if(this.length){var elem=this[0]; +if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one"; +if(index<0){return null; +}for(var i=one?index:0,max=one?index+1:options.length; +i=0||jQuery.inArray(this.name,value)>=0); +}else{if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value); +jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0); +}); +if(!values.length){this.selectedIndex=-1; +}}else{this.value=value; +}}}); +},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value); +},replaceWith:function(value){return this.after(value).remove(); +},eq:function(i){return this.slice(i,i+1); +},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments)); +},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem); +})); +},andSelf:function(){return this.add(this.prevObject); +},data:function(key,value){var parts=key.split("."); +parts[1]=parts[1]?"."+parts[1]:""; +if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]); +if(data===undefined&&this.length){data=jQuery.data(this[0],key); +}return data===undefined&&parts[1]?this.data(parts[0]):data; +}else{return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value); +}); +}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key); +}); +},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems; +return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument); +if(reverse){elems.reverse(); +}}var obj=this; +if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr")){obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody")); +}var scripts=jQuery([]); +jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this; +if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem); +}else{if(elem.nodeType==1){scripts=scripts.add(jQuery("script",elem).remove()); +}callback.call(obj,elem); +}}); +scripts.each(evalScript); +}); +}}; +jQuery.fn.init.prototype=jQuery.fn; +function evalScript(i,elem){if(elem.src){jQuery.ajax({url:elem.src,async:false,dataType:"script"}); +}else{jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||""); +}if(elem.parentNode){elem.parentNode.removeChild(elem); +}}function now(){return +new Date; +}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options; +if(target.constructor==Boolean){deep=target; +target=arguments[1]||{}; +i=2; +}if(typeof target!="object"&&typeof target!="function"){target={}; +}if(length==i){target=this; +--i; +}for(; +i-1; +}},swap:function(elem,options,callback){var old={}; +for(var name in options){old[name]=elem.style[name]; +elem.style[name]=options[name]; +}callback.call(elem); +for(var name in options){elem.style[name]=old[name]; +}},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"]; +function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight; +var padding=0,border=0; +jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0; +border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0; +}); +val-=Math.round(padding+border); +}if(jQuery(elem).is(":visible")){getWH(); +}else{jQuery.swap(elem,props,getWH); +}return Math.max(0,val); +}return jQuery.curCSS(elem,name,force); +},curCSS:function(elem,name,force){var ret,style=elem.style; +function color(elem){if(!jQuery.browser.safari){return false; +}var ret=defaultView.getComputedStyle(elem,null); +return !ret||ret.getPropertyValue("color")==""; +}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity"); +return ret==""?"1":ret; +}if(jQuery.browser.opera&&name=="display"){var save=style.outline; +style.outline="0 solid black"; +style.outline=save; +}if(name.match(/float/i)){name=styleFloat; +}if(!force&&style&&style[name]){ret=style[name]; +}else{if(defaultView.getComputedStyle){if(name.match(/float/i)){name="float"; +}name=name.replace(/([A-Z])/g,"-$1").toLowerCase(); +var computedStyle=defaultView.getComputedStyle(elem,null); +if(computedStyle&&!color(elem)){ret=computedStyle.getPropertyValue(name); +}else{var swap=[],stack=[],a=elem,i=0; +for(; +a&&color(a); +a=a.parentNode){stack.unshift(a); +}for(; +i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">"; +}); +var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div"); +var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
","
"]||[0,"",""]; +div.innerHTML=wrap[1]+elem+wrap[2]; +while(wrap[0]--){div=div.lastChild; +}if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0; +--j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]); +}}if(/^\s/.test(elem)){div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild); +}}elem=jQuery.makeArray(div.childNodes); +}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select"))){return ; +}if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options){ret.push(elem); +}else{ret=jQuery.merge(ret,elem); +}}); +return ret; +},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8){return undefined; +}var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie; +name=notxml&&jQuery.props[name]||name; +if(elem.tagName){var special=/href|src|style/.test(name); +if(name=="selected"&&jQuery.browser.safari){elem.parentNode.selectedIndex; +}if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode){throw"type property can't be changed"; +}elem[name]=value; +}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name)){return elem.getAttributeNode(name).nodeValue; +}return elem[name]; +}if(msie&¬xml&&name=="style"){return jQuery.attr(elem.style,"cssText",value); +}if(set){elem.setAttribute(name,""+value); +}var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name); +return attr===null?undefined:attr; +}if(msie&&name=="opacity"){if(set){elem.zoom=1; +elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+""=="NaN"?"":"alpha(opacity="+value*100+")"); +}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+"":""; +}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase(); +}); +if(set){elem[name]=value; +}return elem[name]; +},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,""); +},makeArray:function(array){var ret=[]; +if(array!=null){var i=array.length; +if(i==null||array.split||array.setInterval||array.call){ret[0]=array; +}else{while(i){ret[--i]=array[i]; +}}}return ret; +},inArray:function(elem,array){for(var i=0,length=array.length; +i*",this).remove(); +while(this.firstChild){this.removeChild(this.firstChild); +}}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments); +}; +}); +jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase(); +jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px"); +}; +}); +function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0; +}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)"); +jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]); +},"#":function(a,i,m){return a.getAttribute("id")==m[2]; +},":":{lt:function(a,i,m){return im[3]-0; +},nth:function(a,i,m){return m[3]-0==i; +},eq:function(a,i,m){return m[3]-0==i; +},first:function(a,i){return i==0; +},last:function(a,i,m,r){return i==r.length-1; +},even:function(a,i){return i%2==0; +},odd:function(a,i){return i%2; +},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a; +},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a; +},"only-child":function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling"); +},parent:function(a){return a.firstChild; +},empty:function(a){return !a.firstChild; +},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0; +},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"; +},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"; +},enabled:function(a){return !a.disabled; +},disabled:function(a){return a.disabled; +},checked:function(a){return a.checked; +},selected:function(a){return a.selected||jQuery.attr(a,"selected"); +},text:function(a){return"text"==a.type; +},radio:function(a){return"radio"==a.type; +},checkbox:function(a){return"checkbox"==a.type; +},file:function(a){return"file"==a.type; +},password:function(a){return"password"==a.type; +},submit:function(a){return"submit"==a.type; +},image:function(a){return"image"==a.type; +},reset:function(a){return"reset"==a.type; +},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button"); +},input:function(a){return/input|select|textarea|button/i.test(a.nodeName); +},has:function(a,i,m){return jQuery.find(m[3],a).length; +},header:function(a){return/h\d/i.test(a.nodeName); +},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem; +}).length; +}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[]; +while(expr&&expr!=old){old=expr; +var f=jQuery.filter(expr,elems,not); +expr=f.t.replace(/^\s*,\s*/,""); +cur=not?elems=f.r:jQuery.merge(cur,f.r); +}return cur; +},find:function(t,context){if(typeof t!="string"){return[t]; +}if(context&&context.nodeType!=1&&context.nodeType!=9){return[]; +}context=context||document; +var ret=[context],done=[],last,nodeName; +while(t&&last!=t){var r=[]; +last=t; +t=jQuery.trim(t); +var foundToken=false,re=quickChild,m=re.exec(t); +if(m){nodeName=m[1].toUpperCase(); +for(var i=0; +ret[i]; +i++){for(var c=ret[i].firstChild; +c; +c=c.nextSibling){if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName)){r.push(c); +}}}ret=r; +t=t.replace(re,""); +if(t.indexOf(" ")==0){continue; +}foundToken=true; +}else{re=/^([>+~])\s*(\w*)/i; +if((m=re.exec(t))!=null){r=[]; +var merge={}; +nodeName=m[2].toUpperCase(); +m=m[1]; +for(var j=0,rl=ret.length; +j=0; +if(!not&&pass||not&&!pass){tmp.push(r[i]); +}}return tmp; +},filter:function(t,r,not){var last; +while(t&&t!=last){last=t; +var p=jQuery.parse,m; +for(var i=0; +p[i]; +i++){m=p[i].exec(t); +if(m){t=t.substring(m[0].length); +m[2]=m[2].replace(/\\/g,""); +break; +}}if(!m){break; +}if(m[1]==":"&&m[2]=="not"){r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]); +}else{if(m[1]=="."){r=jQuery.classFilter(r,m[2],not); +}else{if(m[1]=="["){var tmp=[],type=m[3]; +for(var i=0,rl=r.length; +i=0)^not){tmp.push(a); +}}r=tmp; +}else{if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0; +for(var i=0,rl=r.length; +i=0){add=true; +}}if(add^not){tmp.push(node); +}}r=tmp; +}else{var fn=jQuery.expr[m[1]]; +if(typeof fn=="object"){fn=fn[m[2]]; +}if(typeof fn=="string"){fn=eval("false||function(a,i){return "+fn+";}"); +}r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r); +},not); +}}}}}return{r:r,t:t}; +},dir:function(elem,dir){var matched=[],cur=elem[dir]; +while(cur&&cur!=document){if(cur.nodeType==1){matched.push(cur); +}cur=cur[dir]; +}return matched; +},nth:function(cur,result,dir,elem){result=result||1; +var num=0; +for(; +cur; +cur=cur[dir]){if(cur.nodeType==1&&++num==result){break; +}}return cur; +},sibling:function(n,elem){var r=[]; +for(; +n; +n=n.nextSibling){if(n.nodeType==1&&n!=elem){r.push(n); +}}return r; +}}); +jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8){return ; +}if(jQuery.browser.msie&&elem.setInterval){elem=window; +}if(!handler.guid){handler.guid=this.guid++; +}if(data!=undefined){var fn=handler; +handler=this.proxy(fn,function(){return fn.apply(this,arguments); +}); +handler.data=data; +}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered){return jQuery.event.handle.apply(arguments.callee.elem,arguments); +}}); +handle.elem=elem; +jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split("."); +type=parts[0]; +handler.type=parts[1]; +var handlers=events[type]; +if(!handlers){handlers=events[type]={}; +if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener){elem.addEventListener(type,handle,false); +}else{if(elem.attachEvent){elem.attachEvent("on"+type,handle); +}}}}handlers[handler.guid]=handler; +jQuery.event.global[type]=true; +}); +elem=null; +},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8){return ; +}var events=jQuery.data(elem,"events"),ret,index; +if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)==".")){for(var type in events){this.remove(elem,type+(types||"")); +}}else{if(types.type){handler=types.handler; +types=types.type; +}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split("."); +type=parts[0]; +if(events[type]){if(handler){delete events[type][handler.guid]; +}else{for(handler in events[type]){if(!parts[1]||events[type][handler].type==parts[1]){delete events[type][handler]; +}}}for(ret in events[type]){break; +}if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener){elem.removeEventListener(type,jQuery.data(elem,"handle"),false); +}else{if(elem.detachEvent){elem.detachEvent("on"+type,jQuery.data(elem,"handle")); +}}}ret=null; +delete events[type]; +}}}); +}for(ret in events){break; +}if(!ret){var handle=jQuery.data(elem,"handle"); +if(handle){handle.elem=null; +}jQuery.removeData(elem,"events"); +jQuery.removeData(elem,"handle"); +}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data); +if(type.indexOf("!")>=0){type=type.slice(0,-1); +var exclusive=true; +}if(!elem){if(this.global[type]){jQuery("*").add([window,document]).trigger(type,data); +}}else{if(elem.nodeType==3||elem.nodeType==8){return undefined; +}var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault; +if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()}); +data[0][expando]=true; +}data[0].type=type; +if(exclusive){data[0].exclusive=true; +}var handle=jQuery.data(elem,"handle"); +if(handle){val=handle.apply(elem,data); +}if((!fn||(jQuery.nodeName(elem,"a")&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false){val=false; +}if(event){data.shift(); +}if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val)); +if(ret!==undefined){val=ret; +}}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,"a")&&type=="click")){this.triggered=true; +try{elem[type](); +}catch(e){}}this.triggered=false; +}return val; +},handle:function(event){var val,ret,namespace,all,handlers; +event=arguments[0]=jQuery.event.fix(event||window.event); +namespace=event.type.split("."); +event.type=namespace[0]; +namespace=namespace[1]; +all=!namespace&&!event.exclusive; +handlers=(jQuery.data(this,"events")||{})[event.type]; +for(var j in handlers){var handler=handlers[j]; +if(all||handler.type==namespace){event.handler=handler; +event.data=handler.data; +ret=handler.apply(this,arguments); +if(val!==false){val=ret; +}if(ret===false){event.preventDefault(); +event.stopPropagation(); +}}}return val; +},fix:function(event){if(event[expando]==true){return event; +}var originalEvent=event; +event={originalEvent:originalEvent}; +var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" "); +for(var i=props.length; +i; +i--){event[props[i]]=originalEvent[props[i]]; +}event[expando]=true; +event.preventDefault=function(){if(originalEvent.preventDefault){originalEvent.preventDefault(); +}originalEvent.returnValue=false; +}; +event.stopPropagation=function(){if(originalEvent.stopPropagation){originalEvent.stopPropagation(); +}originalEvent.cancelBubble=true; +}; +event.timeStamp=event.timeStamp||now(); +if(!event.target){event.target=event.srcElement||document; +}if(event.target.nodeType==3){event.target=event.target.parentNode; +}if(!event.relatedTarget&&event.fromElement){event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement; +}if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body; +event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0); +event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0); +}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode)){event.which=event.charCode||event.keyCode; +}if(!event.metaKey&&event.ctrlKey){event.metaKey=event.ctrlKey; +}if(!event.which&&event.button){event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0))); +}return event; +},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++; +return proxy; +},special:{ready:{setup:function(){bindReady(); +return ; +},teardown:function(){return ; +}},mouseenter:{setup:function(){if(jQuery.browser.msie){return false; +}jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler); +return true; +},teardown:function(){if(jQuery.browser.msie){return false; +}jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler); +return true; +},handler:function(event){if(withinElement(event,this)){return true; +}event.type="mouseenter"; +return jQuery.event.handle.apply(this,arguments); +}},mouseleave:{setup:function(){if(jQuery.browser.msie){return false; +}jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler); +return true; +},teardown:function(){if(jQuery.browser.msie){return false; +}jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler); +return true; +},handler:function(event){if(withinElement(event,this)){return true; +}event.type="mouseleave"; +return jQuery.event.handle.apply(this,arguments); +}}}}; +jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data); +}); +},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one); +return(fn||data).apply(this,arguments); +}); +return this.each(function(){jQuery.event.add(this,type,one,fn&&data); +}); +},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn); +}); +},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn); +}); +},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn); +},toggle:function(fn){var args=arguments,i=1; +while(i=0){var selector=url.slice(off,url.length); +url=url.slice(0,off); +}callback=callback||function(){}; +var type="GET"; +if(params){if(jQuery.isFunction(params)){callback=params; +params=null; +}else{params=jQuery.param(params); +type="POST"; +}}var self=this; +jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified"){self.html(selector?jQuery("
").append(res.responseText.replace(//g,"")).find(selector):res.responseText); +}self.each(callback,[res.responseText,status,res]); +}}); +return this; +},serialize:function(){return jQuery.param(this.serializeArray()); +},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this; +}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type)); +}).map(function(i,elem){var val=jQuery(this).val(); +return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val}; +}):{name:elem.name,value:val}; +}).get(); +}}); +jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f); +}; +}); +var jsc=now(); +jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data; +data=null; +}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type}); +},getScript:function(url,callback){return jQuery.get(url,null,callback,"script"); +},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json"); +},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data; +data={}; +}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type}); +},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings); +},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s)); +var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase(); +if(s.data&&s.processData&&typeof s.data!="string"){s.data=jQuery.param(s.data); +}if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre)){s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?"; +}}else{if(!s.data||!s.data.match(jsre)){s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?"; +}}s.dataType="json"; +}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++; +if(s.data){s.data=(s.data+"").replace(jsre,"="+jsonp+"$1"); +}s.url=s.url.replace(jsre,"="+jsonp+"$1"); +s.dataType="script"; +window[jsonp]=function(tmp){data=tmp; +success(); +complete(); +window[jsonp]=undefined; +try{delete window[jsonp]; +}catch(e){}if(head){head.removeChild(script); +}}; +}if(s.dataType=="script"&&s.cache==null){s.cache=false; +}if(s.cache===false&&type=="GET"){var ts=now(); +var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2"); +s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:""); +}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data; +s.data=null; +}if(s.global&&!jQuery.active++){jQuery.event.trigger("ajaxStart"); +}var remote=/^(?:\w+:)?\/\/([^\/?#]+)/; +if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0]; +var script=document.createElement("script"); +script.src=s.url; +if(s.scriptCharset){script.charset=s.scriptCharset; +}if(!jsonp){var done=false; +script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true; +success(); +complete(); +head.removeChild(script); +}}; +}head.appendChild(script); +return undefined; +}var requestDone=false; +var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest(); +if(s.username){xhr.open(type,s.url,s.async,s.username,s.password); +}else{xhr.open(type,s.url,s.async); +}try{if(s.data){xhr.setRequestHeader("Content-Type",s.contentType); +}if(s.ifModified){xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT"); +}xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"); +xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default); +}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--; +xhr.abort(); +return false; +}if(s.global){jQuery.event.trigger("ajaxSend",[xhr,s]); +}var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true; +if(ival){clearInterval(ival); +ival=null; +}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success"; +if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter); +}catch(e){status="parsererror"; +}}if(status=="success"){var modRes; +try{modRes=xhr.getResponseHeader("Last-Modified"); +}catch(e){}if(s.ifModified&&modRes){jQuery.lastModified[s.url]=modRes; +}if(!jsonp){success(); +}}else{jQuery.handleError(s,xhr,status); +}complete(); +if(s.async){xhr=null; +}}}; +if(s.async){var ival=setInterval(onreadystatechange,13); +if(s.timeout>0){setTimeout(function(){if(xhr){xhr.abort(); +if(!requestDone){onreadystatechange("timeout"); +}}},s.timeout); +}}try{xhr.send(s.data); +}catch(e){jQuery.handleError(s,xhr,null,e); +}if(!s.async){onreadystatechange(); +}function success(){if(s.success){s.success(data,status); +}if(s.global){jQuery.event.trigger("ajaxSuccess",[xhr,s]); +}}function complete(){if(s.complete){s.complete(xhr,status); +}if(s.global){jQuery.event.trigger("ajaxComplete",[xhr,s]); +}if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop"); +}}return xhr; +},handleError:function(s,xhr,status,e){if(s.error){s.error(xhr,status,e); +}if(s.global){jQuery.event.trigger("ajaxError",[xhr,s,e]); +}},active:0,httpSuccess:function(xhr){try{return !xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined; +}catch(e){}return false; +},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified"); +return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined; +}catch(e){}return false; +},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText; +if(xml&&data.documentElement.tagName=="parsererror"){throw"parsererror"; +}if(filter){data=filter(data,type); +}if(type=="script"){jQuery.globalEval(data); +}if(type=="json"){data=eval("("+data+")"); +}return data; +},param:function(a){var s=[]; +if(a.constructor==Array||a.jquery){jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value)); +}); +}else{for(var j in a){if(a[j]&&a[j].constructor==Array){jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this)); +}); +}else{s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j])); +}}}return s.join("&").replace(/%20/g,"+"); +}}); +jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||""; +if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body"); +this.style.display=elem.css("display"); +if(this.style.display=="none"){this.style.display="block"; +}elem.remove(); +}}).end(); +},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display"); +this.style.display="none"; +}).end(); +},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"](); +}); +},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback); +},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback); +},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback); +},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback); +},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback); +},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback); +},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback); +return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1){return false; +}var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this; +for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden){return opt.complete.call(this); +}if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display"); +opt.overflow=this.style.overflow; +}}if(opt.overflow!=null){this.style.overflow="hidden"; +}opt.curAnim=jQuery.extend({},prop); +jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name); +if(/toggle|show|hide/.test(val)){e[val=="toggle"?hidden?"show":"hide":val](prop); +}else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0; +if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px"; +if(unit!="px"){self.style[name]=(end||1)+unit; +start=((end||1)/e.cur(true))*start; +self.style[name]=start+unit; +}if(parts[1]){end=((parts[1]=="-="?-1:1)*end)+start; +}e.custom(start,end,unit); +}else{e.custom(start,val,""); +}}}); +return true; +}); +},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type; +type="fx"; +}if(!type||(typeof type=="string"&&!fn)){return queue(this[0],type); +}return this.each(function(){if(fn.constructor==Array){queue(this,type,fn); +}else{queue(this,type).push(fn); +if(queue(this,type).length==1){fn.call(this); +}}}); +},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers; +if(clearQueue){this.queue([]); +}this.each(function(){for(var i=timers.length-1; +i>=0; +i--){if(timers[i].elem==this){if(gotoEnd){timers[i](true); +}timers.splice(i,1); +}}}); +if(!gotoEnd){this.dequeue(); +}return this; +}}); +var queue=function(elem,type,array){if(elem){type=type||"fx"; +var q=jQuery.data(elem,type+"queue"); +if(!q||array){q=jQuery.data(elem,type+"queue",jQuery.makeArray(array)); +}}return q; +}; +jQuery.fn.dequeue=function(type){type=type||"fx"; +return this.each(function(){var q=queue(this,type); +q.shift(); +if(q.length){q[0].call(this); +}}); +}; +jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing}; +opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def; +opt.old=opt.complete; +opt.complete=function(){if(opt.queue!==false){jQuery(this).dequeue(); +}if(jQuery.isFunction(opt.old)){opt.old.call(this); +}}; +return opt; +},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p; +},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum; +}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options; +this.elem=elem; +this.prop=prop; +if(!options.orig){options.orig={}; +}}}); +jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this); +}(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this); +if(this.prop=="height"||this.prop=="width"){this.elem.style.display="block"; +}},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null){return this.elem[this.prop]; +}var r=parseFloat(jQuery.css(this.elem,this.prop,force)); +return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0; +},custom:function(from,to,unit){this.startTime=now(); +this.start=from; +this.end=to; +this.unit=unit||this.unit||"px"; +this.now=this.start; +this.pos=this.state=0; +this.update(); +var self=this; +function t(gotoEnd){return self.step(gotoEnd); +}t.elem=this.elem; +jQuery.timers.push(t); +if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers; +for(var i=0; +ithis.options.duration+this.startTime){this.now=this.end; +this.pos=this.state=1; +this.update(); +this.options.curAnim[this.prop]=true; +var done=true; +for(var i in this.options.curAnim){if(this.options.curAnim[i]!==true){done=false; +}}if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow; +this.elem.style.display=this.options.display; +if(jQuery.css(this.elem,"display")=="none"){this.elem.style.display="block"; +}}if(this.options.hide){this.elem.style.display="none"; +}if(this.options.hide||this.options.show){for(var p in this.options.curAnim){jQuery.attr(this.elem.style,p,this.options.orig[p]); +}}}if(done){this.options.complete.call(this.elem); +}return false; +}else{var n=t-this.startTime; +this.state=n/this.options.duration; +this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration); +this.now=this.start+((this.end-this.start)*this.pos); +this.update(); +}return true; +}}; +jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now; +},scrollTop:function(fx){fx.elem.scrollTop=fx.now; +},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now); +},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit; +}}}); +jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results; +if(elem){with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed"; +if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect(); +add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop)); +add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop); +}else{add(elem.offsetLeft,elem.offsetTop); +while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop); +if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2){border(offsetParent); +}if(!fixed&&css(offsetParent,"position")=="fixed"){fixed=true; +}offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent; +offsetParent=offsetParent.offsetParent; +}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display"))){add(-parent.scrollLeft,-parent.scrollTop); +}if(mozilla&&css(parent,"overflow")!="visible"){border(parent); +}parent=parent.parentNode; +}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute")){add(-doc.body.offsetLeft,-doc.body.offsetTop); +}if(fixed){add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop)); +}}results={top:top,left:left}; +}}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true)); +}function add(l,t){left+=parseInt(l,10)||0; +top+=parseInt(t,10)||0; +}return results; +}; +jQuery.fn.extend({position:function(){var left=0,top=0,results; +if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset(); +offset.top-=num(this,"marginTop"); +offset.left-=num(this,"marginLeft"); +parentOffset.top+=num(offsetParent,"borderTopWidth"); +parentOffset.left+=num(offsetParent,"borderLeftWidth"); +results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left}; +}return results; +},offsetParent:function(){var offsetParent=this[0].offsetParent; +while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,"position")=="static")){offsetParent=offsetParent.offsetParent; +}return jQuery(offsetParent); +}}); +jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name; +jQuery.fn[method]=function(val){if(!this[0]){return ; +}return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val; +}):this[0]==window||this[0]==document?self[i?"pageYOffset":"pageXOffset"]||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method]; +}; +}); +jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom"; +jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br); +}; +jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0); +}; +}); +})(); + + +/* platform.js */ +SimileAjax.jQuery=jQuery.noConflict(true); +if(typeof window["$"]=="undefined"){window.$=SimileAjax.jQuery; +}SimileAjax.Platform.os={isMac:false,isWin:false,isWin32:false,isUnix:false}; +SimileAjax.Platform.browser={isIE:false,isNetscape:false,isMozilla:false,isFirefox:false,isOpera:false,isSafari:false,majorVersion:0,minorVersion:0}; +(function(){var C=navigator.appName.toLowerCase(); +var A=navigator.userAgent.toLowerCase(); +SimileAjax.Platform.os.isMac=(A.indexOf("mac")!=-1); +SimileAjax.Platform.os.isWin=(A.indexOf("win")!=-1); +SimileAjax.Platform.os.isWin32=SimileAjax.Platform.isWin&&(A.indexOf("95")!=-1||A.indexOf("98")!=-1||A.indexOf("nt")!=-1||A.indexOf("win32")!=-1||A.indexOf("32bit")!=-1); +SimileAjax.Platform.os.isUnix=(A.indexOf("x11")!=-1); +SimileAjax.Platform.browser.isIE=(C.indexOf("microsoft")!=-1); +SimileAjax.Platform.browser.isNetscape=(C.indexOf("netscape")!=-1); +SimileAjax.Platform.browser.isMozilla=(A.indexOf("mozilla")!=-1); +SimileAjax.Platform.browser.isFirefox=(A.indexOf("firefox")!=-1); +SimileAjax.Platform.browser.isOpera=(C.indexOf("opera")!=-1); +SimileAjax.Platform.browser.isSafari=(C.indexOf("safari")!=-1); +var E=function(G){var F=G.split("."); +SimileAjax.Platform.browser.majorVersion=parseInt(F[0]); +SimileAjax.Platform.browser.minorVersion=parseInt(F[1]); +}; +var B=function(H,G,I){var F=H.indexOf(G,I); +return F>=0?F:H.length; +}; +if(SimileAjax.Platform.browser.isMozilla){var D=A.indexOf("mozilla/"); +if(D>=0){E(A.substring(D+8,B(A," ",D))); +}}if(SimileAjax.Platform.browser.isIE){var D=A.indexOf("msie "); +if(D>=0){E(A.substring(D+5,B(A,";",D))); +}}if(SimileAjax.Platform.browser.isNetscape){var D=A.indexOf("rv:"); +if(D>=0){E(A.substring(D+3,B(A,")",D))); +}}if(SimileAjax.Platform.browser.isFirefox){var D=A.indexOf("firefox/"); +if(D>=0){E(A.substring(D+8,B(A," ",D))); +}}if(!("localeCompare" in String.prototype)){String.prototype.localeCompare=function(F){if(thisF){return 1; +}else{return 0; +}}}; +}})(); +SimileAjax.Platform.getDefaultLocale=function(){return SimileAjax.Platform.clientLocale; +}; + + +/* ajax.js */ +SimileAjax.ListenerQueue=function(A){this._listeners=[]; +this._wildcardHandlerName=A; +}; +SimileAjax.ListenerQueue.prototype.add=function(A){this._listeners.push(A); +}; +SimileAjax.ListenerQueue.prototype.remove=function(C){var A=this._listeners; +for(var B=0; +B0)?this._a[0]:null; +}; +SimileAjax.SortedArray.prototype.getLast=function(){return(this._a.length>0)?this._a[this._a.length-1]:null; +}; +SimileAjax.EventIndex=function(B){var A=this; +this._unit=(B!=null)?B:SimileAjax.NativeDateUnit; +this._events=new SimileAjax.SortedArray(function(C,D){return A._unit.compare(C.getStart(),D.getStart()); +}); +this._idToEvent={}; +this._indexed=true; +}; +SimileAjax.EventIndex.prototype.getUnit=function(){return this._unit; +}; +SimileAjax.EventIndex.prototype.getEvent=function(A){return this._idToEvent[A]; +}; +SimileAjax.EventIndex.prototype.add=function(A){this._events.add(A); +this._idToEvent[A.getID()]=A; +this._indexed=false; +}; +SimileAjax.EventIndex.prototype.removeAll=function(){this._events.removeAll(); +this._idToEvent={}; +this._indexed=false; +}; +SimileAjax.EventIndex.prototype.getCount=function(){return this._events.length(); +}; +SimileAjax.EventIndex.prototype.getIterator=function(A,B){if(!this._indexed){this._index(); +}return new SimileAjax.EventIndex._Iterator(this._events,A,B,this._unit); +}; +SimileAjax.EventIndex.prototype.getReverseIterator=function(A,B){if(!this._indexed){this._index(); +}return new SimileAjax.EventIndex._ReverseIterator(this._events,A,B,this._unit); +}; +SimileAjax.EventIndex.prototype.getAllIterator=function(){return new SimileAjax.EventIndex._AllIterator(this._events); +}; +SimileAjax.EventIndex.prototype.getEarliestDate=function(){var A=this._events.getFirst(); +return(A==null)?null:A.getStart(); +}; +SimileAjax.EventIndex.prototype.getLatestDate=function(){var A=this._events.getLast(); +if(A==null){return null; +}if(!this._indexed){this._index(); +}var C=A._earliestOverlapIndex; +var B=this._events.elementAt(C).getEnd(); +for(var D=C+1; +D=0){this._currentIndex=this._events.elementAt(this._currentIndex-1)._earliestOverlapIndex; +}this._currentIndex--; +this._maxIndex=A.find(function(E){return B.compare(E.getStart(),D); +}); +this._hasNext=false; +this._next=null; +this._findNext(); +}; +SimileAjax.EventIndex._Iterator.prototype={hasNext:function(){return this._hasNext; +},next:function(){if(this._hasNext){var A=this._next; +this._findNext(); +return A; +}else{return null; +}},_findNext:function(){var B=this._unit; +while((++this._currentIndex)0){this._next=A; +this._hasNext=true; +return ; +}}this._next=null; +this._hasNext=false; +}}; +SimileAjax.EventIndex._ReverseIterator=function(A,C,D,B){this._events=A; +this._startDate=C; +this._endDate=D; +this._unit=B; +this._minIndex=A.find(function(E){return B.compare(E.getStart(),C); +}); +if(this._minIndex-1>=0){this._minIndex=this._events.elementAt(this._minIndex-1)._earliestOverlapIndex; +}this._maxIndex=A.find(function(E){return B.compare(E.getStart(),D); +}); +this._currentIndex=this._maxIndex; +this._hasNext=false; +this._next=null; +this._findNext(); +}; +SimileAjax.EventIndex._ReverseIterator.prototype={hasNext:function(){return this._hasNext; +},next:function(){if(this._hasNext){var A=this._next; +this._findNext(); +return A; +}else{return null; +}},_findNext:function(){var B=this._unit; +while((--this._currentIndex)>=this._minIndex){var A=this._events.elementAt(this._currentIndex); +if(B.compare(A.getStart(),this._endDate)<0&&B.compare(A.getEnd(),this._startDate)>0){this._next=A; +this._hasNext=true; +return ; +}}this._next=null; +this._hasNext=false; +}}; +SimileAjax.EventIndex._AllIterator=function(A){this._events=A; +this._index=0; +}; +SimileAjax.EventIndex._AllIterator.prototype={hasNext:function(){return this._index0&&B.length<8){var C=B.indexOf(" "); +if(C>0){var A=parseInt(B.substr(0,C)); +var G=B.substr(C+1); +if(G.toLowerCase()=="bc"){A=1-A; +}}else{var A=parseInt(B); +}var E=new Date(0); +E.setUTCFullYear(A); +return E; +}try{return new Date(Date.parse(B)); +}catch(D){return null; +}}; +SimileAjax.DateTime.roundDownToInterval=function(E,B,I,K,A){var F=I*SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR]; +var J=new Date(E.getTime()+F); +var C=function(L){L.setUTCMilliseconds(0); +L.setUTCSeconds(0); +L.setUTCMinutes(0); +L.setUTCHours(0); +}; +var D=function(L){C(L); +L.setUTCDate(1); +L.setUTCMonth(0); +}; +switch(B){case SimileAjax.DateTime.MILLISECOND:var H=J.getUTCMilliseconds(); +J.setUTCMilliseconds(H-(H%K)); +break; +case SimileAjax.DateTime.SECOND:J.setUTCMilliseconds(0); +var H=J.getUTCSeconds(); +J.setUTCSeconds(H-(H%K)); +break; +case SimileAjax.DateTime.MINUTE:J.setUTCMilliseconds(0); +J.setUTCSeconds(0); +var H=J.getUTCMinutes(); +J.setTime(J.getTime()-(H%K)*SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]); +break; +case SimileAjax.DateTime.HOUR:J.setUTCMilliseconds(0); +J.setUTCSeconds(0); +J.setUTCMinutes(0); +var H=J.getUTCHours(); +J.setUTCHours(H-(H%K)); +break; +case SimileAjax.DateTime.DAY:C(J); +break; +case SimileAjax.DateTime.WEEK:C(J); +var G=(J.getUTCDay()+7-A)%7; +J.setTime(J.getTime()-G*SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.DAY]); +break; +case SimileAjax.DateTime.MONTH:C(J); +J.setUTCDate(1); +var H=J.getUTCMonth(); +J.setUTCMonth(H-(H%K)); +break; +case SimileAjax.DateTime.YEAR:D(J); +var H=J.getUTCFullYear(); +J.setUTCFullYear(H-(H%K)); +break; +case SimileAjax.DateTime.DECADE:D(J); +J.setUTCFullYear(Math.floor(J.getUTCFullYear()/10)*10); +break; +case SimileAjax.DateTime.CENTURY:D(J); +J.setUTCFullYear(Math.floor(J.getUTCFullYear()/100)*100); +break; +case SimileAjax.DateTime.MILLENNIUM:D(J); +J.setUTCFullYear(Math.floor(J.getUTCFullYear()/1000)*1000); +break; +}E.setTime(J.getTime()-F); +}; +SimileAjax.DateTime.roundUpToInterval=function(C,F,D,A,B){var E=C.getTime(); +SimileAjax.DateTime.roundDownToInterval(C,F,D,A,B); +if(C.getTime()-1){A=A.replace("px",""); +}if(C.indexOf("px")>-1){C=C.replace("px",""); +}return{w:A,h:C}; +}; +SimileAjax.DOM.getStyle=function(B,A){if(B.currentStyle){var C=B.currentStyle[A]; +}else{if(window.getComputedStyle){var C=document.defaultView.getComputedStyle(B,null).getPropertyValue(A); +}else{var C=""; +}}return C; +}; +SimileAjax.DOM.getEventRelativeCoordinates=function(B,C){if(SimileAjax.Platform.browser.isIE){if(B.type=="mousewheel"){var A=SimileAjax.DOM.getPageCoordinates(C); +return{x:B.clientX-A.left,y:B.clientY-A.top}; +}else{return{x:B.offsetX,y:B.offsetY}; +}}else{var A=SimileAjax.DOM.getPageCoordinates(C); +if((B.type=="DOMMouseScroll")&&SimileAjax.Platform.browser.isFirefox&&(SimileAjax.Platform.browser.majorVersion==2)){return{x:B.screenX-A.left,y:B.screenY-A.top}; +}else{return{x:B.pageX-A.left,y:B.pageY-A.top}; +}}}; +SimileAjax.DOM.getEventPageCoordinates=function(A){if(SimileAjax.Platform.browser.isIE){return{x:A.clientX+document.body.scrollLeft,y:A.clientY+document.body.scrollTop}; +}else{return{x:A.pageX,y:A.pageY}; +}}; +SimileAjax.DOM.hittest=function(A,C,B){return SimileAjax.DOM._hittest(document.body,A,C,B); +}; +SimileAjax.DOM._hittest=function(C,L,K,A){var M=C.childNodes; +outer:for(var G=0; +G"; +return B.firstChild; +}; +SimileAjax.DOM.createDOMFromTemplate=function(A){var B={}; +B.elmt=SimileAjax.DOM._createDOMFromTemplate(A,B,null); +return B; +}; +SimileAjax.DOM._createDOMFromTemplate=function(F,G,D){if(F==null){return null; +}else{if(typeof F!="object"){var C=document.createTextNode(F); +if(D!=null){D.appendChild(C); +}return C; +}else{var A=null; +if("tag" in F){var J=F.tag; +if(D!=null){if(J=="tr"){A=D.insertRow(D.rows.length); +}else{if(J=="td"){A=D.insertCell(D.cells.length); +}}}if(A==null){A=J=="input"?SimileAjax.DOM.createInputElement(F.type):document.createElement(J); +if(D!=null){D.appendChild(A); +}}}else{A=F.elmt; +if(D!=null){D.appendChild(A); +}}for(var B in F){var H=F[B]; +if(B=="field"){G[H]=A; +}else{if(B=="className"){A.className=H; +}else{if(B=="id"){A.id=H; +}else{if(B=="title"){A.title=H; +}else{if(B=="type"&&A.tagName=="input"){}else{if(B=="style"){for(n in H){var I=H[n]; +if(n=="float"){n=SimileAjax.Platform.browser.isIE?"styleFloat":"cssFloat"; +}A.style[n]=I; +}}else{if(B=="children"){for(var E=0; +E0){A.removeAttribute("id"); +if(E in B){var C=A.parentNode; +C.insertBefore(B[E],A); +C.removeChild(A); +D[E]=B[E]; +return ; +}else{D[E]=A; +}}if(A.hasChildNodes()){SimileAjax.DOM._processDOMChildrenConstructedFromString(D,A,B); +}}; +SimileAjax.DOM._processDOMChildrenConstructedFromString=function(E,B,D){var C=B.firstChild; +while(C!=null){var A=C.nextSibling; +if(C.nodeType==1){SimileAjax.DOM._processDOMConstructedFromString(E,C,D); +}C=A; +}}; + + +/* graphics.js */ +SimileAjax.Graphics=new Object(); +SimileAjax.Graphics.pngIsTranslucent=(!SimileAjax.Platform.browser.isIE)||(SimileAjax.Platform.browser.majorVersion>6); +SimileAjax.Graphics._createTranslucentImage1=function(A,C){var B=document.createElement("img"); +B.setAttribute("src",A); +if(C!=null){B.style.verticalAlign=C; +}return B; +}; +SimileAjax.Graphics._createTranslucentImage2=function(A,C){var B=document.createElement("img"); +B.style.width="1px"; +B.style.height="1px"; +B.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+A+"', sizingMethod='image')"; +B.style.verticalAlign=(C!=null)?C:"middle"; +return B; +}; +SimileAjax.Graphics.createTranslucentImage=SimileAjax.Graphics.pngIsTranslucent?SimileAjax.Graphics._createTranslucentImage1:SimileAjax.Graphics._createTranslucentImage2; +SimileAjax.Graphics._createTranslucentImageHTML1=function(A,B){return'"; +}; +SimileAjax.Graphics._createTranslucentImageHTML2=function(A,C){var B="width: 1px; height: 1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+A+"', sizingMethod='image');"+(C!=null?" vertical-align: "+C+";":""); +return"'; +}; +SimileAjax.Graphics.createTranslucentImageHTML=SimileAjax.Graphics.pngIsTranslucent?SimileAjax.Graphics._createTranslucentImageHTML1:SimileAjax.Graphics._createTranslucentImageHTML2; +SimileAjax.Graphics.setOpacity=function(B,A){if(SimileAjax.Platform.browser.isIE){B.style.filter="progid:DXImageTransform.Microsoft.Alpha(Style=0,Opacity="+A+")"; +}else{var C=(A/100).toString(); +B.style.opacity=C; +B.style.MozOpacity=C; +}}; +SimileAjax.Graphics._bubbleMargins={top:33,bottom:42,left:33,right:40}; +SimileAjax.Graphics._arrowOffsets={top:0,bottom:9,left:1,right:8}; +SimileAjax.Graphics._bubblePadding=15; +SimileAjax.Graphics._bubblePointOffset=6; +SimileAjax.Graphics._halfArrowWidth=18; +SimileAjax.Graphics.createBubbleForContentAndPoint=function(E,D,B,A,C){if(typeof A!="number"){A=300; +}E.style.position="absolute"; +E.style.left="-5000px"; +E.style.top="0px"; +E.style.width=A+"px"; +document.body.appendChild(E); +window.setTimeout(function(){var F=E.scrollWidth+10; +var H=E.scrollHeight+10; +var G=SimileAjax.Graphics.createBubbleForPoint(D,B,F,H,C); +document.body.removeChild(E); +E.style.position="static"; +E.style.left=""; +E.style.top=""; +E.style.width=F+"px"; +G.content.appendChild(E); +},200); +}; +SimileAjax.Graphics.createBubbleForPoint=function(B,A,M,Q,H){function S(){if(typeof window.innerHeight=="number"){return{w:window.innerWidth,h:window.innerHeight}; +}else{if(document.documentElement&&document.documentElement.clientHeight){return{w:document.documentElement.clientWidth,h:document.documentElement.clientHeight}; +}else{if(document.body&&document.body.clientHeight){return{w:document.body.clientWidth,h:document.body.clientHeight}; +}}}}var L=function(){if(!W._closed){document.body.removeChild(W._div); +W._doc=null; +W._div=null; +W._content=null; +W._closed=true; +}}; +var W={_closed:false}; +var O=S(); +var E=O.w; +var F=O.h; +var C=SimileAjax.Graphics._bubbleMargins; +M=parseInt(M,10); +Q=parseInt(Q,10); +var N=C.left+M+C.right; +var T=C.top+Q+C.bottom; +var R=SimileAjax.Graphics.pngIsTranslucent; +var D=SimileAjax.urlPrefix; +var J=function(Y,X,Z,a){Y.style.position="absolute"; +Y.style.width=Z+"px"; +Y.style.height=a+"px"; +if(R){Y.style.background="url("+X+")"; +}else{Y.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+X+"', sizingMethod='crop')"; +}}; +var K=document.createElement("div"); +K.style.width=N+"px"; +K.style.height=T+"px"; +K.style.position="absolute"; +K.style.zIndex=1000; +var V=SimileAjax.WindowManager.pushLayer(L,true,K); +W._div=K; +W.close=function(){SimileAjax.WindowManager.popLayer(V); +}; +var G=document.createElement("div"); +G.style.width="100%"; +G.style.height="100%"; +G.style.position="relative"; +K.appendChild(G); +var P=function(X,c,b,Y,a){var Z=document.createElement("div"); +Z.style.left=c+"px"; +Z.style.top=b+"px"; +J(Z,X,Y,a); +G.appendChild(Z); +}; +P(D+"images/bubble-top-left.png",0,0,C.left,C.top); +P(D+"images/bubble-top.png",C.left,0,M,C.top); +P(D+"images/bubble-top-right.png",C.left+M,0,C.right,C.top); +P(D+"images/bubble-left.png",0,C.top,C.left,Q); +P(D+"images/bubble-right.png",C.left+M,C.top,C.right,Q); +P(D+"images/bubble-bottom-left.png",0,C.top+Q,C.left,C.bottom); +P(D+"images/bubble-bottom.png",C.left,C.top+Q,M,C.bottom); +P(D+"images/bubble-bottom-right.png",C.left+M,C.top+Q,C.right,C.bottom); +var U=document.createElement("div"); +U.style.left=(N-C.right+SimileAjax.Graphics._bubblePadding-16-2)+"px"; +U.style.top=(C.top-SimileAjax.Graphics._bubblePadding+1)+"px"; +U.style.cursor="pointer"; +J(U,D+"images/close-button.png",16,16); +SimileAjax.WindowManager.registerEventWithObject(U,"click",W,"close"); +G.appendChild(U); +var I=document.createElement("div"); +I.style.position="absolute"; +I.style.left=C.left+"px"; +I.style.top=C.top+"px"; +I.style.width=M+"px"; +I.style.height=Q+"px"; +I.style.overflow="auto"; +I.style.background="white"; +G.appendChild(I); +W.content=I; +(function(){if(B-SimileAjax.Graphics._halfArrowWidth-SimileAjax.Graphics._bubblePadding>0&&B+SimileAjax.Graphics._halfArrowWidth+SimileAjax.Graphics._bubblePadding0))){var X=document.createElement("div"); +X.style.left=(B-SimileAjax.Graphics._halfArrowWidth-Z)+"px"; +X.style.top=(C.top+Q)+"px"; +J(X,D+"images/bubble-bottom-arrow.png",37,C.bottom); +G.appendChild(X); +K.style.left=Z+"px"; +K.style.top=(A-SimileAjax.Graphics._bubblePointOffset-T+SimileAjax.Graphics._arrowOffsets.bottom)+"px"; +return ; +}else{if((H&&H=="bottom")||(!H&&(A+SimileAjax.Graphics._bubblePointOffset+T0))){var X=document.createElement("div"); +X.style.left=(C.left+M)+"px"; +X.style.top=(A-SimileAjax.Graphics._halfArrowWidth-Y)+"px"; +J(X,D+"images/bubble-right-arrow.png",C.right,37); +G.appendChild(X); +K.style.left=(B-SimileAjax.Graphics._bubblePointOffset-N+SimileAjax.Graphics._arrowOffsets.right)+"px"; +K.style.top=Y+"px"; +}else{if((H&&H=="right")||(!H&&(B-SimileAjax.Graphics._bubblePointOffset-N"; +var C=G.firstChild; +C.style.width=B+"px"; +C.style.height=D+"px"; +C.onmousedown=function(H){H=(H)?H:((event)?event:null); +if(H.button==2){C.value=E(); +C.select(); +}}; +return G; +}; +SimileAjax.Graphics.getFontRenderingContext=function(A,B){return new SimileAjax.Graphics._FontRenderingContext(A,B); +}; +SimileAjax.Graphics._FontRenderingContext=function(A,B){this._elmt=A; +this._elmt.style.visibility="hidden"; +if(typeof B=="string"){this._elmt.style.width=B; +}else{if(typeof B=="number"){this._elmt.style.width=B+"px"; +}}}; +SimileAjax.Graphics._FontRenderingContext.prototype.dispose=function(){this._elmt=null; +}; +SimileAjax.Graphics._FontRenderingContext.prototype.update=function(){this._elmt.innerHTML="A"; +this._lineHeight=this._elmt.offsetHeight; +}; +SimileAjax.Graphics._FontRenderingContext.prototype.computeSize=function(A){this._elmt.innerHTML=A; +return{width:this._elmt.offsetWidth,height:this._elmt.offsetHeight}; +}; +SimileAjax.Graphics._FontRenderingContext.prototype.getLineHeight=function(){return this._lineHeight; +}; + + +/* history.js */ +SimileAjax.History={maxHistoryLength:10,historyFile:"__history__.html",enabled:true,_initialized:false,_listeners:new SimileAjax.ListenerQueue(),_actions:[],_baseIndex:0,_currentIndex:0,_plainDocumentTitle:document.title}; +SimileAjax.History.formatHistoryEntryTitle=function(A){return SimileAjax.History._plainDocumentTitle+" {"+A+"}"; +}; +SimileAjax.History.initialize=function(){if(SimileAjax.History._initialized){return ; +}if(SimileAjax.History.enabled){var A=document.createElement("iframe"); +A.id="simile-ajax-history"; +A.style.position="absolute"; +A.style.width="10px"; +A.style.height="10px"; +A.style.top="0px"; +A.style.left="0px"; +A.style.visibility="hidden"; +A.src=SimileAjax.History.historyFile+"?0"; +document.body.appendChild(A); +SimileAjax.DOM.registerEvent(A,"load",SimileAjax.History._handleIFrameOnLoad); +SimileAjax.History._iframe=A; +}SimileAjax.History._initialized=true; +}; +SimileAjax.History.addListener=function(A){SimileAjax.History.initialize(); +SimileAjax.History._listeners.add(A); +}; +SimileAjax.History.removeListener=function(A){SimileAjax.History.initialize(); +SimileAjax.History._listeners.remove(A); +}; +SimileAjax.History.addAction=function(A){SimileAjax.History.initialize(); +SimileAjax.History._listeners.fire("onBeforePerform",[A]); +window.setTimeout(function(){try{A.perform(); +SimileAjax.History._listeners.fire("onAfterPerform",[A]); +if(SimileAjax.History.enabled){SimileAjax.History._actions=SimileAjax.History._actions.slice(0,SimileAjax.History._currentIndex-SimileAjax.History._baseIndex); +SimileAjax.History._actions.push(A); +SimileAjax.History._currentIndex++; +var C=SimileAjax.History._actions.length-SimileAjax.History.maxHistoryLength; +if(C>0){SimileAjax.History._actions=SimileAjax.History._actions.slice(C); +SimileAjax.History._baseIndex+=C; +}try{SimileAjax.History._iframe.contentWindow.location.search="?"+SimileAjax.History._currentIndex; +}catch(B){var D=SimileAjax.History.formatHistoryEntryTitle(A.label); +document.title=D; +}}}catch(B){SimileAjax.Debug.exception(B,"Error adding action {"+A.label+"} to history"); +}},0); +}; +SimileAjax.History.addLengthyAction=function(B,A,C){SimileAjax.History.addAction({perform:B,undo:A,label:C,uiLayer:SimileAjax.WindowManager.getBaseLayer(),lengthy:true}); +}; +SimileAjax.History._handleIFrameOnLoad=function(){try{var B=SimileAjax.History._iframe.contentWindow.location.search; +var F=(B.length==0)?0:Math.max(0,parseInt(B.substr(1))); +var D=function(){var G=F-SimileAjax.History._currentIndex; +SimileAjax.History._currentIndex+=G; +SimileAjax.History._baseIndex+=G; +SimileAjax.History._iframe.contentWindow.location.search="?"+F; +}; +if(FF&&SimileAjax.History._currentIndex>SimileAjax.History._baseIndex){SimileAjax.History._currentIndex--; +var G=SimileAjax.History._actions[SimileAjax.History._currentIndex-SimileAjax.History._baseIndex]; +try{G.undo(); +}catch(H){SimileAjax.Debug.exception(H,"History: Failed to undo action {"+G.label+"}"); +}}SimileAjax.History._listeners.fire("onAfterUndoSeveral",[]); +D(); +},0); +}else{if(F>SimileAjax.History._currentIndex){SimileAjax.History._listeners.fire("onBeforeRedoSeveral",[]); +window.setTimeout(function(){while(SimileAjax.History._currentIndex=0&&A=A.length&&this.substr(0,A.length)==A; +}; +String.prototype.endsWith=function(A){return this.length>=A.length&&this.substr(this.length-A.length)==A; +}; +String.substitute=function(C,A){var D=""; +var F=0; +while(FF&&C.charAt(B-1)=="\\"){D+=C.substring(F,B-1)+"%"; +F=B+1; +}else{var E=parseInt(C.charAt(B+1)); +if(isNaN(E)||E>=A.length){D+=C.substring(F,B+2); +}else{D+=C.substring(F,B)+A[E].toString(); +}F=B+2; +}}}if(F0?B:A; +}; +SimileAjax.NativeDateUnit.change=function(A,B){return new Date(A.getTime()+B); +}; + + +/* window-manager.js */ +SimileAjax.WindowManager={_initialized:false,_listeners:[],_draggedElement:null,_draggedElementCallback:null,_dropTargetHighlightElement:null,_lastCoords:null,_ghostCoords:null,_draggingMode:"",_dragging:false,_layers:[]}; +SimileAjax.WindowManager.initialize=function(){if(SimileAjax.WindowManager._initialized){return ; +}SimileAjax.DOM.registerEvent(document.body,"mousedown",SimileAjax.WindowManager._onBodyMouseDown); +SimileAjax.DOM.registerEvent(document.body,"mousemove",SimileAjax.WindowManager._onBodyMouseMove); +SimileAjax.DOM.registerEvent(document.body,"mouseup",SimileAjax.WindowManager._onBodyMouseUp); +SimileAjax.DOM.registerEvent(document,"keydown",SimileAjax.WindowManager._onBodyKeyDown); +SimileAjax.DOM.registerEvent(document,"keyup",SimileAjax.WindowManager._onBodyKeyUp); +SimileAjax.WindowManager._layers.push({index:0}); +SimileAjax.WindowManager._historyListener={onBeforeUndoSeveral:function(){},onAfterUndoSeveral:function(){},onBeforeUndo:function(){},onAfterUndo:function(){},onBeforeRedoSeveral:function(){},onAfterRedoSeveral:function(){},onBeforeRedo:function(){},onAfterRedo:function(){}}; +SimileAjax.History.addListener(SimileAjax.WindowManager._historyListener); +SimileAjax.WindowManager._initialized=true; +}; +SimileAjax.WindowManager.getBaseLayer=function(){SimileAjax.WindowManager.initialize(); +return SimileAjax.WindowManager._layers[0]; +}; +SimileAjax.WindowManager.getHighestLayer=function(){SimileAjax.WindowManager.initialize(); +return SimileAjax.WindowManager._layers[SimileAjax.WindowManager._layers.length-1]; +}; +SimileAjax.WindowManager.registerEventWithObject=function(D,A,E,B,C){SimileAjax.WindowManager.registerEvent(D,A,function(G,F,H){return E[B].call(E,G,F,H); +},C); +}; +SimileAjax.WindowManager.registerEvent=function(D,B,E,C){if(C==null){C=SimileAjax.WindowManager.getHighestLayer(); +}var A=function(G,F,I){if(SimileAjax.WindowManager._canProcessEventAtLayer(C)){SimileAjax.WindowManager._popToLayer(C.index); +try{E(G,F,I); +}catch(H){SimileAjax.Debug.exception(H); +}}SimileAjax.DOM.cancelEvent(F); +return false; +}; +SimileAjax.DOM.registerEvent(D,B,A); +}; +SimileAjax.WindowManager.pushLayer=function(C,D,B){var A={onPop:C,index:SimileAjax.WindowManager._layers.length,ephemeral:(D),elmt:B}; +SimileAjax.WindowManager._layers.push(A); +return A; +}; +SimileAjax.WindowManager.popLayer=function(B){for(var A=1; +A0&&SimileAjax.WindowManager._layers[E].ephemeral){var D=SimileAjax.WindowManager._layers[E]; +if(D.elmt!=null){var C=D.elmt; +var B=SimileAjax.DOM.getPageCoordinates(C); +if(F.x>=B.left&&F.x<(B.left+C.offsetWidth)&&F.y>=B.top&&F.y<(B.top+C.offsetHeight)){break; +}}E--; +}SimileAjax.WindowManager._popToLayer(E); +}; +SimileAjax.WindowManager._onBodyMouseDown=function(B,A,C){if(!("eventPhase" in A)||A.eventPhase==A.BUBBLING_PHASE){SimileAjax.WindowManager.cancelPopups(A); +}}; +SimileAjax.WindowManager._handleMouseDown=function(B,A,C){SimileAjax.WindowManager._draggedElement=B; +SimileAjax.WindowManager._draggedElementCallback=C; +SimileAjax.WindowManager._lastCoords={x:A.clientX,y:A.clientY}; +SimileAjax.DOM.cancelEvent(A); +return false; +}; +SimileAjax.WindowManager._onBodyKeyDown=function(C,A,D){if(SimileAjax.WindowManager._dragging){if(A.keyCode==27){SimileAjax.WindowManager._cancelDragging(); +}else{if((A.keyCode==17||A.keyCode==16)&&SimileAjax.WindowManager._draggingMode!="copy"){SimileAjax.WindowManager._draggingMode="copy"; +var B=SimileAjax.Graphics.createTranslucentImage(SimileAjax.urlPrefix+"images/copy.png"); +B.style.position="absolute"; +B.style.left=(SimileAjax.WindowManager._ghostCoords.left-16)+"px"; +B.style.top=(SimileAjax.WindowManager._ghostCoords.top)+"px"; +document.body.appendChild(B); +SimileAjax.WindowManager._draggingModeIndicatorElmt=B; +}}}}; +SimileAjax.WindowManager._onBodyKeyUp=function(B,A,C){if(SimileAjax.WindowManager._dragging){if(A.keyCode==17||A.keyCode==16){SimileAjax.WindowManager._draggingMode=""; +if(SimileAjax.WindowManager._draggingModeIndicatorElmt!=null){document.body.removeChild(SimileAjax.WindowManager._draggingModeIndicatorElmt); +SimileAjax.WindowManager._draggingModeIndicatorElmt=null; +}}}}; +SimileAjax.WindowManager._onBodyMouseMove=function(C,M,B){if(SimileAjax.WindowManager._draggedElement!=null){var L=SimileAjax.WindowManager._draggedElementCallback; +var G=SimileAjax.WindowManager._lastCoords; +var J=M.clientX-G.x; +var I=M.clientY-G.y; +if(!SimileAjax.WindowManager._dragging){if(Math.abs(J)>5||Math.abs(I)>5){try{if("onDragStart" in L){L.onDragStart(); +}if("ghost" in L&&L.ghost){var P=SimileAjax.WindowManager._draggedElement; +SimileAjax.WindowManager._ghostCoords=SimileAjax.DOM.getPageCoordinates(P); +SimileAjax.WindowManager._ghostCoords.left+=J; +SimileAjax.WindowManager._ghostCoords.top+=I; +var K=P.cloneNode(true); +K.style.position="absolute"; +K.style.left=SimileAjax.WindowManager._ghostCoords.left+"px"; +K.style.top=SimileAjax.WindowManager._ghostCoords.top+"px"; +K.style.zIndex=1000; +SimileAjax.Graphics.setOpacity(K,50); +document.body.appendChild(K); +L._ghostElmt=K; +}SimileAjax.WindowManager._dragging=true; +SimileAjax.WindowManager._lastCoords={x:M.clientX,y:M.clientY}; +document.body.focus(); +}catch(H){SimileAjax.Debug.exception("WindowManager: Error handling mouse down",H); +SimileAjax.WindowManager._cancelDragging(); +}}}else{try{SimileAjax.WindowManager._lastCoords={x:M.clientX,y:M.clientY}; +if("onDragBy" in L){L.onDragBy(J,I); +}if("_ghostElmt" in L){var K=L._ghostElmt; +SimileAjax.WindowManager._ghostCoords.left+=J; +SimileAjax.WindowManager._ghostCoords.top+=I; +K.style.left=SimileAjax.WindowManager._ghostCoords.left+"px"; +K.style.top=SimileAjax.WindowManager._ghostCoords.top+"px"; +if(SimileAjax.WindowManager._draggingModeIndicatorElmt!=null){var O=SimileAjax.WindowManager._draggingModeIndicatorElmt; +O.style.left=(SimileAjax.WindowManager._ghostCoords.left-16)+"px"; +O.style.top=SimileAjax.WindowManager._ghostCoords.top+"px"; +}if("droppable" in L&&L.droppable){var N=SimileAjax.DOM.getEventPageCoordinates(M); +var B=SimileAjax.DOM.hittest(N.x,N.y,[SimileAjax.WindowManager._ghostElmt,SimileAjax.WindowManager._dropTargetHighlightElement]); +B=SimileAjax.WindowManager._findDropTarget(B); +if(B!=SimileAjax.WindowManager._potentialDropTarget){if(SimileAjax.WindowManager._dropTargetHighlightElement!=null){document.body.removeChild(SimileAjax.WindowManager._dropTargetHighlightElement); +SimileAjax.WindowManager._dropTargetHighlightElement=null; +SimileAjax.WindowManager._potentialDropTarget=null; +}var A=false; +if(B!=null){if((!("canDropOn" in L)||L.canDropOn(B))&&(!("canDrop" in B)||B.canDrop(SimileAjax.WindowManager._draggedElement))){A=true; +}}if(A){var E=4; +var D=SimileAjax.DOM.getPageCoordinates(B); +var F=document.createElement("div"); +F.style.border=E+"px solid yellow"; +F.style.backgroundColor="yellow"; +F.style.position="absolute"; +F.style.left=D.left+"px"; +F.style.top=D.top+"px"; +F.style.width=(B.offsetWidth-E*2)+"px"; +F.style.height=(B.offsetHeight-E*2)+"px"; +SimileAjax.Graphics.setOpacity(F,30); +document.body.appendChild(F); +SimileAjax.WindowManager._potentialDropTarget=B; +SimileAjax.WindowManager._dropTargetHighlightElement=F; +}}}}}catch(H){SimileAjax.Debug.exception("WindowManager: Error handling mouse move",H); +SimileAjax.WindowManager._cancelDragging(); +}}SimileAjax.DOM.cancelEvent(M); +return false; +}}; +SimileAjax.WindowManager._onBodyMouseUp=function(B,A,E){if(SimileAjax.WindowManager._draggedElement!=null){try{if(SimileAjax.WindowManager._dragging){var C=SimileAjax.WindowManager._draggedElementCallback; +if("onDragEnd" in C){C.onDragEnd(); +}if("droppable" in C&&C.droppable){var D=false; +var E=SimileAjax.WindowManager._potentialDropTarget; +if(E!=null){if((!("canDropOn" in C)||C.canDropOn(E))&&(!("canDrop" in E)||E.canDrop(SimileAjax.WindowManager._draggedElement))){if("onDropOn" in C){C.onDropOn(E); +}E.ondrop(SimileAjax.WindowManager._draggedElement,SimileAjax.WindowManager._draggingMode); +D=true; +}}if(!D){}}}}finally{SimileAjax.WindowManager._cancelDragging(); +}SimileAjax.DOM.cancelEvent(A); +return false; +}}; +SimileAjax.WindowManager._cancelDragging=function(){var A=SimileAjax.WindowManager._draggedElementCallback; +if("_ghostElmt" in A){var B=A._ghostElmt; +document.body.removeChild(B); +delete A._ghostElmt; +}if(SimileAjax.WindowManager._dropTargetHighlightElement!=null){document.body.removeChild(SimileAjax.WindowManager._dropTargetHighlightElement); +SimileAjax.WindowManager._dropTargetHighlightElement=null; +}if(SimileAjax.WindowManager._draggingModeIndicatorElmt!=null){document.body.removeChild(SimileAjax.WindowManager._draggingModeIndicatorElmt); +SimileAjax.WindowManager._draggingModeIndicatorElmt=null; +}SimileAjax.WindowManager._draggedElement=null; +SimileAjax.WindowManager._draggedElementCallback=null; +SimileAjax.WindowManager._potentialDropTarget=null; +SimileAjax.WindowManager._dropTargetHighlightElement=null; +SimileAjax.WindowManager._lastCoords=null; +SimileAjax.WindowManager._ghostCoords=null; +SimileAjax.WindowManager._draggingMode=""; +SimileAjax.WindowManager._dragging=false; +}; +SimileAjax.WindowManager._findDropTarget=function(A){while(A!=null){if("ondrop" in A&&(typeof A.ondrop)=="function"){break; +}A=A.parentNode; +}return A; +}; + + +/* xmlhttp.js */ +SimileAjax.XmlHttp=new Object(); +SimileAjax.XmlHttp._onReadyStateChange=function(A,D,B){switch(A.readyState){case 4:try{if(A.status==0||A.status==200){if(B){B(A); +}}else{if(D){D(A.statusText,A.status,A); +}}}catch(C){SimileAjax.Debug.exception("XmlHttp: Error handling onReadyStateChange",C); +}break; +}}; +SimileAjax.XmlHttp._createRequest=function(){if(SimileAjax.Platform.browser.isIE){var B=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"]; +for(var C=0; +C + * + * + * To host the Timeline files on your own server: + * 1) Install the Timeline and Simile-Ajax files onto your webserver using + * timeline_libraries.zip or timeline_source.zip + * + * 2) Set global js variables used to send parameters to this script: + * Timeline_ajax_url -- url for simile-ajax-api.js + * Timeline_urlPrefix -- url for the *directory* that contains timeline-api.js + * Include trailing slash + * Timeline_parameters='bundle=true'; // you must set bundle to true if you are using + * // timeline_libraries.zip since only the + * // bundled libraries are included + * + * eg your html page would include + * + * + * + * + * SCRIPT PARAMETERS + * This script auto-magically figures out locale and has defaults for other parameters + * To set parameters explicity, set js global variable Timeline_parameters or include as + * parameters on the url using GET style. Eg the two next lines pass the same parameters: + * Timeline_parameters='bundle=true'; // pass parameter via js variable + * "); + } catch (e) { + createScriptElement(); + } + } else { + createScriptElement(); + } + } else { + loadMe(); + } +})(); diff --git a/vendors/simile-timeline/timeline_js/timeline-bundle.css b/vendors/simile-timeline/timeline_js/timeline-bundle.css new file mode 100644 index 000000000..7f8acdca7 --- /dev/null +++ b/vendors/simile-timeline/timeline_js/timeline-bundle.css @@ -0,0 +1,232 @@ + + +/*------------------- Horizontal / Vertical lines ----------------*/ + +/* style for ethers */ +.timeline-ether-lines{border-color:#666; border-style:dotted; position:absolute;} + +.timeline-horizontal .timeline-ether-lines{border-width:0 0 0 1px; height:100%; top: 0; width: 1px;} + +.timeline-vertical .timeline-ether-lines{border-width:1px 0 0; height:1px; left: 0; width: 100%;} + + + + +/*---------------- Weekends ---------------------------*/ + +.timeline-ether-weekends{ + position:absolute; + background-color:#FFFFE0; +} + +.timeline-vertical .timeline-ether-weekends{left:0;width:100%;} + +.timeline-horizontal .timeline-ether-weekends{top:0; height:100%;} + + + +/*-------------------------- HIGHLIGHT DECORATORS -------------------*/ +.timeline-highlight-decorator, +.timeline-highlight-point-decorator{ + position:absolute; + overflow:hidden; +} +.timeline-horizontal .timeline-highlight-point-decorator, +.timeline-horizontal .timeline-highlight-decorator{ + width:10px; + top:0; + height:100%; +} + +.timeline-vertical .timeline-highlight-point-decorator, +.timeline-vertical .timeline-highlight-decorator{ + height:10px; + width:100%; + left:0; +} + +.timeline-highlight-decorator{background-color:#FFC080;} +.timeline-highlight-point-decorator{background-color:#ff5;} + + + +/*---------------------------- LABELS -------------------------*/ +.timeline-highlight-label{position:absolute;overflow:hidden;font-size:200%;font-weight:bold;color:#999;} + + +/*---------------- VERTICAL LABEL -------------------*/ +.timeline-horizontal .timeline-highlight-label{top:0;height:100%;} +.timeline-horizontal .timeline-highlight-label td{vertical-align:middle;} +.timeline-horizontal .timeline-highlight-label-start{text-align:right;} +.timeline-horizontal .timeline-highlight-label-end{text-align:left;} + + +/*---------------- HORIZONTAL LABEL -------------------*/ +.timeline-vertical .timeline-highlight-label{left:0;width:100%;} +.timeline-vertical .timeline-highlight-label td{vertical-align:top;} +.timeline-vertical .timeline-highlight-label-start{text-align:center;} +.timeline-vertical .timeline-highlight-label-end{text-align:center;} + + + +/*-------------------------------- DATE LABELS --------------------------------*/ +.timeline-date-label{position:absolute; border:solid #aaa; color:#aaa; width:5em; height:1.5em;} +.timeline-date-label-em{color:#000;} + +/* horizontal */ +.timeline-horizontal .timeline-date-label{padding-left:2px;} +.timeline-horizontal .timeline-date-label{border-width:0 0 0 1px;} +.timeline-horizontal .timeline-date-label-em{height:2em} + +/* vertical */ +.timeline-vertical .timeline-date-label{padding-top:2px;} +.timeline-vertical .timeline-date-label{border-width:1px 0 0;} +.timeline-vertical .timeline-date-label-em{width:7em} + +/*------------------------------- Ether.highlight -------------------------*/ +.timeline-ether-highlight{position:absolute; background-color:#fff;} +.timeline-horizontal .timeline-ether-highlight{top:2px;} +.timeline-vertical .timeline-ether-highlight{left:2px;} + + + +/*------------------------------ EVENTS ------------------------------------*/ +.timeline-event-icon, .timeline-event-label,.timeline-event-tape{ + position:absolute; + cursor:pointer; +} + +.timeline-event-tape, +.timeline-small-event-tape, +.timeline-small-event-icon{ + background-color:#58A0DC; + overflow:hidden; +} + +.timeline-small-event-tape, +.timeline-small-event-icon{ + position:absolute; +} + +.timeline-event-tape{height:4px;} + +.timeline-small-event-tape{height:2px;} +.timeline-small-event-icon{width:1px; height:6px;} + + + +/*--------------------------------- TIMELINE-------------------------*/ +.timeline-ether-bg{width:100%; height:100%;} +.timeline-band-0 .timeline-ether-bg{background-color:#eee} +.timeline-band-1 .timeline-ether-bg{background-color:#ddd} +.timeline-band-2 .timeline-ether-bg{background-color:#ccc} +.timeline-band-3 .timeline-ether-bg{background-color:#aaa} +.timeline-duration-event { + position: absolute; + overflow: hidden; + border: 1px solid blue; +} + +.timeline-instant-event2 { + position: absolute; + overflow: hidden; + border-left: 1px solid blue; + padding-left: 2px; +} + +.timeline-instant-event { + position: absolute; + overflow: hidden; +} + +.timeline-event-bubble-title { + font-weight: bold; + border-bottom: 1px solid #888; + margin-bottom: 0.5em; +} + +.timeline-event-bubble-body { +} + +.timeline-event-bubble-wiki { + margin: 0.5em; + text-align: right; + color: #A0A040; +} +.timeline-event-bubble-wiki a { + color: #A0A040; +} + +.timeline-event-bubble-time { + color: #aaa; +} + +.timeline-event-bubble-image { + float: right; + padding-left: 5px; + padding-bottom: 5px; +}.timeline-container { + position: relative; + overflow: hidden; +} + +.timeline-copyright { + position: absolute; + bottom: 0px; + left: 0px; + z-index: 1000; + cursor: pointer; +} + +.timeline-message-container { + position: absolute; + top: 30%; + left: 35%; + right: 35%; + z-index: 1000; + display: none; +} +.timeline-message { + font-size: 120%; + font-weight: bold; + text-align: center; +} +.timeline-message img { + vertical-align: middle; +} + +.timeline-band { + position: absolute; + background: #eee; + z-index: 10; +} + +.timeline-band-inner { + position: relative; + width: 100%; + height: 100%; +} + +.timeline-band-input { + position: absolute; + width: 1em; + height: 1em; + overflow: hidden; + z-index: 0; +} +.timeline-band-input input{ + width: 0; +} + +.timeline-band-layer { + position: absolute; + width: 100%; + height: 100%; +} + +.timeline-band-layer-inner { + position: relative; + width: 100%; + height: 100%; +} + diff --git a/vendors/simile-timeline/timeline_js/timeline-bundle.js b/vendors/simile-timeline/timeline_js/timeline-bundle.js new file mode 100644 index 000000000..f35701f92 --- /dev/null +++ b/vendors/simile-timeline/timeline_js/timeline-bundle.js @@ -0,0 +1,2142 @@ + + +/* decorators.js */ +Timeline.SpanHighlightDecorator=function(A){this._unit=("unit" in A)?A.unit:SimileAjax.NativeDateUnit; +this._startDate=(typeof A.startDate=="string")?this._unit.parseFromObject(A.startDate):A.startDate; +this._endDate=(typeof A.endDate=="string")?this._unit.parseFromObject(A.endDate):A.endDate; +this._startLabel=A.startLabel; +this._endLabel=A.endLabel; +this._color=A.color; +this._cssClass=("cssClass" in A)?A.cssClass:null; +this._opacity=("opacity" in A)?A.opacity:100; +}; +Timeline.SpanHighlightDecorator.prototype.initialize=function(B,A){this._band=B; +this._timeline=A; +this._layerDiv=null; +}; +Timeline.SpanHighlightDecorator.prototype.paint=function(){if(this._layerDiv!=null){this._band.removeLayerDiv(this._layerDiv); +}this._layerDiv=this._band.createLayerDiv(10); +this._layerDiv.setAttribute("name","span-highlight-decorator"); +this._layerDiv.style.display="none"; +var E=this._band.getMinDate(); +var A=this._band.getMaxDate(); +if(this._unit.compare(this._startDate,A)<0&&this._unit.compare(this._endDate,E)>0){E=this._unit.later(E,this._startDate); +A=this._unit.earlier(A,this._endDate); +var F=this._band.dateToPixelOffset(E); +var I=this._band.dateToPixelOffset(A); +var H=this._timeline.getDocument(); +var K=function(){var L=H.createElement("table"); +L.insertRow(0).insertCell(0); +return L; +}; +var B=H.createElement("div"); +B.className="timeline-highlight-decorator"; +if(this._cssClass){B.className+=" "+this._cssClass; +}if(this._opacity<100){SimileAjax.Graphics.setOpacity(B,this._opacity); +}this._layerDiv.appendChild(B); +var J=K(); +J.className="timeline-highlight-label timeline-highlight-label-start"; +var C=J.rows[0].cells[0]; +C.innerHTML=this._startLabel; +if(this._cssClass){C.className="label_"+this._cssClass; +}this._layerDiv.appendChild(J); +var G=K(); +G.className="timeline-highlight-label timeline-highlight-label-end"; +var D=G.rows[0].cells[0]; +D.innerHTML=this._endLabel; +if(this._cssClass){D.className="label_"+this._cssClass; +}this._layerDiv.appendChild(G); +if(this._timeline.isHorizontal()){B.style.left=F+"px"; +B.style.width=(I-F)+"px"; +J.style.right=(this._band.getTotalViewLength()-F)+"px"; +J.style.width=(this._startLabel.length)+"em"; +G.style.left=I+"px"; +G.style.width=(this._endLabel.length)+"em"; +}else{B.style.top=F+"px"; +B.style.height=(I-F)+"px"; +J.style.bottom=F+"px"; +J.style.height="1.5px"; +G.style.top=I+"px"; +G.style.height="1.5px"; +}}this._layerDiv.style.display="block"; +}; +Timeline.SpanHighlightDecorator.prototype.softPaint=function(){}; +Timeline.PointHighlightDecorator=function(A){this._unit=("unit" in A)?A.unit:SimileAjax.NativeDateUnit; +this._date=(typeof A.date=="string")?this._unit.parseFromObject(A.date):A.date; +this._width=("width" in A)?A.width:10; +this._color=A.color; +this._cssClass=("cssClass" in A)?A.cssClass:""; +this._opacity=("opacity" in A)?A.opacity:100; +}; +Timeline.PointHighlightDecorator.prototype.initialize=function(B,A){this._band=B; +this._timeline=A; +this._layerDiv=null; +}; +Timeline.PointHighlightDecorator.prototype.paint=function(){if(this._layerDiv!=null){this._band.removeLayerDiv(this._layerDiv); +}this._layerDiv=this._band.createLayerDiv(10); +this._layerDiv.setAttribute("name","span-highlight-decorator"); +this._layerDiv.style.display="none"; +var C=this._band.getMinDate(); +var E=this._band.getMaxDate(); +if(this._unit.compare(this._date,E)<0&&this._unit.compare(this._date,C)>0){var A=this._band.dateToPixelOffset(this._date); +var B=A-Math.round(this._width/2); +var D=this._timeline.getDocument(); +var F=D.createElement("div"); +F.className="timeline-highlight-point-decorator"; +F.className+=" "+this._cssClass; +if(this._opacity<100){SimileAjax.Graphics.setOpacity(F,this._opacity); +}this._layerDiv.appendChild(F); +if(this._timeline.isHorizontal()){F.style.left=B+"px"; +}else{F.style.top=B+"px"; +}}this._layerDiv.style.display="block"; +}; +Timeline.PointHighlightDecorator.prototype.softPaint=function(){}; + + +/* detailed-painter.js */ +Timeline.DetailedEventPainter=function(A){this._params=A; +this._onSelectListeners=[]; +this._filterMatcher=null; +this._highlightMatcher=null; +this._frc=null; +this._eventIdToElmt={}; +}; +Timeline.DetailedEventPainter.prototype.initialize=function(B,A){this._band=B; +this._timeline=A; +this._backLayer=null; +this._eventLayer=null; +this._lineLayer=null; +this._highlightLayer=null; +this._eventIdToElmt=null; +}; +Timeline.DetailedEventPainter.prototype.addOnSelectListener=function(A){this._onSelectListeners.push(A); +}; +Timeline.DetailedEventPainter.prototype.removeOnSelectListener=function(B){for(var A=0; +A=K+E.width){D.solid=C; +D.text=K; +}else{D.solid=C; +K=H+S.event.label.offsetFromLine; +O=this._findFreeTrackForText(F,K+E.width,function(U){U.line=H-2; +}); +this._getTrackData(O).text=C; +this._paintEventLine(L,H,F,O,P,S); +}var N=Math.round(P.trackOffset+O*P.trackIncrement+P.trackHeight/2-E.height/2); +var R=this._paintEventLabel(L,J,K,N,E.width,E.height,S); +var M=this; +var I=function(V,U,W){return M._onClickInstantEvent(B.elmt,U,L); +}; +SimileAjax.DOM.registerEvent(B.elmt,"mousedown",I); +SimileAjax.DOM.registerEvent(R.elmt,"mousedown",I); +this._createHighlightDiv(Q,B,S); +this._eventIdToElmt[L.getID()]=B.elmt; +}; +Timeline.DetailedEventPainter.prototype.paintImpreciseInstantEvent=function(O,S,W,T){var X=this._timeline.getDocument(); +var M=O.getText(); +var I=O.getStart(); +var U=O.getEnd(); +var K=Math.round(this._band.dateToPixelOffset(I)); +var B=Math.round(this._band.dateToPixelOffset(U)); +var A=Math.round(K+S.iconWidth/2); +var D=Math.round(K-S.iconWidth/2); +var G=this._frc.computeSize(M); +var H=this._findFreeTrackForSolid(B,K); +var E=this._paintEventTape(O,H,K,B,W.event.instant.impreciseColor,W.event.instant.impreciseOpacity,S,W); +var C=this._paintEventIcon(O,H,D,S,W); +var F=this._getTrackData(H); +F.solid=D; +var N=A+W.event.label.offsetFromLine; +var J=N+G.width; +var R; +if(JD&&(!(A)||B.line>A)){return C; +}}else{this._lowerTracks.push({solid:Number.POSITIVE_INFINITY,text:Number.POSITIVE_INFINITY,line:Number.POSITIVE_INFINITY}); +return C; +}if(CD&&(!(A)||B.line>A)){return -1-C; +}}else{this._upperTracks.push({solid:Number.POSITIVE_INFINITY,text:Number.POSITIVE_INFINITY,line:Number.POSITIVE_INFINITY}); +return -1-C; +}}}; +Timeline.DetailedEventPainter.prototype._findFreeTrackForText=function(C,A,I){var B; +var E; +var F; +var H; +if(C<0){B=true; +F=-C; +E=this._findFreeUpperTrackForText(F,A); +H=-1-E; +}else{if(C>0){B=false; +F=C+1; +E=this._findFreeLowerTrackForText(F,A); +H=E; +}else{var G=this._findFreeUpperTrackForText(0,A); +var J=this._findFreeLowerTrackForText(1,A); +if(J-1<=G){B=false; +F=1; +E=J; +H=E; +}else{B=true; +F=0; +E=G; +H=-1-E; +}}}if(B){if(E==this._upperTracks.length){this._upperTracks.push({solid:Number.POSITIVE_INFINITY,text:Number.POSITIVE_INFINITY,line:Number.POSITIVE_INFINITY}); +}for(var D=F; +D=C){break; +}}return A; +}; +Timeline.DetailedEventPainter.prototype._findFreeUpperTrackForText=function(A,C){for(; +A=C){break; +}}return A; +}; +Timeline.DetailedEventPainter.prototype._getTrackData=function(A){return(A<0)?this._upperTracks[-A-1]:this._lowerTracks[A]; +}; +Timeline.DetailedEventPainter.prototype._paintEventLine=function(J,E,D,A,G,F){var H=Math.round(G.trackOffset+D*G.trackIncrement+G.trackHeight/2); +var I=Math.round(Math.abs(A-D)*G.trackIncrement); +var C="1px solid "+F.event.label.lineColor; +var B=this._timeline.getDocument().createElement("div"); +B.style.position="absolute"; +B.style.left=E+"px"; +B.style.width=F.event.label.offsetFromLine+"px"; +B.style.height=I+"px"; +if(D>A){B.style.top=(H-I)+"px"; +B.style.borderTop=C; +}else{B.style.top=H+"px"; +B.style.borderBottom=C; +}B.style.borderLeft=C; +this._lineLayer.appendChild(B); +}; +Timeline.DetailedEventPainter.prototype._paintEventIcon=function(J,B,C,F,E){var H=J.getIcon(); +H=H!=null?H:F.icon; +var G=F.trackOffset+B*F.trackIncrement+F.trackHeight/2; +var I=Math.round(G-F.iconHeight/2); +var D=SimileAjax.Graphics.createTranslucentImage(H); +var A=this._timeline.getDocument().createElement("div"); +A.style.position="absolute"; +A.style.left=C+"px"; +A.style.top=I+"px"; +A.appendChild(D); +A.style.cursor="pointer"; +if(J._title!=null){A.title=J._title; +}this._eventLayer.appendChild(A); +return{left:C,top:I,width:F.iconWidth,height:F.iconHeight,elmt:A}; +}; +Timeline.DetailedEventPainter.prototype._paintEventLabel=function(I,J,C,F,A,G,E){var H=this._timeline.getDocument(); +var K=H.createElement("div"); +K.style.position="absolute"; +K.style.left=C+"px"; +K.style.width=A+"px"; +K.style.top=F+"px"; +K.style.height=G+"px"; +K.style.backgroundColor=E.event.label.backgroundColor; +SimileAjax.Graphics.setOpacity(K,E.event.label.backgroundOpacity); +this._eventLayer.appendChild(K); +var B=H.createElement("div"); +B.style.position="absolute"; +B.style.left=C+"px"; +B.style.width=A+"px"; +B.style.top=F+"px"; +B.innerHTML=J; +B.style.cursor="pointer"; +if(I._title!=null){B.title=I._title; +}var D=I.getTextColor(); +if(D==null){D=I.getColor(); +}if(D!=null){B.style.color=D; +}this._eventLayer.appendChild(B); +return{left:C,top:F,width:A,height:G,elmt:B}; +}; +Timeline.DetailedEventPainter.prototype._paintEventTape=function(L,B,D,A,G,C,I,H){var F=A-D; +var E=H.event.tape.height; +var K=I.trackOffset+B*I.trackIncrement+I.trackHeight/2; +var J=Math.round(K-E/2); +var M=this._timeline.getDocument().createElement("div"); +M.style.position="absolute"; +M.style.left=D+"px"; +M.style.width=F+"px"; +M.style.top=J+"px"; +M.style.height=E+"px"; +M.style.backgroundColor=G; +M.style.overflow="hidden"; +M.style.cursor="pointer"; +if(L._title!=null){M.title=L._title; +}SimileAjax.Graphics.setOpacity(M,C); +this._eventLayer.appendChild(M); +return{left:D,top:J,width:F,height:E,elmt:M}; +}; +Timeline.DetailedEventPainter.prototype._createHighlightDiv=function(A,C,E){if(A>=0){var D=this._timeline.getDocument(); +var G=E.event; +var B=G.highlightColors[Math.min(A,G.highlightColors.length-1)]; +var F=D.createElement("div"); +F.style.position="absolute"; +F.style.overflow="hidden"; +F.style.left=(C.left-2)+"px"; +F.style.width=(C.width+4)+"px"; +F.style.top=(C.top-2)+"px"; +F.style.height=(C.height+4)+"px"; +F.style.background=B; +this._highlightLayer.appendChild(F); +}}; +Timeline.DetailedEventPainter.prototype._onClickInstantEvent=function(C,A,B){var D=SimileAjax.DOM.getPageCoordinates(C); +this._showBubble(D.left+Math.ceil(C.offsetWidth/2),D.top+Math.ceil(C.offsetHeight/2),B); +this._fireOnSelect(B.getID()); +A.cancelBubble=true; +SimileAjax.DOM.cancelEvent(A); +return false; +}; +Timeline.DetailedEventPainter.prototype._onClickDurationEvent=function(F,B,C){if("pageX" in B){var A=B.pageX; +var E=B.pageY; +}else{var D=SimileAjax.DOM.getPageCoordinates(F); +var A=B.offsetX+D.left; +var E=B.offsetY+D.top; +}this._showBubble(A,E,C); +this._fireOnSelect(C.getID()); +B.cancelBubble=true; +SimileAjax.DOM.cancelEvent(B); +return false; +}; +Timeline.DetailedEventPainter.prototype.showBubble=function(A){var B=this._eventIdToElmt[A.getID()]; +if(B){var C=SimileAjax.DOM.getPageCoordinates(B); +this._showBubble(C.left+B.offsetWidth/2,C.top+B.offsetHeight/2,A); +}}; +Timeline.DetailedEventPainter.prototype._showBubble=function(A,D,B){var C=document.createElement("div"); +B.fillInfoBubble(C,this._params.theme,this._band.getLabeller()); +SimileAjax.WindowManager.cancelPopups(); +SimileAjax.Graphics.createBubbleForContentAndPoint(C,A,D,this._params.theme.event.bubble.width); +}; +Timeline.DetailedEventPainter.prototype._fireOnSelect=function(A){for(var B=0; +BE; +D++){var A=this._zones[D]; +if(EA.startTime){this._zones.splice(D,0,{startTime:A.startTime,endTime:E,unit:A.unit,multiple:A.multiple}); +D++; +A.startTime=E; +}if(B=0){if(A.getTime()>this._zones[E].startTime){break; +}E--; +}for(var H=D; +H<=E; +H++){var G=this._zones[H]; +var K=new Date(Math.max(C.getTime(),G.startTime)); +var F=new Date(Math.min(A.getTime(),G.endTime)); +SimileAjax.DateTime.roundDownToInterval(K,G.unit,I,G.multiple,this._theme.firstDayOfWeek); +SimileAjax.DateTime.roundUpToInterval(F,G.unit,I,G.multiple,this._theme.firstDayOfWeek); +while(K.getTime()0)){C=B-1; +}if(!D&&(B<(this._band._zoomSteps.length-1))){C=B+1; +}this._band._zoomIndex=C; +this._interval=SimileAjax.DateTime.gregorianUnitLengths[this._band._zoomSteps[C].unit]; +this._pixelsPerInterval=this._band._zoomSteps[C].pixelsPerInterval; +A=this._band._zoomSteps[C].unit-this._band._zoomSteps[B].unit; +return A; +}; +Timeline.HotZoneEther=function(A){this._params=A; +this._interval=A.interval; +this._pixelsPerInterval=A.pixelsPerInterval; +this._theme=A.theme; +}; +Timeline.HotZoneEther.prototype.initialize=function(I,H){this._band=I; +this._timeline=H; +this._unit=H.getUnit(); +this._zones=[{startTime:Number.NEGATIVE_INFINITY,endTime:Number.POSITIVE_INFINITY,magnify:1}]; +var D=this._params; +for(var E=0; +E0; +C++){var A=this._zones[C]; +if(this._unit.compare(F,A.endTime)<0){if(this._unit.compare(F,A.startTime)>0){this._zones.splice(C,0,{startTime:A.startTime,endTime:F,magnify:A.magnify}); +C++; +A.startTime=F; +}if(this._unit.compare(B,A.endTime)<0){this._zones.splice(C,0,{startTime:F,endTime:B,magnify:G.magnify*A.magnify}); +C++; +A.startTime=B; +F=B; +}else{A.magnify*=G.magnify; +F=A.endTime; +}}}}if("startsOn" in this._params){this._start=this._unit.parseFromObject(this._params.startsOn); +}else{if("endsOn" in this._params){this._start=this._unit.parseFromObject(this._params.endsOn); +this.shiftPixels(-this._timeline.getPixelLength()); +}else{if("centersOn" in this._params){this._start=this._unit.parseFromObject(this._params.centersOn); +this.shiftPixels(-this._timeline.getPixelLength()/2); +}else{this._start=this._unit.makeDefaultValue(); +this.shiftPixels(-this._timeline.getPixelLength()/2); +}}}}; +Timeline.HotZoneEther.prototype.setDate=function(A){this._start=this._unit.cloneValue(A); +}; +Timeline.HotZoneEther.prototype.shiftPixels=function(A){this._start=this.pixelOffsetToDate(A); +}; +Timeline.HotZoneEther.prototype.dateToPixelOffset=function(A){return this._dateDiffToPixelOffset(this._start,A); +}; +Timeline.HotZoneEther.prototype.pixelOffsetToDate=function(A){return this._pixelOffsetToDate(A,this._start); +}; +Timeline.HotZoneEther.prototype.zoom=function(D){var A=0; +var B=this._band._zoomIndex; +var C=B; +if(D&&(B>0)){C=B-1; +}if(!D&&(B<(this._band._zoomSteps.length-1))){C=B+1; +}this._band._zoomIndex=C; +this._interval=SimileAjax.DateTime.gregorianUnitLengths[this._band._zoomSteps[C].unit]; +this._pixelsPerInterval=this._band._zoomSteps[C].pixelsPerInterval; +A=this._band._zoomSteps[C].unit-this._band._zoomSteps[B].unit; +return A; +}; +Timeline.HotZoneEther.prototype._dateDiffToPixelOffset=function(H,C){var D=this._getScale(); +var I=H; +var B=C; +var E=0; +if(this._unit.compare(I,B)<0){var G=0; +while(G=0){if(this._unit.compare(I,this._zones[G].startTime)>0){break; +}G--; +}while(this._unit.compare(I,B)>0){var F=this._zones[G]; +var A=this._unit.later(B,F.startTime); +E+=(this._unit.compare(A,I)/(D/F.magnify)); +I=A; +G--; +}}return E; +}; +Timeline.HotZoneEther.prototype._pixelOffsetToDate=function(E,B){var G=this._getScale(); +var D=B; +if(E>0){var F=0; +while(F0){var A=this._zones[F]; +var H=G/A.magnify; +if(A.endTime==Number.POSITIVE_INFINITY){D=this._unit.change(D,E*H); +E=0; +}else{var C=this._unit.compare(A.endTime,D)/H; +if(C>E){D=this._unit.change(D,E*H); +E=0; +}else{D=A.endTime; +E-=C; +}}F++; +}}else{var F=this._zones.length-1; +while(F>=0){if(this._unit.compare(D,this._zones[F].startTime)>0){break; +}F--; +}E=-E; +while(E>0){var A=this._zones[F]; +var H=G/A.magnify; +if(A.startTime==Number.NEGATIVE_INFINITY){D=this._unit.change(D,-E*H); +E=0; +}else{var C=this._unit.compare(D,A.startTime)/H; +if(C>E){D=this._unit.change(D,-E*H); +E=0; +}else{D=A.startTime; +E-=C; +}}F--; +}}return D; +}; +Timeline.HotZoneEther.prototype._getScale=function(){return this._interval/this._pixelsPerInterval; +}; + + +/* labellers.js */ +Timeline.GregorianDateLabeller=function(B,A){this._locale=B; +this._timeZone=A; +}; +Timeline.GregorianDateLabeller.monthNames=[]; +Timeline.GregorianDateLabeller.dayNames=[]; +Timeline.GregorianDateLabeller.labelIntervalFunctions=[]; +Timeline.GregorianDateLabeller.getMonthName=function(B,A){return Timeline.GregorianDateLabeller.monthNames[A][B]; +}; +Timeline.GregorianDateLabeller.prototype.labelInterval=function(A,C){var B=Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale]; +if(B==null){B=Timeline.GregorianDateLabeller.prototype.defaultLabelInterval; +}return B.call(this,A,C); +}; +Timeline.GregorianDateLabeller.prototype.labelPrecise=function(A){return SimileAjax.DateTime.removeTimeZoneOffset(A,this._timeZone).toUTCString(); +}; +Timeline.GregorianDateLabeller.prototype.defaultLabelInterval=function(B,C){var D; +var F=false; +B=SimileAjax.DateTime.removeTimeZoneOffset(B,this._timeZone); +switch(C){case SimileAjax.DateTime.MILLISECOND:D=B.getUTCMilliseconds(); +break; +case SimileAjax.DateTime.SECOND:D=B.getUTCSeconds(); +break; +case SimileAjax.DateTime.MINUTE:var A=B.getUTCMinutes(); +if(A==0){D=B.getUTCHours()+":00"; +F=true; +}else{D=A; +}break; +case SimileAjax.DateTime.HOUR:D=B.getUTCHours()+"hr"; +break; +case SimileAjax.DateTime.DAY:D=Timeline.GregorianDateLabeller.getMonthName(B.getUTCMonth(),this._locale)+" "+B.getUTCDate(); +break; +case SimileAjax.DateTime.WEEK:D=Timeline.GregorianDateLabeller.getMonthName(B.getUTCMonth(),this._locale)+" "+B.getUTCDate(); +break; +case SimileAjax.DateTime.MONTH:var A=B.getUTCMonth(); +if(A!=0){D=Timeline.GregorianDateLabeller.getMonthName(A,this._locale); +break; +}case SimileAjax.DateTime.YEAR:case SimileAjax.DateTime.DECADE:case SimileAjax.DateTime.CENTURY:case SimileAjax.DateTime.MILLENNIUM:var E=B.getUTCFullYear(); +if(E>0){D=B.getUTCFullYear(); +}else{D=(1-E)+"BC"; +}F=(C==SimileAjax.DateTime.MONTH)||(C==SimileAjax.DateTime.DECADE&&E%100==0)||(C==SimileAjax.DateTime.CENTURY&&E%1000==0); +break; +default:D=B.toUTCString(); +}return{text:D,emphasized:F}; +}; + + +/* original-painter.js */ +Timeline.OriginalEventPainter=function(A){this._params=A; +this._onSelectListeners=[]; +this._filterMatcher=null; +this._highlightMatcher=null; +this._frc=null; +this._eventIdToElmt={}; +}; +Timeline.OriginalEventPainter.prototype.initialize=function(B,A){this._band=B; +this._timeline=A; +this._backLayer=null; +this._eventLayer=null; +this._lineLayer=null; +this._highlightLayer=null; +this._eventIdToElmt=null; +}; +Timeline.OriginalEventPainter.prototype.addOnSelectListener=function(A){this._onSelectListeners.push(A); +}; +Timeline.OriginalEventPainter.prototype.removeOnSelectListener=function(B){for(var A=0; +AC){break; +}}return B; +}; +Timeline.OriginalEventPainter.prototype._paintEventIcon=function(J,B,C,F,E){var H=J.getIcon(); +H=H!=null?H:F.icon; +var G=F.trackOffset+B*F.trackIncrement+F.trackHeight/2; +var I=Math.round(G-F.iconHeight/2); +var D=SimileAjax.Graphics.createTranslucentImage(H); +var A=this._timeline.getDocument().createElement("div"); +A.className="timeline-event-icon"; +A.style.left=C+"px"; +A.style.top=I+"px"; +A.appendChild(D); +if(J._title!=null){A.title=J._title; +}this._eventLayer.appendChild(A); +return{left:C,top:I,width:F.iconWidth,height:F.iconHeight,elmt:A}; +}; +Timeline.OriginalEventPainter.prototype._paintEventLabel=function(J,K,C,G,A,H,F){var I=this._timeline.getDocument(); +var B=I.createElement("div"); +B.className="timeline-event-label"; +B.style.left=C+"px"; +B.style.width=A+"px"; +B.style.top=G+"px"; +B.innerHTML=K; +if(J._title!=null){B.title=J._title; +}var D=J.getTextColor(); +if(D==null){D=J.getColor(); +}if(D!=null){B.style.color=D; +}var E=J.getClassName(); +if(E!=null){B.className+=" "+E; +}this._eventLayer.appendChild(B); +return{left:C,top:G,width:A,height:H,elmt:B}; +}; +Timeline.OriginalEventPainter.prototype._paintEventTape=function(N,B,D,A,G,C,K,J){var F=A-D; +var E=J.event.tape.height; +var L=K.trackOffset+B*K.trackIncrement; +var O=this._timeline.getDocument().createElement("div"); +O.className="timeline-event-tape"; +O.style.left=D+"px"; +O.style.width=F+"px"; +O.style.top=L+"px"; +if(N._title!=null){O.title=N._title; +}if(G!=null){O.style.backgroundColor=G; +}var M=N.getTapeImage(); +var H=N.getTapeRepeat(); +H=H!=null?H:"repeat"; +if(M!=null){O.style.backgroundImage="url("+M+")"; +O.style.backgroundRepeat=H; +}SimileAjax.Graphics.setOpacity(O,C); +var I=N.getClassName(); +if(I!=null){O.className+=" "+I; +}this._eventLayer.appendChild(O); +return{left:D,top:L,width:F,height:E,elmt:O}; +}; +Timeline.OriginalEventPainter.prototype._createHighlightDiv=function(A,C,E){if(A>=0){var D=this._timeline.getDocument(); +var G=E.event; +var B=G.highlightColors[Math.min(A,G.highlightColors.length-1)]; +var F=D.createElement("div"); +F.style.position="absolute"; +F.style.overflow="hidden"; +F.style.left=(C.left-2)+"px"; +F.style.width=(C.width+4)+"px"; +F.style.top=(C.top-2)+"px"; +F.style.height=(C.height+4)+"px"; +this._highlightLayer.appendChild(F); +}}; +Timeline.OriginalEventPainter.prototype._onClickInstantEvent=function(C,A,B){var D=SimileAjax.DOM.getPageCoordinates(C); +this._showBubble(D.left+Math.ceil(C.offsetWidth/2),D.top+Math.ceil(C.offsetHeight/2),B); +this._fireOnSelect(B.getID()); +A.cancelBubble=true; +SimileAjax.DOM.cancelEvent(A); +return false; +}; +Timeline.OriginalEventPainter.prototype._onClickDurationEvent=function(F,B,C){if("pageX" in B){var A=B.pageX; +var E=B.pageY; +}else{var D=SimileAjax.DOM.getPageCoordinates(F); +var A=B.offsetX+D.left; +var E=B.offsetY+D.top; +}this._showBubble(A,E,C); +this._fireOnSelect(C.getID()); +B.cancelBubble=true; +SimileAjax.DOM.cancelEvent(B); +return false; +}; +Timeline.OriginalEventPainter.prototype.showBubble=function(A){var B=this._eventIdToElmt[A.getID()]; +if(B){var C=SimileAjax.DOM.getPageCoordinates(B); +this._showBubble(C.left+B.offsetWidth/2,C.top+B.offsetHeight/2,A); +}}; +Timeline.OriginalEventPainter.prototype._showBubble=function(A,D,B){var C=document.createElement("div"); +B.fillInfoBubble(C,this._params.theme,this._band.getLabeller()); +SimileAjax.WindowManager.cancelPopups(); +SimileAjax.Graphics.createBubbleForContentAndPoint(C,A,D,this._params.theme.event.bubble.width); +}; +Timeline.OriginalEventPainter.prototype._fireOnSelect=function(A){for(var B=0; +B=0){var D=this._timeline.getDocument(); +var G=E.event; +var B=G.highlightColors[Math.min(A,G.highlightColors.length-1)]; +var F=D.createElement("div"); +F.style.position="absolute"; +F.style.overflow="hidden"; +F.style.left=(C.left-1)+"px"; +F.style.width=(C.width+2)+"px"; +F.style.top=(C.top-1)+"px"; +F.style.height=(C.height+2)+"px"; +F.style.background=B; +this._highlightLayer.appendChild(F); +}}; +Timeline.OverviewEventPainter.prototype.showBubble=function(A){}; + + +/* sources.js */ +Timeline.DefaultEventSource=function(A){this._events=(A instanceof Object)?A:new SimileAjax.EventIndex(); +this._listeners=[]; +}; +Timeline.DefaultEventSource.prototype.addListener=function(A){this._listeners.push(A); +}; +Timeline.DefaultEventSource.prototype.removeListener=function(B){for(var A=0; +A0){return A; +}else{if(A.substr(0,1)=="/"){return B.substr(0,B.indexOf("/",B.indexOf("://")+3))+A; +}else{return B+A; +}}}}; +Timeline.DefaultEventSource.Event=function(A){function C(D){return(A[D]!=null&&A[D]!="")?A[D]:null; +}var B=(A.id)?A.id.trim():""; +this._id=B.length>0?B:("e"+Math.floor(Math.random()*1000000)); +this._instant=A.instant||(A.end==null); +this._start=A.start; +this._end=(A.end!=null)?A.end:A.start; +this._latestStart=(A.latestStart!=null)?A.latestStart:(A.instant?this._end:this._start); +this._earliestEnd=(A.earliestEnd!=null)?A.earliestEnd:(A.instant?this._start:this._end); +this._eventID=C("eventID"); +this._text=SimileAjax.HTML.deEntify(A.text); +this._description=SimileAjax.HTML.deEntify(A.description); +this._image=C("image"); +this._link=C("link"); +this._title=C("hoverText"); +this._title=C("caption"); +this._icon=C("icon"); +this._color=C("color"); +this._textColor=C("textColor"); +this._classname=C("classname"); +this._tapeImage=C("tapeImage"); +this._tapeRepeat=C("tapeRepeat"); +this._wikiURL=null; +this._wikiSection=null; +}; +Timeline.DefaultEventSource.Event.prototype={getID:function(){return this._id; +},isInstant:function(){return this._instant; +},isImprecise:function(){return this._start!=this._latestStart||this._end!=this._earliestEnd; +},getStart:function(){return this._start; +},getEnd:function(){return this._end; +},getLatestStart:function(){return this._latestStart; +},getEarliestEnd:function(){return this._earliestEnd; +},getEventID:function(){return this._eventID; +},getText:function(){return this._text; +},getDescription:function(){return this._description; +},getImage:function(){return this._image; +},getLink:function(){return this._link; +},getIcon:function(){return this._icon; +},getColor:function(){return this._color; +},getTextColor:function(){return this._textColor; +},getClassName:function(){return this._classname; +},getTapeImage:function(){return this._tapeImage; +},getTapeRepeat:function(){return this._tapeRepeat; +},getProperty:function(A){return null; +},getWikiURL:function(){return this._wikiURL; +},getWikiSection:function(){return this._wikiSection; +},setWikiInfo:function(B,A){this._wikiURL=B; +this._wikiSection=A; +},fillDescription:function(A){A.innerHTML=this._description; +},fillWikiInfo:function(D){if(this._wikiURL!=null&&this._wikiSection!=null){var C=this.getProperty("wikiID"); +if(C==null||C.length==0){C=this.getText(); +}C=C.replace(/\s/g,"_"); +var B=this._wikiURL+this._wikiSection.replace(/\s/g,"_")+"/"+C; +var A=document.createElement("a"); +A.href=B; +A.target="new"; +A.innerHTML=Timeline.strings[Timeline.clientLocale].wikiLinkLabel; +D.appendChild(document.createTextNode("[")); +D.appendChild(A); +D.appendChild(document.createTextNode("]")); +}else{D.style.display="none"; +}},fillTime:function(A,B){if(this._instant){if(this.isImprecise()){A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._start))); +A.appendChild(A.ownerDocument.createElement("br")); +A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._end))); +}else{A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._start))); +}}else{if(this.isImprecise()){A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._start)+" ~ "+B.labelPrecise(this._latestStart))); +A.appendChild(A.ownerDocument.createElement("br")); +A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._earliestEnd)+" ~ "+B.labelPrecise(this._end))); +}else{A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._start))); +A.appendChild(A.ownerDocument.createElement("br")); +A.appendChild(A.ownerDocument.createTextNode(B.labelPrecise(this._end))); +}}},fillInfoBubble:function(A,E,M){var K=A.ownerDocument; +var J=this.getText(); +var H=this.getLink(); +var B=this.getImage(); +if(B!=null){var D=K.createElement("img"); +D.src=B; +E.event.bubble.imageStyler(D); +A.appendChild(D); +}var L=K.createElement("div"); +var C=K.createTextNode(J); +if(H!=null){var I=K.createElement("a"); +I.href=H; +I.appendChild(C); +L.appendChild(I); +}else{L.appendChild(C); +}E.event.bubble.titleStyler(L); +A.appendChild(L); +var N=K.createElement("div"); +this.fillDescription(N); +E.event.bubble.bodyStyler(N); +A.appendChild(N); +var G=K.createElement("div"); +this.fillTime(G,M); +E.event.bubble.timeStyler(G); +A.appendChild(G); +var F=K.createElement("div"); +this.fillWikiInfo(F); +E.event.bubble.wikiStyler(F); +A.appendChild(F); +}}; + + +/* themes.js */ +Timeline.ClassicTheme=new Object(); +Timeline.ClassicTheme.implementations=[]; +Timeline.ClassicTheme.create=function(B){if(B==null){B=Timeline.getDefaultLocale(); +}var A=Timeline.ClassicTheme.implementations[B]; +if(A==null){A=Timeline.ClassicTheme._Impl; +}return new A(); +}; +Timeline.ClassicTheme._Impl=function(){this.firstDayOfWeek=0; +this.ether={backgroundColors:[],highlightOpacity:50,interval:{line:{show:true,opacity:25},weekend:{opacity:30},marker:{hAlign:"Bottom",vAlign:"Right"}}}; +this.event={track:{height:10,gap:2},overviewTrack:{offset:20,tickHeight:6,height:2,gap:1},tape:{height:4},instant:{icon:Timeline.urlPrefix+"images/dull-blue-circle.png",iconWidth:10,iconHeight:10,impreciseOpacity:20},duration:{impreciseOpacity:20},label:{backgroundOpacity:50,offsetFromLine:3},highlightColors:[],bubble:{width:250,height:125,titleStyler:function(A){A.className="timeline-event-bubble-title"; +},bodyStyler:function(A){A.className="timeline-event-bubble-body"; +},imageStyler:function(A){A.className="timeline-event-bubble-image"; +},wikiStyler:function(A){A.className="timeline-event-bubble-wiki"; +},timeStyler:function(A){A.className="timeline-event-bubble-time"; +}}}; +this.mouseWheel="scroll"; +}; + + +/* timeline.js */ +Timeline.strings={}; +Timeline.getDefaultLocale=function(){return Timeline.clientLocale; +}; +Timeline.create=function(B,A,C,D){return new Timeline._Impl(B,A,C,D); +}; +Timeline.HORIZONTAL=0; +Timeline.VERTICAL=1; +Timeline._defaultTheme=null; +Timeline.createBandInfo=function(F){var G=("theme" in F)?F.theme:Timeline.getDefaultTheme(); +var D=("eventSource" in F)?F.eventSource:null; +var H=new Timeline.LinearEther({centersOn:("date" in F)?F.date:new Date(),interval:SimileAjax.DateTime.gregorianUnitLengths[F.intervalUnit],pixelsPerInterval:F.intervalPixels,theme:G}); +var C=new Timeline.GregorianEtherPainter({unit:F.intervalUnit,multiple:("multiple" in F)?F.multiple:1,theme:G,align:("align" in F)?F.align:undefined}); +var I={showText:("showEventText" in F)?F.showEventText:true,theme:G}; +if("eventPainterParams" in F){for(var A in F.eventPainterParams){I[A]=F.eventPainterParams[A]; +}}if("trackHeight" in F){I.trackHeight=F.trackHeight; +}if("trackGap" in F){I.trackGap=F.trackGap; +}var B=("overview" in F&&F.overview)?"overview":("layout" in F?F.layout:"original"); +var E; +if("eventPainter" in F){E=new F.eventPainter(I); +}else{switch(B){case"overview":E=new Timeline.OverviewEventPainter(I); +break; +case"detailed":E=new Timeline.DetailedEventPainter(I); +break; +default:E=new Timeline.OriginalEventPainter(I); +}}return{width:F.width,eventSource:D,timeZone:("timeZone" in F)?F.timeZone:0,ether:H,etherPainter:C,eventPainter:E,theme:G,zoomIndex:("zoomIndex" in F)?F.zoomIndex:0,zoomSteps:("zoomSteps" in F)?F.zoomSteps:null}; +}; +Timeline.createHotZoneBandInfo=function(F){var G=("theme" in F)?F.theme:Timeline.getDefaultTheme(); +var D=("eventSource" in F)?F.eventSource:null; +var H=new Timeline.HotZoneEther({centersOn:("date" in F)?F.date:new Date(),interval:SimileAjax.DateTime.gregorianUnitLengths[F.intervalUnit],pixelsPerInterval:F.intervalPixels,zones:F.zones,theme:G}); +var C=new Timeline.HotZoneGregorianEtherPainter({unit:F.intervalUnit,zones:F.zones,theme:G,align:("align" in F)?F.align:undefined}); +var I={showText:("showEventText" in F)?F.showEventText:true,theme:G}; +if("eventPainterParams" in F){for(var A in F.eventPainterParams){I[A]=F.eventPainterParams[A]; +}}if("trackHeight" in F){I.trackHeight=F.trackHeight; +}if("trackGap" in F){I.trackGap=F.trackGap; +}var B=("overview" in F&&F.overview)?"overview":("layout" in F?F.layout:"original"); +var E; +if("eventPainter" in F){E=new F.eventPainter(I); +}else{switch(B){case"overview":E=new Timeline.OverviewEventPainter(I); +break; +case"detailed":E=new Timeline.DetailedEventPainter(I); +break; +default:E=new Timeline.OriginalEventPainter(I); +}}return{width:F.width,eventSource:D,timeZone:("timeZone" in F)?F.timeZone:0,ether:H,etherPainter:C,eventPainter:E,theme:G,zoomIndex:("zoomIndex" in F)?F.zoomIndex:0,zoomSteps:("zoomSteps" in F)?F.zoomSteps:null}; +}; +Timeline.getDefaultTheme=function(){if(Timeline._defaultTheme==null){Timeline._defaultTheme=Timeline.ClassicTheme.create(Timeline.getDefaultLocale()); +}return Timeline._defaultTheme; +}; +Timeline.setDefaultTheme=function(A){Timeline._defaultTheme=A; +}; +Timeline.loadXML=function(A,C){var D=function(G,F,E){alert("Failed to load data xml from "+A+"\n"+G); +}; +var B=function(F){var E=F.responseXML; +if(!E.documentElement&&F.responseStream){E.load(F.responseStream); +}C(E,A); +}; +SimileAjax.XmlHttp.get(A,D,B); +}; +Timeline.loadJSON=function(url,f){var fError=function(statusText,status,xmlhttp){alert("Failed to load json data from "+url+"\n"+statusText); +}; +var fDone=function(xmlhttp){f(eval("("+xmlhttp.responseText+")"),url); +}; +SimileAjax.XmlHttp.get(url,fError,fDone); +}; +Timeline._Impl=function(B,A,C,D){SimileAjax.WindowManager.initialize(); +this._containerDiv=B; +this._bandInfos=A; +this._orientation=C==null?Timeline.HORIZONTAL:C; +this._unit=(D!=null)?D:SimileAjax.NativeDateUnit; +this._initialize(); +}; +Timeline._Impl.prototype.dispose=function(){for(var A=0; +A Loading..."; +this.showLoadingMessage=function(){D.containerDiv.style.display="block"; +}; +this.hideLoadingMessage=function(){D.containerDiv.style.display="none"; +}; +}; +Timeline._Impl.prototype._distributeWidths=function(){var G=this.getPixelLength(); +var B=this.getPixelWidth(); +var C=0; +for(var F=0; +F0){var A=parseInt(E.substr(0,H)); +var D=A*B/100; +}else{var D=parseInt(E); +}J.setBandShiftAndWidth(C,D); +J.setViewLength(G); +C+=D; +}}; +Timeline._Impl.prototype.zoom=function(D,A,G,F){var C=new RegExp("^timeline-band-([0-9]+)$"); +var E=null; +var B=C.exec(F.id); +if(B){E=parseInt(B[1]); +}if(E!=null){this._bands[E].zoom(D,A,G,F); +}this.paint(); +}; +Timeline._Band=function(B,G,C){this._timeline=B; +this._bandInfo=G; +this._index=C; +this._locale=("locale" in G)?G.locale:Timeline.getDefaultLocale(); +this._timeZone=("timeZone" in G)?G.timeZone:0; +this._labeller=("labeller" in G)?G.labeller:(("createLabeller" in B.getUnit())?B.getUnit().createLabeller(this._locale,this._timeZone):new Timeline.GregorianDateLabeller(this._locale,this._timeZone)); +this._theme=G.theme; +this._zoomIndex=("zoomIndex" in G)?G.zoomIndex:0; +this._zoomSteps=("zoomSteps" in G)?G.zoomSteps:null; +this._dragging=false; +this._changing=false; +this._originalScrollSpeed=5; +this._scrollSpeed=this._originalScrollSpeed; +this._onScrollListeners=[]; +var A=this; +this._syncWithBand=null; +this._syncWithBandHandler=function(H){A._onHighlightBandScroll(); +}; +this._selectorListener=function(H){A._onHighlightBandScroll(); +}; +var E=this._timeline.getDocument().createElement("div"); +E.className="timeline-band-input"; +this._timeline.addDiv(E); +this._keyboardInput=document.createElement("input"); +this._keyboardInput.type="text"; +E.appendChild(this._keyboardInput); +SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,"_onKeyDown"); +SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,"_onKeyUp"); +this._div=this._timeline.getDocument().createElement("div"); +this._div.id="timeline-band-"+C; +this._div.className="timeline-band timeline-band-"+C; +this._timeline.addDiv(this._div); +SimileAjax.DOM.registerEventWithObject(this._div,"mousedown",this,"_onMouseDown"); +SimileAjax.DOM.registerEventWithObject(this._div,"mousemove",this,"_onMouseMove"); +SimileAjax.DOM.registerEventWithObject(this._div,"mouseup",this,"_onMouseUp"); +SimileAjax.DOM.registerEventWithObject(this._div,"mouseout",this,"_onMouseOut"); +SimileAjax.DOM.registerEventWithObject(this._div,"dblclick",this,"_onDblClick"); +var F=this._theme!=null?this._theme.mouseWheel:"scroll"; +if(F==="zoom"||F==="scroll"||this._zoomSteps){if(SimileAjax.Platform.browser.isFirefox){SimileAjax.DOM.registerEventWithObject(this._div,"DOMMouseScroll",this,"_onMouseScroll"); +}else{SimileAjax.DOM.registerEventWithObject(this._div,"mousewheel",this,"_onMouseScroll"); +}}this._innerDiv=this._timeline.getDocument().createElement("div"); +this._innerDiv.className="timeline-band-inner"; +this._div.appendChild(this._innerDiv); +this._ether=G.ether; +G.ether.initialize(this,B); +this._etherPainter=G.etherPainter; +G.etherPainter.initialize(this,B); +this._eventSource=G.eventSource; +if(this._eventSource){this._eventListener={onAddMany:function(){A._onAddMany(); +},onClear:function(){A._onClear(); +}}; +this._eventSource.addListener(this._eventListener); +}this._eventPainter=G.eventPainter; +G.eventPainter.initialize(this,B); +this._decorators=("decorators" in G)?G.decorators:[]; +for(var D=0; +D3*this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(B-this._viewLength)); +}}this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(A)),C); +}; +Timeline._Band.prototype.showBubbleForEvent=function(C){var A=this.getEventSource().getEvent(C); +if(A){var B=this; +this.scrollToCenter(A.getStart(),function(){B._eventPainter.showBubble(A); +}); +}}; +Timeline._Band.prototype.zoom=function(C,A,F,E){if(!this._zoomSteps){return ; +}A+=this._viewOffset; +var D=this._ether.pixelOffsetToDate(A); +var B=this._ether.zoom(C); +this._etherPainter.zoom(B); +this._moveEther(Math.round(-this._ether.dateToPixelOffset(D))); +this._moveEther(A); +}; +Timeline._Band.prototype._onMouseDown=function(B,A,C){this.closeBubble(); +this._dragging=true; +this._dragX=A.clientX; +this._dragY=A.clientY; +}; +Timeline._Band.prototype._onMouseMove=function(D,A,E){if(this._dragging){var C=A.clientX-this._dragX; +var B=A.clientY-this._dragY; +this._dragX=A.clientX; +this._dragY=A.clientY; +this._moveEther(this._timeline.isHorizontal()?C:B); +this._positionHighlight(); +}}; +Timeline._Band.prototype._onMouseUp=function(B,A,C){this._dragging=false; +this._keyboardInput.focus(); +}; +Timeline._Band.prototype._onMouseOut=function(C,B,D){var A=SimileAjax.DOM.getEventRelativeCoordinates(B,C); +A.x+=this._viewOffset; +if(A.x<0||A.x>C.offsetWidth||A.y<0||A.y>C.offsetHeight){this._dragging=false; +}}; +Timeline._Band.prototype._onMouseScroll=function(G,H,B){var A=new Date(); +A=A.getTime(); +if(!this._lastScrollTime||((A-this._lastScrollTime)>50)){this._lastScrollTime=A; +var I=0; +if(H.wheelDelta){I=H.wheelDelta/120; +}else{if(H.detail){I=-H.detail/3; +}}var F=this._theme.mouseWheel; +if(this._zoomSteps||F==="zoom"){var E=SimileAjax.DOM.getEventRelativeCoordinates(H,G); +if(I!=0){var D; +if(I>0){D=true; +}if(I<0){D=false; +}this._timeline.zoom(D,E.x,E.y,G); +}}else{if(F==="scroll"){var C=50*(I<0?-1:1); +this._moveEther(C); +}}}if(H.stopPropagation){H.stopPropagation(); +}H.cancelBubble=true; +if(H.preventDefault){H.preventDefault(); +}H.returnValue=false; +}; +Timeline._Band.prototype._onDblClick=function(C,B,E){var A=SimileAjax.DOM.getEventRelativeCoordinates(B,C); +var D=A.x-(this._viewLength/2-this._viewOffset); +this._autoScroll(-D); +}; +Timeline._Band.prototype._onKeyDown=function(B,A,C){if(!this._dragging){switch(A.keyCode){case 27:break; +case 37:case 38:this._scrollSpeed=Math.min(50,Math.abs(this._scrollSpeed*1.05)); +this._moveEther(this._scrollSpeed); +break; +case 39:case 40:this._scrollSpeed=-Math.min(50,Math.abs(this._scrollSpeed*1.05)); +this._moveEther(this._scrollSpeed); +break; +default:return true; +}this.closeBubble(); +SimileAjax.DOM.cancelEvent(A); +return false; +}return true; +}; +Timeline._Band.prototype._onKeyUp=function(B,A,C){if(!this._dragging){this._scrollSpeed=this._originalScrollSpeed; +switch(A.keyCode){case 35:this.setCenterVisibleDate(this._eventSource.getLatestDate()); +break; +case 36:this.setCenterVisibleDate(this._eventSource.getEarliestDate()); +break; +case 33:this._autoScroll(this._timeline.getPixelLength()); +break; +case 34:this._autoScroll(-this._timeline.getPixelLength()); +break; +default:return true; +}this.closeBubble(); +SimileAjax.DOM.cancelEvent(A); +return false; +}return true; +}; +Timeline._Band.prototype._autoScroll=function(D,C){var A=this; +var B=SimileAjax.Graphics.createAnimation(function(E,F){A._moveEther(F); +},0,D,1000,C); +B.run(); +}; +Timeline._Band.prototype._moveEther=function(A){this.closeBubble(); +this._viewOffset+=A; +this._ether.shiftPixels(-A); +if(this._timeline.isHorizontal()){this._div.style.left=this._viewOffset+"px"; +}else{this._div.style.top=this._viewOffset+"px"; +}if(this._viewOffset>-this._viewLength*0.5||this._viewOffset<-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1.5)){this._recenterDiv(); +}else{this.softLayout(); +}this._onChanging(); +}; +Timeline._Band.prototype._onChanging=function(){this._changing=true; +this._fireOnScroll(); +this._setSyncWithBandDate(); +this._changing=false; +}; +Timeline._Band.prototype._fireOnScroll=function(){for(var A=0; +A0?B:A; +}; +Timeline.NativeDateUnit.change=function(A,B){return new Date(A.getTime()+B); +}; diff --git a/views/default/graphs/data/timestats.php b/views/default/graphs/data/timestats.php new file mode 100644 index 000000000..6179301a9 --- /dev/null +++ b/views/default/graphs/data/timestats.php @@ -0,0 +1,33 @@ + + + + + + $stat) { + $date = date(elgg_echo('friendlytime:date_format'), $time); + echo "\n"; + } + ?> + + + + + $stat) { + echo "\n"; + } + ?> + + +
$date
$stat
diff --git a/views/default/graphs/timeline.php b/views/default/graphs/timeline.php new file mode 100644 index 000000000..08d47581f --- /dev/null +++ b/views/default/graphs/timeline.php @@ -0,0 +1,44 @@ + +
+ diff --git a/views/default/graphs/timestats.php b/views/default/graphs/timestats.php new file mode 100644 index 000000000..d200c9b94 --- /dev/null +++ b/views/default/graphs/timestats.php @@ -0,0 +1,8 @@ + +
diff --git a/views/default/graphstats/timestats_filter_menu.php b/views/default/graphstats/timestats_filter_menu.php new file mode 100644 index 000000000..9f4ab55d1 --- /dev/null +++ b/views/default/graphstats/timestats_filter_menu.php @@ -0,0 +1,31 @@ + array( + 'text' => elgg_echo('absolute'), + 'href' => 'graphs/timestats?filter=absolute', + 'priority' => 200, + ), + 'relative' => array( + 'text' => elgg_echo('relative'), + 'href' => 'graphs/timestats?filter=relative', + 'priority' => 300, + ), +); + +// sets default selected item +if (strpos(full_url(), 'filter') === false) { + $tabs['absolute']['selected'] = true; +} + +foreach ($tabs as $name => $tab) { + $tab['name'] = $name; + + elgg_register_menu_item('filter', $tab); +} + +echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); diff --git a/views/default/groups/profile/activity_module.php b/views/default/groups/profile/activity_module.php new file mode 100644 index 000000000..7829f8c70 --- /dev/null +++ b/views/default/groups/profile/activity_module.php @@ -0,0 +1,49 @@ +activity_enable == 'no') { + return true; +} + +$group = $vars['entity']; +if (!$group) { + return true; +} + +$all_link = elgg_view('output/url', array( + 'href' => "groups/activity/$group->guid", + 'text' => elgg_echo('link:view:all'), +)); + +$add_link = ' '.elgg_view('output/url', array( + 'href' => "graphs/group/$group->guid", + 'text' => elgg_echo('timeline'), +)); + + +elgg_push_context('widgets'); +$db_prefix = elgg_get_config('dbprefix'); +$content = elgg_list_river(array( + 'limit' => 4, + 'pagination' => false, + 'joins' => array("JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid"), + 'wheres' => array("(e1.container_guid = $group->guid)"), +)); +elgg_pop_context(); + +if (!$content) { + $content = '

' . elgg_echo('groups:activity:none') . '

'; +} + +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('groups:activity'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $add_link, +)); diff --git a/views/default/js/raphael/analytics.php b/views/default/js/raphael/analytics.php new file mode 100644 index 000000000..e8703b100 --- /dev/null +++ b/views/default/js/raphael/analytics.php @@ -0,0 +1,5 @@ +$group_guid, 'limit'=>0, 'type'=>'object')); +$events = array(); + +$db_prefix = elgg_get_config('dbprefix'); +$river = elgg_get_river(array( + 'limit' => 0, + 'joins' => array("JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid"), + 'wheres' => array("(e1.container_guid = $group_guid)"), +)); + +foreach($river as $item){ + $subject = $item->getSubjectEntity(); + $object = $item->getObjectEntity(); + + array_push($events, array( + 'start' => date('c', $item->posted), + 'icon'=> $icon, + 'title' => $object->title, + 'classname' => 'hot_event', + 'description' => elgg_get_excerpt($object->description), + 'durationEvent' => false, + )); + +} + +$data = array( + 'dateTimeFormat'=>'iso8601', + 'events'=>$events, +); + +echo json_encode($data); -- cgit v1.2.3