From de0b36b4638ffaa7d5dfc44ba7cf0c09b07af717 Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Wed, 20 Jan 2010 10:28:00 +0100 Subject: [PATCH] Import src directory from OpenRico 2.1 --- lib/rico/css/coffee-with-milk.css | 80 + lib/rico/css/grayedout.css | 75 + lib/rico/css/greenHdg.css | 18 + lib/rico/css/iegradient.css | 3 + lib/rico/css/min.rico.css | 1 + lib/rico/css/ricoCalendar.css | 128 + lib/rico/css/ricoColorPicker.css | 15 + lib/rico/css/ricoGrid.css | 177 + lib/rico/css/ricoLiveGridForms.css | 84 + lib/rico/css/ricoMenu.css | 95 + lib/rico/css/ricoSheet.css | 64 + lib/rico/css/ricoTree.css | 47 + lib/rico/css/tanChisel.css | 47 + lib/rico/css/warmfall.css | 63 + lib/rico/export-owc.html | 34 + lib/rico/export-plain.html | 33 + lib/rico/images/aline.gif | Bin 0 -> 47 bytes lib/rico/images/calarrow.png | Bin 0 -> 916 bytes lib/rico/images/calendaricon.gif | Bin 0 -> 259 bytes lib/rico/images/checkmark.gif | Bin 0 -> 230 bytes lib/rico/images/close.gif | Bin 0 -> 859 bytes lib/rico/images/delete.gif | Bin 0 -> 343 bytes lib/rico/images/divider.gif | Bin 0 -> 49 bytes lib/rico/images/doc.gif | Bin 0 -> 956 bytes lib/rico/images/dotbutton.gif | Bin 0 -> 874 bytes lib/rico/images/drop.gif | Bin 0 -> 102 bytes lib/rico/images/filtercol.gif | Bin 0 -> 293 bytes lib/rico/images/folderclosed.gif | Bin 0 -> 909 bytes lib/rico/images/folderopen.gif | Bin 0 -> 915 bytes lib/rico/images/grayedout.gif | Bin 0 -> 2983 bytes lib/rico/images/left.gif | Bin 0 -> 105 bytes lib/rico/images/link.gif | Bin 0 -> 963 bytes lib/rico/images/m.gif | Bin 0 -> 121 bytes lib/rico/images/node.gif | Bin 0 -> 855 bytes lib/rico/images/nodeblank.gif | Bin 0 -> 836 bytes lib/rico/images/nodelast.gif | Bin 0 -> 847 bytes lib/rico/images/nodeline.gif | Bin 0 -> 852 bytes lib/rico/images/nodem.gif | Bin 0 -> 97 bytes lib/rico/images/nodemlast.gif | Bin 0 -> 125 bytes lib/rico/images/nodep.gif | Bin 0 -> 133 bytes lib/rico/images/nodeplast.gif | Bin 0 -> 130 bytes lib/rico/images/p.gif | Bin 0 -> 128 bytes lib/rico/images/removeFilter.gif | Bin 0 -> 145 bytes lib/rico/images/resize.gif | Bin 0 -> 51 bytes lib/rico/images/right.gif | Bin 0 -> 105 bytes lib/rico/images/shadow.png | Bin 0 -> 3575 bytes lib/rico/images/shadow_ll.png | Bin 0 -> 273 bytes lib/rico/images/shadow_ur.png | Bin 0 -> 274 bytes lib/rico/images/sort_asc.gif | Bin 0 -> 77 bytes lib/rico/images/sort_desc.gif | Bin 0 -> 76 bytes lib/rico/images/tableFilterCollapse.gif | Bin 0 -> 995 bytes lib/rico/images/tableFilterExpand.gif | Bin 0 -> 998 bytes lib/rico/min.rico.js | 1 + lib/rico/prototype.js | 4320 +++++++++++++++++++++++ lib/rico/rico.js | 249 ++ lib/rico/ricoAjaxEngine.js | 183 + lib/rico/ricoBehaviors.js | 235 ++ lib/rico/ricoCalendar.js | 552 +++ lib/rico/ricoColorPicker.js | 101 + lib/rico/ricoCommon.js | 1093 ++++++ lib/rico/ricoComponents.js | 209 ++ lib/rico/ricoDashboard.js | 332 ++ lib/rico/ricoDragDrop.js | 709 ++++ lib/rico/ricoEffects.js | 494 +++ lib/rico/ricoGridCommon.js | 990 ++++++ lib/rico/ricoLiveGrid.js | 2222 ++++++++++++ lib/rico/ricoLiveGridAir.js | 162 + lib/rico/ricoLiveGridAjax.js | 561 +++ lib/rico/ricoLiveGridControls.js | 392 ++ lib/rico/ricoLiveGridForms.js | 1016 ++++++ lib/rico/ricoLiveGridJSON.js | 184 + lib/rico/ricoLiveGridMenu.js | 116 + lib/rico/ricoMenu.js | 222 ++ lib/rico/ricoSheet.js | 1896 ++++++++++ lib/rico/ricoSimpleGrid.js | 390 ++ lib/rico/ricoSimpleGrid.xsl | 294 ++ lib/rico/ricoSimpleGrid2xl.xsl | 160 + lib/rico/ricoStyles.js | 645 ++++ lib/rico/ricoTree.js | 315 ++ lib/rico/translations/ricoLocale_de.js | 121 + lib/rico/translations/ricoLocale_en.js | 121 + lib/rico/translations/ricoLocale_es.js | 115 + lib/rico/translations/ricoLocale_fr.js | 117 + lib/rico/translations/ricoLocale_it.js | 119 + lib/rico/translations/ricoLocale_ja.js | 122 + lib/rico/translations/ricoLocale_ko.js | 118 + lib/rico/translations/ricoLocale_pt.js | 119 + lib/rico/translations/ricoLocale_ru.js | 118 + lib/rico/translations/ricoLocale_ua.js | 118 + lib/rico/translations/ricoLocale_zh.js | 125 + 90 files changed, 20320 insertions(+) create mode 100644 lib/rico/css/coffee-with-milk.css create mode 100644 lib/rico/css/grayedout.css create mode 100644 lib/rico/css/greenHdg.css create mode 100644 lib/rico/css/iegradient.css create mode 100644 lib/rico/css/min.rico.css create mode 100644 lib/rico/css/ricoCalendar.css create mode 100644 lib/rico/css/ricoColorPicker.css create mode 100644 lib/rico/css/ricoGrid.css create mode 100644 lib/rico/css/ricoLiveGridForms.css create mode 100644 lib/rico/css/ricoMenu.css create mode 100644 lib/rico/css/ricoSheet.css create mode 100644 lib/rico/css/ricoTree.css create mode 100644 lib/rico/css/tanChisel.css create mode 100644 lib/rico/css/warmfall.css create mode 100644 lib/rico/export-owc.html create mode 100644 lib/rico/export-plain.html create mode 100644 lib/rico/images/aline.gif create mode 100644 lib/rico/images/calarrow.png create mode 100644 lib/rico/images/calendaricon.gif create mode 100644 lib/rico/images/checkmark.gif create mode 100644 lib/rico/images/close.gif create mode 100644 lib/rico/images/delete.gif create mode 100644 lib/rico/images/divider.gif create mode 100644 lib/rico/images/doc.gif create mode 100644 lib/rico/images/dotbutton.gif create mode 100644 lib/rico/images/drop.gif create mode 100644 lib/rico/images/filtercol.gif create mode 100644 lib/rico/images/folderclosed.gif create mode 100644 lib/rico/images/folderopen.gif create mode 100644 lib/rico/images/grayedout.gif create mode 100644 lib/rico/images/left.gif create mode 100644 lib/rico/images/link.gif create mode 100644 lib/rico/images/m.gif create mode 100644 lib/rico/images/node.gif create mode 100644 lib/rico/images/nodeblank.gif create mode 100644 lib/rico/images/nodelast.gif create mode 100644 lib/rico/images/nodeline.gif create mode 100644 lib/rico/images/nodem.gif create mode 100644 lib/rico/images/nodemlast.gif create mode 100644 lib/rico/images/nodep.gif create mode 100644 lib/rico/images/nodeplast.gif create mode 100644 lib/rico/images/p.gif create mode 100644 lib/rico/images/removeFilter.gif create mode 100644 lib/rico/images/resize.gif create mode 100644 lib/rico/images/right.gif create mode 100644 lib/rico/images/shadow.png create mode 100644 lib/rico/images/shadow_ll.png create mode 100644 lib/rico/images/shadow_ur.png create mode 100644 lib/rico/images/sort_asc.gif create mode 100644 lib/rico/images/sort_desc.gif create mode 100644 lib/rico/images/tableFilterCollapse.gif create mode 100644 lib/rico/images/tableFilterExpand.gif create mode 100644 lib/rico/min.rico.js create mode 100644 lib/rico/prototype.js create mode 100644 lib/rico/rico.js create mode 100644 lib/rico/ricoAjaxEngine.js create mode 100644 lib/rico/ricoBehaviors.js create mode 100644 lib/rico/ricoCalendar.js create mode 100644 lib/rico/ricoColorPicker.js create mode 100644 lib/rico/ricoCommon.js create mode 100644 lib/rico/ricoComponents.js create mode 100644 lib/rico/ricoDashboard.js create mode 100644 lib/rico/ricoDragDrop.js create mode 100644 lib/rico/ricoEffects.js create mode 100644 lib/rico/ricoGridCommon.js create mode 100644 lib/rico/ricoLiveGrid.js create mode 100644 lib/rico/ricoLiveGridAir.js create mode 100644 lib/rico/ricoLiveGridAjax.js create mode 100644 lib/rico/ricoLiveGridControls.js create mode 100644 lib/rico/ricoLiveGridForms.js create mode 100644 lib/rico/ricoLiveGridJSON.js create mode 100644 lib/rico/ricoLiveGridMenu.js create mode 100644 lib/rico/ricoMenu.js create mode 100644 lib/rico/ricoSheet.js create mode 100644 lib/rico/ricoSimpleGrid.js create mode 100644 lib/rico/ricoSimpleGrid.xsl create mode 100644 lib/rico/ricoSimpleGrid2xl.xsl create mode 100644 lib/rico/ricoStyles.js create mode 100644 lib/rico/ricoTree.js create mode 100644 lib/rico/translations/ricoLocale_de.js create mode 100644 lib/rico/translations/ricoLocale_en.js create mode 100644 lib/rico/translations/ricoLocale_es.js create mode 100644 lib/rico/translations/ricoLocale_fr.js create mode 100644 lib/rico/translations/ricoLocale_it.js create mode 100644 lib/rico/translations/ricoLocale_ja.js create mode 100644 lib/rico/translations/ricoLocale_ko.js create mode 100644 lib/rico/translations/ricoLocale_pt.js create mode 100644 lib/rico/translations/ricoLocale_ru.js create mode 100644 lib/rico/translations/ricoLocale_ua.js create mode 100644 lib/rico/translations/ricoLocale_zh.js diff --git a/lib/rico/css/coffee-with-milk.css b/lib/rico/css/coffee-with-milk.css new file mode 100644 index 0000000..684b58c --- /dev/null +++ b/lib/rico/css/coffee-with-milk.css @@ -0,0 +1,80 @@ +/* +Based on "Coffee with milk" table design by Roger Johansson, 456 Berea Street +www.456bereastreet.com +================================================*/ + +.ricoLG_table { + border-top:1px solid #523A0B !important; + border-right:none; + font:normal 76%/150% "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; + color:#000; +} +tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */ + background:#EBE5D9 !important; + line-height:normal; + text-align:left; +} + +tr.ricoLG_hdg th, tr.ricoLG_hdg td { + border-bottom:1px solid #523A0B; + background:#EBE5D9; +} + +tr.ricoLG_hdg th, tr.ricoLG_hdg td { + border-left: 1px solid #E0D8CD !important; +} + +.ricoLG_bottom th, .ricoLG_bottom td { + border-left: 1px solid #FFF; +} + +tr.ricoLG_hdg div.ricoLG_cell { + background:#EBE5D9; + font-weight:bold; + padding:0.5em 0 0.5em 0.5em; +} +div.ricoLG_outerDiv table a { + color:#523A0B; + text-decoration:none; + border-bottom:1px dotted; +} +div.ricoLG_outerDiv tbody a:visited { + color:#444; + font-weight:normal; +} +div.ricoLG_outerDiv table a:hover { + border-bottom-style:solid; +} + +.ricoLG_bottom div.ricoLG_oddRow { + background-color:#F7F4EE; + border-top: 1px solid #EBE5D9; + border-bottom: 1px solid #EBE5D9; +} +.ricoLG_bottom div.ricoLG_evenRow { + border-top: 1px solid #FFF; + border-bottom: 1px solid #FFF; +} +.ricoLG_selection { + background-color:#ffffee !important; + border-color:#523A0B !important; +} +.ricoLG_table { + border-style:none; +} + +caption { + font-family:Georgia,Times,serif; + font-weight:normal; + font-size:1.4em; + text-align:left; + margin:0; + padding:0.5em 0.25em; +} +div.ricoLG_chooser .ricoTitle { + background-color: #EBE5D9; + color:#444; +} +div.ricoLG_chooser { + border: 1px solid #523A0B; +} diff --git a/lib/rico/css/grayedout.css b/lib/rico/css/grayedout.css new file mode 100644 index 0000000..98ab8db --- /dev/null +++ b/lib/rico/css/grayedout.css @@ -0,0 +1,75 @@ +/* ------------------------------------------------------- +Based on Grayed Out table design +Author: Terence Ordona +URL: http://www.imaputz.com/ + ------------------------------------------------------- */ +div.ricoLG_outerDiv *, div.ricoLG_outerDiv div.ricoLG_cell { + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; +} + +div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_outerDiv div.ricoLG_cell *, div.ricoLG_keywordDiv * { + font-size: 11px; +} + +div.ricoLG_keywordDiv { + background-color: #CCC !important; +} + +.ricoLG_table { + border-top: 1px solid #CCC; + border-right: 1px solid #CCC; +} + +tr.ricoLG_hdg th, tr.ricoLG_hdg td { + background-color: #FFF !important; + background: url(../images/grayedout.gif) #FFF repeat-x scroll center left; + border-bottom: 1px solid #CCC; +} + +.ricoLG_table th, .ricoLG_table td { + border-left: 1px solid #CCC; +} + +.ricoLG_bottom th, .ricoLG_bottom td { + border-bottom: 1px solid #CCC; +} + +div.ricoLG_outerDiv .ricoLG_bottom div.ricoLG_cell { + border-bottom: none; + padding: 5px; +} + +tr.ricoLG_hdg .ricoLG_cell { + font-weight: normal; +} + +div.ricoLG_outerDiv a:visited, div.ricoLG_outerDiv a:link { + color: #009; + text-decoration: none; +} + +div.ricoLG_outerDiv a:hover { + color: #009; + text-decoration: underline; +} + +.ricoLG_oddRow { + background-color: #EEE; +} + +div.ricoLG_selection, div.ricoLG_chooser .ricoTitle { + background-color: #999; + color: #FFF; +} + +div.ricoLG_highlightDiv { + border-color: #999; +} + +caption { + text-align: left; + font-size: 100%; + padding: .75em; + color: #000; +} + diff --git a/lib/rico/css/greenHdg.css b/lib/rico/css/greenHdg.css new file mode 100644 index 0000000..a5a545f --- /dev/null +++ b/lib/rico/css/greenHdg.css @@ -0,0 +1,18 @@ +/* display grid headings with a green background */ + +tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */ + background-color : #cedebd; + color : #000000; + font-weight : bold; + text-align : center; +} +div.ricoLG_selection { + background-color: #cedebd; +} +div.ricoLG_chooser .ricoTitle { + background-color: #cedebd; + color: black; +} +tr.ricoLG_hdg div.hover, table.ricoLiveGrid thead td, table.ricoLiveGrid thead th { + background-color: #dee8cd !important; +} diff --git a/lib/rico/css/iegradient.css b/lib/rico/css/iegradient.css new file mode 100644 index 0000000..af5421a --- /dev/null +++ b/lib/rico/css/iegradient.css @@ -0,0 +1,3 @@ +tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */ + Filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=white,endColorStr=Gainsboro); +} diff --git a/lib/rico/css/min.rico.css b/lib/rico/css/min.rico.css new file mode 100644 index 0000000..4cde04a --- /dev/null +++ b/lib/rico/css/min.rico.css @@ -0,0 +1 @@ +div.ricoCalContainer,div.ricoCalYearPrompt,div.ricoTreeContainer{position:absolute;z-index:9999;left:0;top:0;}div.ricoCalContainer *,div.ricoCalYearPrompt *,div.ricoTreeContainer *{font-size:8pt;}table.ricoCalTab{border:1px solid #666;}table.ricoCalTab thead a{border:1px solid #D4D0C8;text-decoration:none;color:black;}table.ricoCalTab thead img{border:none;padding-left:.3em;padding-right:.3em;}table.ricoCalTab thead a:hover{border:1px solid #666;cursor:pointer;}div.ricoCalYearPrompt{border:1px solid #666;background-color:#FEE;padding:2px;}.ricoCalYearPrompt img{border:1px solid black;margin-left:3px;vertical-align:middle;}table.ricoCalTab thead td{background-color:#D4D0C8;font-weight:bold;text-align:center;padding:2px;}table.ricoCalTab tfoot td{color:#FFF;text-align:center;background-color:#666;padding:2px;cursor:pointer;}table.ricoCalTab tfoot span{text-decoration:underline;cursor:pointer;}table.ricoCalTab tbody{background-color:white;}tr.ricoCalDayNames td{font-weight:bold;padding:0 2px 0 2px;text-align:right;}td.ricoCal0,td.ricoCal1,td.ricoCal2,td.ricoCal3,td.ricoCal4,td.ricoCal5,td.ricoCal6,td.ricoCalToday,td.ricoCalEmpty{text-decoration:none;text-align:right;width:3em;}td.ricoCal1,td.ricoCal2,td.ricoCal3,td.ricoCal4,td.ricoCal5{cursor:pointer;color:black;}td.ricoCal0,td.ricoCal6{cursor:pointer;color:#999;}td.ricoCalToday{cursor:pointer;color:red;font-weight:bold;}td.ricoCalWeekNum{background-color:#D4D0C8;color:black;text-align:center;}.ricoCalMenu{position:absolute;background-color:#FEE;border-bottom:1px solid #666;border-right:1px solid #666;}.ricoCalMenu td{border-top:1px solid #666;border-left:1px solid #666;}.ricoCalMenu a{display:block;text-decoration:none;color:black;cursor:pointer;}.ricoCalMenu a:hover{background-color:#FCC;}div.ricoColorPicker{position:absolute;background-color:white;z-index:9999;left:0;top:0;}div.ricoColorPicker td{width:12px;height:12px;font-size:10px;}div.ricoLG_outerDiv{position:relative;}div.ricoLG_innerDiv,div.ricoLG_frozenTabsDiv{overflow:hidden;margin:0;padding:0;position:absolute;top:0;}div.ricoLG_scrollDiv{overflow:scroll;position:relative;}div.ricoLG_scrollTabsDiv{position:absolute;top:0;}div.ricoLG_resizeDiv{position:absolute;top:0;width:1px;z-index:2;background-color:blue;}div.ricoLG_highlightDiv{position:absolute;border:2px solid black;}.ricoLG_table,table.ricoLiveGrid{margin:0;padding:0;border-right:1px solid silver;border-top:1px solid silver;}.ricoLG_table th,.ricoLG_table td,table.ricoLiveGrid td,table.ricoLiveGrid th{border-left:1px solid silver;}table.ricoLG_bottom,table.ricoLiveGrid td,table.ricoLiveGrid th{border-top-style:none;}.ricoLG_oddRow{background-color:#EEE;}.ricoLG_selection{background-color:#cedebd;}div.ricoLG_col{overflow:hidden;width:100px;}.ricoLG_top div.ricoLG_col{position:relative;}.ricoLG_top div.ricoLG_Resize{position:absolute;width:5px;height:100%;top:0;cursor:e-resize;}.ricoLG_HdrIcon{padding-left:2px;padding-right:2px;}.ricoLG_bottom div.ricoLG_cell,.ricoLG_top th,.ricoLG_top td,table.ricoLiveGrid td,table.ricoLiveGrid th{border-bottom:1px solid silver;}div.ricoLG_cell,table.ricoLiveGrid td,table.ricoLiveGrid th{overflow:hidden;height:1.2em;padding-left:3px;margin:0;font-size:10pt;padding-top:3px;padding-bottom:3px;}div.ricoLG_messageDiv{position:absolute;z-index:200;border:1px solid green;background-color:white;font-weight:bold;font-size:larger;color:navy;text-align:center;padding:4px;}div.ricoLG_keywordDiv{position:absolute;z-index:200;border:1px solid black;background-color:#cedebd;color:black;text-align:center;padding:4px;}div.ricoLG_keywordDiv p.keywordTitle{font-weight:bold;}div.ricoLG_keywordDiv img{border:1px solid black;margin-left:6px;vertical-align:middle;}p.ricoBookmark{margin-bottom:3px;font-size:10pt;white-space:nowrap;}p.ricoBookmark span{margin-right:1em;font-size:10pt;}span.ricoCaption{font-weight:bold;}div.alignleft{text-align:left;}div.aligncenter{text-align:center;}div.alignright{text-align:right;}span.ricoSessionTimer{background-color:black;color:white;}div.ricoLG_chooser{border:2px solid black;background-color:white;}div.ricoLG_chooser .ricoTitle{padding:3px;color:white;background-color:black;font-weight:bold;font-size:smaller;}div.ricoLG_chooser .ricoContent{margin-left:3px;}div.ricoLG_chooser .ricoContent div{border-bottom:1px solid #CCC;font-size:smaller;}div.ricoLG_chooser .ricoContent input{margin-right:.5em;}div.ricoMenu,div.ricoMenuSafari{position:absolute;z-index:100;border:1px solid #666;padding:2px;cursor:default;visibility:hidden;}div.ricoMenu,div.ricoMenu div.ricoMenuHeading,div.ricoMenu a{background-color:menu;color:menutext;text-decoration:none;font-family:tahoma,arial,helvetica,sans-serif;font-size:8pt;display:block;}div.ricoMenuSafari,div.ricoMenuSafari div.ricoMenuHeading,div.ricoMenuSafari a{background-color:#EDEDED;text-decoration:none;font-family:tahoma,arial,helvetica,sans-serif;font-size:8pt;display:block;}div.ricoMenu div.ricoMenuHeading{padding:1px 0;font-weight:bold;}div.ricoMenuSafari div.ricoMenuHeading{padding:1px 0;color:black;display:block;font-weight:bold;}div.ricoMenu .enabled{position:relative;}div.ricoMenuSafari .enabled{color:black;}div.ricoMenu .enabled,div.ricoMenu .enabled-hover,div.ricoMenuSafari .enabled,div.ricoMenuSafari .enabled-hover,div.ricoMenu .disabled,div.ricoMenuSafari .disabled{padding-left:1em;padding-top:.1em;padding-bottom:.1em;z-index:101;}div.ricoMenu .disabled,div.ricoMenuSafari .disabled{color:#999;}div.ricoMenu hr{height:1px;margin:1px;border:0;color:menu;background-color:menu;}div.ricoMenu .enabled-hover,div.ricoMenu .ricoSubMenuOpen{background-color:Highlight;color:HighlightText;}div.ricoMenuSafari .enabled-hover,div.ricoMenuSafari .ricoSubMenuOpen{background-color:#1657B8;color:white;}div.ricoMenu .ricoSubMenu,div.ricoMenu .ricoSubMenuOpen,div.ricoMenuSafari .ricoSubMenu,div.ricoMenuSafari .ricoSubMenuOpen{padding:1px 0;display:block;font-weight:bold;z-index:101;position:relative;}div.ricoMenu div.ricoMenuBreak,div.ricoMenuSafari div.ricoMenuBreak{height:1px;margin:3px 0 3px 0;padding:0;background-color:#AAA;width:100%;line-height:5px;overflow:hidden;}.ricoTreeContainer{background-color:#cedebd;padding:4px;border:1px solid black;top:0;left:0;position:absolute;z-index:9999;}.ricoTree{border:thin inset;overflow:auto;background-color:#FFF;}.ricoTree p,.ricoTree a{margin:0;padding-left:.3em;white-space:nowrap;}.ricoTree a{cursor:pointer;text-decoration:none;}.ricoTree a:hover{background-color:#EEE;}.ricoTree img{margin:0;padding:0;display:block;}.ricoTreeContainer *,.ricoTree *{font-size:8pt;white-space:nowrap;}.ricoTreeButtons span:hover{background-color:#deeecd;}span.ricoSaveMsg{background-color:yellow;}span.ricoSessionTimer{background-color:black;color:white;}div.ricoLG_editDiv,div.ricoLG_editResponseDiv{color:#000;background:#E8ECF3;overflow:auto;padding:8px;border:1px solid navy;position:absolute;z-index:300;top:0;left:0;}div.ricoLG_editDiv *,div.ricoLG_editResponseDiv{font-size:10pt;}form .ricoEditLabel,form .ricoEditLabelWithHelp{font-weight:bold;text-align:left;padding-right:1em;}form .ricoEditLabelWithHelp{color:navy;}form{margin:0;}.tabHeader{height:1.8em;color:#AAA;background:#D8E0F2;font-weight:bold;float:left;display:inline;margin-left:2px;margin-right:2px;text-align:center;white-space:nowrap;overflow:hidden;}.tabHover{color:#666;cursor:pointer;}.tabSelected{color:#444;background:#CFD4E6;cursor:auto;}.tabContentContainer{clear:both;}div.ricoLG_editDiv .tabContent,div.ricoLG_editDiv .noTabContent{color:#000;background:#CFD4E6;overflow:hidden;padding:4px;white-space:nowrap;}div.ricoLG_editDiv .noTabContent{float:left;}span.ricoLookup{display:none;} \ No newline at end of file diff --git a/lib/rico/css/ricoCalendar.css b/lib/rico/css/ricoCalendar.css new file mode 100644 index 0000000..2309380 --- /dev/null +++ b/lib/rico/css/ricoCalendar.css @@ -0,0 +1,128 @@ +/* ricoCalendar */ + +div.ricoCalContainer, div.ricoCalYearPrompt, div.ricoTreeContainer { + position:absolute; + z-index:9999; + left:0px; + top:0px; +} + +div.ricoCalContainer *, div.ricoCalYearPrompt *, div.ricoTreeContainer * { + font-size:8pt; +} + +table.ricoCalTab { + border:1px solid #666666; +} + +table.ricoCalTab thead a { + border:1px solid #D4D0C8; + text-decoration: none; + color:black; +} + +table.ricoCalTab thead img { + border:none; + padding-left: 0.3em; + padding-right: 0.3em; +} + +table.ricoCalTab thead a:hover { + border:1px solid #666666; + cursor:pointer; +} + +div.ricoCalYearPrompt { + border:1px solid #666666; + background-color: #FEE; + padding: 2px; +} + +.ricoCalYearPrompt img { + border: 1px solid black; + margin-left: 3px; + vertical-align: middle; +} + +table.ricoCalTab thead td { + background-color: #D4D0C8; + font-weight: bold; + text-align:center; + padding: 2px; +} + +table.ricoCalTab tfoot td { + color:#FFF; + text-align:center; + background-color: #666666; + padding: 2px; + cursor:pointer; +} + +table.ricoCalTab tfoot span { + text-decoration: underline; + cursor:pointer; +} + +table.ricoCalTab tbody { + background-color: white; +} + +tr.ricoCalDayNames td { + font-weight: bold; + padding: 0px 2px 0px 2px; + text-align:right; +} + +td.ricoCal0, td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5, td.ricoCal6, td.ricoCalToday, td.ricoCalEmpty { + text-decoration:none; + text-align:right; + width:3em; +} + +/* Monday-Friday */ +td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5 { + cursor:pointer; + color:black; +} + +/* Sunday, Saturday */ +td.ricoCal0, td.ricoCal6 { + cursor:pointer; + color:#999; +} + +td.ricoCalToday { + cursor:pointer; + color:red; + font-weight:bold; +} + +td.ricoCalWeekNum { + background-color: #D4D0C8; + color:black; + text-align:center; +} + +.ricoCalMenu { + position:absolute; + background-color: #FEE; + border-bottom:1px solid #666666; + border-right:1px solid #666666; +} + +.ricoCalMenu td { + border-top:1px solid #666666; + border-left:1px solid #666666; +} + +.ricoCalMenu a { + display:block; + text-decoration:none; + color:black; + cursor:pointer; +} + +.ricoCalMenu a:hover { + background-color: #FCC; +} diff --git a/lib/rico/css/ricoColorPicker.css b/lib/rico/css/ricoColorPicker.css new file mode 100644 index 0000000..fa11c4a --- /dev/null +++ b/lib/rico/css/ricoColorPicker.css @@ -0,0 +1,15 @@ +/* ricoColorPicker */ + +div.ricoColorPicker { + position:absolute; + background-color: white; + z-index:9999; + left:0px; + top:0px; +} + +div.ricoColorPicker td { + width: 12px; + height: 12px; + font-size: 10px; +} diff --git a/lib/rico/css/ricoGrid.css b/lib/rico/css/ricoGrid.css new file mode 100644 index 0000000..f986d60 --- /dev/null +++ b/lib/rico/css/ricoGrid.css @@ -0,0 +1,177 @@ +div.ricoLG_outerDiv { + position:relative; + /*border:thin solid blue; /* for debugging */ +} + +div.ricoLG_innerDiv, div.ricoLG_frozenTabsDiv { + overflow:hidden; + margin:0px; + padding:0px; + position:absolute; + top:0px; +} + +div.ricoLG_scrollDiv { + overflow:scroll; + position:relative; +} + +div.ricoLG_scrollTabsDiv { + position:absolute; + top:0px; +} + +div.ricoLG_resizeDiv { + position:absolute; + top:0px; + width:1px; + z-index:2; + background-color:blue; +} + +div.ricoLG_highlightDiv { + position:absolute; + border: 2px solid black; +} + +.ricoLG_table, table.ricoLiveGrid { + margin: 0px; + padding: 0px; + border-right: 1px solid silver; + border-top: 1px solid silver; +} + +.ricoLG_table th, .ricoLG_table td, table.ricoLiveGrid td, table.ricoLiveGrid th { + border-left: 1px solid silver; +} + +table.ricoLG_bottom, table.ricoLiveGrid td, table.ricoLiveGrid th { + border-top-style: none; +} + +.ricoLG_evenRow { } +.ricoLG_oddRow { background-color: #EEE; } +.ricoLG_selection { background-color: #cedebd; } + +div.ricoLG_col { + overflow:hidden; + width:100px; +} + +.ricoLG_top div.ricoLG_col { + position:relative; +} + +.ricoLG_top div.ricoLG_Resize { + position:absolute; + width:5px; + height:100%; + top:0px; + cursor:e-resize; +} + +.ricoLG_HdrIcon { + padding-left:2px; + padding-right:2px; +} + +.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td, table.ricoLiveGrid td, table.ricoLiveGrid th { + border-bottom: 1px solid silver; +} + +div.ricoLG_cell, table.ricoLiveGrid td, table.ricoLiveGrid th { + overflow:hidden; + height:1.2em; + padding-left: 3px; + margin: 0px; + font-size: 10pt; + padding-top:3px; + padding-bottom:3px; +} + +div.ricoLG_messageDiv { + position:absolute; + z-index:200; + border:1px solid green; + background-color:white; + font-weight:bold; + font-size:larger; + color:navy; + text-align:center; + padding:4px; +} + +div.ricoLG_keywordDiv { + position:absolute; + z-index:200; + border:1px solid black; + background-color : #cedebd; + color:black; + text-align:center; + padding:4px; +} + +div.ricoLG_keywordDiv p.keywordTitle { + font-weight: bold; +} + +div.ricoLG_keywordDiv img { + border: 1px solid black; + margin-left: 6px; + vertical-align: middle; +} + +p.ricoBookmark { + margin-bottom: 3px; + font-size: 10pt; + white-space: nowrap; +} + +p.ricoBookmark span { + margin-right: 1em; + font-size: 10pt; +} + +span.ricoCaption { + font-weight: bold; +} + +div.alignleft { + text-align: left; +} + +div.aligncenter { + text-align: center; +} + +div.alignright { + text-align: right; +} + +span.ricoSessionTimer { + background-color:black; + color:white; +} + +/* column chooser */ +div.ricoLG_chooser { + border: 2px solid black; + background-color: white; +} +div.ricoLG_chooser .ricoTitle { + padding: 3px; + color: white; + background-color: black; + font-weight: bold; + font-size: smaller; +} +div.ricoLG_chooser .ricoContent { + margin-left: 3px; +} +div.ricoLG_chooser .ricoContent div { + border-bottom: 1px solid #CCC; + font-size: smaller; +} +div.ricoLG_chooser .ricoContent input { + margin-right: 0.5em; +} diff --git a/lib/rico/css/ricoLiveGridForms.css b/lib/rico/css/ricoLiveGridForms.css new file mode 100644 index 0000000..d6f8fe2 --- /dev/null +++ b/lib/rico/css/ricoLiveGridForms.css @@ -0,0 +1,84 @@ +/* ricoLiveGridForms */ + +span.ricoSaveMsg { + background-color:yellow; +} + +span.ricoSessionTimer { + background-color:black; + color:white; +} + +div.ricoLG_editDiv, div.ricoLG_editResponseDiv { + color:#000; background:#E8ECF3; + overflow:auto; + padding:8px; + border: 1px solid navy; + position:absolute; + z-index:300; + top:0px; + left:0px; +} + +div.ricoLG_editDiv *, div.ricoLG_editResponseDiv { + font-size: 10pt; +} + +form .ricoEditLabel, form .ricoEditLabelWithHelp { + font-weight: bold; + text-align: left; + padding-right: 1em; +} + +form .ricoEditLabelWithHelp { + color: navy; +} + +form { + margin:0px; +} + +.tabHeader { + height: 1.8em; + color : #AAA; + background: #D8E0F2; + font-weight : bold; + float: left; + display: inline; + margin-left: 2px; + margin-right: 2px; + text-align: center; + white-space:nowrap; + overflow:hidden; +} + +.tabHover { + color : #666; + cursor: pointer; +} + +.tabSelected { + color : #444; + background: #CFD4E6; + cursor: auto; +} + +.tabContentContainer { + clear:both; +} + +div.ricoLG_editDiv .tabContent, div.ricoLG_editDiv .noTabContent { + color:#000; background:#CFD4E6; + overflow: hidden; + padding: 4px; + white-space:nowrap; +} + +div.ricoLG_editDiv .noTabContent { + float:left; /* required by IE7 */ +} + +span.ricoLookup { + display:none; +} + diff --git a/lib/rico/css/ricoMenu.css b/lib/rico/css/ricoMenu.css new file mode 100644 index 0000000..4e00895 --- /dev/null +++ b/lib/rico/css/ricoMenu.css @@ -0,0 +1,95 @@ +/* ricoMenu */ + +div.ricoMenu, div.ricoMenuSafari { +position: absolute; +z-index: 100; +border:1px solid #666; +padding:2px; +cursor:default; +visibility: hidden; +} + +div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu a { +background-color:menu; +color: menutext; +text-decoration: none; +font-family:tahoma,arial,helvetica,sans-serif; +font-size: 8pt; +display:block; +} + +div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari a { +background-color:#EDEDED; +text-decoration: none; +font-family:tahoma,arial,helvetica,sans-serif; +font-size: 8pt; +display:block; +} + +div.ricoMenu div.ricoMenuHeading{ +padding: 1px 0px; +font-weight:bold; +} + +div.ricoMenuSafari div.ricoMenuHeading{ +padding: 1px 0px; +color: black; +display: block; +font-weight:bold; +} + +div.ricoMenu .enabled { +position: relative; +} + +div.ricoMenuSafari .enabled { +color: black; +} + +div.ricoMenu .enabled, div.ricoMenu .enabled-hover, div.ricoMenuSafari .enabled, div.ricoMenuSafari .enabled-hover, div.ricoMenu .disabled, div.ricoMenuSafari .disabled { +padding-left: 1em; +padding-top:0.1em; +padding-bottom:0.1em; +z-index: 101; +} + +div.ricoMenu .disabled, div.ricoMenuSafari .disabled { +color: #999; +} + +div.ricoMenu hr{ +height:1px; +margin:1px; +border:0; +color: menu; +background-color: menu; +} + +div.ricoMenu .enabled-hover, div.ricoMenu .ricoSubMenuOpen { + background-color: Highlight; + color: HighlightText; +} + +div.ricoMenuSafari .enabled-hover, div.ricoMenuSafari .ricoSubMenuOpen { + background-color: #1657B8; + color: white; +} + +div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen { +padding: 1px 0px; +display: block; +font-weight:bold; +z-index: 101; +position: relative; +} + +div.ricoMenu div.ricoMenuBreak, div.ricoMenuSafari div.ricoMenuBreak { +height:1px; +margin:3px 0 3px 0; +padding:0; +background-color: #AAA; +width:100%; +line-height:5px; +overflow:hidden; +} + diff --git a/lib/rico/css/ricoSheet.css b/lib/rico/css/ricoSheet.css new file mode 100644 index 0000000..1d1eb5f --- /dev/null +++ b/lib/rico/css/ricoSheet.css @@ -0,0 +1,64 @@ +.ricoLG_top .ricoLG_cell, .ricoLG_top th, .ricoLG_top td { /* td/th required for IE */ + white-space:nowrap; + text-align:center; + font-weight:normal; + background-color: #cedebd !important; +} +div.ricoLG_cell, div.ricoLG_outerDiv textarea { + font-size:8pt; +} +* { + font-family: Verdana, Arial, Helvetica, sans-serif; +} +div.ss_col0, div.ss_col0 .ricoLG_oddRow, div.ss_col0 .ricoLG_evenRow { + background-color: #cedebd !important; + text-align:center; +} +.ricoLG_evenRow { + background-color: #fff; /* improves IE */ +} +div.ricoLG_highlightDiv { + border-top:2px solid #DDD; + border-left:2px solid #DDD; + border-right:2px solid #222; + border-bottom:2px solid #222; + overflow: hidden; + z-index: 1; +} +.toolbar tr { + vertical-align:top; +} +.toolbar * { + font-size: x-small; +} +.ricoLG_fmtnumDiv { + background-color:#EEEEFF; + border: 1px solid black; + font-size: x-small; + position:absolute; + display:none; + z-index:10; + padding:5px; +} +.ricoLG_fmtnumDiv * { + font-size: x-small; +} +.ricoLG_fmtnumDiv table { + margin-bottom: 5px; +} +.ricoLG_help { + border: 1px solid black; + z-index:10; +} +.ricoLG_help .ricoTitle { + font-size: small; + font-weight: bold; + background-color:#AAAAFF; + padding: 3px; +} +.ricoLG_help .ricoContent { + padding:5px; + font-size: x-small; + overflow:auto; + background-color:#EEEEFF; +} \ No newline at end of file diff --git a/lib/rico/css/ricoTree.css b/lib/rico/css/ricoTree.css new file mode 100644 index 0000000..2947fcb --- /dev/null +++ b/lib/rico/css/ricoTree.css @@ -0,0 +1,47 @@ +/* ricoTree */ + +.ricoTreeContainer { + background-color:#cedebd; + padding:4px; + border:1px solid black; + top:0px; + left:0px; + position:absolute; + z-index:9999; +} + +.ricoTree { + border:thin inset; + overflow:auto; + background-color:#FFF; +} + +.ricoTree p, .ricoTree a { + margin:0px; + padding-left:0.3em; + white-space:nowrap; +} + +.ricoTree a { + cursor:pointer; + text-decoration:none; +} + +.ricoTree a:hover { + background-color:#EEE; +} + +.ricoTree img { + margin:0px; + padding:0px; + display:block; +} + +.ricoTreeContainer *, .ricoTree * { + font-size:8pt; + white-space:nowrap; +} + +.ricoTreeButtons span:hover { + background-color:#deeecd; +} diff --git a/lib/rico/css/tanChisel.css b/lib/rico/css/tanChisel.css new file mode 100644 index 0000000..9d4140d --- /dev/null +++ b/lib/rico/css/tanChisel.css @@ -0,0 +1,47 @@ +tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */ + background-color:#e0e0c0 !important; + vertical-align:middle; +} + +tr.ricoLG_hdg div.ricoLG_cell { + border-top: 1px solid #F0F0E8; +} + +.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td { + border-bottom: 1px solid #D8d0c0;; +} + +.ricoLG_table th, .ricoLG_table td { + border-left: 1px solid #F0F0E8; + border-right: 1px solid #D8d0c0; +} + +div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu { + background-color:#f0f0e0; +} + +div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen { + border-top: 1px solid #F0F0E8; + border-left: 1px solid #F0F0E8; + border-bottom: 1px solid #D8d0c0;; + border-right: 1px solid #D8d0c0; +} + +.ricoLG_table { + border-style:none; +} + +div.ricoLG_selection { + background-color:#e0e0c0; +} +div.ricoLG_chooser .ricoTitle { + background-color: #e0e0c0; + color: black; + border-top: 1px solid #F0F0E8; + border-left: 1px solid #F0F0E8; + border-bottom: 1px solid #D8d0c0;; + border-right: 1px solid #D8d0c0; +} +div.ricoLG_chooser { + border: 2px solid #e0e0c0; +} diff --git a/lib/rico/css/warmfall.css b/lib/rico/css/warmfall.css new file mode 100644 index 0000000..3721808 --- /dev/null +++ b/lib/rico/css/warmfall.css @@ -0,0 +1,63 @@ +/* ------------------------------------------------------- +Based on warm fall table design +Author: Mya Leigh +Theme: A Warm, Fall Table - Easy to Read +URL: http://www.myaleigh.com + ------------------------------------------------------- */ +.ricoLG_table { + border-top: 1px solid #84785e; + border-right: 1px solid #84785e; +} + +tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg .ricoLG_cell a, tr.ricoLG_hdg .ricoLG_cell a:visited, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */ + background-color: #a24116 !important; + color: #ffffff !important; + text-decoration: none; +} + +.ricoLG_table th, .ricoLG_table td { + border-left: 1px solid #84785e; +} + +.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td { + border-bottom: 1px solid #84785e; +} + +tr.ricoLG_hdg .ricoLG_cell { + background-color: #a24116; + border: 0; + color: #ffffff; + padding: .75em; + font: "Verdana", Arial, Helvetica, sans-serif; + font-weight: bold; +} + +div.ricoLG_bottom a:visited, div.ricoLG_bottom a:link, div.ricoLG_bottom a:active { + color: #101011; + text-decoration: none; +} + +div.ricoLG_outerDiv a:hover { + text-decoration: underline; +} + +div.ricoLG_outerDiv tbody a:visited { + color:#444; +} + +.ricoLG_oddRow { + background-color: #fffad0; + color: #101011; +} + +.ricoLG_selection, div.ricoLG_chooserDiv .ricoTitle { + background-color: #a24116; + color: #ffffff; +} + +caption { + text-align: left; + font-size: 100%; + padding: .75em; + color: #000; +} diff --git a/lib/rico/export-owc.html b/lib/rico/export-owc.html new file mode 100644 index 0000000..1be9994 --- /dev/null +++ b/lib/rico/export-owc.html @@ -0,0 +1,34 @@ + + +Export + + + + + + diff --git a/lib/rico/export-plain.html b/lib/rico/export-plain.html new file mode 100644 index 0000000..c530ac0 --- /dev/null +++ b/lib/rico/export-plain.html @@ -0,0 +1,33 @@ + + +Export + + + + + + diff --git a/lib/rico/images/aline.gif b/lib/rico/images/aline.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f5cb4346e9fa6b5522328ba104c475b02fb3c68 GIT binary patch literal 47 wcmZ?wbhEHb)M8{}XkY+=|NsB%fM}420~23M|H{*E`4`XGa;tmuyt<8 literal 0 HcmV?d00001 diff --git a/lib/rico/images/calarrow.png b/lib/rico/images/calarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9b64074ec0e86835bde63f40ca4db3ad2afe826a GIT binary patch literal 916 zcmeAS@N?&q;$mQ6;Pv!y2?ElpKrF<;3?yIMKUZO3U}gyL32{Ae;K2X?{~H<_fa3qp zq%kne1Tsd!Xb6mu5Kvnwx);dgI3Do1*;?^0t8%F8T|1mm0qamdctjml9QPczm@%>WzsTcNuHKGE({DC XJ}|v{_9lNmC>T9m{an^LB{Ts5dLT3A literal 0 HcmV?d00001 diff --git a/lib/rico/images/calendaricon.gif b/lib/rico/images/calendaricon.gif new file mode 100644 index 0000000000000000000000000000000000000000..abdf6acdde5bb80c3c7ca15e0db6fd5ce9011f41 GIT binary patch literal 259 zcmZ?wbhEHb6l4%&IKsg2|NsAc_wHT0cJ0iWGe?ge-Lq%U_U+r(u3fuy>C%}qXZH5? zHa9mH6&0O#bc~6K`Om;$Y;3HquCA!4$iTqxkC6#T;s=U9Sy)9FL>P2H%0PB9ur?$p z^rcAhIIUXurhvowjE``$gNd*>r;UFn%UQuQl2xso36jhz49!oUT(I^jV`fSW2w<${ zcv|GcR>S(RF!^SLcXLMJ>^FAHZ@$_X%TuuXenJs1e{FGEL3wIQI=hfb{{$1E0#+UY g!5K4W3h;!)aBwYLw3v&7gPWb3XZ4!3>l7KR0p2rH+5i9m literal 0 HcmV?d00001 diff --git a/lib/rico/images/checkmark.gif b/lib/rico/images/checkmark.gif new file mode 100644 index 0000000000000000000000000000000000000000..88a19a1695248cc6a0c5793add1501dbcfd77863 GIT binary patch literal 230 zcmV7k_Fb;<0llGj@H{PFz$`_b>Y{{Q{&`R3{O z-QDxbX2%wU(nYc3iC)AF{r>#<{q}avFk!_JZ^|ZE!35RtzvcGVxaE}a`sdm5#ryvF zsNj57!2tjN|NsC0A^8LW0018VEC2ui01*HY000GJ;3tmc7%XKv0$qn~D(MkzN5rF5 zKMMXulbXi&anv{-U!vB4_#llIqd*MQE+s>6RCu%oDeFPx5wrwJQliodcor>*AyuHY g8jKDj6GI#*H618E0A?KyX+8)81PDYVPB literal 0 HcmV?d00001 diff --git a/lib/rico/images/close.gif b/lib/rico/images/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ebc825eea792744124e625521cae9ea7d56a4fc GIT binary patch literal 859 zcmchWziQP{5QHaa5y1<>1*?EsX<@fbf}MzeuoX)|gvG+f&R$ed3+>!8;seCOC(v|T zSf=zftj2Fo@(iBlvg|pt-^~8*y$5&q51wwc(L0@iX#ba)J=FG{6is%T>SgOp(itI=a1OtLkSi=2BVEMT0Hg`nwnFYo$2w%SgNY5&hprW zf@W8CXB+oGaW`G*PGgTez~nV?;2#JaLX8;EP;wOx2BVEMTAt*lP0i^lPmuUyELC^4 z$rZa$&@6YE97&o0;Nm(#o3I9QXA=5t_6goh_at!ZbU z+NyRYvT_U?cB^W*jI_R03u(bb=CPA=cxyYcz(_`{{^kAFQs fdUogim4mkz>*crOkK4`HM_+y)K76sWqg(#~-4tN| literal 0 HcmV?d00001 diff --git a/lib/rico/images/delete.gif b/lib/rico/images/delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5c60579eb6a8528a043daaf5f41e811cbddeb74 GIT binary patch literal 343 zcmZ?wbhEHb6l4%&xXQqg#=!9T!Glc;7PLD!lp7day>MYB1H-Q1;Q#;s_ar1VGcc^u z(mJqV!#qL3k9Y4bS5jK*<+VR0<;&y8Hf)$wP%vFVVSh*B_WLVQ*yQ zuTP)WTUfk0b*h$uVGak!p$!{OmY2_zkYFGJDE?$&6=C3D&;h9h`H6w8#G$3YLr1Eg zgHxzc%PLAlSvx3*S5^BGPfARU4Wo;~CI*AP>1~XUtfsJ@@L74W!iHh0YEzcM9HFWt z)mjPZMkD@OF10EV87?mMNm3rlkqnAl^787MZVD;F4N7wu4BdJ4S=toDm@D12WLcdP NtF|@nba7;`1_022bF%;d literal 0 HcmV?d00001 diff --git a/lib/rico/images/divider.gif b/lib/rico/images/divider.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9863d48e7e72c316caae83f1440f7dd481158d1 GIT binary patch literal 49 xcmZ?wbhEHbWMp7un8*ME|NsBLa_JI~RQ$=p$iTqNpaT*G$ulr9#V|5h0|0j`44MD{ literal 0 HcmV?d00001 diff --git a/lib/rico/images/doc.gif b/lib/rico/images/doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ff706c29e23497210b80714e34431b165c235a6 GIT binary patch literal 956 zcmchWzf0F)5XX;durCop8Y&SK7EunuErkRTSoVt~A_y#MIjpFuA!tz=1Rb=&;Ak+S zf`}la!A&HH!V4UXatf-cEt;IJ*L~`5=vlrT_dM@=z2Eow9zSvH;GwHsvRx+R?@miA(1Fas-#J}WJpq=jWk+3 z=62ScI;QHXp_(<8%1q7GLM@AerklE}hk6zicf&MXBQz35o@$z=YlbFMp+*d7D8Zt~ zV6>4&i^o}ps^+*^m}U86ES0-?m}l9Af@ZiySS0R&;;yAzh9&mM1592M2mXP;A=HQg z4JB9MU@+Q9qm`9hwW&Gbo)ski7)ur5k>rY9C}?_yCpnTd0l>v|g2pXTk_VW)CJvY| zj6pvlFF7umr483}^ zbgymO{*lrCnYR<|-K{ORUp{^_`T5CwtM~r5!Ku!Rm%cB|>>iqua~t;gubvmJ{=w@b z&sTmdAL;Bp-~M6Jj!q98=y=~fx_9|T=g7&f;VWaO=Gw+@t*)((ew-X{bY>goz1`(bFP6gXzIsU#~{__0L`7DypQ#`uvHxfE>( z6}5%*F_Z*-wG0G7(9Xa{C=nFummm8#D{Llh;)>Giz1j7%3v;>ezVpt#@7y=xo|Ekz zu_{zy9grnCem6e<pymOQkPq_~F4A)1~8RRzz_r#pi-TyYdg z_z;&!5*!1J1CLcNePXG?NrQTIzrB!`{ped0buXbwQ0T%%N!|hRAZV6GopPJ_t;v>+ zes5#8*u(&)gL@zkkkZ*-$3}BD`aH}`qrB1u>hZVXfB@>k{g2-qp;i}E4`0v%)lT^? z6ZuwIE_cDO$;`knig4ZT-Bq+T6Q>?XrYhw%DyqNek_R!4)gPZ|c^3_fTM Z_C9ZnC46tIVyDTGi?`-S4(mFO{sT|s+J685 literal 0 HcmV?d00001 diff --git a/lib/rico/images/drop.gif b/lib/rico/images/drop.gif new file mode 100644 index 0000000000000000000000000000000000000000..afce892c6cbaf6d6ab2de4d71c9005ae6b0584dd GIT binary patch literal 102 zcmZ?wbhEHbSOWl&yb%Hb literal 0 HcmV?d00001 diff --git a/lib/rico/images/filtercol.gif b/lib/rico/images/filtercol.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e9382829419239c42ce2d23c94ea9e0452d42a8 GIT binary patch literal 293 zcmZ?wbhEHbdun>KCQw{PFEW5>2_+xG3-x2~?P)vH%OeE9J2;lthC-Ip$1x^m^p+_`httXVU8 z^5jpSKHa%CMpunI5vI^uU1~w;$2?ZW9|N2g(TvBdO5ou|7 ztl0U-!M-U`@dJxS&#BNK&N*E3oSlu$__$;kmihkSRglW5S;hHwZjqaPFnQ6{uTQ3x(aI=Y36&|s8H!!ukUL|{WT z*pH!A2$Q(c;aM7Lbd#o9&ewhNZ|Ji;9QXOW@AZD)_qlcZ=7o#1!!jhx^6#jKiMU9J zq)@4fny8D0Xjaoy%*0$Q#Io+XikrBLhj`Z0PzjT8iI7N?BvsNRT{0vo&_)_99&6IngHP9Izi)>D9Hm%UK0mQ7{(#g zhyl$@u;5@Y+DK=usBY7y<|G>~Orw^@d{_sntOFD%>?$4K}A1|F8e7HC9dvD{#%%$u1_h+|~R_m6W&j&|hY E0Z2%CV*mgE literal 0 HcmV?d00001 diff --git a/lib/rico/images/grayedout.gif b/lib/rico/images/grayedout.gif new file mode 100644 index 0000000000000000000000000000000000000000..ead27afc6c6883ca9b1ea0b88b2af8df279bcac5 GIT binary patch literal 2983 zcmdUq`#%%Ab`TD$GulM8g!{_n-oOiUhu)GZxH2^#S0FH2W?f?MJ z0}KEHgm+K*d_IrIJfFgciic2Aj>^U~dQ!wqRnj*Vors zLbC)V2;szHt*)-F3B0g%A>Y0UL)bJb z?GIEzQ-u;h6TH4AIDd*GT!$l&a9u7}_`ClT#Q0zU6!zrbr%B1rp1(**O-s*snVFTH zlbe_S3jVsF5K&ZIQd(ACQCU@8gRHH4Q{V6w)rfAwV4GW7+uA!i-@X6vv8%hMw-1N! zA0QA1hlWQ!jgrR3Ka(dWDO1xkvtQ=szkd6^u=s;YTl)FyH=VJ(!dzWjXR$Xpn_Jsl z9v>hoq2lni_#;eQR__M>ZAo{Mw5C&m1FE$5g(5I`8jsTKkprjz0J@pq9nPw|BjSr? z{9swyc3tm7Ybx6;7+&9%^o>UDHmhkV}m|{CN?;b=g`kY;dB+u3~ikL{(4-E9bS`@>n6v zhd2H>pK-lcohI|H-LwA6``EH;X_B#Fb6r|1pG~%8Lnny)&Najnf#C~8^|P6~Pi&ct zp;FCPxh}0I$uroqA@mMP?a#T+>ymc|vzss0*jVaE|J*hkFVm#;B}liQ{gw5l8zwdk z^5e+O;_fR9BepkR(k9zOjrgbIHbI^Rp8IccIb0@3K`n8fdtMD99`&OLw8yO47qV9s zuPSaO<)C(vwS%f2V{Yj?@38L_6%ji#uQLzT>Pq^ObhI)?4Z;ahRDEhV;D7+@+|B>? zRAUKW1~XYwm`_*WDSnSB-xcJ`hjL!wG*ay3sT%3d^!&2Si!wE;xgNW#za-CtmdkS- zBrG%cUrhjXNgV0J-pvzFkXD8-L*CwfJ?XEDDA4@->1?5XON~x8sQ%EcctD$@&f{5> zLSPZd3{YMCpl|U5JpN1@6prf64JyrnCI?liKRr}}$P05?s=QzCOGU1LlvI&rw#b^Q zS~v|^RzkN7h>mKk392>Ql&C4mTAb7`fxJWB$$NgYS~sTI9{#Jovl3oY_2#QYC>9f} zq!H72NwOY^4TsZfek{PNp3K~Brsk5O;I-vlxyKrs(nKB~N38|5BirD)?ZGIKDrKX# zHi|@72T;DC7M(pLG0X1~lia#n1i>Dn;?!Z&hB%d^d*S$)gcMY#PIJNi^6}XvCQ;2} z>K75)c7uu2#1-fdqIm`pc{|=CiUiV?2v(-Yvky;qG@!yF)2P`+U?QtXp)Z6VRMQWsgsRM9k^#Uq)rZP#y{8} z8Z#Ic-PSl8${u8XO%XlK{+{T$ul4&G2BnUYBevB2c{(yIXex!k!Qg-mtta5R_fy*l z^$im3Jpqi(O#&p296FEC|7p4WzR@jq95WTyzHsyr8A%DGAQ%*F$^9TA;fqxG9CY6l zSK^cYUm!mHC;<^LHy_fr?a(OeZjD`9olPM3|j*5 zg9E##SI+jH)vxl$tbV2Lhn|9|QC+C0 zrHgN)E_C0LFjcft$}|c#|E0tZ$9Jo4E+^USEtO7k=+RI@C0U;;mC3{R9JPA*Z1r*J z!Rzv!8QKq@dl5C{F!)}>xRn>ad&?AY4t>V(m6Sl2G9_~L-|{UhsSi@hRDL+%tSBpK zF~l-eHXe6ob0rK8?>KM?&djcMsnA2iQoZ@+sK9GExkS7~!=k2{DZ18wH~nJ;f+44@xme%(fm7)IZ*0Y~uH|uEIz3Z*tSsoZ9Y# zA^O^sv6pU54JKT#t75@qw4NF2F$U?^3inEcj=z!}4=GkrHtwNBqGWSuKGBX7xL|od zP{qCD1jnIU`+!9wPiimehmgn4e10qHU+b+i;PU=?&YKUB`qw`yk!OdlH0E^bmRJt@rcNgGhlGgrbOMXqD$1Jx4kNEG$a{4x5(D^GqNjWo?aeyw zJ&}e=32^zQG_}!ZF@#FHtr=GRp@QVwbCt@xsDi#p>j9^PlF&nnl|8xIHDX2eN6PX^3IYNWX)`sZ3=d$tD)d4Gqk9ZktOpjKz4{QXeZ^o2_x{NBVmN zwVEu<-E!P?GcZM5O#eY0D0$)6B`e!|c}5zyLL3dsDmrhcGvcv__4(v1l`(Q|$uu!8 zBKQsq<)Lh$t6ZwPZexLxbF z|Bj2K{rtn#<~l!@S~s0}HzR6D=gfT4Bg3E?QCLmhaMk_26xaK-zNVQq{o!X9E{g=> z&bw#L#1ysum odNc-lEFY@Z0yUU`8g4*OD8h^_U?yHLvly5~{!W;jqBy|%KZmgqnE(I) literal 0 HcmV?d00001 diff --git a/lib/rico/images/left.gif b/lib/rico/images/left.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65207578a00bc16df73d4f3f7d35177f4698836 GIT binary patch literal 105 zcmZ?wbhEHb)h!xmq)CeDZt2J4FIY*5X=Ao literal 0 HcmV?d00001 diff --git a/lib/rico/images/link.gif b/lib/rico/images/link.gif new file mode 100644 index 0000000000000000000000000000000000000000..35b0fe7323e4d0846cee68c4a180af34967cd2da GIT binary patch literal 963 zcmchWu}jur5XaAIFmn*>4V8upiAo3Imck_hON}T>2+}5TZ|GTGj(eW(eZJrOy@v)4?%g-iCR=1e{vH)E z5f=%O6e?9w6LrxL&C)a#Gcgwnu`G98#ZBDBLp;mVPzjT8iI7N?BvsNRT{0vo&_)_9 z9&}nc z7^`&3wkyL0x$;n!Uttvo)g+|(9M}@!;fYbzw11!D|NPnhd&7E>57J$Rmj8q_&dI{Y zt^H5uUfpbL-BZ8XGy8g?rM;>7%996+Q>zabnmX@%>YJ_&pZUBryQ6<*^F| z&93auHtvDqZo1N)#vXZq$!p@kKM**C8Zn@u6;tY~i2rskN95hVT? zOV#!)aIJqR)<$QaYe@sOa-a3CD2H*SGuvK<2YGpz9 z|M|1|d-aO+M-OJ`{3mq%k% literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodeblank.gif b/lib/rico/images/nodeblank.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc9cead9802fb3f94beb13944fff1bcb97f60aa6 GIT binary patch literal 836 zcmchWF;1LO41`A_#im;+(kcZFN{7<938E)U&OnpK1=paU$O$Y_5KaI`KqL}{55QHZ zhR-iK1Fu)U7s3a>yx{+%g5)NTbDLZhPj;$%u;R2+vrm%*cxDNDl?g%BYI!C=V2O zJEJSQqYWcZ!x^q{hnWgBVn9O)7Ci=|jWk+3_86L)Q<916%GcYjWk-GD9Hm%UK0mQ7{(#ghyl$@u;5@Y+DLm=G`DF}bIisF5`T=PYI_#A z);|<$qqEPoq=8zw&w5vs!?@C!Z7;)vygbbE7uGmflaS_fU`vFDCq}Jl|3Am~{5g94 xa3HkOU$gf>Td_;|R#zkR&gd^)~(zW@Dnz5VjzX8&;a_t)pR{IlEY^bM>PSSA1f literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodelast.gif b/lib/rico/images/nodelast.gif new file mode 100644 index 0000000000000000000000000000000000000000..49f794b488889410df2c0e9aeebb09d52a2004ac GIT binary patch literal 847 zcmchWF;13I5Jhhy1%!l9QDGvMhJrYahDJ0XbS}U~V`dGsR3tRklUR_r0a=3u&2%`1)RILNp-4q3TH$GCC{tO=R(kGM zs8Us`R(YOws8e0)RvRTbXL9$@mCIPeby4xvU2XehY~2ZPZ@8ZA$9)28Nhl_yC2F_x;k+T@B| zC}@_uOpYW?0B~`gpm9r-l)K&{+oy(`LLT*i&+&i$ z9Q@mOCjHgn44wakHV<{TwSWHW_T=hn=hf%Sql4eq+t1(sIREtW^kyr*{<*ySdH?;z NhnxM2*Wcdh_yJp)T6zEg literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodeline.gif b/lib/rico/images/nodeline.gif new file mode 100644 index 0000000000000000000000000000000000000000..8e6244160e7363ed4b00fe3c873cd6502b71e420 GIT binary patch literal 852 zcmchWKWf!c5QPsI#6O^^QkmjeNf3;Tg<>HFUW}a!unEX4z$$HQ0u}+W8nCdm)HPVx z%mUns)$yAf*Whg)!`yr3J7<3H)$8M@&rWx>rwd)3kWwnCC5tLTk&05Z!qd!9rm~c+ z^xUmbrK(h|@;vQOr@GXwHcE2HDVN+b1=>iX#ba)J=FG{6is%T>SgOp(itI=a1OtLkSi=2BVEMT0Hg`nwnFYo$2w%SgNY5&hprW zf@W8CXB+oGaW`G*PGgTez~nV?;2#JaLX8;EP;wOx2BVEMTAt*lP0i^lPmuUyELC^4 z$rZa$&@6YE97&o0;Nm(#o3I9QXA=5t_6goh_at!e*0 z$N%}W`LlCP`mKjEbp8{%@mN1@-aGmJ_2v2borAY$hnt@lxA%{}oV>Ze{kZq&sK0&M W{JOmL;=_{%@84}d-`!r{(eu9>`daw_ literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodem.gif b/lib/rico/images/nodem.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcc2d37333116b6a7fdafb7eb099b0fbf16f5f63 GIT binary patch literal 97 zcmZ?wbhEHb6krfzn8?h~(9rPz|9=Js1|X^UlZBCiftf)E$YlV@GcXy=>0inAdcV{h y&KuRqH*8MaDwJnxxm_{k(5@=y&r{V-%~+?@{-rzd%6SH^X6Fa%Bnm|s7_0$apd^X_ literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodemlast.gif b/lib/rico/images/nodemlast.gif new file mode 100644 index 0000000000000000000000000000000000000000..11ae43a5ae00b76b81e0bf2aa8d2b33efbbb5e53 GIT binary patch literal 125 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ721W)QkPeU;3@lm(Cp=eAeekN* p_`j$^Uvhd>T*aykg+2Kb&IWtk{95(e)U)Zpf&vd6DN{iPYXB-WAG`nn literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodep.gif b/lib/rico/images/nodep.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b680136ee9db9cd706b2ef642e89d6edda3989a GIT binary patch literal 133 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MD;J|?ca7my_#h)yU3=G^1Iv_!i84N5&1t&dM zPkr#J*7(1uLSJ%v)IB91&8h2VXrB2z>Fyhr+skJywiWMW(K^=S5qIfERMD)-91PX~ DC2=QD literal 0 HcmV?d00001 diff --git a/lib/rico/images/nodeplast.gif b/lib/rico/images/nodeplast.gif new file mode 100644 index 0000000000000000000000000000000000000000..b87f003154502f8e9f569fefb12d57a5a1ebb515 GIT binary patch literal 130 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ721W)QkPeU;3@rKvCp=eAeekN* v_`j$^Uvhd>oPv+$)O9m7&lFF%`-bKA@>z>*#XDKFr20=RDO%adz+epk!mc6H literal 0 HcmV?d00001 diff --git a/lib/rico/images/p.gif b/lib/rico/images/p.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b49d67895de20674fb246b9407f07eaa213456c GIT binary patch literal 128 zcmZ?wbhEHb6krfzXl7t&XlVHV|33q90H{*&CkrzJ10#bDNC(Ia1{Pg|6P~O0TD(51 s{X?OGF7Xe z$B!L5cJ$~`pfaFh#h)yU3=Dh>Iv|}OGZCE9+eJOgOmj-PRp`b7gu^IF<1itE8ss7 literal 0 HcmV?d00001 diff --git a/lib/rico/images/resize.gif b/lib/rico/images/resize.gif new file mode 100644 index 0000000000000000000000000000000000000000..8efd1b5fae11687458f943a1999ce6ed3903078f GIT binary patch literal 51 ycmZ?wbhEHbWM*JyC}3bv{K>+|z`(?y!vF*zu|^<0bLLDC7bwm$MO2-Y!5RR+BL>s} literal 0 HcmV?d00001 diff --git a/lib/rico/images/right.gif b/lib/rico/images/right.gif new file mode 100644 index 0000000000000000000000000000000000000000..5517f2bc0c57eaa8fc5b1f58d027ae0e79b7f139 GIT binary patch literal 105 zcmZ?wbhEHbw@-~%V!j>5nyDn1^}}A5n2EM literal 0 HcmV?d00001 diff --git a/lib/rico/images/shadow.png b/lib/rico/images/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..bd54e491034967b844d3b685d293bd11c106d536 GIT binary patch literal 3575 zcmeAS@N?&q;$mQ6;Pv!y31VPiR$yRYir`=aip(l&DgaU}#ZI0f96(URkm+CppHV+zF)zh4#Dy*>&o`X+Uyqw_681U z?mctn^&6%q!7UsD3=9vZ{Cl(h`A?3C-#KpPnay7P`7E$g^rzr;+3M*xTaO<;^Jm`7 z<$vFox~9yWnQCpk{rOB`28JIGudNLQs<7YO-M@S0&iUsBKW&>kb9S8{&^RU;_7k7q zEP7m5Ciuy~{r1Lf#>IEfb22c*bR6CuxA&Z$#k@3e`PW(}q!hYELDpOI-7orTC7$tDowNztaV9+~N*s>=7*stfa6>iV0v^iY? j^vqJre_X#l*8XGCp4qC){k>=#P&b38tDnm{r-UW|z|kP4 literal 0 HcmV?d00001 diff --git a/lib/rico/images/shadow_ll.png b/lib/rico/images/shadow_ll.png new file mode 100644 index 0000000000000000000000000000000000000000..49b146f31bfd190bab2824260e05fac513819d6b GIT binary patch literal 273 zcmeAS@N?&q;$mQ6;Pv!y2?Ej_Ak4uAB#-d#>jqLR#ZI0f96(URkJG5A%0t zhqClPa{cv>f5p;Ud3%>kI545{=gcJ!x}@bQ5)TQN_lWA29Aj113eypFUhz<5-{W?F zSI>ZheZ0o^*cIOP<+FWy!x>?)T_i{F%a3${XDiO~X3x>7uX-VsV`XstFVIE?Pgg&e IbxsLQ002K-SpWb4 literal 0 HcmV?d00001 diff --git a/lib/rico/images/shadow_ur.png b/lib/rico/images/shadow_ur.png new file mode 100644 index 0000000000000000000000000000000000000000..59f1fa5af35be8013f65fa4cfa7f96e819d5ab1e GIT binary patch literal 274 zcmeAS@N?&q;$mQ6;Pv!y2?Ej_Ak4uAB#-d#>jqLR#ZI0f96(URkd!}ao3 zUEHy|iqAdx`(9;7ki@dPOH>=>nL<574@xpu8TNVN<i9~GUR(7B?1epm8^=4rd8$cx<)`nKh^{Zycp44$rj JF6*2UngDLVU3UNg literal 0 HcmV?d00001 diff --git a/lib/rico/images/sort_asc.gif b/lib/rico/images/sort_asc.gif new file mode 100644 index 0000000000000000000000000000000000000000..63302325ce9d28e0960a2ec383803695abd86842 GIT binary patch literal 77 zcmZ?wbhEHbdhCYGe8D3oWGWGIAWq$;?3`UWs4{$yd~ eVqj#@VE_V<76vBn9_Hl-y6*7I$v?!zU=0ASUlv;c literal 0 HcmV?d00001 diff --git a/lib/rico/images/sort_desc.gif b/lib/rico/images/sort_desc.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3a681c95431b75e111e29ae7ad6c51607ee7fd7 GIT binary patch literal 76 zcmZ?wbhEHbdhCYGe8D3oWGWGIAWq$;?3`UWs4{$yd~ cVqj#@VE_V<76vA+mik7?E?&u;1Th9{0F68pQUCw| literal 0 HcmV?d00001 diff --git a/lib/rico/images/tableFilterCollapse.gif b/lib/rico/images/tableFilterCollapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..320931258ce9cce22d0dad4315f4b30213be47f9 GIT binary patch literal 995 zcmZ?wbhEHb6k-ry_};+qpW*+G9XqT+FVBx}rt5&Vr zxpQY#RaIPEoUgBMc6RoQ7cZ7BUAk%0rizM+^78V`%*^oc@W+oIfB*h{{`~oC*REZ$ zV#Vaill%JmT3cIlb91+E-~R61yKmpVEnd8M<;s=ImoHzmXwmfP({JCtedo@duV25e zS+nNk$&*Kq9zA^c@Vt5Ru3Wit;lhRM*ROBfxbfn}i!WckeDmf_eSQ7q%aHtE;PP+O%oCy}gx{l?0iKukRR910 literal 0 HcmV?d00001 diff --git a/lib/rico/images/tableFilterExpand.gif b/lib/rico/images/tableFilterExpand.gif new file mode 100644 index 0000000000000000000000000000000000000000..84ae69178bf65d8f9fb4d965789c6e0c30567a8a GIT binary patch literal 998 zcmZ?wbhEHb6k-ry_};+qpW*+G9XqT+FVBx}rt5&Vr zxpQY#RaIPEoUgBMc6RoQ7cZ7BUAk%0rizM+^78V`%*^oc@W+oIfB*h{{`~oC*REZ$ zV#Vaill%JmT3cIlb91+E-~R61yKmpVEnd8M<;s=ImoHzmXwmfP({JCtedo@duV25e zS+nNk$&*Kq9zA^c@Vt5Ru3Wit;lhRM*ROBfxbfn}i!WckeDmf_eSQ7q%aHtE;PP+O%oCy}gx{l?$R@z{Jg%(#G=&HcuU#+C<-%zd0v TJ02=?9u%8#ag~^a0E0CE2ZZ&? literal 0 HcmV?d00001 diff --git a/lib/rico/min.rico.js b/lib/rico/min.rico.js new file mode 100644 index 0000000..f51ca6a --- /dev/null +++ b/lib/rico/min.rico.js @@ -0,0 +1 @@ +var Prototype={Version:"1.6.0.3",Browser:{IE:!!(window.attachEvent&&navigator.userAgent.indexOf("Opera")===-1),Opera:navigator.userAgent.indexOf("Opera")>-1,WebKit:navigator.userAgent.indexOf("AppleWebKit/")>-1,Gecko:navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")===-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement("div")["__proto__"]&&document.createElement("div")["__proto__"]!==document.createElement("form")["__proto__"]},ScriptFragment:"]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(a){return a}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Class={create:function(){var e=null,d=$A(arguments);if(Object.isFunction(d[0])){e=d.shift()}function a(){this.initialize.apply(this,arguments)}Object.extend(a,Class.Methods);a.superclass=e;a.subclasses=[];if(e){var b=function(){};b.prototype=e.prototype;a.prototype=new b;e.subclasses.push(a)}for(var c=0;c0){if(b=d.match(e)){a+=d.slice(0,b.index);a+=String.interpret(c(b));d=d.slice(b.index+b[0].length)}else{a+=d,d=""}}return a},sub:function(c,a,b){a=this.gsub.prepareReplacement(a);b=Object.isUndefined(b)?1:b;return this.gsub(c,function(d){if(--b<0){return d[0]}return a(d)})},scan:function(b,a){this.gsub(b,a);return String(this)},truncate:function(b,a){b=b||30;a=Object.isUndefined(a)?"...":a;return this.length>b?this.slice(0,b-a.length)+a:String(this)},strip:function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")},extractScripts:function(){var b=new RegExp(Prototype.ScriptFragment,"img");var a=new RegExp(Prototype.ScriptFragment,"im");return(this.match(b)||[]).map(function(c){return(c.match(a)||["",""])[1]})},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)})},escapeHTML:function(){var a=arguments.callee;a.text.data=this;return a.div.innerHTML},unescapeHTML:function(){var a=new Element("div");a.innerHTML=this.stripTags();return a.childNodes[0]?(a.childNodes.length>1?$A(a.childNodes).inject("",function(b,c){return b+c.nodeValue}):a.childNodes[0].nodeValue):""},toQueryParams:function(b){var a=this.strip().match(/([^?#]*)(#.*)?$/);if(!a){return{}}return a[1].split(b||"&").inject({},function(e,f){if((f=f.split("="))[0]){var c=decodeURIComponent(f.shift());var d=f.length>1?f.join("="):f[0];if(d!=undefined){d=decodeURIComponent(d)}if(c in e){if(!Object.isArray(e[c])){e[c]=[e[c]]}e[c].push(d)}else{e[c]=d}}return e})},toArray:function(){return this.split("")},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(a){return a<1?"":new Array(a+1).join(this)},camelize:function(){var d=this.split("-"),a=d.length;if(a==1){return d[0]}var c=this.charAt(0)=="-"?d[0].charAt(0).toUpperCase()+d[0].substring(1):d[0];for(var b=1;b-1},startsWith:function(a){return this.indexOf(a)===0},endsWith:function(a){var b=this.length-a.length;return b>=0&&this.lastIndexOf(a)===b},empty:function(){return this==""},blank:function(){return/^\s*$/.test(this)},interpolate:function(a,b){return new Template(this,b).evaluate(a)}});if(Prototype.Browser.WebKit||Prototype.Browser.IE){Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,"&").replace(//g,">")},unescapeHTML:function(){return this.stripTags().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}})}String.prototype.gsub.prepareReplacement=function(b){if(Object.isFunction(b)){return b}var a=new Template(b);return function(c){return a.evaluate(c)}};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement("div"),text:document.createTextNode("")});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(a){if(Object.isFunction(a.toTemplateReplacements)){a=a.toTemplateReplacements()}return this.template.gsub(this.pattern,function(d){if(a==null){return""}var f=d[1]||"";if(f=="\\"){return d[2]}var b=a,g=d[3];var e=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;d=e.exec(g);if(d==null){return f}while(d!=null){var c=d[1].startsWith("[")?d[2].gsub("\\\\]","]"):d[1];b=b[c];if(null==b||""==d[3]){break}g=g.substring("["==d[3]?d[1].length:d[0].length);d=e.exec(g)}return f+String.interpret(b)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(c,b){var a=0;try{this._each(function(e){c.call(b,e,a++)})}catch(d){if(d!=$break){throw d}}return this},eachSlice:function(d,c,b){var a=-d,e=[],f=this.toArray();if(d<1){return f}while((a+=d)=a){a=e}});return a},min:function(c,b){c=c||Prototype.K;var a;this.each(function(e,d){e=c.call(b,e,d);if(a==null||ec?1:0}).pluck("value")},toArray:function(){return this.map()},zip:function(){var b=Prototype.K,a=$A(arguments);if(Object.isFunction(a.last())){b=a.pop()}var c=[this].concat(a).map($A);return this.map(function(e,d){return b(c.pluck(d))})},size:function(){return this.toArray().length},inspect:function(){return"#"}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(c){if(!c){return[]}if(c.toArray){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}if(Prototype.Browser.WebKit){$A=function(c){if(!c){return[]}if(!(typeof c==="function"&&typeof c.length==="number"&&typeof c.item==="function")&&c.toArray){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}}Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse){Array.prototype._reverse=Array.prototype.reverse}Object.extend(Array.prototype,{_each:function(b){for(var a=0,c=this.length;a1?this:this[0]},uniq:function(a){return this.inject([],function(d,c,b){if(0==b||(a?d.last()!=c:!d.include(c))){d.push(c)}return d})},intersect:function(a){return this.uniq().findAll(function(b){return a.detect(function(c){return b===c})})},clone:function(){return[].concat(this)},size:function(){return this.length},inspect:function(){return"["+this.map(Object.inspect).join(", ")+"]"},toJSON:function(){var a=[];this.each(function(b){var c=Object.toJSON(b);if(!Object.isUndefined(c)){a.push(c)}});return"["+a.join(", ")+"]"}});if(Object.isFunction(Array.prototype.forEach)){Array.prototype._each=Array.prototype.forEach}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(c,a){a||(a=0);var b=this.length;if(a<0){a=b+a}for(;a"},toJSON:function(){return Object.toJSON(this.toObject())},clone:function(){return new Hash(this)}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(c,a,b){this.start=c;this.end=a;this.exclusive=b},_each:function(a){var b=this.start;while(this.include(b)){a(b);b=b.succ()}},include:function(a){if(a1&&!((a==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var e={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){e["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){e.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var c=this.options.requestHeaders;if(Object.isFunction(c.push)){for(var b=0,d=c.length;b=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(a){return 0}},respondToReadyState:function(a){var c=Ajax.Request.Events[a],b=new Ajax.Response(this);if(c=="Complete"){try{this._complete=true;(this.options["on"+b.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(b,b.headerJSON)}catch(d){this.dispatchException(d)}var f=b.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&f&&f.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+c]||Prototype.emptyFunction)(b,b.headerJSON);Ajax.Responders.dispatch("on"+c,this,b,b.headerJSON)}catch(d){this.dispatchException(d)}if(c=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var a=this.url.match(/^\s*https?:\/\/[^\/]*/);return !a||(a[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(b){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch("onException",this,a)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(c){this.request=c;var d=this.transport=c.transport,a=this.readyState=d.readyState;if((a>2&&!Prototype.Browser.IE)||a==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(d.responseText);this.headerJSON=this._getHeaderJSON()}if(a==4){var b=d.responseXML;this.responseXML=Object.isUndefined(b)?null:b;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(a){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(a){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader("X-JSON");if(!a){return null}a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,a,c,b){this.container={success:(a.success||a),failure:(a.failure||(a.success?null:a))};b=Object.clone(b);var d=b.onComplete;b.onComplete=(function(e,f){this.updateContent(e.responseText);if(Object.isFunction(d)){d(e,f)}}).bind(this);$super(c,b)},updateContent:function(d){var c=this.container[this.success()?"success":"failure"],a=this.options;if(!a.evalScripts){d=d.stripScripts()}if(c=$(c)){if(a.insertion){if(Object.isString(a.insertion)){var b={};b[a.insertion]=d;c.insert(b)}else{a.insertion(c,d)}}else{c.update(d)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,a,c,b){$super(b);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=a;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a';delete c.name;return Element.writeAttribute(document.createElement(d),c)}if(!b[d]){b[d]=Element.extend(document.createElement(d))}return Element.writeAttribute(b[d].cloneNode(false),c)};Object.extend(this.Element,a||{});if(a){this.Element.prototype=a.prototype}}).call(window);Element.cache={};Element.Methods={visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:function(a,b){a=$(a);if(b&&b.toElement){b=b.toElement()}if(Object.isElement(b)){return a.update().insert(b)}b=Object.toHTML(b);a.innerHTML=b.stripScripts();b.evalScripts.bind(b).defer();return a},replace:function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}else{if(!Object.isElement(c)){c=Object.toHTML(c);var a=b.ownerDocument.createRange();a.selectNode(b);c.evalScripts.bind(c).defer();c=a.createContextualFragment(c.stripScripts())}}b.parentNode.replaceChild(c,b);return b},insert:function(c,e){c=$(c);if(Object.isString(e)||Object.isNumber(e)||Object.isElement(e)||(e&&(e.toElement||e.toHTML))){e={bottom:e}}var d,f,b,g;for(var a in e){d=e[a];a=a.toLowerCase();f=Element._insertionTranslations[a];if(d&&d.toElement){d=d.toElement()}if(Object.isElement(d)){f(c,d);continue}d=Object.toHTML(d);b=((a=="before"||a=="after")?c.parentNode:c).tagName.toUpperCase();g=Element._getContentFromAnonymousElement(b,d.stripScripts());if(a=="top"||a=="after"){g.reverse()}g.each(f.curry(c));d.evalScripts.bind(d).defer()}return c},wrap:function(b,c,a){b=$(b);if(Object.isElement(c)){$(c).writeAttribute(a||{})}else{if(Object.isString(c)){c=new Element(c,a)}else{c=new Element("div",c)}}if(b.parentNode){b.parentNode.replaceChild(c,b)}c.appendChild(b);return c},inspect:function(b){b=$(b);var a="<"+b.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(f){var e=f.first(),c=f.last();var d=(b[e]||"").toString();if(d){a+=" "+c+"="+d.inspect(true)}});return a+">"},recursivelyCollect:function(a,c){a=$(a);var b=[];while(a=a[c]){if(a.nodeType==1){b.push(Element.extend(a))}}return b},ancestors:function(a){return $(a).recursivelyCollect("parentNode")},descendants:function(a){return $(a).select("*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling}return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild)){return[]}while(a&&a.nodeType!=1){a=a.nextSibling}if(a){return[a].concat($(a).nextSiblings())}return[]},previousSiblings:function(a){return $(a).recursivelyCollect("previousSibling")},nextSiblings:function(a){return $(a).recursivelyCollect("nextSibling")},siblings:function(a){a=$(a);return a.previousSiblings().reverse().concat(a.nextSiblings())},match:function(b,a){if(Object.isString(a)){a=new Selector(a)}return a.match($(b))},up:function(b,d,a){b=$(b);if(arguments.length==1){return $(b.parentNode)}var c=b.ancestors();return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return b.firstDescendant()}return Object.isNumber(c)?b.descendants()[c]:Element.select(b,c)[a||0]},previous:function(b,d,a){b=$(b);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(b))}var c=b.previousSiblings();return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},next:function(c,d,b){c=$(c);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(c))}var a=c.nextSiblings();return Object.isNumber(d)?a[d]:Selector.findElement(a,d,b)},select:function(){var a=$A(arguments),b=$(a.shift());return Selector.findChildElements(b,a)},adjacent:function(){var a=$A(arguments),b=$(a.shift());return Selector.findChildElements(b.parentNode,a).without(b)},identify:function(b){b=$(b);var c=b.readAttribute("id"),a=arguments.callee;if(c){return c}do{c="anonymous_element_"+a.counter++}while($(c));b.writeAttribute("id",c);return c},readAttribute:function(c,a){c=$(c);if(Prototype.Browser.IE){var b=Element._attributeTranslations.read;if(b.values[a]){return b.values[a](c,a)}if(b.names[a]){a=b.names[a]}if(a.include(":")){return(!c.attributes||!c.attributes[a])?null:c.attributes[a].value}}return c.getAttribute(a)},writeAttribute:function(e,c,f){e=$(e);var b={},d=Element._attributeTranslations.write;if(typeof c=="object"){b=c}else{b[c]=Object.isUndefined(f)?true:f}for(var a in b){c=d.names[a]||a;f=b[a];if(d.values[a]){c=d.values[a](e,f)}if(f===false||f===null){e.removeAttribute(c)}else{if(f===true){e.setAttribute(c,c)}else{e.setAttribute(c,f)}}}return e},getHeight:function(a){return $(a).getDimensions().height},getWidth:function(a){return $(a).getDimensions().width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!a.hasClassName(b)){a.className+=(a.className?" ":"")+b}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," ").strip();return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return a[a.hasClassName(b)?"removeClassName":"addClassName"](b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,a){b=$(b),a=$(a);if(b.compareDocumentPosition){return(b.compareDocumentPosition(a)&8)===8}if(a.contains){return a.contains(b)&&a!==b}while(b=b.parentNode){if(b==a){return true}}return false},scrollTo:function(a){a=$(a);var b=a.cumulativeOffset();window.scrollTo(b[0],b[1]);return a},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c.camelize();var d=b.style[c];if(!d||d=="auto"){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getOpacity:function(a){return $(a).getStyle("opacity")},setStyle:function(b,c){b=$(b);var e=b.style,a;if(Object.isString(c)){b.style.cssText+=";"+c;return c.include("opacity")?b.setOpacity(c.match(/opacity:\s*(\d?\.?\d*)/)[1]):b}for(var d in c){if(d=="opacity"){b.setOpacity(c[d])}else{e[(d=="float"||d=="cssFloat")?(Object.isUndefined(e.styleFloat)?"cssFloat":"styleFloat"):d]=c[d]}}return b},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;return a},getDimensions:function(c){c=$(c);var g=c.getStyle("display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";b.position="absolute";b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,"position");if(b=="static"||!b){a._madePositioned=true;a.style.position="relative";if(Prototype.Browser.Opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=""}return a},makeClipping:function(a){a=$(a);if(a._overflow){return a}a._overflow=Element.getStyle(a,"overflow")||"auto";if(a._overflow!=="hidden"){a.style.overflow="hidden"}return a},undoClipping:function(a){a=$(a);if(!a._overflow){return a}a.style.overflow=a._overflow=="auto"?"":a._overflow;a._overflow=null;return a},cumulativeOffset:function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;b=b.offsetParent}while(b);return Element._returnOffset(c,a)},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},absolutize:function(b){b=$(b);if(b.getStyle("position")=="absolute"){return b}var d=b.positionedOffset();var f=d[1];var e=d[0];var c=b.clientWidth;var a=b.clientHeight;b._originalLeft=e-parseFloat(b.style.left||0);b._originalTop=f-parseFloat(b.style.top||0);b._originalWidth=b.style.width;b._originalHeight=b.style.height;b.style.position="absolute";b.style.top=f+"px";b.style.left=e+"px";b.style.width=c+"px";b.style.height=a+"px";return b},relativize:function(a){a=$(a);if(a.getStyle("position")=="relative"){return a}a.style.position="relative";var c=parseFloat(a.style.top||0)-(a._originalTop||0);var b=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=c+"px";a.style.left=b+"px";a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(b){var a=0,c=0;do{a+=b.scrollTop||0;c+=b.scrollLeft||0;b=b.parentNode}while(b);return Element._returnOffset(c,a)},getOffsetParent:function(a){if(a.offsetParent){return $(a.offsetParent)}if(a==document.body){return $(a)}while((a=a.parentNode)&&a!=document.body){if(Element.getStyle(a,"position")!="static"){return $(a)}}return $(document.body)},viewportOffset:function(d){var a=0,c=0;var b=d;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body&&Element.getStyle(b,"position")=="absolute"){break}}while(b=b.offsetParent);b=d;do{if(!Prototype.Browser.Opera||(b.tagName&&(b.tagName.toUpperCase()=="BODY"))){a-=b.scrollTop||0;c-=b.scrollLeft||0}}while(b=b.parentNode);return Element._returnOffset(c,a)},clonePosition:function(b,d){var a=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});d=$(d);var e=d.viewportOffset();b=$(b);var f=[0,0];var c=null;if(Element.getStyle(b,"position")=="absolute"){c=b.getOffsetParent();f=c.viewportOffset()}if(c==document.body){f[0]-=document.body.offsetLeft;f[1]-=document.body.offsetTop}if(a.setLeft){b.style.left=(e[0]-f[0]+a.offsetLeft)+"px"}if(a.setTop){b.style.top=(e[1]-f[1]+a.offsetTop)+"px"}if(a.setWidth){b.style.width=d.offsetWidth+"px"}if(a.setHeight){b.style.height=d.offsetHeight+"px"}return b}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,b,c){switch(c){case"left":case"top":case"right":case"bottom":if(d(b,"position")==="static"){return null}case"height":case"width":if(!Element.visible(b)){return null}var e=parseInt(d(b,c),10);if(e!==b["offset"+c.capitalize()]){return e+"px"}var a;if(c==="height"){a=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{a=["border-left-width","padding-left","padding-right","border-right-width"]}return a.inject(e,function(f,g){var h=d(b,g);return h===null?f:f-parseInt(h,10)})+"px";default:return d(b,c)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(c,a,b){if(b==="title"){return a.title}return c(a,b)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(c,b){b=$(b);try{b.offsetParent}catch(f){return $(document.body)}var a=b.getStyle("position");if(a!=="static"){return c(b)}b.setStyle({position:"relative"});var d=c(b);b.setStyle({position:a});return d});$w("positionedOffset viewportOffset").each(function(a){Element.Methods[a]=Element.Methods[a].wrap(function(f,c){c=$(c);try{c.offsetParent}catch(h){return Element._returnOffset(0,0)}var b=c.getStyle("position");if(b!=="static"){return f(c)}var d=c.getOffsetParent();if(d&&d.getStyle("position")==="fixed"){d.setStyle({zoom:1})}c.setStyle({position:"relative"});var g=f(c);c.setStyle({position:b});return g})});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(b,a){try{a.offsetParent}catch(c){return Element._returnOffset(0,0)}return b(a)});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=="float"||b=="cssFloat")?"styleFloat":b.camelize();var c=a.style[b];if(!c&&a.currentStyle){c=a.currentStyle[b]}if(b=="opacity"){if(c=(a.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(c[1]){return parseFloat(c[1])/100}}return 1}if(c=="auto"){if((b=="width"||b=="height")&&(a.getStyle("display")!="none")){return a["offset"+b.capitalize()]+"px"}return null}return c};Element.Methods.setOpacity=function(b,e){function f(g){return g.replace(/alpha\([^\)]*\)/gi,"")}b=$(b);var a=b.currentStyle;if((a&&!a.hasLayout)||(!a&&b.style.zoom=="normal")){b.style.zoom=1}var d=b.getStyle("filter"),c=b.style;if(e==1||e===""){(d=f(d))?c.filter=d:c.removeAttribute("filter");return b}else{if(e<0.00001){e=0}}c.filter=f(d)+"alpha(opacity="+(e*100)+")";return b};Element._attributeTranslations={read:{names:{"class":"className","for":"htmlFor"},values:{_getAttr:function(a,b){return a.getAttribute(b,2)},_getAttrNode:function(a,c){var b=a.getAttributeNode(c);return b?b.value:""},_getEv:function(a,b){b=a.getAttribute(b);return b?b.toString().slice(23,-2):null},_flag:function(a,b){return $(a).hasAttribute(b)?b:null},style:function(a){return a.style.cssText.toLowerCase()},title:function(a){return a.title}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(a){Object.extend(a,{href:a._getAttr,src:a._getAttr,type:a._getAttr,action:a._getAttrNode,disabled:a._flag,checked:a._flag,readonly:a._flag,multiple:a._flag,onload:a._getEv,onunload:a._getEv,onclick:a._getEv,ondblclick:a._getEv,onmousedown:a._getEv,onmouseup:a._getEv,onmouseover:a._getEv,onmousemove:a._getEv,onmouseout:a._getEv,onfocus:a._getEv,onblur:a._getEv,onkeypress:a._getEv,onkeydown:a._getEv,onkeyup:a._getEv,onsubmit:a._getEv,onreset:a._getEv,onselect:a._getEv,onchange:a._getEv})})(Element._attributeTranslations.read.values)}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==="")?"":(b<0.00001)?0:b;return a}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;if(b==1){if(a.tagName.toUpperCase()=="IMG"&&a.width){a.width++;a.width--}else{try{var d=document.createTextNode(" ");a.appendChild(d);a.removeChild(d)}catch(c){}}}return a};Element.Methods.cumulativeOffset=function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body){if(Element.getStyle(b,"position")=="absolute"){break}}b=b.offsetParent}while(b);return Element._returnOffset(c,a)}}}}}if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}if(Object.isElement(c)){return b.update().insert(c)}c=Object.toHTML(c);var a=b.tagName.toUpperCase();if(a in Element._insertionTranslations.tags){$A(b.childNodes).each(function(d){b.removeChild(d)});Element._getContentFromAnonymousElement(a,c.stripScripts()).each(function(d){b.appendChild(d)})}else{b.innerHTML=c.stripScripts()}c.evalScripts.bind(c).defer();return b}}if("outerHTML" in document.createElement("div")){Element.Methods.replace=function(c,e){c=$(c);if(e&&e.toElement){e=e.toElement()}if(Object.isElement(e)){c.parentNode.replaceChild(e,c);return c}e=Object.toHTML(e);var d=c.parentNode,b=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[b]){var f=c.next();var a=Element._getContentFromAnonymousElement(b,e.stripScripts());d.removeChild(c);if(f){a.each(function(g){d.insertBefore(g,f)})}else{a.each(function(g){d.appendChild(g)})}}else{c.outerHTML=e.stripScripts()}e.evalScripts.bind(e).defer();return c}}Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};Element._getContentFromAnonymousElement=function(c,b){var d=new Element("div"),a=Element._insertionTranslations.tags[c];if(a){d.innerHTML=a[0]+b+a[1];a[2].times(function(){d=d.firstChild})}else{d.innerHTML=b}return $A(d.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:["","
",1],TBODY:["","
",2],TR:["","
",3],TD:["
","
",4],SELECT:["",1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD})}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(a,c){c=Element._attributeTranslations.has[c]||c;var b=$(a).getAttributeNode(c);return !!(b&&b.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement("div")["__proto__"]){window.HTMLElement={};window.HTMLElement.prototype=document.createElement("div")["__proto__"];Prototype.BrowserFeatures.ElementExtensions=true}Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions){return Prototype.K}var a={},b=Element.Methods.ByTag;var c=Object.extend(function(f){if(!f||f._extendedByPrototype||f.nodeType!=1||f==window){return f}var d=Object.clone(a),e=f.tagName.toUpperCase(),h,g;if(b[e]){Object.extend(d,b[e])}for(h in d){g=d[h];if(Object.isFunction(g)&&!(h in f)){f[h]=g.methodize()}}f._extendedByPrototype=Prototype.emptyFunction;return f},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(a,Element.Methods);Object.extend(a,Element.Methods.Simulated)}}});c.refresh();return c})();Element.hasAttribute=function(a,b){if(a.hasAttribute){return a.hasAttribute(b)}return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(c){var h=Prototype.BrowserFeatures,d=Element.Methods.ByTag;if(!c){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var b=c;c=arguments[1]}if(!b){Object.extend(Element.Methods,c||{})}else{if(Object.isArray(b)){b.each(g)}else{g(b)}}function g(j){j=j.toUpperCase();if(!Element.Methods.ByTag[j]){Element.Methods.ByTag[j]={}}Object.extend(Element.Methods.ByTag[j],c)}function a(l,k,j){j=j||false;for(var n in l){var m=l[n];if(!Object.isFunction(m)){continue}if(!j||!(n in k)){k[n]=m.methodize()}}}function e(l){var j;var k={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(k[l]){j="HTML"+k[l]+"Element"}if(window[j]){return window[j]}j="HTML"+l+"Element";if(window[j]){return window[j]}j="HTML"+l.capitalize()+"Element";if(window[j]){return window[j]}window[j]={};window[j].prototype=document.createElement(l)["__proto__"];return window[j]}if(h.ElementExtensions){a(Element.Methods,HTMLElement.prototype);a(Element.Methods.Simulated,HTMLElement.prototype,true)}if(h.SpecificElementExtensions){for(var i in Element.Methods.ByTag){var f=e(i);if(Object.isUndefined(f)){continue}a(d[i],f.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){var a={},b=Prototype.Browser;$w("width height").each(function(e){var c=e.capitalize();if(b.WebKit&&!document.evaluate){a[e]=self["inner"+c]}else{if(b.Opera&&parseFloat(window.opera.version())<9.5){a[e]=document.body["client"+c]}else{a[e]=document.documentElement["client"+c]}}});return a},getWidth:function(){return this.getDimensions().width},getHeight:function(){return this.getDimensions().height},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};var Selector=Class.create({initialize:function(a){this.expression=a.strip();if(this.shouldUseSelectorsAPI()){this.mode="selectorsAPI"}else{if(this.shouldUseXPath()){this.mode="xpath";this.compileXPathMatcher()}else{this.mode="normal";this.compileMatcher()}}},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath){return false}var a=this.expression;if(Prototype.Browser.WebKit&&(a.include("-of-type")||a.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(a)){return false}return true},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI){return false}if(!Selector._div){Selector._div=new Element("div")}try{Selector._div.querySelector(this.expression)}catch(a){return false}return true},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var f=this.expression,g=Selector.patterns,b=Selector.xpath,d,a;if(Selector._cache[f]){this.xpath=Selector._cache[f];return}this.matcher=[".//*"];while(f&&d!=f&&(/\S/).test(f)){d=f;for(var c in g){if(a=f.match(g[c])){this.matcher.push(Object.isFunction(b[c])?b[c](a):new Template(b[c]).evaluate(a));f=f.replace(a[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;var c=this.expression,b;switch(this.mode){case"selectorsAPI":if(a!==document){var d=a.id,f=$(a).identify();c="#"+f+" "+c}b=$A(a.querySelectorAll(c)).map(Element.extend);a.id=d;return b;case"xpath":return document._getElementsByXPath(this.xpath,a);default:return this.matcher(a)}},match:function(j){this.tokens=[];var o=this.expression,a=Selector.patterns,f=Selector.assertions;var b,d,g;while(o&&b!==o&&(/\S/).test(o)){b=o;for(var k in a){d=a[k];if(g=o.match(d)){if(f[k]){this.tokens.push([k,Object.clone(g)]);o=o.replace(g[0],"")}else{return this.findElements(document).include(j)}}}}var n=true,c,l;for(var k=0,h;h=this.tokens[k];k++){c=h[0],l=h[1];if(!Selector.assertions[c](j,l)){n=false;break}}return n},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(a){if(a[1]=="*"){return""}return"[local-name()='"+a[1].toLowerCase()+"' or local-name()='"+a[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(a){a[1]=a[1].toLowerCase();return new Template("[@#{1}]").evaluate(a)},attr:function(a){a[1]=a[1].toLowerCase();a[3]=a[5]||a[6];return new Template(Selector.xpath.operators[a[2]]).evaluate(a)},pseudo:function(a){var b=Selector.xpath.pseudos[a[1]];if(!b){return""}if(Object.isFunction(b)){return b(a)}return new Template(Selector.xpath.pseudos[a[1]]).evaluate(a)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0)]",checked:"[@checked]",disabled:"[(@disabled) and (@type!='hidden')]",enabled:"[not(@disabled) and (@type!='hidden')]",not:function(b){var j=b[6],h=Selector.patterns,a=Selector.xpath,f,c;var g=[];while(j&&f!=j&&(/\S/).test(j)){f=j;for(var d in h){if(b=j.match(h[d])){c=Object.isFunction(a[d])?a[d](b):new Template(a[d]).evaluate(b);g.push("("+c.substring(1,c.length-1)+")");j=j.replace(b[0],"");break}}}return"[not("+g.join(" and ")+")]"},"nth-child":function(a){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",a)},"nth-last-child":function(a){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",a)},"nth-of-type":function(a){return Selector.xpath.pseudos.nth("position() ",a)},"nth-last-of-type":function(a){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",a)},"first-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-of-type"](a)},"last-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](a)},"only-of-type":function(a){var b=Selector.xpath.pseudos;return b["first-of-type"](a)+b["last-of-type"](a)},nth:function(g,e){var h,i=e[6],d;if(i=="even"){i="2n+0"}if(i=="odd"){i="2n+1"}if(h=i.match(/^(\d+)$/)){return"["+g+"= "+h[1]+"]"}if(h=i.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(h[1]=="-"){h[1]=-1}var f=h[1]?Number(h[1]):1;var c=h[2]?Number(h[2]):0;d="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(d).evaluate({fragment:g,a:f,b:c})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(a){a[3]=(a[5]||a[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(a)},pseudo:function(a){if(a[6]){a[6]=a[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(a)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(b,c){var a=Element.readAttribute(b,c[1]);return a&&Selector.operators[c[2]](a,c[5]||c[6])}},handlers:{concat:function(d,c){for(var e=0,f;f=c[e];e++){d.push(f)}return d},mark:function(a){var d=Prototype.emptyFunction;for(var b=0,c;c=a[b];b++){c._countedByPrototype=d}return a},unmark:function(a){for(var b=0,c;c=a[b];b++){c._countedByPrototype=undefined}return a},index:function(a,d,g){a._countedByPrototype=Prototype.emptyFunction;if(d){for(var b=a.childNodes,e=b.length-1,c=1;e>=0;e--){var f=b[e];if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}else{for(var e=0,c=1,b=a.childNodes;f=b[e];e++){if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}},unique:function(b){if(b.length==0){return b}var d=[],e;for(var c=0,a=b.length;c0?[c]:[]}return $R(1,e).inject([],function(a,b){if(0==(b-c)%d&&(b-c)/d>=0){a.push(b)}return a})},nth:function(c,s,u,r,e){if(c.length==0){return[]}if(s=="even"){s="2n+0"}if(s=="odd"){s="2n+1"}var q=Selector.handlers,p=[],d=[],g;q.mark(c);for(var o=0,f;f=c[o];o++){if(!f.parentNode._countedByPrototype){q.index(f.parentNode,r,e);d.push(f.parentNode)}}if(s.match(/^\d+$/)){s=Number(s);for(var o=0,f;f=c[o];o++){if(f.nodeIndex==s){p.push(f)}}}else{if(g=s.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(g[1]=="-"){g[1]=-1}var v=g[1]?Number(g[1]):1;var t=g[2]?Number(g[2]):0;var w=Selector.pseudos.getIndices(v,t,c.length);for(var o=0,f,k=w.length;f=c[o];o++){for(var n=0;n+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(c){a.push(c[1].strip())});return a},matchElements:function(f,g){var e=$$(g),d=Selector.handlers;d.mark(e);for(var c=0,b=[],a;a=f[c];c++){if(a._countedByPrototype){b.push(a)}}d.unmark(e);return b},findElement:function(b,c,a){if(Object.isNumber(c)){a=c;c=false}return Selector.matchElements(b,c||"*")[a||0]},findChildElements:function(e,g){g=Selector.split(g.join(","));var d=[],f=Selector.handlers;for(var c=0,b=g.length,a;c1)?f.unique(d):d}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(d,c){for(var e=0,f;f=c[e];e++){if(f.tagName!=="!"){d.push(f)}}return d},unmark:function(a){for(var b=0,c;c=a[b];b++){c.removeAttribute("_countedByPrototype")}return a}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){$(a).reset();return a},serializeElements:function(g,b){if(typeof b!="object"){b={hash:!!b}}else{if(Object.isUndefined(b.hash)){b.hash=true}}var c,f,a=false,e=b.submit;var d=g.inject({},function(h,i){if(!i.disabled&&i.name){c=i.name;f=$(i).getValue();if(f!=null&&i.type!="file"&&(i.type!="submit"||(!a&&e!==false&&(!e||c==e)&&(a=true)))){if(c in h){if(!Object.isArray(h[c])){h[c]=[h[c]]}h[c].push(f)}else{h[c]=f}}}return h});return b.hash?d:Object.toQueryString(d)}};Form.Methods={serialize:function(b,a){return Form.serializeElements(Form.getElements(b),a)},getElements:function(a){return $A($(a).getElementsByTagName("*")).inject([],function(b,c){if(Form.Element.Serializers[c.tagName.toLowerCase()]){b.push(Element.extend(c))}return b})},getInputs:function(g,c,d){g=$(g);var a=g.getElementsByTagName("input");if(!c&&!d){return $A(a).map(Element.extend)}for(var e=0,h=[],f=a.length;e=0}).sortBy(function(d){return d.tabIndex}).first();return a?a:c.find(function(d){return["input","select","textarea"].include(d.tagName.toLowerCase())})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(b,a){b=$(b),a=Object.clone(a||{});var d=a.parameters,c=b.readAttribute("action")||"";if(c.blank()){c=window.location.href}a.parameters=b.serialize(true);if(d){if(Object.isString(d)){d=d.toQueryParams()}Object.extend(a.parameters,d)}if(b.hasAttribute("method")&&!a.method){a.method=b.method}return new Ajax.Request(c,a)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return""},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value="";return a},present:function(a){return $(a).value!=""},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!="input"||!["button","reset","submit"].include(a.type))){a.select()}}catch(b){}return a},disable:function(a){a=$(a);a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b)){return a.checked?a.value:null}else{a.checked=!!b}},textarea:function(a,b){if(Object.isUndefined(b)){return a.value}else{a.value=b}},select:function(c,f){if(Object.isUndefined(f)){return this[c.type=="select-one"?"selectOne":"selectMany"](c)}else{var b,d,g=!Object.isArray(f);for(var a=0,e=c.length;a=0?this.optionValue(b.options[a]):null},selectMany:function(d){var a,e=d.length;if(!e){return null}for(var c=0,a=[];c<\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;a()}}}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(b,a,c){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(b,a,c)}this.xcomp=a;this.ycomp=c;this.offset=Element.cumulativeOffset(b);return(c>=this.offset[1]&&c=this.offset[0]&&a=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(a)},set:function(a){this.element.className=a},add:function(a){if(this.include(a)){return}this.set($A(this).concat(a).join(" "))},remove:function(a){if(!this.include(a)){return}this.set($A(this).without(a).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();var Rico={Version:"2.1",loadRequested:1,loadComplete:2,init:function(){try{document.execCommand("BackgroundImageCache",false,true)}catch(g){}this.preloadMsgs="";var b=document.getElementsByTagName("script");this.baseHref=location.protocol+"//"+location.host;this.loadedFiles={};this.windowIsLoaded=false;this.onLoadCallbacks=[];var d,c;for(var h=0;h0){d=d.substring(0,k)}this.loadedFiles[d]=this.loadComplete;if(d=="rico.js"||d=="min.rico.js"){c=d;var f=(l.indexOf("/javascripts")>=0);if(f){this.jsDir="/javascripts/";this.cssDir="/stylesheets/";this.imgDir="/images/";this.htmDir="/";this.xslDir="/"}else{this.jsDir=l;this.cssDir=l+"css/";this.imgDir=l+"images/";this.htmDir=l;this.xslDir=l}}}if(!c){throw ("unable to locate rico.js or min.rico.js script element")}if(typeof Prototype=="undefined"){if(typeof(google)=="object"&&google.load){google.load("prototype","1.6")}else{this.include("prototype.js")}}if(c=="rico.js"){this.include("ricoCommon.js");this.languageInclude("en")}var e=function(){Rico.windowLoaded()};if(window.addEventListener){window.addEventListener("load",e,false)}else{if(window.attachEvent){window.attachEvent("onload",e)}}this.onLoad(function(){Rico.writeDebugMsg("Pre-load messages:\n"+Rico.preloadMsgs)})},moduleDependencies:{Accordion:["ricoBehaviors.js","ricoEffects.js","ricoComponents.js"],Color:["ricoStyles.js"],Corner:["ricoStyles.js"],DragAndDrop:["ricoStyles.js","ricoEffects.js","ricoDragDrop.js"],Effect:["ricoEffects.js"],Calendar:["ricoCalendar.js","ricoCalendar.css"],Tree:["ricoTree.js","ricoTree.css"],ColorPicker:["ricoColorPicker.js","ricoStyles.js","ricoColorPicker.css"],CustomMenu:["ricoMenu.js","ricoMenu.css"],SimpleGrid:["+Effect","ricoGridCommon.js","ricoGrid.css","ricoSimpleGrid.js"],LiveGridBasic:["ricoGridCommon.js","ricoGrid.css","ricoBehaviors.js","ricoLiveGrid.js"],LiveGrid:["+Effect","+LiveGridBasic","ricoLiveGridControls.js"],LiveGridMenu:["+CustomMenu","ricoLiveGridMenu.js"],LiveGridAjax:["+LiveGrid","ricoLiveGridAjax.js"],LiveGridJSON:["+LiveGridAjax","ricoLiveGridJSON.js"],LiveGridForms:["+LiveGridAjax","+LiveGridMenu","+Accordion","+Corner","ricoLiveGridForms.js","ricoLiveGridForms.css"],SpreadSheet:["+SimpleGrid","ricoSheet.js","ricoSheet.css"]},languages:{de:"translations/ricoLocale_de.js",en:"translations/ricoLocale_en.js",es:"translations/ricoLocale_es.js",fr:"translations/ricoLocale_fr.js",it:"translations/ricoLocale_it.js",ja:"translations/ricoLocale_ja.js",ko:"translations/ricoLocale_ko.js",pt:"translations/ricoLocale_pt.js",zh:"translations/ricoLocale_zh.js"},languageInclude:function(b){var a=this.languages[b];if(a){this.include(a)}return !!a},acceptLanguage:function(c){var a=c.toLowerCase().split(",");for(var b=0;b<\/script>");return;case"css":var b=document.createElement("link");b.type="text/css";b.rel="stylesheet";b.href=this.cssDir+a;this.loadedFiles[a]=this.loadComplete;document.getElementsByTagName("head")[0].appendChild(b);return}},includeLoaded:function(a){this.loadedFiles[a]=this.loadComplete;this.checkIfComplete()},windowLoaded:function(){this.windowIsLoaded=true;this.checkIfComplete()},checkIfComplete:function(){var c=this.windowIsLoaded?"":"window";for(var a in this.loadedFiles){if(this.loadedFiles[a]==this.loadRequested){c+=" "+a}}this.addPreloadMsg("waitingFor: "+c);if(c.length==0){this.addPreloadMsg("Processing callbacks");while(this.onLoadCallbacks.length>0){var b=this.onLoadCallbacks.shift();if(b){b()}}}},onLoad:function(b,a){if(a){this.onLoadCallbacks.unshift(b)}else{this.onLoadCallbacks.push(b)}this.checkIfComplete()},isKonqueror:navigator.userAgent.toLowerCase().indexOf("konqueror")>=0,startTime:new Date(),timeStamp:function(){var a=new Date();return(a.getTime()-this.startTime.getTime())+": "},setDebugArea:function(c,a){if(!this.debugArea||a){var b=document.getElementById(c);if(!b){return}this.debugArea=b;b.value=""}},addPreloadMsg:function(a){this.preloadMsgs+=Rico.timeStamp()+a+"\n"},writeDebugMsg:function(b,a){if(this.debugArea){if(a){this.debugArea.value=""}this.debugArea.value+=this.timeStamp()+b+"\n"}else{if(window.console){if(window.console.firebug){window.console.log(this.timeStamp(),b)}else{window.console.log(this.timeStamp()+b)}}else{if(window.opera){window.opera.postError(this.timeStamp()+b)}}}}};Rico.init();if(typeof Rico=="undefined"){throw ("Cannot find the Rico object")}if(typeof Prototype=="undefined"){throw ("Rico requires the Prototype JavaScript framework")}Rico.prototypeVersion=parseFloat(Prototype.Version.split(".")[0]+"."+Prototype.Version.split(".")[1]);if(Rico.prototypeVersion<1.3){throw ("Rico requires Prototype JavaScript framework version 1.3 or greater")}var RicoUtil={getDirectChildrenByTag:function(b,a){a=a.toLowerCase();return $(b).childElements().inject([],function(c,d){if(d.tagName&&d.tagName.toLowerCase()==a){c.push(d)}return c})},createXmlDocument:function(){if(document.implementation&&document.implementation.createDocument){var a=document.implementation.createDocument("","",null);if(a.readyState==null){a.readyState=1;a.addEventListener("load",function(){a.readyState=4;if(typeof a.onreadystatechange=="function"){a.onreadystatechange()}},false)}return a}if(window.ActiveXObject){return Try.these(function(){return new ActiveXObject("MSXML2.DomDocument")},function(){return new ActiveXObject("Microsoft.DomDocument")},function(){return new ActiveXObject("MSXML.DomDocument")},function(){return new ActiveXObject("MSXML3.DomDocument")})||false}return null},getInnerText:function(f,b,g,e){switch(typeof f){case"string":return f;case"undefined":return f;case"number":return f.toString()}var d=f.childNodes;var a=d.length;var h="";for(var c=0;c=0){return b}}b=b.parentNode}return null},wrapChildren:function(b,a,e,c){var d=document.createElement(c||"div");if(e){d.id=e}if(a){d.className=a}while(b.firstChild){d.appendChild(b.firstChild)}b.appendChild(d);return d},formatPosNumber:function(f,g,c,e){var b=f.toFixed(g).split(/\./);if(c){var d=/(\d+)(\d{3})/;while(d.test(b[0])){b[0]=b[0].replace(d,"$1"+c+"$2")}}return b.join(e)},DOMNode_insertAfter:function(a,b){var c=b.parentNode;if(c.lastChild==b){return c.appendChild(a)}else{return c.insertBefore(a,b.nextSibling)}},positionCtlOverIcon:function(g,k){var c=Position.page(k);var j=this.docScrollTop();var a=this.windowHeight();if(g.style.display=="none"){g.style.display="block"}var h=Prototype.Browser.IE?1:2;var b=this.nan2zero(Element.getStyle(k,"padding-left"));g.style.left=(c[0]+b+h)+"px";var i=c[1]+h+j;var f=g.offsetHeight;var e=k.offsetHeight;var d=10;if(i+e+f+d")}else{e=document.createElement(b);if(f){e.type=f}e.id=g;if(typeof e.name=="string"){e.name=a}}d.appendChild(e);return e},addSelectOption:function(b,c,d){var a=document.createElement("option");if(typeof c=="string"){a.value=c}a.text=d;if(Prototype.Browser.IE){b.add(a)}else{b.add(a,null)}return a},getCookie:function(g){var b=g+"=";var f=b.length;var a=document.cookie.length;var d=0;while(d1){f+="-"+i(a.getUTCMonth()+1)}if(e>2){f+="-"+i(a.getUTCDate())}if(e>3){f+="T"+i(a.getUTCHours())+":"+i(a.getUTCMinutes())}if(e>5){var b=Number(a.getUTCSeconds()+"."+((a.getUTCMilliseconds()<100)?"0":"")+i(a.getUTCMilliseconds()));f+=":"+i(b)}else{if(e>4){f+=":"+i(a.getUTCSeconds())}}if(e>3){f+=h}return f}}if(!String.prototype.toISO8601Date){String.prototype.toISO8601Date=function(){var a=new Date();return a.setISO8601(this)?a:null}}if(!String.prototype.formatDate){String.prototype.formatDate=function(a){var b=this.replace(/-/g,"/");var c=new Date(b);return isNaN(c)?this:c.formatDate(a)}}if(!Number.prototype.formatNumber){Number.prototype.formatNumber=function(c){if(isNaN(this)){return"NaN"}var b=this;if(typeof c.multiplier=="number"){b*=c.multiplier}var i=typeof c.decPlaces=="number"?c.decPlaces:0;var e=typeof c.thouSep=="string"?c.thouSep:RicoTranslate.thouSep;var f=typeof c.decPoint=="string"?c.decPoint:RicoTranslate.decPoint;var d=c.prefix||"";var g=c.suffix||"";var a=typeof c.negSign=="string"?c.negSign:"L";a=a.toUpperCase();var j,h;if(b<0){j=RicoUtil.formatPosNumber(-b,i,e,f);if(a=="P"){j="("+j+")"}j=d+j;if(a=="L"){j="-"+j}if(a=="T"){j+="-"}h="negNumber"}else{h=b==0?"zeroNumber":"posNumber";j=d+RicoUtil.formatPosNumber(b,i,e,f)}return""+j+g+""}}if(!String.prototype.formatNumber){String.prototype.formatNumber=function(a){var b=parseFloat(this.replace(/,/,"."));return isNaN(b)?this:b.formatNumber(a)}}Rico.Shim=Class.create();if(Prototype.Browser.IE){Rico.Shim.prototype={initialize:function(a){this.ifr=document.createElement("iframe");this.ifr.style.position="absolute";this.ifr.style.display="none";this.ifr.style.top="0px";this.ifr.style.left="0px";this.ifr.src="javascript:false;";a.parentNode.appendChild(this.ifr);this.DivRef=a},hide:function(){this.ifr.style.display="none"},move:function(){this.ifr.style.top=this.DivRef.style.top;this.ifr.style.left=this.DivRef.style.left},show:function(){this.ifr.style.width=this.DivRef.offsetWidth;this.ifr.style.height=this.DivRef.offsetHeight;this.move();this.ifr.style.zIndex=this.DivRef.currentStyle.zIndex-1;this.ifr.style.display="block"}}}else{Rico.Shim.prototype={initialize:function(){},hide:function(){},move:function(){},show:function(){}}}Rico.Shadow=Class.create({initialize:function(a){this.div=document.createElement("div");this.div.style.position="absolute";this.div.style.top="0px";this.div.style.left="0px";if(typeof this.div.style.filter=="undefined"){new Image().src=Rico.imgDir+"shadow.png";new Image().src=Rico.imgDir+"shadow_ur.png";new Image().src=Rico.imgDir+"shadow_ll.png";this.createShadow();this.offset=5}else{this.div.style.backgroundColor="#888";this.div.style.filter="progid:DXImageTransform.Microsoft.Blur(makeShadow=1, shadowOpacity=0.3, pixelRadius=3)";this.offset=0}this.div.style.display="none";a.parentNode.appendChild(this.div);this.DivRef=a},createShadow:function(){var e=document.createElement("table");e.style.height="100%";e.style.width="100%";e.cellSpacing=0;e.dir="ltr";var a=e.insertRow(-1);a.style.height="8px";var c=a.insertCell(-1);c.style.width="8px";var b=a.insertCell(-1);b.style.background="transparent url("+Rico.imgDir+"shadow_ur.png) no-repeat right bottom";var g=e.insertRow(-1);var f=g.insertCell(-1);f.style.background="transparent url("+Rico.imgDir+"shadow_ll.png) no-repeat right bottom";var d=g.insertCell(-1);d.style.background="transparent url("+Rico.imgDir+"shadow.png) no-repeat right bottom";this.div.appendChild(e)},hide:function(){this.div.style.display="none"},move:function(){this.div.style.top=(parseInt(this.DivRef.style.top||"0",10)+this.offset)+"px";this.div.style.left=(parseInt(this.DivRef.style.left||"0",10)+this.offset)+"px"},show:function(){this.div.style.width=this.DivRef.offsetWidth+"px";this.div.style.height=this.DivRef.offsetHeight+"px";this.move();this.div.style.zIndex=parseInt(Element.getStyle(this.DivRef,"z-index"),10)-1;this.div.style.display="block"}});Rico.Popup=Class.create({initialize:function(b,a,c){this.options={hideOnEscape:true,hideOnClick:true,ignoreClicks:false,position:"absolute",shadow:true,margin:6,zIndex:1,overflow:"auto",canDragFunc:false};Object.extend(this.options,b||{});if(a){this.setDiv(a,c)}},setDiv:function(b,c){this.divPopup=$(b);var a=this.options.position=="auto"?Element.getStyle(this.divPopup,"position").toLowerCase():this.options.position;if(!this.divPopup||a!="absolute"){return}this.closeFunc=c||this.closePopup.bindAsEventListener(this);this.shim=new Rico.Shim(this.divPopup);if(this.options.shadow){this.shadow=new Rico.Shadow(this.divPopup)}if(this.options.hideOnClick){Event.observe(document,"click",this.closeFunc)}if(this.options.hideOnEscape){Event.observe(document,"keyup",this._checkKey.bindAsEventListener(this))}if(this.options.canDragFunc){Event.observe(this.titleDiv||this.divPopup,"mousedown",this.startDrag.bind(this))}if(this.options.ignoreClicks||this.options.canDragFunc){this.ignoreClicks()}},createPopup:function(b,e,c,a,d,f){var g=document.createElement("div");g.style.position=this.options.position;g.style.zIndex=this.options.zIndex;g.style.overflow=this.options.overflow;g.style.top="0px";g.style.left="0px";g.style.height=c;g.style.width=a;g.className=d||"ricoPopup";if(e){g.innerHTML=e}b.appendChild(g);this.setDiv(g,f);this.contentDiv=g;if(this.options.canDragFunc===true){this.options.canDragFunc=this.safeDragTest.bind(this)}},safeDragTest:function(b,a){return(b.componentFromPoint&&b.componentFromPoint(a.clientX,a.clientY)!="")?false:b==this.divPopup},createWindow:function(f,e,c,a,d){var g=document.createElement("div");this.titleDiv=document.createElement("div");this.contentDiv=document.createElement("div");this.titleDiv.className="ricoTitle";this.titleDiv.innerHTML=f;this.titleDiv.style.position="relative";var b=document.createElement("img");b.src=Rico.imgDir+"close.gif";b.title=RicoTranslate.getPhraseById("close");b.style.cursor="pointer";b.style.position="absolute";b.style.right="0px";this.titleDiv.appendChild(b);this.contentDiv.className="ricoContent";this.contentDiv.innerHTML=e;this.contentDiv.style.height=c;this.contentDiv.style.width=a;this.contentDiv.style.overflow=this.options.overflow;g.style.position=this.options.position;g.style.zIndex=this.options.zIndex;g.style.top="0px";g.style.left="0px";g.style.display="none";g.className=d||"ricoWindow";g.appendChild(this.titleDiv);g.appendChild(this.contentDiv);document.body.appendChild(g);this.setDiv(g);Event.observe(b,"click",this.closePopup.bindAsEventListener(this))},ignoreClicks:function(){Event.observe(this.divPopup,"click",this._ignoreClick.bindAsEventListener(this))},_ignoreClick:function(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}return true},_checkKey:function(a){if(RicoUtil.eventKey(a)==27){this.closeFunc()}return true},move:function(b,a){if(typeof b=="number"){this.divPopup.style.left=b+"px"}if(typeof a=="number"){this.divPopup.style.top=a+"px"}if(this.shim){this.shim.move()}if(this.shadow){this.shadow.move()}},startDrag:function(c){var b=Event.element(c);var a=typeof(this.options.canDragFunc)=="function"?this.options.canDragFunc(b,c):this.options.canDragFunc;if(!a){return}this.divPopup.style.cursor="move";this.lastMouseX=c.clientX;this.lastMouseY=c.clientY;this.dragHandler=this.drag.bindAsEventListener(this);this.dropHandler=this.endDrag.bindAsEventListener(this);Event.observe(document,"mousemove",this.dragHandler);Event.observe(document,"mouseup",this.dropHandler);Event.stop(c)},drag:function(c){var b=parseInt(this.divPopup.style.left,10)+c.clientX-this.lastMouseX;var a=parseInt(this.divPopup.style.top,10)+c.clientY-this.lastMouseY;this.move(b,a);this.lastMouseX=c.clientX;this.lastMouseY=c.clientY;Event.stop(c)},endDrag:function(){this.divPopup.style.cursor="";Event.stopObserving(document,"mousemove",this.dragHandler);Event.stopObserving(document,"mouseup",this.dropHandler);this.dragHandler=null;this.dropHandler=null},openPopup:function(b,a){this.divPopup.style.display="block";if(typeof b=="number"){this.divPopup.style.left=b+"px"}if(typeof a=="number"){this.divPopup.style.top=a+"px"}if(this.shim){this.shim.show()}if(this.shadow){this.shadow.show()}},closePopup:function(){if(this.dragHandler){this.endDrag()}if(this.shim){this.shim.hide()}if(this.shadow){this.shadow.hide()}this.divPopup.style.display="none"}});Rico.includeLoaded("ricoCommon.js");Rico.Color=Class.create({initialize:function(c,b,a){this.rgb={r:c,g:b,b:a}},setRed:function(a){this.rgb.r=a},setGreen:function(a){this.rgb.g=a},setBlue:function(a){this.rgb.b=a},setHue:function(b){var a=this.asHSB();a.h=b;this.rgb=Rico.Color.HSBtoRGB(a.h,a.s,a.b)},setSaturation:function(b){var a=this.asHSB();a.s=b;this.rgb=Rico.Color.HSBtoRGB(a.h,a.s,a.b)},setBrightness:function(a){var c=this.asHSB();c.b=a;this.rgb=Rico.Color.HSBtoRGB(c.h,c.s,c.b)},darken:function(b){var a=this.asHSB();this.rgb=Rico.Color.HSBtoRGB(a.h,a.s,Math.max(a.b-b,0))},brighten:function(b){var a=this.asHSB();this.rgb=Rico.Color.HSBtoRGB(a.h,a.s,Math.min(a.b+b,1))},blend:function(a){this.rgb.r=Math.floor((this.rgb.r+a.rgb.r)/2);this.rgb.g=Math.floor((this.rgb.g+a.rgb.g)/2);this.rgb.b=Math.floor((this.rgb.b+a.rgb.b)/2)},isBright:function(){var a=this.asHSB();return this.asHSB().b>0.5},isDark:function(){return !this.isBright()},asRGB:function(){return"rgb("+this.rgb.r+","+this.rgb.g+","+this.rgb.b+")"},asHex:function(){return"#"+this.rgb.r.toColorPart()+this.rgb.g.toColorPart()+this.rgb.b.toColorPart()},asHSB:function(){return Rico.Color.RGBtoHSB(this.rgb.r,this.rgb.g,this.rgb.b)},toString:function(){return this.asHex()}});Rico.Color.createFromHex=function(d){if(d.length==4){var b=d;d="#";for(var c=1;c<4;c++){d+=(b.charAt(c)+b.charAt(c))}}if(d.indexOf("#")==0){d=d.substring(1)}if(!d.match(/^[0-9A-Fa-f]{6}$/)){return null}var f=d.substring(0,2);var e=d.substring(2,4);var a=d.substring(4,6);return new Rico.Color(parseInt(f,16),parseInt(e,16),parseInt(a,16))};Rico.Color.createColorFromBackground=function(d){if(!d.style){return new Rico.Color(255,255,255)}var b=Element.getStyle(d,"background-color");if(b.match(/^(transparent|rgba\(0,\s*0,\s*0,\s*0\))$/i)&&d.parentNode){return Rico.Color.createColorFromBackground(d.parentNode)}if(b==null){return new Rico.Color(255,255,255)}if(b.indexOf("rgb(")==0){var a=b.substring(4,b.length-1);var c=a.split(",");return new Rico.Color(parseInt(c[0],10),parseInt(c[1],10),parseInt(c[2],10))}else{if(b.indexOf("#")==0){return Rico.Color.createFromHex(b)}else{return new Rico.Color(255,255,255)}}};Rico.Color.HSBtoRGB=function(i,e,k){var c=0;var d=0;var l=0;if(e==0){c=parseInt(k*255+0.5,10);d=c;l=c}else{var g=(i-Math.floor(i))*6;var j=g-Math.floor(g);var b=k*(1-e);var a=k*(1-e*j);var m=k*(1-(e*(1-j)));switch(parseInt(g,10)){case 0:c=(k*255+0.5);d=(m*255+0.5);l=(b*255+0.5);break;case 1:c=(a*255+0.5);d=(k*255+0.5);l=(b*255+0.5);break;case 2:c=(b*255+0.5);d=(k*255+0.5);l=(m*255+0.5);break;case 3:c=(b*255+0.5);d=(a*255+0.5);l=(k*255+0.5);break;case 4:c=(m*255+0.5);d=(b*255+0.5);l=(k*255+0.5);break;case 5:c=(k*255+0.5);d=(b*255+0.5);l=(a*255+0.5);break}}return{r:parseInt(c,10),g:parseInt(d,10),b:parseInt(l,10)}};Rico.Color.RGBtoHSB=function(a,f,l){var h;var e;var k;var m=(a>f)?a:f;if(l>m){m=l}var i=(a0);return d};Rico.Color.setColorHue=function(b,a,c){return new Rico.Color(Math.round(b.rgb.r*a+c.rgb.r*(1-a)),Math.round(b.rgb.g*a+c.rgb.g*(1-a)),Math.round(b.rgb.b*a+c.rgb.b*(1-a)))};Rico.Corner={round:function(d,b){d=$(d);this._setOptions(b);var a=this.options.color=="fromElement"?this._background(d):this.options.color;var c=this.options.bgColor=="fromParent"?this._background(d.parentNode):this.options.bgColor;if(Prototype.Browser.Gecko&&this.options.useMoz&&!this.options.border&&Element.getStyle(d,"background-image")=="none"){this._roundCornersGecko(d,a)}else{if(typeof(Element.getStyle(d,"-webkit-border-radius"))=="string"&&!this.options.border){this._roundCornersWebKit(d,a)}else{this._roundCornersImpl(d,a,c)}}},_roundCornersImpl:function(c,a,b){this.options.numSlices=this.options.compact?2:4;this.borderColor=this._borderColor(a,b);if(this.options.border){this._renderBorder(c,b)}if(this._isTopRounded()){this._roundTopCorners(c,a,b)}if(this._isBottomRounded()){this._roundBottomCorners(c,a,b)}},_roundCornersGecko:function(c,b){var a=this.options.compact?"4px":"8px";if(this._hasString(this.options.corners,"all")){Element.setStyle(c,{MozBorderRadius:a},true)}else{if(this._hasString(this.options.corners,"top","tl")){Element.setStyle(c,{MozBorderRadiusTopleft:a},true)}if(this._hasString(this.options.corners,"top","tr")){Element.setStyle(c,{MozBorderRadiusTopright:a},true)}if(this._hasString(this.options.corners,"bottom","bl")){Element.setStyle(c,{MozBorderRadiusBottomleft:a},true)}if(this._hasString(this.options.corners,"bottom","br")){Element.setStyle(c,{MozBorderRadiusBottomright:a},true)}}},_roundCornersWebKit:function(c,b){var a=this.options.compact?"4px":"8px";if(this._hasString(this.options.corners,"all")){Element.setStyle(c,{WebkitBorderRadius:a},true)}else{if(this._hasString(this.options.corners,"top","tl")){Element.setStyle(c,{WebkitBorderTopLeftRadius:a},true)}if(this._hasString(this.options.corners,"top","tr")){Element.setStyle(c,{WebkitBorderTopRightRadius:a},true)}if(this._hasString(this.options.corners,"bottom","bl")){Element.setStyle(c,{WebkitBorderBottomLeftRadius:a},true)}if(this._hasString(this.options.corners,"bottom","br")){Element.setStyle(c,{WebkitBorderBottomRightRadius:a},true)}}},_renderBorder:function(b,c){var d=RicoUtil.wrapChildren(b);var a="1px solid "+this._borderColor(c);Element.setStyle(d,{borderLeft:a,borderRight:a,marginTop:"0px",marginBottom:"0px",padding:"1px",height:"100%"})},_roundTopCorners:function(c,a,e){var d=this._createCorner(e);for(var b=0;b=0;b--){d.appendChild(this._createCornerSlice(a,e,b,"bottom"))}c.style.paddingBottom=0;c.appendChild(d)},_createCorner:function(b){var a=document.createElement("div");a.style.backgroundColor=(this._isTransparent()?"transparent":b);return a},_createCornerSlice:function(c,d,f,a){var e=document.createElement("span");var b=e.style;b.backgroundColor=c;b.display="block";b.height="1px";b.overflow="hidden";b.fontSize="1px";if(this.options.border&&f==0){b.borderTopStyle="solid";b.borderTopWidth="1px";b.borderLeftWidth="0px";b.borderRightWidth="0px";b.borderBottomWidth="0px";b.height="0px";b.borderColor=this.borderColor}else{if(this.borderColor){b.borderColor=this.borderColor;b.borderStyle="solid";b.borderWidth="0px 1px"}}if(!this.options.compact&&(f==(this.options.numSlices-1))){b.height="2px"}this._setMargin(e,f,a);this._setBorder(e,f,a);return e},_setOptions:function(a){this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,useMoz:true};Object.extend(this.options,a||{});if(this._isTransparent()){this.options.blend=false}},_whichSideTop:function(){if(this._hasString(this.options.corners,"all","top")){return""}if(this.options.corners.indexOf("tl")>=0&&this.options.corners.indexOf("tr")>=0){return""}if(this.options.corners.indexOf("tl")>=0){return"left"}else{if(this.options.corners.indexOf("tr")>=0){return"right"}}return""},_whichSideBottom:function(){if(this._hasString(this.options.corners,"all","bottom")){return""}if(this.options.corners.indexOf("bl")>=0&&this.options.corners.indexOf("br")>=0){return""}if(this.options.corners.indexOf("bl")>=0){return"left"}else{if(this.options.corners.indexOf("br")>=0){return"right"}}return""},_borderColor:function(a,d){if(a=="transparent"){return d}if(this.options.border){return this.options.border}if(!this.options.blend){return""}var c=Rico.Color.createFromHex(d);var b=Rico.Color.createFromHex(a);if(c==null||b==null){this.options.blend=false;return""}c.blend(b);return c},_setMargin:function(d,e,b){var c=this._marginSize(e);var a=b=="top"?this._whichSideTop():this._whichSideBottom();if(a=="left"){d.style.marginLeft=c+"px";d.style.marginRight="0px"}else{if(a=="right"){d.style.marginRight=c+"px";d.style.marginLeft="0px"}else{d.style.marginLeft=c+"px";d.style.marginRight=c+"px"}}},_setBorder:function(d,e,b){var c=this._borderSize(e);var a=b=="top"?this._whichSideTop():this._whichSideBottom();if(a=="left"){d.style.borderLeftWidth=c+"px";d.style.borderRightWidth="0px"}else{if(a=="right"){d.style.borderRightWidth=c+"px";d.style.borderLeftWidth="0px"}else{d.style.borderLeftWidth=c+"px";d.style.borderRightWidth=c+"px"}}if(this.options.border){d.style.borderLeftWidth=c+"px";d.style.borderRightWidth=c+"px"}},_marginSize:function(e){if(this._isTransparent()){return 0}var d=[5,3,2,1];var a=[3,2,1,0];var c=[2,1];var b=[1,0];if(this.options.compact&&this.options.blend){return b[e]}else{if(this.options.compact){return c[e]}else{if(this.options.blend){return a[e]}else{return d[e]}}}},_borderSize:function(e){var d=[5,3,2,1];var b=[2,1,1,1];var a=[1,0];var c=[0,2,0,0];if(this.options.compact&&(this.options.blend||this._isTransparent())){return 1}else{if(this.options.compact){return a[e]}else{if(this.options.blend){return b[e]}else{if(this.options.border){return c[e]}else{if(this._isTransparent()){return d[e]}}}}}return 0},_background:function(c){try{var a=Element.getStyle(c,"background-color");if(a.match(/^(transparent|rgba\(0,\s*0,\s*0,\s*0\))$/i)&&c.parentNode){return this._background(c.parentNode)}return a==null?"#ffffff":a}catch(b){return"#ffffff"}},_hasString:function(b){for(var a=1;a=0){return true}}return false},_isTransparent:function(){return this.options.color=="transparent"},_isTopRounded:function(){return this._hasString(this.options.corners,"all","top","tl","tr")},_isBottomRounded:function(){return this._hasString(this.options.corners,"all","bottom","bl","br")},_hasSingleTextChild:function(a){return a.childNodes.length==1&&a.childNodes[0].nodeType==3}};Rico.includeLoaded("ricoStyles.js");Rico.selectionSet=function(b,a){new Rico.SelectionSet(b,a)};Rico.SelectionSet=Class.create({initialize:function(c,a){this.options=a||{};if(typeof c=="string"){c=$$(c)}this.previouslySelected=[];this.selectionSet=c;this.selectedClassName=this.options.selectedClass||"selected";this.selectNode=this.options.selectNode||function(d){return d};this.onSelect=this.options.onSelect;this.onFirstSelect=this.options.onFirstSelect;this.clickHandler=this.click.bind(this);c.each(function(d){Event.observe(d,"click",new Rico.EventWrapper(this.clickHandler,d).wrapper)}.bind(this));if(!this.options.noDefault){var b=this.options.cookieName?this.getCookie():0;this.selectIndex(b||this.options.selectedIndex||0)}},getCookie:function(){var b=RicoUtil.getCookie(this.options.cookieName);if(!b){return 0}var a=parseInt(b);return a=this.selectionSet.length){return this.selectionSet[a-1]}else{return this.selectionSet[a+1]}},selectNext:function(){var a=this.selectionSet.indexOf(this.selected);if(a>=this.selectionSet.length){this.selectIndex(a-1)}else{this.selectIndex(a+1)}},click:function(a,b){this.select(b)},add:function(a){if(a.constructur==Array){a.each(function(b){Event.observe(b,"click",new Rico.EventWrapper(this.clickHandler,a).wrapper)}.bind(this))}else{Event.observe(a,"click",new Rico.EventWrapper(this.clickHandler,a).wrapper)}},remove:function(a){this.selectionSet=this.selectionSet.without(a)},removeAll:function(){}});Rico.HoverSet=Class.create({initialize:function(c,a){a=a||[];this.hoverSet=c;this.hoverClassName=a.hoverClass||"hover";this.hoverNodes=a.hoverNodes||function(d){return[d]};this.listenerHover=this._onHover.bind(this);this.listenerEndHover=this._onUnHover.bind(this);for(var b=0;b0){this.animate()}},animate:function(){if(this.interupt){return}if(this.stepsLeft<=0){this.stop();return}if(this.timer){clearTimeout(this.timer)}this.effect.step(this.options.rate(this.stepsLeft));this.startNextStep()},startNextStep:function(){var a=Math.round(this.duration/this.stepsLeft);this.duration-=a;this.stepsLeft--;this.timer=setTimeout(this.animateMethod,a)},isPlaying:function(){return this.stepsLeft!=0&&!this.interupt}});Rico.Effect.Group=Class.create({initialize:function(a){this.effects=a},step:function(a){this.effects.each(function(b){b.step(a)})},finish:function(){this.effects.each(function(a){if(a.finish){a.finish()}})}});Rico.Effect.SizeAndPosition=Class.create({initialize:function(c,a,e,b,d){Object.extend(this,new Rico.Effect.SizeAndPositionFade(c,a,e,b,d))}});Rico.Effect.SizeAndPositionFade=Class.create({initialize:function(c,a,f,b,d,e){this.element=$(c);this.x=typeof(a)=="number"?a:this.element.offsetLeft;this.y=typeof(f)=="number"?f:this.element.offsetTop;if(!Prototype.Browser.IE||(document.compatMode&&document.compatMode.indexOf("CSS")!=-1)){this.pw=RicoUtil.nan2zero(Element.getStyle(this.element,"padding-left"))+RicoUtil.nan2zero(Element.getStyle(this.element,"padding-right"));this.pw+=RicoUtil.nan2zero(Element.getStyle(this.element,"border-left-width"))+RicoUtil.nan2zero(Element.getStyle(this.element,"border-right-width"));this.ph=RicoUtil.nan2zero(Element.getStyle(this.element,"padding-top"))+RicoUtil.nan2zero(Element.getStyle(this.element,"padding-bottom"));this.ph+=RicoUtil.nan2zero(Element.getStyle(this.element,"border-top-width"))+RicoUtil.nan2zero(Element.getStyle(this.element,"border-bottom-width"))}else{this.pw=0;this.ph=0}this.w=typeof(b)=="number"?b:this.element.offsetWidth;this.h=typeof(d)=="number"?d:this.element.offsetHeight;this.opacity=Element.getStyle(this.element,"opacity")||1;this.target=arguments.length>5?Math.min(e,1):this.opacity},step:function(b){var g=this.element.offsetLeft+((this.x-this.element.offsetLeft)/b);var f=this.element.offsetTop+((this.y-this.element.offsetTop)/b);var e=this.element.offsetWidth+((this.w-this.element.offsetWidth)/b)-this.pw;var a=this.element.offsetHeight+((this.h-this.element.offsetHeight)/b)-this.ph;var d=this.element.style;var c=Element.getStyle(this.element,"opacity");var h=c+(this.target-c)/b;Rico.Effect.setOpacity(this.element,Math.min(Math.max(0,h),1));d.left=g+"px";d.top=f+"px";d.width=e+"px";d.height=a+"px"}});Rico.AccordionEffect=Class.create({initialize:function(c,b,a){this.toClose=c;this.toOpen=b;b.style.height="0px";Element.show(b);Element.makeClipping(b);Element.makeClipping(c);Rico.Controls.disableNativeControls(c);this.endHeight=a},step:function(c){var b=Math.max(1,this.toClose.offsetHeight-parseInt((parseInt(this.toClose.offsetHeight,10))/c,10));var d=b+"px";var a=(this.endHeight-b)+"px";this.toClose.style.height=d;this.toOpen.style.height=a},finish:function(){Element.hide(this.toClose);this.toOpen.style.height=this.endHeight+"px";this.toClose.style.height="0px";Element.undoClipping(this.toOpen);Element.undoClipping(this.toClose);Rico.Controls.enableNativeControls(this.toOpen)}});Rico.Effect.SizeFromBottom=Class.create({initialize:function(a,c,b){this.element=$(a);this.y=typeof(c)=="number"?c:this.element.offsetTop;this.h=typeof(b)=="number"?b:this.element.offsetHeight;this.options=arguments[3]||{}},step:function(b){var d=this.element.offsetTop+((this.y-this.element.offsetTop)/b)+"px";var a=this.element.offsetHeight+((this.h-this.element.offsetHeight)/b)+"px";var c=this.element.style;c.height=a;c.top=d}});Rico.Effect.Position=Class.create({initialize:function(b,a,c){this.element=$(b);this.x=typeof(a)=="number"?a:this.element.offsetLeft;this.destTop=typeof(c)=="number"?c:this.element.offsetTop},step:function(a){var d=this.element.offsetLeft+((this.x-this.element.offsetLeft)/a)+"px";var c=this.element.offsetTop+((this.destTop-this.element.offsetTop)/a)+"px";var b=this.element.style;b.left=d;b.top=c}});Rico.Effect.FadeTo=Class.create({initialize:function(a,b){this.element=a;this.opacity=Element.getStyle(this.element,"opacity")||1;this.target=Math.min(b,1)},step:function(b){var a=Element.getStyle(this.element,"opacity");var c=a+(this.target-a)/b;Rico.Effect.setOpacity(this.element,Math.min(Math.max(0,c),1))}});Rico.Effect.FadeOut=Class.create({initialize:function(a){this.effect=new Rico.Effect.FadeTo(a,0)},step:function(a){this.effect.step(a)}});Rico.Effect.FadeIn=Class.create({initialize:function(c){var b=arguments[1]||{};var a=b.startValue||0;Rico.Effect.setOpacity(c,a);this.effect=new Rico.Effect.FadeTo(c,1)},step:function(a){this.effect.step(a)}});Rico.Effect.setOpacity=function(a,b){if(a.setOpacity){a.setOpacity(b)}else{a.style.filter="alpha(opacity="+Math.round(b*100)+")";a.style.opacity=b}};Rico.Effect.SizeFromTop=Class.create({initialize:function(a,c,d,b){this.element=$(a);this.h=typeof(b)=="number"?b:this.element.offsetHeight;this.scrollElement=c;this.options=arguments[4]||{};this.baseHeight=this.options.baseHeight||Math.max(this.h,this.element.offsetHeight)},step:function(c){var d=this.element.offsetHeight+((this.h-this.element.offsetHeight)/c);var b=d+"px";var a=(d-this.baseHeight)+"px";this.scrollElement.style.top=a;this.element.style.height=b}});Rico.Effect.Height=Class.create({initialize:function(a,b){this.element=a;this.endHeight=b},step:function(b){var a;if(this.element.constructor!=Array){a=this.element.offsetHeight+((this.endHeight-this.element.offsetHeight)/b)+"px";this.element.style.height=a}else{a=this.element[0].offsetHeight+((this.endHeight-this.element[0].offsetHeight)/b)+"px";this.element.each(function(c){c.style.height=a})}}});Rico.Effect.SizeWidth=Class.create({initialize:function(a,b){this.element=a;this.endWidth=b},step:function(a){var b=Math.abs(this.endWidth-parseInt(this.element.offsetWidth,10))/(a);this.element.style.width=(this.element.offsetWidth-b)+"px"}});Rico.Controls={editors:[],scrollSelectors:[],disableNativeControls:function(a){Rico.Controls.defaultDisabler.disableNative(a)},enableNativeControls:function(a){Rico.Controls.defaultDisabler.enableNative(a)},prepareForSizing:function(a){Element.makeClipping(a);Rico.Controls.disableNativeControls(a)},resetSizing:function(a){Element.undoClipping(a);Rico.Controls.enableNativeControls(a)},registerScrollSelectors:function(a){a.each(function(b){Rico.Controls.scrollSelectors.push(Rico.selector(b))})}};Rico.Controls.Disabler=Class.create({initialize:function(){this.options=Object.extend({excludeSet:[],hidables:Rico.Controls.editors},arguments[0]||{})},disableNative:function(a){if(!(/Konqueror|Safari|KHTML/.test(navigator.userAgent))){if(!navigator.appVersion.match(/\bMSIE\b/)){this.blockControls(a).each(function(b){Element.makeClipping(b)})}else{this.hidableControls(a).each(function(b){b.disable()})}}},enableNative:function(a){if(!(/Konqueror|Safari|KHTML/.test(navigator.userAgent))){if(!navigator.appVersion.match(/\bMSIE\b/)){this.blockControls(a).each(function(b){Element.undoClipping(b)})}else{this.hidableControls(a).each(function(b){b.enable()})}}},blockControls:function(c){try{var b=[];if(this.options.includeSet){b=this.options.includeSet}else{var a=this.options.includeSelectors||Rico.Controls.scrollSelectors;b=a.map(function(e){return e.findAll(c)}).flatten()}return b.select(function(f){return(Element.getStyle(f,"display")!="none")&&!this.options.excludeSet.include(f)}.bind(this))}catch(d){return[]}},hidableControls:function(a){if(a){return this.options.hidables.select(function(b){return Element.childOf(b,a)})}else{return this.options.hidables}}});Rico.Controls.defaultDisabler=new Rico.Controls.Disabler();Rico.Controls.blankDisabler=new Rico.Controls.Disabler({includeSet:[],hidables:[]});Rico.Controls.HidableInput=Class.create({initialize:function(b,a){this.field=b;this.view=a;this.enable();Rico.Controls.editors.push(this)},enable:function(){Element.hide(this.view);Element.show(this.field)},disable:function(){this.view.value=$F(this.field);if(this.field.offsetWidth>1){this.view.style.width=parseInt(this.field.offsetWidth,10)+"px";Element.hide(this.field);Element.show(this.view)}}});Element.forceRefresh=function(a){try{var c=document.createTextNode(" ");a.appendChild(c);a.removeChild(c)}catch(b){}};Rico.includeLoaded("ricoEffects.js");Rico.ContentTransitionBase=function(){};Rico.ContentTransitionBase.prototype={initialize:function(c,b,a){if(typeof c=="string"){c=$$(c)}if(typeof b=="string"){b=$$(b)}this.titles=c;this.contents=b;this.options=Object.extend({duration:200,steps:8,rate:Rico.Effect.easeIn},a||{});this.hoverSet=new Rico.HoverSet(c,a);b.each(function(d){if(d){Element.hide(d)}});this.selectionSet=new Rico.SelectionSet(c,Object.extend(this.options,{onSelect:this.select.bind(this)}));if(this.initContent){this.initContent()}},reset:function(){this.selectionSet.reset()},select:function(c){var a=this.contentOf(c);if(this.selected==a){return}if(this.transition){if(this.selected){var b=this.transition(a);if(b){Rico.animate(b,this.options)}}else{Element.show(a)}}else{if(this.selected){Element.hide(this.selected)}Element.show(a)}this.selected=a},add:function(b,a){this.titles.push(b);this.contents.push(a);this.hoverSet.add(b);this.selectionSet.add(b);this.selectionSet.select(b)},remove:function(a){},removeAll:function(){this.hoverSet.removeAll();this.selectionSet.removeAll()},openByIndex:function(a){this.selectionSet.selectIndex(a)},contentOf:function(a){return this.contents[this.titles.indexOf(a)]}};Rico.ContentTransition=Class.create();Rico.ContentTransition.prototype=Object.extend(new Rico.ContentTransitionBase(),{});Rico.SlidingPanel=Class.create({initialize:function(a){this.panel=a;this.options=arguments[1]||{};this.closed=true;this.showing=false;this.openEffect=this.options.openEffect;this.closeEffect=this.options.closeEffect;this.animator=new Rico.Effect.Animator();Element.makeClipping(this.panel)},toggle:function(){if(!this.showing){this.open()}else{this.close()}},open:function(){if(this.closed){this.showing=true;Element.show(this.panel);this.options.disabler.disableNative()}this.animator.play(this.openEffect,{onFinish:function(){Element.undoClipping($(this.panel))}.bind(this),rate:Rico.Effect.easeIn})},close:function(){Element.makeClipping(this.panel);this.animator.stop();this.showing=false;this.animator.play(this.closeEffect,{onFinish:function(){Element.hide(this.panel);this.options.disabler.enableNative()}.bind(this),rate:Rico.Effect.easeOut})}});Rico.Accordion=Class.create();Rico.Accordion.prototype=Object.extend(new Rico.ContentTransitionBase(),{initContent:function(){this.selected.style.height=this.options.panelHeight+"px"},transition:function(a){if(!this.options.noAnimate){return new Rico.AccordionEffect(this.selected,a,this.options.panelHeight)}else{a.style.height=this.options.panelHeight+"px";if(this.selected){Element.hide(this.selected)}Element.show(a)}}});Rico.TabbedPanel=Class.create();Rico.TabbedPanel.prototype=Object.extend(new Rico.ContentTransitionBase(),{initContent:function(){if(typeof this.options.panelWidth=="number"){this.options.panelWidth+="px"}if(typeof this.options.panelHeight=="number"){this.options.panelHeight+="px"}if(!this.options.corners){this.options.corners="top"}if(Rico.Corner&&this.options.corners!="none"){if(!this.options.border){this.options.color="transparent"}for(var a=0;a0},setStartDragFromElement:function(a,b){this.origPos=RicoUtil.toDocumentPosition(b);this.startx=a.screenX-this.origPos.x;this.starty=a.screenY-this.origPos.y;this.interestedInMotionEvents=this.hasSelection();this._terminateEvent(a)},updateSelection:function(a,b){if(!b){this.clearSelection()}if(a.isSelected()){this.currentDragObjects=this.currentDragObjects.without(a);a.deselect();if(a==this.lastSelectedDraggable){this.lastSelectedDraggable=null}}else{a.select();if(a.isSelected()){this.currentDragObjects.push(a);this.lastSelectedDraggable=a}}},_mouseDownHandler:function(g){if(arguments.length==0){g=event}var b=g.which!=undefined;if((b&&g.which!=1)||(!b&&g.button!=1)){return}var f=g.target?g.target:g.srcElement;var a=f.ricoDraggable;var d=f;while(a==null&&d.parentNode){d=d.parentNode;a=d.ricoDraggable}if(a==null){return}this.updateSelection(a,g.ctrlKey);if(this.hasSelection()){for(var c=0;c1){a=this.currentDragObjects[0].getMultiObjectDragGUI(this.currentDragObjects)}else{a=this.currentDragObjects[0].getSingleObjectDragGUI()}this.dragElemPosition=RicoUtil.getElementsComputedStyle(a,"position");if(this.dragElemPosition!="absolute"){a.style.position="absolute"}if(a.parentNode==null||a.parentNode.nodeType==11){document.body.appendChild(a)}this.dragElement=a;this._updateDraggableLocation(b);this.currentDragObjectVisible=true},_leftOffset:function(a){return a.offsetX?document.body.scrollLeft:0},_topOffset:function(a){return a.offsetY?document.body.scrollTop:0},_updateDraggableLocation:function(b){var a=this.dragElement.style;a.left=(b.screenX+this._leftOffset(b)-this.startx)+"px";a.top=(b.screenY+this._topOffset(b)-this.starty)+"px"},_updateDropZonesHover:function(b){var a,c=this.dropZones.length;for(a=0;aa.left+this._leftOffset(b)&&b.clientXa.top+this._topOffset(b)&&b.clientY=this.liveGrid.buffer.totalRows){return}this.selected=true;this.showingSelected=true},deselect:function(){this.selected=false;this.showingSelected=false},getSingleObjectDragGUI:function(){var a=document.createElement("div");a.className="LiveGridDraggable";a.style.width=(this.htmlElement.offsetWidth-10)+"px";Element.insert(a,this.htmlElement.innerHTML);return a}});Rico.Dropzone=Class.create({initialize:function(a){this.htmlElement=$(a);this.absoluteRect=null},getHTMLElement:function(){return this.htmlElement},clearPositionCache:function(){this.absoluteRect=null},getAbsoluteRect:function(){if(this.absoluteRect==null){var a=this.getHTMLElement();var b=RicoUtil.toViewportPosition(a);this.absoluteRect={top:b.y,left:b.x,bottom:b.y+a.offsetHeight,right:b.x+a.offsetWidth}}return this.absoluteRect},activate:function(){var c=this.getHTMLElement();if(c==null||this.showingActive){return}this.showingActive=true;this.saveBackgroundColor=c.style.backgroundColor;var b="#ffea84";var a=Rico.Color.createColorFromBackground(c);if(a==null){c.style.backgroundColor=b}else{a.isBright()?a.darken(0.2):a.brighten(0.2);c.style.backgroundColor=a.asHex()}},deactivate:function(){var a=this.getHTMLElement();if(a==null||!this.showingActive){return}a.style.backgroundColor=this.saveBackgroundColor;this.showingActive=false;this.saveBackgroundColor=null},showHover:function(){var a=this.getHTMLElement();if(a==null||this.showingHover){return}this.saveBorderWidth=a.style.borderWidth;this.saveBorderStyle=a.style.borderStyle;this.saveBorderColor=a.style.borderColor;this.showingHover=true;a.style.borderWidth="1px";a.style.borderStyle="solid";a.style.borderColor="#ffff00"},hideHover:function(){var a=this.getHTMLElement();if(a==null||!this.showingHover){return}a.style.borderWidth=this.saveBorderWidth;a.style.borderStyle=this.saveBorderStyle;a.style.borderColor=this.saveBorderColor;this.showingHover=false},canAccept:function(a){return true},accept:function(b){var d=this.getHTMLElement();if(d==null){return}var e=b.length;for(var a=0;athis.options.maxDate.getFullYear()){return false}if(a==this.options.maxDate.getFullYear()&&b>this.options.maxDate.getMonth()){return false}return true},incMonth:function(){var b=this.monthSelected+1;var a=this.yearSelected;if(b>11){b=0;a++}if(!this.isValidMonth(a,b)){return}this.monthSelected=b;this.yearSelected=a;this.constructCalendar()},decMonth:function(){var b=this.monthSelected-1;var a=this.yearSelected;if(b<0){b=11;a--}if(!this.isValidMonth(a,b)){return}this.monthSelected=b;this.yearSelected=a;this.constructCalendar()},selectMonth:function(b){var a=Event.element(b);this.monthSelected=parseInt(a.name,10);this.constructCalendar();Event.stop(b)},popUpMonth:function(){Element.toggle(this.monthSelect);this.monthSelect.style.top=(this.thead.offsetHeight+2)+"px";this.monthSelect.style.left=this.titleMonth.offsetLeft+"px"},popDownMonth:function(){Element.hide(this.monthSelect)},popDownYear:function(){Element.hide(this.yearPopup);this.yearPopup.disabled=true},popUpYear:function(){Element.toggle(this.yearPopup);if(!Element.visible(this.yearPopup)){return}this.yearPopup.disabled=false;this.yearPopup.style.left="120px";this.yearPopup.style.top=(this.thead.offsetHeight+2)+"px";this.yearPopupSpan.innerHTML=" "+RicoTranslate.getPhraseById("calYearRange",this.options.minDate.getFullYear(),this.options.maxDate.getFullYear())+"
";this.yearPopupYear.value="";this.yearPopupYear.focus()},yearKey:function(a){switch(RicoUtil.eventKey(a)){case 27:this.popDownYear();Event.stop(a);return false;case 13:this.processPopUpYear();Event.stop(a);return false}return true},processPopUpYear:function(){var a=this.yearPopupYear.value;a=parseInt(a,10);if(isNaN(a)||athis.options.maxDate.getFullYear()){alert(RicoTranslate.getPhraseById("calInvalidYear"))}else{this.yearSelected=a;this.popDownYear();this.constructCalendar()}},incYear:function(){if(this.yearSelected>=this.options.maxDate.getFullYear()){return}this.yearSelected++;this.constructCalendar()},decYear:function(){if(this.yearSelected<=this.options.minDate.getFullYear()){return}this.yearSelected--;this.constructCalendar()},WeekNbr:function(h,f,j){var g=new Date(h,f,j);var c=new Date(h,0,1);var e=7+1-c.getDay();if(e==8){e=1}var b=((Date.UTC(h,g.getMonth(),g.getDate(),0,0,0)-Date.UTC(h,0,1,0,0,0))/1000/60/60/24)+1;var d=Math.floor((b-e+7)/7);if(d==0){h--;var a=new Date(h,0,1);var i=7+1-a.getDay();d=(i==2||i==8)?53:52}return d},constructCalendar:function(){var m=[31,0,31,30,31,30,31,31,30,31,30,31];var d=new Date(this.yearSelected,this.monthSelected,1);var k,e,f,b;if(typeof this.monthSelected!="number"||this.monthSelected>=12||this.monthSelected<0){alert("ERROR in calendar: monthSelected="+this.monthSelected);return}if(this.monthSelected==1){k=new Date(this.yearSelected,this.monthSelected+1,1);k=new Date(k-(24*60*60*1000));e=k.getDate()}else{e=m[this.monthSelected]}var p=d.getDay()-this.options.startAt;if(p<0){p+=7}this.popDownMonth();this.popDownYear();this.bgcolor=Element.getStyle(this.tbody,"background-color");this.bgcolor=this.bgcolor.replace(/\"/g,"");if(this.options.showWeekNumber){for(f=1;f<7;f++){this.tbody.rows[f].cells[0].innerHTML=" "}}for(f=1;f<=p;f++){this.resetCell(this.tbody.rows[1].cells[f])}for(var l=1,a=1;l<=e;l++,p++){b=p%7+1;if(this.options.showWeekNumber==1&&b==1){this.tbody.rows[a].cells[0].innerHTML=this.WeekNbr(this.yearSelected,this.monthSelected,l)}var o=this.styles[b];if((l==this.dateNow)&&(this.monthSelected==this.monthNow)&&(this.yearSelected==this.yearNow)){o="ricoCalToday"}var n=this.tbody.rows[a].cells[b];n.innerHTML=" "+l+" ";n.className=o;var j=(l==this.odateSelected)&&(this.monthSelected==this.omonthSelected)&&(this.yearSelected==this.oyearSelected)?this.options.selectedDateBorder:this.bgcolor;n.style.border="1px solid "+j;var g=this.Holidays[this.holidayKey(this.yearSelected,this.monthSelected,l)];if(!g){g=this.Holidays[this.holidayKey(0,this.monthSelected,l)]}n.style.color=g?g.txtColor:"";n.style.backgroundColor=g?g.bgColor:"";n.title=g?g.desc:"";if(b==7){a++}}while(p<42){b=p%7+1;this.resetCell(this.tbody.rows[a].cells[b]);p++;if(b==7){a++}}this.titleMonth.innerHTML=RicoTranslate.monthAbbr(this.monthSelected);this.titleYear.innerHTML=this.yearSelected;if(this.todayCell){this.todayCell.innerHTML=RicoTranslate.getPhraseById("calToday",this.dateNow,RicoTranslate.monthAbbr(this.monthNow),this.yearNow,this.monthNow+1)}},resetCell:function(a){a.innerHTML=" ";a.className="ricoCalEmpty";a.style.border="1px solid "+this.bgcolor;a.style.color="";a.style.backgroundColor="";a.title=""},saveAndClose:function(g){Event.stop(g);var f=Event.element(g);var c=f.innerHTML.replace(/ /g,"");if(c==""||f.className=="ricoCalWeekNum"){return}var b=parseInt(c,10);if(isNaN(b)){return}var h=new Date(this.yearSelected,this.monthSelected,b);var a=h.formatDate(this.dateFmt=="ISO8601"?"yyyy-mm-dd":this.dateFmt);if(this.returnValue){this.returnValue(a)}this.close()},open:function(b){if(!this.bPageLoaded){return}var a=new Date();this.dateNow=a.getDate();this.monthNow=a.getMonth();this.yearNow=a.getFullYear();if(typeof b=="object"){this.dateSelected=b.getDate();this.monthSelected=b.getMonth();this.yearSelected=b.getFullYear()}else{if(this.dateFmt=="ISO8601"){var c=new Date();c.setISO8601(b);this.dateSelected=c.getDate();this.monthSelected=c.getMonth();this.yearSelected=c.getFullYear()}else{if(this.re.exec(b)){var f=[RegExp.$1,RegExp.$3,RegExp.$5];this.dateSelected=parseInt(f[this.dateParts.dd],10);this.monthSelected=parseInt(f[this.dateParts.mm],10)-1;this.yearSelected=parseInt(f[this.dateParts.yyyy],10);if(this.yearSelected<100){this.yearSelected+=this.yearNow-(this.yearNow%100);var e=this.options.maxDate.getFullYear();while(this.yearSelected>e){this.yearSelected-=100}}}else{if(b){alert("ERROR: invalid date passed to calendar ("+b+")")}this.dateSelected=this.dateNow;this.monthSelected=this.monthNow;this.yearSelected=this.yearNow}}}this.odateSelected=this.dateSelected;this.omonthSelected=this.monthSelected;this.oyearSelected=this.yearSelected;this.constructCalendar();this.openPopup()}});Rico.includeLoaded("ricoCalendar.js");Rico.TreeControl=Class.create({initialize:function(c,b,a){Object.extend(this,new Rico.Popup({ignoreClicks:true}));Object.extend(this.options,{nodeIdDisplay:"none",showCheckBox:false,showFolders:false,showPlusMinus:true,showLines:true,defaultAction:this.nodeClick.bindAsEventListener(this),height:"300px",width:"300px",leafIcon:Rico.imgDir+"doc.gif"});Object.extend(this.options,a||{});this.id=c;this.dataSource=b;this.close=this.closePopup},atLoad:function(){var d=["node.gif","nodelast.gif","folderopen.gif","folderclosed.gif"];for(var b=0;b1){var e=h.getElementsByTagName("td");for(var r=0;r0){var c=k&&this.options.showLines?"last":"";var o=this.options.showLines?"node":"";if(this.options.showPlusMinus&&f){var w=document.createElement("img");w.name=l;w.style.cursor="pointer";w.onclick=this.clickBranch.bindAsEventListener(this);w.src=Rico.imgDir+o+"p"+c+".gif";d.insertCell(-1).appendChild(w)}else{if(this.options.showLines){var w=document.createElement("img");w.src=Rico.imgDir+"node"+c+".gif";d.insertCell(-1).appendChild(w)}}if(this.options.showFolders&&(f||(s&&s!="none"))){var w=document.createElement("img");if(!f){w.src=s}else{w.name=l;w.style.cursor="pointer";w.onclick=this.clickBranch.bindAsEventListener(this);w.src=Rico.imgDir+"folderclosed.gif"}d.insertCell(-1).appendChild(w)}}if(u&&this.options.showCheckBox){var n=document.createElement("input");n.type="checkbox";n.value=l;d.insertCell(-1).appendChild(n)}if(u&&!this.options.showCheckBox){var p=document.createElement("a");if(typeof u=="string"){p.href=u}else{p.href="javascript:void(0)";p.onclick=this.options.defaultAction}}else{var p=document.createElement("p")}p.id=this.domID(l,"Desc");p.className="ricoTreeLevel"+a;switch(this.options.nodeIdDisplay){case"last":t+=" ("+l+")";break;case"first":t=l+" - "+t;break;case"tooltip":p.title=l;break}p.appendChild(document.createTextNode(t));d.insertCell(-1).appendChild(p);var j=v||this.treeDiv;j.appendChild(b);j.appendChild(m)},nodeClick:function(c){var b=Event.element(c);if(this.returnValue){var a=this.domID("","Desc");this.returnValue(b.id.substr(a.length),b.innerHTML)}this.close()},saveSelection:function(a){if(this.returnValue){this.returnValue(this.getCheckedItems())}this.close()},getCheckedItems:function(){var b=this.treeDiv.getElementsByTagName("input");var c=[];for(var a=0;a"}d+=' ';if(((b+1)>=this.options.palette.length)||(((b+1)%c)==0)){d+=""}}var a=Math.floor(c/2);if(this.options.showColorCode){d+=" #FFFFFF"}else{d+=" "}d+="";this.container.innerHTML=d;document.body.appendChild(this.container);this.setDiv(this.container);this.open=this.openPopup;this.close=this.closePopup;Event.observe(this.container,"mouseover",this.highlightColor.bindAsEventListener(this),false);Event.observe(this.container,"click",this.selectColor.bindAsEventListener(this),false);this.close()},selectColor:function(a){Event.stop(a);if(this.returnValue){this.returnValue(this.currentValue)}this.close()},highlightColor:function(b){var a=Event.element(b);if(!a.tagName||a.tagName.toLowerCase()!="td"){return}var g=Rico.Color.createColorFromBackground(a).toString();this.currentValue=g;Element.setStyle("colorPickerSelectedColor",{backgroundColor:g},true);var f=$("colorPickerSelectedColorValue");if(f){f.innerHTML=g}}});Rico.includeLoaded("ricoColorPicker.js");Rico.Menu=Class.create({initialize:function(a){Object.extend(this,new Rico.Popup());Object.extend(this.options,{width:"15em"});if(typeof a=="string"){this.options.width=a}else{Object.extend(this.options,a||{})}this.hideFunc=null;this.highlightElem=null;new Image().src=Rico.imgDir+"left.gif";new Image().src=Rico.imgDir+"right.gif"},createDiv:function(a){if(this.div){return}this.div=document.createElement("div");this.div.className=Prototype.Browser.WebKit?"ricoMenuSafari":"ricoMenu";this.div.style.position="absolute";this.div.style.top="0px";this.div.style.left="0px";this.div.style.width=this.options.width;if(!a){a=document.getElementsByTagName("body")[0]}a.appendChild(this.div);this.width=this.div.offsetWidth;this.setDiv(this.div,this.cancelmenu.bindAsEventListener(this));this.direction=Element.getStyle(this.div,"direction")||"ltr";this.direction=this.direction.toLowerCase();this.hidemenu();this.itemCount=0},showmenu:function(a,b){Event.stop(a);this.hideFunc=b;if(this.div.childNodes.length==0){this.cancelmenu();return false}this.openmenu(a.clientX,a.clientY,0,0)},openmenu:function(a,g,d,f){var e=RicoUtil.docScrollLeft()+a;if(this.direction=="rtl"){if(e>this.width+d){e-=this.width+d}}else{if(a+this.width+this.options.margin>RicoUtil.windowWidth()){e-=this.width+d}}var b=RicoUtil.docScrollTop()+g;this.div.style.visibility="hidden";this.div.style.display="block";var c=this.div.offsetHeight;if(g+c+this.options.margin>RicoUtil.windowHeight()){b=Math.max(b-c+f,0)}this.openPopup(e,b);this.div.style.visibility="visible";return false},clearMenu:function(){this.div.innerHTML="";this.defaultAction=null;this.itemCount=0},addMenuHeading:function(b){var a=document.createElement("div");a.innerHTML=b;a.className="ricoMenuHeading";this.div.appendChild(a)},addMenuBreak:function(){var a=document.createElement("div");a.className="ricoMenuBreak";this.div.appendChild(a)},addSubMenuItem:function(b,e,f){var d=this.direction=="rtl"?"left":"right";var c=this.addMenuItem(b,null,true,null,f);c.className="ricoSubMenu";c.style.backgroundImage="url("+Rico.imgDir+d+".gif)";c.style.backgroundRepeat="no-repeat";c.style.backgroundPosition=d;c.onmouseover=this.showSubMenu.bind(this,c,e);c.onmouseout=this.subMenuOut.bindAsEventListener(this)},showSubMenu:function(b,c){if(this.openSubMenu){this.hideSubMenu()}this.openSubMenu=c;this.openMenuAnchor=b;var d=Position.page(b);if(b.className=="ricoSubMenu"){b.className="ricoSubMenuOpen"}c.openmenu(d[0]+b.offsetWidth,d[1],b.offsetWidth-2,b.offsetHeight+2)},subMenuOut:function(d){if(!this.openSubMenu){return}Event.stop(d);var c=Event.element(d);var a=(d.relatedTarget)?d.relatedTarget:d.toElement;try{while(a!=null&&a!=this.openSubMenu.div){a=a.parentNode}}catch(b){}if(a==this.openSubMenu.div){return}this.hideSubMenu()},hideSubMenu:function(){if(this.openMenuAnchor){this.openMenuAnchor.className="ricoSubMenu";this.openMenuAnchor=null}if(this.openSubMenu){this.openSubMenu.hidemenu();this.openSubMenu=null}},addMenuItemId:function(c,b,a,e,d){if(arguments.length<3){a=true}this.addMenuItem(RicoTranslate.getPhraseById(c),b,a,e,false,d)},addMenuItem:function(b,e,d,h,g,f){this.itemCount++;if(g==null){g=true}var c=document.createElement(typeof e=="string"?"a":"div");if(arguments.length<3||d){switch(typeof e){case"function":c.onclick=e;break;case"string":c.href=e;if(f){c.target=f}break}c.className="enabled";if(this.defaultAction==null){this.defaultAction=e}}else{c.disabled=true;c.className="disabled"}c.innerHTML=g?RicoTranslate.getPhrase(b):b;if(typeof h=="string"){c.title=g?RicoTranslate.getPhrase(h):h}c=this.div.appendChild(c);Event.observe(c,"mouseover",this.mouseOver.bindAsEventListener(this));Event.observe(c,"mouseout",this.mouseOut.bindAsEventListener(this));return c},mouseOver:function(b){if(this.highlightElem&&this.highlightElem.className=="enabled-hover"){this.highlightElem.className="enabled";this.highlightElem=null}var a=Event.element(b);if(this.openMenuAnchor&&this.openMenuAnchor!=a){this.hideSubMenu()}if(a.className=="enabled"){a.className="enabled-hover";this.highlightElem=a}},mouseOut:function(b){var a=Event.element(b);if(a.className=="enabled-hover"){a.className="enabled"}if(this.highlightElem==a){this.highlightElem=null}},isVisible:function(){return this.div&&Element.visible(this.div)},cancelmenu:function(){if(!this.isVisible()){return}if(this.hideFunc){this.hideFunc()}this.hideFunc=null;this.hidemenu()},hidemenu:function(){if(!this.div){return}if(this.openSubMenu){this.openSubMenu.hidemenu()}this.closePopup()}});Rico.includeLoaded("ricoMenu.js");if(typeof Rico=="undefined"){throw ("GridCommon requires the Rico JavaScript framework")}if(typeof RicoUtil=="undefined"){throw ("GridCommon requires the RicoUtil Library")}Rico.GridCommon=function(){};Rico.GridCommon.prototype={baseInit:function(){this.options={resizeBackground:"resize.gif",saveColumnInfo:{width:true,filter:false,sort:false},cookiePrefix:"RicoGrid.",allowColResize:true,windowResize:true,click:null,dblclick:null,contextmenu:null,useUnformattedColWidth:true,menuEvent:"dblclick",defaultWidth:100,scrollBarWidth:19,minScrollWidth:100,exportWindow:"height=400,width=500,scrollbars=1,menubar=1,resizable=1",exportStyleList:["background-color","color","text-align","font-weight","font-size","font-family"],exportImgTags:false,exportFormFields:true,FilterLocation:null,FilterAllToken:"___ALL___",columnSpecs:[]};this.colWidths=[];this.hdrCells=[];this.headerColCnt=0;this.headerRowIdx=0;this.tabs=new Array(2);this.thead=new Array(2);this.tbody=new Array(2)},attachMenuEvents:function(){var a;if(!this.options.menuEvent||this.options.menuEvent=="none"){return}this.hideScroll=navigator.userAgent.match(/Macintosh\b.*\b(Firefox|Camino)\b/i)||(Prototype.Browser.Opera&&parseFloat(window.opera.version())<9.5);this.options[this.options.menuEvent]=this.handleMenuClick.bindAsEventListener(this);if(this.highlightDiv){switch(this.options.highlightElem){case"cursorRow":this.attachMenu(this.highlightDiv[0]);break;case"cursorCell":for(a=0;a<2;a++){this.attachMenu(this.highlightDiv[a])}break}}for(a=0;a<2;a++){this.attachMenu(this.tbody[a])}},attachMenu:function(a){if(this.options.click){Event.observe(a,"click",this.options.click,false)}if(this.options.dblclick){if(Prototype.Browser.WebKit||Prototype.Browser.Opera){Event.observe(a,"click",this.handleDblClick.bindAsEventListener(this),false)}else{Event.observe(a,"dblclick",this.options.dblclick,false)}}if(this.options.contextmenu){if(Prototype.Browser.Opera||Rico.isKonqueror){Event.observe(a,"click",this.handleContextMenu.bindAsEventListener(this),false)}else{Event.observe(a,"contextmenu",this.options.contextmenu,false)}}},handleDblClick:function(b){var a=Event.element(b);if(this.dblClickElem==a){this.options.dblclick(b)}else{this.dblClickElem=a;this.safariTimer=setTimeout(this.clearDblClick.bind(this),300)}},clearDblClick:function(){this.dblClickElem=null},handleContextMenu:function(c){var a;if(typeof(c.which)=="number"){a=c.which}else{if(typeof(c.button)=="number"){a=c.button}else{return}}if(a==1&&c.ctrlKey){this.options.contextmenu(c)}},cancelMenu:function(){if(this.menu&&this.menu.isVisible()){this.menu.cancelmenu()}},getColumnInfo:function(f){Rico.writeDebugMsg("getColumnInfo: len="+f.length);if(f.length==0){return 0}this.headerRowCnt=f.length;var d,h,e;for(d=0;d=this.hdrCells.length){this.hdrCells[d]=[]}for(h=0;h0){d=Math.min(this.outerDiv.parentNode.clientWidth,d)}var a=this.frzWi+this.scrWi-d;Rico.writeDebugMsg("baseSizeDivs "+this.tableId+": scrWi="+this.scrWi+" wiLimit="+d+" overage="+a+" clientWidth="+this.outerDiv.parentNode.clientWidth);if(a>0&&this.options.frozenColumns'},cell:function(a,b){return(0<=b&&b=0)?this.columns[b].cell(a):null},availHt:function(){var a=Position.page(this.outerDiv);return RicoUtil.windowHeight()-a[1]-2*this.options.scrollBarWidth-15},setHorizontalScroll:function(){var a=(-this.scrollDiv.scrollLeft)+"px";this.hdrTabs[1].style.left=a},pluginScroll:function(){if(this.scrollPluggedIn){return}Event.observe(this.scrollDiv,"scroll",this.scrollEventFunc,false);this.scrollPluggedIn=true},unplugScroll:function(){Event.stopObserving(this.scrollDiv,"scroll",this.scrollEventFunc,false);this.scrollPluggedIn=false},hideMsg:function(){if(this.messageDiv.style.display=="none"){return}this.messageDiv.style.display="none";this.messageShadow.hide()},showMsg:function(a){this.messageDiv.innerHTML=a;this.centerMsg(this.messageDiv);this.messageShadow.show();Rico.writeDebugMsg("showMsg: "+a)},centerMsg:function(e){Element.show(e);var d=e.offsetWidth;var c=e.offsetHeight;var a=this.outerDiv.offsetWidth;var b=this.outerDiv.offsetHeight;e.style.top=parseInt((b-c)/2,10)+"px";e.style.left=parseInt((a-d)/2,10)+"px"},listInvisible:function(){var b=[];for(var a=0;a";for(k=0;k"}}this.exportText+="";if(this.exportHeader){this.exportText+=this.exportHeader}for(h=0;h";for(k=0,f=0;k0){g=Element.select(b.cell,".ricoLG_cell");a=g&&g.length>0?g[0]:b.cell;this.exportText+="1){this.exportText+=" colspan='"+d+"'"}this.exportText+=">"+RicoUtil.getInnerText(a,!this.options.exportImgTags,!this.options.exportFormFields,"NoExport")+""}}this.exportText+=""}this.exportText+=""},exportFinish:function(b){if(this.hideMsg){this.hideMsg()}window.status=RicoTranslate.getPhraseById("exportComplete");if(this.exportRows.length>0){this.exportText+=""+this.exportRows.join("")+""}if(this.exportFooter){this.exportText+=this.exportFooter}this.exportText+="";this.exportDiv.innerHTML=this.exportText;this.exportText=undefined;this.exportRows=undefined;if(this.cancelMenu){this.cancelMenu()}var a=window.open(Rico.htmDir+"export-"+(b||"plain")+".html?"+this.exportDiv.id,"",this.options.exportWindow);if(a==null){alert(RicoTranslate.getPhraseById("disableBlocker"))}},exportStyle:function(d){var g=this.options.exportStyleList;for(var b=0,c="";b=this.columns.length){continue}var e=this.columns[h];switch(a[0].charAt(0)){case"w":e.setColWidth(a[1]);e.customWidth=true;break;case"h":if(a[1].toLowerCase()=="true"){e.hideshow(true,true)}else{e.hideshow(false,true)}break;case"s":if(!this.options.saveColumnInfo.sort||!e.sortable){break}e.setSorted(a[1]);break;case"f":if(!this.options.saveColumnInfo.filter||!e.filterable){break}var d=a[1].split("~");e.filterOp=d.shift();e.filterValues=[];e.filterType=Rico.TableColumn.USERFILTER;for(var b=0;b0){return b[0].innerHTML}else{return a.innerHTML.stripTags()}},_clear:function(a){a.innerHTML=" "},clearCell:function(d){var c=this.cell(d);this._clear(c,d);if(!this.liveGrid.buffer){return}var b=this.liveGrid.buffer.options.acceptAttr;for(var a=0;a0){this.edge+=RicoUtil.nan2zero(this.liveGrid.tabs[0].offsetWidth)-this.liveGrid.scrollDiv.scrollLeft}}this.liveGrid.resizeDiv.style.left=this.edge+"px";this.liveGrid.resizeDiv.style.display="";this.liveGrid.outerDiv.style.cursor="e-resize";this.tmpHighlight=this.liveGrid.highlightEnabled;this.liveGrid.highlightEnabled=false;this.pluginMouseEvents();Event.stop(b)},handleMouseMove:function(b){var c=b.clientX-this.resizeStart;var a=(this.liveGrid.direction=="rtl")?this.origWidth-c:this.origWidth+c;if(a"+b+""}}this.exportRows.push(e)}this.exportFinish(a)},hideRow:function(a){if(this.columns[0].cell(a).style.display=="none"){return}for(var b=0;bthis.width){c-=this.width}}else{if(c+this.width+this.options.margin>this.scrollDiv.clientWidth){c-=this.width}}e.divPopup.style.visibility="hidden";e.divPopup.style.display="block";var b=e.divPopup.offsetHeight;var a=Math.floor(d.offsetTop-this.scrollDiv.scrollTop+d.offsetHeight/2);if(a+b+e.options.margin>this.scrollDiv.clientHeight){a=Math.max(a-b,0)}e.openPopup(this.frzWi+c,this.hdrHt+a);e.divPopup.style.visibility="visible";return d}});if(Rico.Menu){Object.extend(Rico.Menu.prototype,{showSimpleMenu:function(b,c){Event.stop(b);this.hideFunc=c;if(this.div.childNodes.length==0){this.cancelmenu();return false}var a=Event.element(b);this.grid.openPopup(a,this);return a},showSimpleSubMenu:function(b,c){if(this.openSubMenu){this.hideSubMenu()}this.openSubMenu=c;this.openMenuAnchor=b;if(b.className=="ricoSubMenu"){b.className="ricoSubMenuOpen"}var e=parseInt(this.div.style.top,10);var d=parseInt(this.div.style.left,10);c.openPopup(d+b.offsetWidth,e+b.offsetTop);c.div.style.visibility="visible"}})}Rico.SimpleGridColumn=Class.create({initialize:function(a,d,c,b){Object.extend(this,new Rico.TableColumnBase());this.baseInit(a,d,c,b)},setUnfiltered:function(){this.filterRows=null},filterChange:function(a){var b=Event.element(a);if(b.value==this.liveGrid.options.FilterAllToken){this.setUnfiltered()}else{this.filterRows=this.filterHash.get(b.value)}this.liveGrid.applyFilters()},filterKeypress:function(f){var a=Event.element(f);if(typeof this.lastKeyFilter!="string"){this.lastKeyFilter=""}if(this.lastKeyFilter==a.value){return}var b=a.value;Rico.writeDebugMsg("filterKeypress: "+this.index+" "+b);this.lastKeyFilter=b;if(b){b=b.replace("\\","\\\\");b=b.replace("(","\\(").replace(")","\\)");b=b.replace(".","\\.");if(this.format.filterUI.indexOf("^")>0){b="^"+b}var d=new RegExp(b,"i");this.filterRows=[];var h=this.numRows();for(var c=0;c=this.startPos)&&(b<=this.endPos())},endPos:function(){return this.startPos+this.rows.length},fetch:function(a){Rico.writeDebugMsg("fetch "+this.liveGrid.tableId+": offset="+a);this.applyFilters();this.setTotalRows();this.rcvdRowCount=true;this.foundRowCount=true;if(a<0){a=0}this.liveGrid.refreshContents(a);return},exportAllRows:function(b,a){b(this.getRows(0,this.totalRows));a()},visibleRows:function(){return this.rows.slice(this.windowStart,this.windowEnd)},setWindow:function(b,a){this.windowStart=b-this.startPos;this.windowEnd=Math.min(this.windowStart+a,this.size);this.windowPos=b},isVisible:function(a){return a=this.windowStart&&a=this.windowEnd){return false}return this.setValue(a,b,c)},getCell:function(b,a){return b=this.size){return false}if(!this.rows[d][b]){this.rows[d][b]={}}this.rows[d][b]=c;if(typeof a=="string"){this.rows[d][b]._style=a}this.rows[d][b].modified=true;return true},getRows:function(f,d){var e=f-this.startPos;var a=Math.min(e+d,this.size);var c=new Array();for(var b=e;b=this.nan2zero(h.filterValues[0])}else{f=this.baseRows[a][d]>=h.filterValues[0]}break;case"NULL":f=this.baseRows[a][d]=="";break;case"NOTNULL":f=this.baseRows[a][d]!="";break}}if(f){g.push(this.baseRows[a])}}this.rows=g}this.rowcntContent=this.size=this.rows.length}});Rico.LiveGrid=Class.create({initialize:function(d,b,c){Object.extend(this,new Rico.GridCommon);Object.extend(this,new Rico.LiveGridMethods);this.baseInit();this.tableId=d;this.buffer=b;Rico.setDebugArea(d+"_debugmsgs");Object.extend(this.options,{visibleRows:-1,frozenColumns:0,offset:0,prefetchBuffer:true,minPageRows:2,maxPageRows:50,canSortDefault:true,canFilterDefault:b.options.canFilter,canHideDefault:true,highlightElem:"none",highlightSection:3,highlightMethod:"class",highlightClass:"ricoLG_selection",maxPrint:1000,headingSort:"link",hdrIconsFirst:true,sortAscendImg:"sort_asc.gif",sortDescendImg:"sort_desc.gif",filterImg:"filtercol.gif"});this.options.sortHandler=this.sortHandler.bind(this);this.options.filterHandler=this.filterHandler.bind(this);this.options.onRefreshComplete=this.bookmarkHandler.bind(this);this.options.rowOverHandler=this.rowMouseOver.bindAsEventListener(this);this.options.mouseDownHandler=this.selectMouseDown.bindAsEventListener(this);this.options.mouseOverHandler=this.selectMouseOver.bindAsEventListener(this);this.options.mouseUpHandler=this.selectMouseUp.bindAsEventListener(this);Object.extend(this.options,c||{});switch(typeof this.options.visibleRows){case"string":this.sizeTo=this.options.visibleRows;switch(this.options.visibleRows){case"data":this.options.visibleRows=-2;break;case"body":this.options.visibleRows=-3;break;case"parent":this.options.visibleRows=-4;break;default:this.options.visibleRows=-1;break}break;case"number":switch(this.options.visibleRows){case -1:this.sizeTo="window";break;case -2:this.sizeTo="data";break;case -3:this.sizeTo="body";break;case -4:this.sizeTo="parent";break;default:this.sizeTo="fixed";break}break;default:this.sizeTo="window";this.options.visibleRows=-1;break}this.highlightEnabled=this.options.highlightSection>0;this.pageSize=0;this.createTables();if(this.headerColCnt==0){alert('ERROR: no columns found in "'+this.tableId+'"');return}this.createColumnArray("TableColumn");if(this.options.headingSort=="hover"){this.createHoverSet()}this.bookmark=$(this.tableId+"_bookmark");this.sizeDivs();var a=this.buffer.options.canFilter?this.options.FilterLocation:false;if(typeof(a)=="number"&&a<0){a=this.addHeadingRow()}this.createDataCells(this.options.visibleRows);if(this.pageSize==0){return}this.buffer.registerGrid(this);if(this.buffer.setBufferSize){this.buffer.setBufferSize(this.pageSize)}this.scrollTimeout=null;this.lastScrollPos=0;this.attachMenuEvents();new Image().src=Rico.imgDir+this.options.filterImg;new Image().src=Rico.imgDir+this.options.sortAscendImg;new Image().src=Rico.imgDir+this.options.sortDescendImg;Rico.writeDebugMsg("images preloaded");this.setSortUI(this.options.sortCol,this.options.sortDir);this.setImages();if(this.listInvisible().length==this.columns.length){this.columns[0].showColumn()}this.sizeDivs();this.scrollDiv.style.display="";if(this.buffer.totalRows>0){this.updateHeightDiv()}if(this.options.prefetchBuffer){if(this.bookmark){this.bookmark.innerHTML=RicoTranslate.getPhraseById("bookmarkLoading")}if(this.options.canFilterDefault&&this.options.getQueryParms){this.checkForFilterParms()}this.buffer.fetch(this.options.offset)}if(typeof(a)=="number"){this.createFilters(a)}this.scrollEventFunc=this.handleScroll.bindAsEventListener(this);this.wheelEventFunc=this.handleWheel.bindAsEventListener(this);this.wheelEvent=(Prototype.Browser.IE||Prototype.Browser.Opera||Prototype.Browser.WebKit)?"mousewheel":"DOMMouseScroll";if(this.options.offset&&this.options.offset0){Rico.writeDebugMsg("Data provider returned an error:\n"+RicoUtil.getContentAsString(k[0],this.buffer.isEncoded));alert(RicoTranslate.getPhraseById("requestError",RicoUtil.getContentAsString(k[0],this.buffer.isEncoded)));return false}d=d.getElementsByTagName("response")[0];var j=d.getElementsByTagName("rows")[0];var c=this.columns[parseInt(a,10)];var n=this.buffer.dom2jstable(j);var h,g,b,m,l=$(this.filterId(a));if(c.filterType==Rico.TableColumn.USERFILTER&&c.filterOp=="EQ"){m=c.filterValues[0]}Rico.writeDebugMsg("filterValuesUpdate: col="+a+" rows="+n.length);for(var f=0;f0){h=g=n[f][0];if(h.match(/(.*)<\/span>/i)){g=RegExp.leftContext}b=RicoUtil.addSelectOption(l,h,g||RicoTranslate.getPhraseById("filterBlank"));if(c.filterType==Rico.TableColumn.USERFILTER&&h==m){b.selected=true}}}Event.observe(l,"change",c.filterChange.bindAsEventListener(c),false);return true},unplugHighlightEvents:function(){var a=this.options.highlightSection;if(a&1){this.detachHighlightEvents(this.tbody[0])}if(a&2){this.detachHighlightEvents(this.tbody[1])}},insertPanelNames:function(a,b,d,f){Rico.writeDebugMsg("insertPanelNames: start="+b+" limit="+d);a.className="ricoLG_hdg";var i=-1,j,e=null,g=0;for(var h=b;h0;j++){this.thead[j0;j++){if(a[0].className=="ricoFrozen"){if(e==this.headerRowIdx){this.options.frozenColumns=j+1}}else{d=1}this.thead[d].rows[e].appendChild(a[0])}}}Rico.writeDebugMsg("loadHdrSrc end")},sizeDivs:function(){Rico.writeDebugMsg("sizeDivs: "+this.tableId);this.unhighlight();this.baseSizeDivs();var d=this.firstVisible();if(this.pageSize==0||d<0){return}var c=this.columns[d].dataColDiv.offsetHeight;this.rowHeight=Math.round(c/this.pageSize);var b=this.dataHt;if(this.scrWi>0||Prototype.Browser.IE||Prototype.Browser.WebKit){b+=this.options.scrollBarWidth}this.scrollDiv.style.height=b+"px";this.innerDiv.style.width=(this.scrWi-this.options.scrollBarWidth+1)+"px";this.resizeDiv.style.height=this.frozenTabs.style.height=this.innerDiv.style.height=(this.hdrHt+this.dataHt+1)+"px";Rico.writeDebugMsg("sizeDivs scrHt="+b+" innerHt="+this.innerDiv.style.height+" rowHt="+this.rowHeight+" pageSize="+this.pageSize);var a=(this.scrWi-this.scrTabWib&&this.buffer.totalRows>0){this.isPartialBlank=true;var a=this.adjustRow(this.lastRowPos);this.buffer.fetch(a)}else{if(this.pageSize=this.buffer.totalRows){break}this.appendBlankRow()}},appendBlankRow:function(){if(this.pageSize>=this.options.maxPageRows){return}Rico.writeDebugMsg("appendBlankRow #"+this.pageSize);var a=this.defaultRowClass(this.pageSize);for(var d=0;d=this.buffer.endPos());return a},attachHighlightEvents:function(a){switch(this.options.highlightElem){case"selection":Event.observe(a,"mousedown",this.options.mouseDownHandler,false);a.ondrag=function(){return false};a.onselectstart=function(){return false};break;case"cursorRow":case"cursorCell":Event.observe(a,"mouseover",this.options.rowOverHandler,false);break}},detachHighlightEvents:function(a){switch(this.options.highlightElem){case"selection":Event.stopObserving(a,"mousedown",this.options.mouseDownHandler,false);a.ondrag=null;a.onselectstart=null;break;case"cursorRow":case"cursorCell":Event.stopObserving(a,"mouseover",this.options.rowOverHandler,false);break}},getVisibleSelection:function(){var d=[];if(this.SelectIdxStart&&this.SelectIdxEnd){var b=Math.max(Math.min(this.SelectIdxEnd.row,this.SelectIdxStart.row)-this.buffer.startPos,this.buffer.windowStart);var a=Math.min(Math.max(this.SelectIdxEnd.row,this.SelectIdxStart.row)-this.buffer.startPos,this.buffer.windowEnd-1);var g=Math.min(this.SelectIdxEnd.column,this.SelectIdxStart.column);var f=Math.max(this.SelectIdxEnd.column,this.SelectIdxStart.column);for(var h=b;h<=a;h++){for(var j=g;j<=f;j++){d.push({row:h-this.buffer.windowStart,column:j})}}}if(this.SelectCtrl){for(var e=0;e=this.buffer.windowStart&&this.SelectCtrl[e].rowc){this.HideSelection();return}var g=Math.min(this.SelectIdxEnd.column,this.SelectIdxStart.column);var e=Math.max(this.SelectIdxEnd.column,this.SelectIdxStart.column);var h=this.columns[g].cell(d-this.buffer.windowStart).offsetTop;var j=this.columns[g].cell(c-this.buffer.windowStart);var b=j.offsetTop+j.offsetHeight;var l=this.columns[g].dataCell.offsetLeft;var k=this.columns[e].dataCell.offsetLeft;var a=k+this.columns[e].dataCell.offsetWidth;this.highlightDiv[0].style.top=this.highlightDiv[3].style.top=this.highlightDiv[1].style.top=(this.hdrHt+h-1)+"px";this.highlightDiv[2].style.top=(this.hdrHt+b-1)+"px";this.highlightDiv[3].style.left=(l-2)+"px";this.highlightDiv[0].style.left=this.highlightDiv[2].style.left=(l-1)+"px";this.highlightDiv[1].style.left=(a-1)+"px";this.highlightDiv[0].style.width=this.highlightDiv[2].style.width=(a-l-1)+"px";this.highlightDiv[1].style.height=this.highlightDiv[3].style.height=(b-h)+"px";for(var f=0;f<4;f++){this.highlightDiv[f].style.display=""}},HideSelection:function(){var b;if(this.options.highlightMethod!="class"){for(b=0;bb){return false}var e=Math.min(this.SelectIdxEnd.column,this.SelectIdxStart.column);var d=Math.max(this.SelectIdxEnd.column,this.SelectIdxStart.column);var f=this.datasetIndex(a);return(c<=f.row&&f.row<=b&&e<=f.column&&f.column<=d)},highlightCell:function(a){Element.addClassName(a,this.options.highlightClass)},unhighlightCell:function(a){if(a==null){return}Element.removeClassName(a,this.options.highlightClass)},selectRow:function(a){for(var b=0;b=0){c=this.columns[a].getSortDirection()}else{if(typeof c!="string"){c=Rico.TableColumn.SORT_ASC}else{c=c.toUpperCase();if(c!=Rico.TableColumn.SORT_DESC){c=Rico.TableColumn.SORT_ASC}}switch(typeof b){case"string":a=this.findColumnName(b);break;case"number":a=b;break}}if(typeof(a)!="number"||a<0){return}this.clearSort();this.columns[a].setSorted(c);this.buffer.sortBuffer(a)},clearSort:function(){for(var a=0;aj;var d=h?this.buffer.startPos:j;this.contentStartPos=d+1;var b=Math.min(this.buffer.startPos+this.buffer.size,j+this.pageSize);var m=this.options.onRefreshComplete;if((j+this.pageSize0;this.lastRowPos=j;Rico.writeDebugMsg("refreshContents complete, startPos="+j);if(m){m(this.contentStartPos,b)}},scrollToRow:function(a){var b=this.rowToPixel(a);Rico.writeDebugMsg("scrollToRow, rowOffset="+a+" pixel="+b);this.scrollDiv.scrollTop=b;if(this.options.onscroll){this.options.onscroll(this,a)}},scrollUp:function(){this.moveRelative(-1)},scrollDown:function(){this.moveRelative(1)},pageUp:function(){this.moveRelative(-this.pageSize)},pageDown:function(){this.moveRelative(this.pageSize)},adjustRow:function(a){var b=this.topOfLastPage();if(b==0||!a){return 0}return Math.min(b,a)},rowToPixel:function(a){return this.adjustRow(a)*this.rowHeight},pixeltorow:function(c){var b=this.topOfLastPage();if(b==0){return 0}var a=parseInt(c/this.rowHeight,10);return Math.min(b,a)},moveRelative:function(b){var a=Math.max(this.scrollDiv.scrollTop+b*this.rowHeight,0);a=Math.min(a,this.scrollDiv.scrollHeight);this.scrollDiv.scrollTop=a},pluginScroll:function(){if(this.scrollPluggedIn){return}Rico.writeDebugMsg("pluginScroll: wheelEvent="+this.wheelEvent);Event.observe(this.scrollDiv,"scroll",this.scrollEventFunc,false);for(var a=0;a<2;a++){Event.observe(this.tabs[a],this.wheelEvent,this.wheelEventFunc,false)}this.scrollPluggedIn=true},unplugScroll:function(){if(!this.scrollPluggedIn){return}Rico.writeDebugMsg("unplugScroll");Event.stopObserving(this.scrollDiv,"scroll",this.scrollEventFunc,false);for(var a=0;a<2;a++){Event.stopObserving(this.tabs[a],this.wheelEvent,this.wheelEventFunc,false)}this.scrollPluggedIn=false},handleWheel:function(a){var b=0;if(a.wheelDelta){if(Prototype.Browser.Opera){b=a.wheelDelta/120}else{if(Prototype.Browser.WebKit){b=-a.wheelDelta/12}else{b=-a.wheelDelta/120}}}else{if(a.detail){b=a.detail/3}}if(b){this.moveRelative(b)}Event.stop(a);return false},handleScroll:function(g){if(this.scrollTimeout){clearTimeout(this.scrollTimeout)}this.setHorizontalScroll();var a=this.scrollDiv.scrollTop;var b=this.lastScrollPos-a;if(b==0){return}var d=this.pixeltorow(a);if(d==this.lastRowPos&&!this.isPartialBlank&&!this.isBlank){return}var f=new Date();if(this.options.highlightElem=="selection"){this.HideSelection()}this.buffer.fetch(d);if(this.options.onscroll){this.options.onscroll(this,d)}this.scrollTimeout=setTimeout(this.scrollIdle.bind(this),1200);this.lastScrollPos=this.scrollDiv.scrollTop;var c=new Date()},scrollIdle:function(){if(this.options.onscrollidle){this.options.onscrollidle()}},printAll:function(a){this.showMsg(RicoTranslate.getPhraseById("exportInProgress"));setTimeout(this._printAll.bind(this,a),10)},_printAll:function(a){this.exportStart();this.buffer.exportAllRows(this.exportBuffer.bind(this),this.exportFinish.bind(this,a))},_printVisible:function(a){this.exportStart();this.exportBuffer(this.buffer.visibleRows(),0);this.exportFinish(a)},exportBuffer:function(j,e){var a,f,i,b,h;Rico.writeDebugMsg("exportBuffer: "+j.length+" rows");var g=[];var d=e||0;for(f=0;f(.*)<\/span>/i)){i=RegExp.leftContext}if(i==""){i=" "}h+=""+i+""}this.exportRows.push(h);d++;if(d%10==0){window.status=RicoTranslate.getPhraseById("exportStatus",d)}}}};Rico.TableColumn.prototype={initialize:function(liveGrid,colIdx,hdrInfo,tabIdx){Object.extend(this,new Rico.TableColumnBase());this.baseInit(liveGrid,colIdx,hdrInfo,tabIdx);if(typeof this.format.type!="string"){this.format.type="raw"}if(typeof this.isNullable!="boolean"){this.isNullable=/number|date/.test(this.format.type)}this.isText=/raw|text|showTags/.test(this.format.type);Rico.writeDebugMsg(" sortable="+this.sortable+" filterable="+this.filterable+" hideable="+this.hideable+" isNullable="+this.isNullable+" isText="+this.isText);this.fixHeaders(this.liveGrid.tableId,this.options.hdrIconsFirst);if(this.format.control){if(typeof this.format.control=="string"){this.format.control=eval(this.format.control)}for(var property in this.format.control){if(property.charAt(0)=="_"){Rico.writeDebugMsg("Copying control property "+property);this[property]=this.format.control[property]}}}if(this["format_"+this.format.type]){this._format=this["format_"+this.format.type].bind(this)}},sortAsc:function(){this.setColumnSort(Rico.TableColumn.SORT_ASC)},sortDesc:function(){this.setColumnSort(Rico.TableColumn.SORT_DESC)},setColumnSort:function(a){this.liveGrid.clearSort();this.setSorted(a);if(this.liveGrid.options.saveColumnInfo.sort){this.liveGrid.setCookie()}if(this.options.sortHandler){this.options.sortHandler()}},isSortable:function(){return this.sortable},isSorted:function(){return this.currentSort!=Rico.TableColumn.UNSORTED},getSortDirection:function(){return this.currentSort},toggleSort:function(){if(this.liveGrid.buffer&&this.liveGrid.buffer.totalRows==0){return}if(this.currentSort==Rico.TableColumn.SORT_ASC){this.sortDesc()}else{this.sortAsc()}},setUnsorted:function(){this.setSorted(Rico.TableColumn.UNSORTED)},setSorted:function(a){this.currentSort=a},canFilter:function(){return this.filterable},getFilterText:function(){var c=[];for(var b=0;b(.*)<\/span>/i)){a=RegExp.leftContext}c.push(a==""?RicoTranslate.getPhraseById("filterBlank"):a)}switch(this.filterOp){case"EQ":return"= "+(c[0]);case"NE":return RicoTranslate.getPhraseById("filterNot",c.join(", "));case"LE":return"<= "+c[0];case"GE":return">= "+c[0];case"LIKE":return RicoTranslate.getPhraseById("filterLike",c[0]);case"NULL":return RicoTranslate.getPhraseById("filterEmpty");case"NOTNULL":return RicoTranslate.getPhraseById("filterNotEmpty")}return"?"},getFilterQueryParm:function(){if(this.filterType==Rico.TableColumn.UNFILTERED){return""}var a="&f["+this.index+"][op]="+this.filterOp;a+="&f["+this.index+"][len]="+this.filterValues.length;for(var b=0;b/g,">")}},format_number:function(a){if(typeof a=="undefined"||a==""||a==null){return" "}else{return a.formatNumber(this.format)}},format_datetime:function(a){if(typeof a=="undefined"||a==""||a==null){return" "}else{var b=new Date();if(!b.setISO8601(a)){return a}return(this.format.prefix||"")+b.formatDate(this.format.dateFmt||"translateDateTime")+(this.format.suffix||"")}},format_UTCasLocalTime:function(a){if(typeof a=="undefined"||a==""||a==null){return" "}else{var b=new Date();if(!b.setISO8601(a,-b.getTimezoneOffset())){return a}return(this.format.prefix||"")+b.formatDate(this.format.dateFmt||"translateDateTime")+(this.format.suffix||"")}},format_date:function(a){if(typeof a=="undefined"||a==null||a==""){return" "}else{var b=new Date();if(!b.setISO8601(a)){return a}return(this.format.prefix||"")+b.formatDate(this.format.dateFmt||"translateDate")+(this.format.suffix||"")}},fixHeaders:function(c,d){if(this.sortable){switch(this.options.headingSort){case"link":var b=RicoUtil.wrapChildren(this.hdrCellDiv,"ricoSort",undefined,"a");b.href="javascript:void(0)";b.onclick=this.toggleSort.bindAsEventListener(this);break;case"hover":this.hdrCellDiv.onclick=this.toggleSort.bindAsEventListener(this);break}}this.imgFilter=document.createElement("img");this.imgFilter.style.display="none";this.imgFilter.src=Rico.imgDir+this.options.filterImg;this.imgFilter.className="ricoLG_HdrIcon";this.imgSort=document.createElement("img");this.imgSort.style.display="none";this.imgSort.src=Rico.imgDir+this.options.sortAscendImg;this.imgSort.className="ricoLG_HdrIcon";if(d){this.hdrCellDiv.insertBefore(this.imgSort,this.hdrCellDiv.firstChild);this.hdrCellDiv.insertBefore(this.imgFilter,this.hdrCellDiv.firstChild)}else{this.hdrCellDiv.appendChild(this.imgFilter);this.hdrCellDiv.appendChild(this.imgSort)}if(!this.format.filterUI){Event.observe(this.imgFilter,"click",this.filterClick.bindAsEventListener(this),false)}},filterClick:function(a){if(this.filterType==Rico.TableColumn.USERFILTER&&this.filterOp=="LIKE"){this.liveGrid.openKeyword(this.index)}},getValue:function(a){return this.liveGrid.buffer.getWindowValue(a,this.index)},getBufferCell:function(a){return this.liveGrid.buffer.getWindowCell(a,this.index)},getBufferAttr:function(a){return this.liveGrid.buffer.getWindowAttr(a,this.index)},setValue:function(b,a){this.liveGrid.buffer.setWindowValue(b,this.index,a)},_format:function(a){return a},_display:function(a,b){b.innerHTML=this._format(a)},_export:function(a){return this._format(a)},displayValue:function(f){var c=this.getBufferCell(f);if(c==null){this.clearCell(f);return}var e=this.cell(f);this._display(c,e,f);var d=this.liveGrid.buffer.options.acceptAttr;if(d.length==0){return}var b=this.getBufferAttr(f);if(b==null){return}for(var a=0;a":c=(a>this._chkval);break;case"<":c=(a=":c=(a>=this._chkval);break;case"<=":c=(a<=this._chkval);break;default:c=(a==this._chkval);break}d.style.color=c?this._highlightColor:"";d.style.backgroundColor=c?this._highlightBackground:"";d.innerHTML=this._format(b)}});Rico.TableColumn.bgColor=Class.create({initialize:function(){},_clear:function(a,b){a.style.backgroundColor=""},_display:function(a,b,c){b.style.backgroundColor=a}});Rico.TableColumn.link=Class.create({initialize:function(a,b){this._href=a;this._target=b;this._anchors=[]},_create:function(a,b){this._anchors[b]=RicoUtil.createFormField(a,"a",null,this.liveGrid.tableId+"_a_"+this.index+"_"+b);if(this._target){this._anchors[b].target=this._target}this._clear(a,b)},_clear:function(a,b){this._anchors[b].href="";this._anchors[b].innerHTML=""},_display:function(a,c,d){this._anchors[d].innerHTML=a;var b=this.liveGrid.buffer.getWindowValue.bind(this.liveGrid.buffer);this._anchors[d].href=this._href.replace(/\{\d+\}/g,function(e){var f=parseInt(e.substr(1),10);return b(d,f)})}});Rico.TableColumn.image=Class.create({initialize:function(){this._img=[]},_create:function(a,b){this._img[b]=RicoUtil.createFormField(a,"img",null,this.liveGrid.tableId+"_img_"+this.index+"_"+b);this._clear(a,b)},_clear:function(b,c){var a=this._img[c];a.style.display="none";a.src=""},_display:function(b,c,d){var a=this._img[d];this._img[d].src=b;a.style.display=""}});Rico.TableColumn.lookup=Class.create({initialize:function(c,a,b){this._map=c;this._defaultCode=a||"";this._defaultDesc=b||" ";this._sortfunc=this._sortvalue.bind(this);this._codes=[];this._descriptions=[]},_create:function(a,b){this._descriptions[b]=RicoUtil.createFormField(a,"span",null,this.liveGrid.tableId+"_desc_"+this.index+"_"+b);this._codes[b]=RicoUtil.createFormField(a,"input","hidden",this.liveGrid.tableId+"_code_"+this.index+"_"+b);this._clear(a,b)},_clear:function(a,b){this._codes[b].value=this._defaultCode;this._descriptions[b].innerHTML=this._defaultDesc},_sortvalue:function(a){return this._getdesc(a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/ /g," ")},_getdesc:function(a){var b=this._map[a];return(typeof b=="string")?b:this._defaultDesc},_export:function(a){return this._getdesc(a)},_display:function(a,b,c){this._codes[c].value=a;this._descriptions[c].innerHTML=this._getdesc(a)}});Rico.TableColumn.MultiLine=Class.create({initialize:function(){},_display:function(a,c,d){var b=document.createElement("div");b.innerHTML=this._format(a);b.style.height="100%";if(c.firstChild){c.replaceChild(b,c.firstChild)}else{c.appendChild(b)}}});Rico.includeLoaded("ricoLiveGridControls.js");if(typeof Rico=="undefined"){throw ("GridMenu requires the Rico JavaScript framework")}Rico.GridMenu=Class.create();Rico.GridMenu.prototype={initialize:function(a){this.options={width:"18em",dataMenuHandler:null};Object.extend(this.options,a||{});Object.extend(this,new Rico.Menu(this.options));this.sortmenu=new Rico.Menu({width:"15em"});this.filtermenu=new Rico.Menu({width:"22em"});this.exportmenu=new Rico.Menu({width:"24em"});this.hideshowmenu=new Rico.Menu({width:"22em"});this.createDiv();this.sortmenu.createDiv();this.filtermenu.createDiv();this.exportmenu.createDiv();this.hideshowmenu.createDiv()},buildGridMenu:function(a,i){this.clearMenu();var l=this.liveGrid.buffer.totalRows;var b=a>=l;var e=this.liveGrid.columns[i];if(this.options.dataMenuHandler){var m=this.options.dataMenuHandler(this.liveGrid,a,i,b);if(!m){return(this.itemCount>0)}}if(e.sortable&&l>0){this.sortmenu.clearMenu();this.addSubMenuItem(RicoTranslate.getPhraseById("gridmenuSortBy",e.displayName),this.sortmenu,false);this.sortmenu.addMenuItemId("gridmenuSortAsc",e.sortAsc.bind(e),true);this.sortmenu.addMenuItemId("gridmenuSortDesc",e.sortDesc.bind(e),true)}this.filtermenu.clearMenu();if(e.canFilter()&&!e.format.filterUI&&(!b||e.filterType==Rico.TableColumn.USERFILTER)){this.addSubMenuItem(RicoTranslate.getPhraseById("gridmenuFilterBy",e.displayName),this.filtermenu,false);e.userFilter=e.getValue(a);if(e.filterType==Rico.TableColumn.USERFILTER){this.filtermenu.addMenuItemId("gridmenuRemoveFilter",e.setUnfiltered.bind(e,false),true);if(e.filterOp=="LIKE"){this.filtermenu.addMenuItemId("gridmenuChgKeyword",this.liveGrid.openKeyword.bind(this.liveGrid,i),true)}if(e.filterOp=="NE"&&!b){this.filtermenu.addMenuItemId("gridmenuExcludeAlso",e.addFilterNE.bind(e),true)}}else{if(!b){this.filtermenu.addMenuItemId("gridmenuInclude",e.setFilterEQ.bind(e),true);this.filtermenu.addMenuItemId("gridmenuGreaterThan",e.setFilterGE.bind(e),e.userFilter!="");this.filtermenu.addMenuItemId("gridmenuLessThan",e.setFilterLE.bind(e),e.userFilter!="");if(e.isText){this.filtermenu.addMenuItemId("gridmenuContains",this.liveGrid.openKeyword.bind(this.liveGrid,i),true)}this.filtermenu.addMenuItemId("gridmenuExclude",e.setFilterNE.bind(e),true)}}if(this.liveGrid.filterCount()>0){this.filtermenu.addMenuItemId("gridmenuRefresh",this.liveGrid.filterHandler.bind(this.liveGrid),true);this.filtermenu.addMenuItemId("gridmenuRemoveAll",this.liveGrid.clearFilters.bind(this.liveGrid),true)}}else{if(this.liveGrid.filterCount()>0){this.addSubMenuItem(RicoTranslate.getPhraseById("gridmenuFilterBy",e.displayName),this.filtermenu,false);this.filtermenu.addMenuItemId("gridmenuRemoveAll",this.liveGrid.clearFilters.bind(this.liveGrid),true)}}if(this.liveGrid.options.maxPrint>0&&l>0){this.exportmenu.clearMenu();this.addSubMenuItem(RicoTranslate.getPhraseById("gridmenuExport"),this.exportmenu,false);this.exportmenu.addMenuItemId("gridmenuExportVis2Web",this.liveGrid.printVisible.bind(this.liveGrid,"plain"));this.exportmenu.addMenuItemId("gridmenuExportAll2Web",this.liveGrid.printAll.bind(this.liveGrid,"plain"),this.liveGrid.buffer.totalRows<=this.liveGrid.options.maxPrint);if(Prototype.Browser.IE){this.exportmenu.addMenuBreak();this.exportmenu.addMenuItemId("gridmenuExportVis2SS",this.liveGrid.printVisible.bind(this.liveGrid,"owc"));this.exportmenu.addMenuItemId("gridmenuExportAll2SS",this.liveGrid.printAll.bind(this.liveGrid,"owc"),this.liveGrid.buffer.totalRows<=this.liveGrid.options.maxPrint)}}var k=this.liveGrid.listInvisible();for(var f=0,j=0;j0||e.canHideShow()){this.hideshowmenu.clearMenu();this.addSubMenuItem(RicoTranslate.getPhraseById("gridmenuHideShow"),this.hideshowmenu,false);this.hideshowmenu.addMenuItemId("gridmenuChooseCols",this.liveGrid.chooseColumns.bindAsEventListener(this.liveGrid));var h=this.liveGrid.columns.length-k.length;var g=(h>1&&e.visible&&e.canHideShow());this.hideshowmenu.addMenuItem(RicoTranslate.getPhraseById("gridmenuHide",e.displayName),e.hideColumn.bind(e),g,false);for(var d=0,j=0;j1){this.hideshowmenu.addMenuItemId("gridmenuShowAll",this.liveGrid.showAll.bind(this.liveGrid))}}return true}};Rico.includeLoaded("ricoLiveGridMenu.js");if(typeof Rico=="undefined"){throw ("LiveGridAjax requires the Rico JavaScript framework")}if(typeof RicoUtil=="undefined"){throw ("LiveGridAjax requires the RicoUtil object")}if(typeof Rico.Buffer=="undefined"){throw ("LiveGridAjax requires the Rico.Buffer object")}Rico.Buffer.AjaxXML=Class.create({initialize:function(c,b,a){Object.extend(this,new Rico.Buffer.Base());Object.extend(this,new Rico.Buffer.AjaxXMLMethods);this.dataSource=c;this.options.bufferTimeout=20000;this.options.requestParameters=[];this.options.waitMsg=RicoTranslate.getPhraseById("waitForData");this.options.canFilter=true;Object.extend(this.options,b||{});this.ajaxOptions={parameters:null,method:"get"};Object.extend(this.ajaxOptions,a||{});this.requestCount=0;this.processingRequest=false;this.pendingRequest=-2;this.fetchData=true;this.sortParm={}}});Rico.Buffer.AjaxXMLMethods=function(){};Rico.Buffer.AjaxXMLMethods.prototype={fetch:function(a){if(this.fetchData){this.foundRowCount=true;this.fetchData=false;this.processingRequest=true;this.liveGrid.showMsg(this.options.waitMsg);this.timeoutHandler=setTimeout(this.handleTimedOut.bind(this),this.options.bufferTimeout);this.ajaxOptions.parameters=this.formQueryHashXML(0,-1);Rico.writeDebugMsg("sending request");if(typeof this.dataSource=="string"){this.ajaxOptions.onComplete=this.ajaxUpdate.bind(this,a);new Ajax.Request(this.dataSource,this.ajaxOptions)}else{this.ajaxOptions.onComplete=this.jsUpdate.bind(this,a);this.dataSource(this.ajaxOptions)}}else{if(a<0){this.applyFilters();this.setTotalRows(this.size);a=0}this.liveGrid.refreshContents(a)}},handleTimedOut:function(){Rico.writeDebugMsg("Request Timed Out");this.liveGrid.showMsg(RicoTranslate.getPhraseById("requestTimedOut"))},formQueryHashXML:function(e,c){var d={id:this.liveGrid.tableId,page_size:(typeof c=="number")?c:this.totalRows,offset:e};if(!this.foundRowCount){d.get_total="true"}if(this.options.requestParameters){for(var f=0;f=-1){var c=this.pendingRequest;Rico.writeDebugMsg("ajaxUpdate: found pending request for offset="+c);this.pendingRequest=-2;this.fetch(c)}},processResponse:function(k,f){var o=f.responseXML;if(f.responseText.substring(0,4)=="");if(m==-1){this.liveGrid.showMsg("Web server error - client side debugging may be enabled");return false}o=RicoUtil.createXmlDocument();o.loadXML(f.responseText.substring(m+3))}var e=o.getElementsByTagName("ajax-response");if(e==null||e.length!=1){return false}this.rcvdRows=0;this.rcvdRowCount=false;var c=e[0];var a=c.getElementsByTagName("debug");for(var g=0;g0){var d=RicoUtil.getContentAsString(l[0],this.options.isEncoded);alert("Data provider returned an error:\n"+d);Rico.writeDebugMsg("Data provider returned an error:\n"+d);return false}var j=c.getElementsByTagName("rows")[0];if(!j){Rico.writeDebugMsg("ajaxUpdate: invalid response");this.liveGrid.showMsg(RicoTranslate.getPhraseById("invalidResponse"));return false}var n=c.getElementsByTagName("rowcount");if(n&&n.length==1){this.rowcntContent=RicoUtil.getContentAsString(n[0],this.options.isEncoded);this.rcvdRowCount=true;this.foundRowCount=true;Rico.writeDebugMsg("ajaxUpdate: found RowCount="+this.rowcntContent)}this.updateUI=j.getAttribute("update_ui")=="true";this.rcvdOffset=j.getAttribute("offset");Rico.writeDebugMsg("ajaxUpdate: rcvdOffset="+this.rcvdOffset);var h=this.dom2jstable(j);var b=(this.options.acceptAttr.length>0)?this.dom2jstableAttr(j):false;this.rcvdRows=h.length;this.updateBuffer(k,h,b);return true},updateBuffer:function(c,a,b){this.baseRows=a;this.attr=b;Rico.writeDebugMsg("updateBuffer: # of rows="+this.rcvdRows);this.rcvdRowCount=true;this.rowcntContent=this.rcvdRows;if(typeof this.delayedSortCol=="number"){this.sortBuffer(this.delayedSortCol)}this.applyFilters();this.startPos=0},updateGrid:function(f){Rico.writeDebugMsg("updateGrid, size="+this.size+" rcv cnt type="+typeof(this.rowcntContent));var e;if(this.rcvdRowCount==true){Rico.writeDebugMsg("found row cnt: "+this.rowcntContent);var d=parseInt(this.rowcntContent,10);var b=this.totalRows;if(!isNaN(d)&&d!=b){this.setTotalRows(d);e=Math.min(this.liveGrid.topOfLastPage(),f);Rico.writeDebugMsg("updateGrid: new rowcnt="+d+" newpos="+e);if(b==0&&this.liveGrid.sizeTo=="data"){this.liveGrid.adjustPageSize()}this.liveGrid.scrollToRow(e);if(this.isInRange(e)){this.liveGrid.refreshContents(e)}else{this.fetch(e)}return}}else{var a=f+this.rcvdRows;if(a>this.totalRows){var c=a;Rico.writeDebugMsg("extending totrows to "+c);this.setTotalRows(c)}}e=this.liveGrid.pixeltorow(this.liveGrid.scrollDiv.scrollTop);Rico.writeDebugMsg("updateGrid: newpos="+e);this.liveGrid.refreshContents(e)}};Rico.Buffer.AjaxSQL=Class.create({initialize:function(c,b,a){Object.extend(this,new Rico.Buffer.AjaxXML());Object.extend(this,new Rico.Buffer.AjaxSQLMethods());this.dataSource=c;this.options.canFilter=true;this.options.largeBufferSize=7;this.options.nearLimitFactor=1;Object.extend(this.options,b||{});Object.extend(this.ajaxOptions,a||{})}});Rico.Buffer.AjaxSQLMethods=function(){};Rico.Buffer.AjaxSQLMethods.prototype={registerGrid:function(a){this.liveGrid=a;this.sessionExpired=false;this.timerMsg=$(a.tableId+"_timer");if(this.options.TimeOut&&this.timerMsg){if(!this.timerMsg.title){this.timerMsg.title=RicoTranslate.getPhraseById("sessionExpireMinutes")}this.restartSessionTimer()}},setBufferSize:function(a){this.maxFetchSize=Math.max(50,parseInt(this.options.largeBufferSize*a,10));this.nearLimit=parseInt(this.options.nearLimitFactor*a,10);this.maxBufferSize=this.maxFetchSize*3},restartSessionTimer:function(){if(this.sessionExpired==true){return}this.sessionEndTime=(new Date()).getTime()+this.options.TimeOut*60000;if(this.sessionTimer){clearTimeout(this.sessionTimer)}this.updateSessionTimer()},updateSessionTimer:function(){var b=(new Date()).getTime();if(b>this.sessionEndTime){this.displaySessionTimer(RicoTranslate.getPhraseById("sessionExpired"));this.timerMsg.style.backgroundColor="red";this.sessionExpired=true}else{var a=Math.ceil((this.sessionEndTime-b)/60000);this.displaySessionTimer(a);this.sessionTimer=setTimeout(this.updateSessionTimer.bind(this),10000)}},displaySessionTimer:function(a){this.timerMsg.innerHTML=" "+a+" "},refresh:function(b){var a=this.liveGrid.lastRowPos;this.clear();if(b){this.setTotalRows(0);this.foundRowCount=false}this.liveGrid.clearBookmark();this.liveGrid.clearRows();this.fetch(a)},fetch:function(d){Rico.writeDebugMsg("AjaxSQL fetch: offset="+d+", lastOffset="+this.lastOffset);if(this.processingRequest){Rico.writeDebugMsg("AjaxSQL fetch: queue request");this.pendingRequest=d;return}if(d<0){this.clear();this.setTotalRows(0);this.foundRowCount=false;d=0}var c=this.lastOffset;this.lastOffset=d;if(this.isInRange(d)){Rico.writeDebugMsg("AjaxSQL fetch: in buffer");this.liveGrid.refreshContents(d);if(d>c){if(d+this.liveGrid.pageSizethis.startPos+this.nearLimit){return}if(this.startPos==0){return}}else{return}}}if(d>=this.totalRows&&this.foundRowCount){return}this.processingRequest=true;Rico.writeDebugMsg("AjaxSQL fetch: processing offset="+d);var b=this.getFetchOffset(d);var a=this.getFetchSize(b);var e=false;this.liveGrid.showMsg(this.options.waitMsg);this.timeoutHandler=setTimeout(this.handleTimedOut.bind(this),this.options.bufferTimeout);this.ajaxOptions.parameters=this.formQueryHashSQL(b,a);this.requestCount++;Rico.writeDebugMsg("sending req #"+this.requestCount);if(typeof this.dataSource=="string"){this.ajaxOptions.onComplete=this.ajaxUpdate.bind(this,b);new Ajax.Request(this.dataSource,this.ajaxOptions)}else{this.ajaxOptions.onComplete=this.jsUpdate.bind(this,b);this.dataSource(this.ajaxOptions)}},formQueryHashSQL:function(e,b){var d=this.formQueryHashXML(e,b);Object.extend(d,this.sortParm);for(var j=0;j=this.startPos){var c=this.maxFetchSize+a;b=c-a;if(a==0&&b";var c=this.string2DOM(b);return this.dom2jstable(c)},string2DOM:function(a){var c=null;try{c=new ActiveXObject("Microsoft.XMLDOM");c.async="false";c.loadXML(a)}catch(d){try{var f=new DOMParser();c=f.parseFromString(a,"text/xml")}catch(d){alert(d.message)}}var b=document._importNode(c.childNodes[0],true);return b}};Rico.includeLoaded("ricoLiveGridJSON.js");if(typeof Rico=="undefined"){throw ("LiveGridForms requires the Rico JavaScript framework")}if(typeof RicoUtil=="undefined"){throw ("LiveGridForms requires the RicoUtil object")}if(typeof RicoTranslate=="undefined"){throw ("LiveGridForms requires the RicoTranslate object")}Rico.TableEdit=Class.create({initialize:function(a){Rico.writeDebugMsg("Rico.TableEdit initialize: "+a.tableId);this.grid=a;this.options={maxDisplayLen:20,panelHeight:200,panelWidth:500,hoverClass:"tabHover",selectedClass:"tabSelected",compact:false,RecordName:RicoTranslate.getPhraseById("record"),updateURL:window.location.href,readOnlyColor:"#AAA",showSaveMsg:"errors"};Object.extend(this.options,a.options);this.hasWF2=(document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("WebForms","2.0"));this.menu=a.menu;this.menu.options.dataMenuHandler=this.editMenu.bind(this);this.menu.ignoreClicks();RicoEditControls.atLoad();this.createEditDiv();this.createKeyArray();this.saveMsg=$(a.tableId+"_savemsg");Event.observe(document,"click",this.clearSaveMsg.bindAsEventListener(this),false);this.extraMenuItems=new Array();this.responseHandler=this.processResponse.bind(this);Rico.writeDebugMsg("Rico.TableEdit.initialize complete, hasWF2="+this.hasWF2)},canDragFunc:function(b,a){if(b.componentFromPoint){var d=b.componentFromPoint(a.clientX,a.clientY);if(d!=""&&d!="outside"){return false}}return(b==this.editDiv||b.tagName=="FORM")},createKeyArray:function(){this.keys=[];for(var a=0;a0){return}var a=parseInt(this.options.panelWidth,10);if(this.form){this.form.style.width=(a+10)+"px";if(Prototype.Browser.WebKit){this.editDiv.style.display="block"}this.options.bgColor=Rico.Color.createColorFromBackground(this.form)}this.editDiv.style.display="none";this.options.panelHdrWidth=(Math.floor(a/this.options.panels.length)-4)+"px";this.Accordion=new Rico.TabbedPanel(this.panelHdr.findAll(this.notEmpty),this.panelContent.findAll(this.notEmpty),this.options)},notEmpty:function(a){return typeof(a)!="undefined"},startForm:function(){this.form=document.createElement("form");this.form.onsubmit=function(){return false};this.editDiv.appendChild(this.form);var e=document.createElement("table");var f=e.insertRow(-1);var b=f.insertCell(-1);var d=b.appendChild(this.createButton(RicoTranslate.getPhraseById("saveRecord",this.options.RecordName)));Event.observe(d,"click",this.TESubmit.bindAsEventListener(this),false);b=f.insertCell(-1);d=b.appendChild(this.createButton(RicoTranslate.getPhraseById("cancel")));Event.observe(d,"click",this.cancelEdit.bindAsEventListener(this),false);this.form.appendChild(e);this.hiddenFields=document.createElement("div");this.hiddenFields.style.display="none";this.action=this.appendHiddenField(this.grid.tableId+"__action","");var c,a;for(c=0;c"+b.charAt(0)+""+b.substr(1);a.accessKey=b.charAt(0);return a},createPanel:function(c){var e=false;for(var b=0;b=0;c--){if(this.createPanel(c)){b[c]=this.createFormTable(this.panelContent[c],"tabContent")}}}else{for(c=0;c0){var h=RicoUtil.getContentAsString(k[0],this.grid.buffer.isEncoded);Rico.writeDebugMsg("Data provider returned an error:\n"+h);alert(RicoTranslate.getPhraseById("requestError",h));return null}c=c.getElementsByTagName("response")[0];var a=c.getAttribute("id").slice(0,-8);var j=c.getElementsByTagName("rows")[0];var l=this.grid.buffer.dom2jstable(j);var b=$(a);Rico.writeDebugMsg("selectValuesUpdate: id="+a+" rows="+l.length);for(var f=0;f0){var g=l[f][0];var e=(l[f].length>1)?l[f][1]:g;this.addSelectOption(b,g,e,f)}}if($("textnew__"+a)){this.addSelectOption(b,this.options.TableSelectNew,RicoTranslate.getPhraseById("selectNewVal"))}if(this.panelGroup){setTimeout(this.initPanelGroup.bind(this),50)}},addSelectOption:function(c,e,f,a){switch(c.tagName.toLowerCase()){case"div":var b=RicoUtil.createFormField(c,"input","radio",c.id+"_"+a,c.id);b.value=e;var d=document.createElement("label");d.innerHTML=f;d.htmlFor=b.id;c.appendChild(d);break;case"select":RicoUtil.addSelectOption(c,e,f);break}},clearSaveMsg:function(){if(this.saveMsg){this.saveMsg.innerHTML=""}},addMenuItem:function(c,b,a){this.extraMenuItems.push({menuText:c,menuAction:b,enabled:a})},editMenu:function(d,h,j,e){this.clearSaveMsg();if(this.grid.buffer.sessionExpired==true||this.grid.buffer.startPos<0){return false}this.rowIdx=h;var g=$("pageTitle");var f=g?g.innerHTML:document.title;this.menu.addMenuHeading(f);for(var b=0;b(.*)<\/span>/i)?[RegExp.$2,RegExp.leftContext]:[a,a];default:return["",""]}},setReadOnly:function(k){for(var f=0;f=0;a--){if(b[a].nodeType==1&&b[a].nodeName!="P"&&b[a].nodeName!="DIV"&&b[a].nodeName!="BR"){this.responseDiv.removeChild(b[a])}}d=this.responseDiv.innerHTML.stripTags();f=(d.toLowerCase().indexOf("error")==-1)}if(f&&this.options.showSaveMsg!="full"){this.hideResponse("");this.grid.resetContents();this.grid.buffer.foundRowCount=false;this.grid.buffer.fetch(this.grid.lastRowPos||0);if(this.saveMsg){this.saveMsg.innerHTML=" "+d+" "}}this.processCallback(this.options.onSubmitResponse)},processCallback:function(callback){switch(typeof callback){case"string":eval(callback);break;case"function":callback();break}},ackResponse:function(){this.hideResponse("");this.grid.highlightEnabled=true},cloneRecord:function(){this.displayEditForm("ins")},editRecord:function(){this.displayEditForm("upd")},displayEditForm:function(d){this.grid.highlightEnabled=false;this.menu.cancelmenu();this.hideResponse(RicoTranslate.getPhraseById("saving"));this.grid.outerDiv.style.cursor="auto";this.action.value=d;for(var b=0;be){this.editDiv.style.left=(e-c)+"px"}else{this.editDiv.style.left=(j[0]+1)+"px"}var h=RicoUtil.docScrollTop();var b=this.editDiv.offsetHeight+d;var g=j[1]+this.grid.hdrHt+h;var a=RicoUtil.windowHeight()+h;if(l>=0){g+=(l+1)*this.grid.rowHeight;if(g+b>a){g-=(b+this.grid.rowHeight)}}else{if(g+b>a){g=a-b}}this.processCallback(this.options.formOpen);this.formPopup.openPopup(null,Math.max(g,h));this.editDiv.style.visibility="visible";if(this.initialized){return}var f,k;for(f=0;f0&&a.regexp&&!a.regexp.test(c.value)){return this.validationMsg(c,b,"formInvalidFmt")}switch(a.EntryType.charAt(0)){case"I":j=parseInt(c.value,10);break;case"F":j=parseFloat(c.value);break;case"D":j=new Date();j.setISO8601(c.value);break;default:j=NaN;break}if(typeof a.min!="undefined"&&!isNaN(j)&&ja.max){return this.validationMsg(c,b,"formOutOfRange")}}for(b=0;b -1, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && + navigator.userAgent.indexOf('KHTML') === -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + SelectorsAPI: !!document.querySelector, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div')['__proto__'] && + document.createElement('div')['__proto__'] !== + document.createElement('form')['__proto__'] + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method); + + value.valueOf = method.valueOf.bind(method); + value.toString = method.toString.bind(method); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (Object.isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (!Object.isUndefined(value)) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return !!(object && object.nodeType == 1); + }, + + isArray: function(object) { + return object != null && typeof object == "object" && + 'splice' in object && 'join' in object; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1] + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + defer: function() { + var args = [0.01].concat($A(arguments)); + return this.delay.apply(this, args); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this; + if (str.blank()) return false; + str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.stripTags().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + try { + this._each(function(value) { + iterator.call(context, value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index) + }; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + $A = function(iterable) { + if (!iterable) return []; + // In Safari, only use the `toArray` method if it's not a NodeList. + // A NodeList is a function, has an function `item` property, and a numeric + // `length` property. Adapted from Google Doctype. + if (!(typeof iterable === 'function' && typeof iterable.length === + 'number' && typeof iterable.item === 'function') && iterable.toArray) + return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + }; +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (!Object.isUndefined(value)) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: function(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + // simulating poorly supported hasOwnProperty + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return results.concat(values.map(toQueryPair.curry(key))); + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + else if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); + if (element) this.Element.prototype = element.prototype; +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + element = $(element); + element.style.display = 'none'; + return element; + }, + + show: function(element) { + element = $(element); + element.style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $(element).select("*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return Object.isNumber(expression) ? ancestors[expression] : + Selector.findElement(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? element.descendants()[expression] : + Element.select(element, expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return Object.isNumber(expression) ? previousSiblings[expression] : + Selector.findElement(previousSiblings, expression, index); + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return Object.isNumber(expression) ? nextSiblings[expression] : + Selector.findElement(nextSiblings, expression, index); + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (ancestor.contains) + return ancestor.contains(element) && ancestor !== element; + + while (element = element.parentNode) + if (element == ancestor) return true; + + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value || value == 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = element.getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (Prototype.Browser.Opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName.toUpperCase() == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return element; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return element; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'left': case 'top': case 'right': case 'bottom': + if (proceed(element, 'position') === 'static') return null; + case 'height': case 'width': + // returns '0px' for hidden elements; we want it to return null + if (!Element.visible(element)) return null; + + // returns the border-box dimensions rather than the content-box + // dimensions, so we subtract padding and borders from the value + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + // IE doesn't report offsets correctly for static elements, so we change them + // to "relative" to get the values, then change them back. + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + // IE throws an error if element is not in document + try { element.offsetParent } + catch(e) { return $(document.body) } + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + $w('positionedOffset viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + try { element.offsetParent } + catch(e) { return Element._returnOffset(0,0) } + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + // Trigger hasLayout on the offset parent so that IE6 reports + // accurate offsetTop and offsetLeft values for position: fixed. + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + offsetParent.setStyle({ zoom: 1 }); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap( + function(proceed, element) { + try { element.offsetParent } + catch(e) { return Element._returnOffset(0,0) } + return proceed(element); + } + ); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName.toUpperCase() == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Element#cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if ('outerHTML' in document.createElement('div')) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + if (t) { + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + } else div.innerHTML = html; + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div')['__proto__']) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div')['__proto__']; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(), property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName)['__proto__']; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }, B = Prototype.Browser; + $w('width height').each(function(d) { + var D = d.capitalize(); + if (B.WebKit && !document.evaluate) { + // Safari <3.0 needs self.innerWidth/Height + dimensions[d] = self['inner' + D]; + } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) { + // Opera <9.5 needs document.body.clientWidth/Height + dimensions[d] = document.body['client' + D] + } else { + dimensions[d] = document.documentElement['client' + D]; + } + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum's DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + + if (this.shouldUseSelectorsAPI()) { + this.mode = 'selectorsAPI'; + } else if (this.shouldUseXPath()) { + this.mode = 'xpath'; + this.compileXPathMatcher(); + } else { + this.mode = "normal"; + this.compileMatcher(); + } + + }, + + shouldUseXPath: function() { + if (!Prototype.BrowserFeatures.XPath) return false; + + var e = this.expression; + + // Safari 3 chokes on :*-of-type and :empty + if (Prototype.Browser.WebKit && + (e.include("-of-type") || e.include(":empty"))) + return false; + + // XPath can't do namespaced attributes, nor can it read + // the "checked" property from DOM nodes + if ((/(\[[\w-]*?:|:checked)/).test(e)) + return false; + + return true; + }, + + shouldUseSelectorsAPI: function() { + if (!Prototype.BrowserFeatures.SelectorsAPI) return false; + + if (!Selector._div) Selector._div = new Element('div'); + + // Make sure the browser treats the selector as valid. Test on an + // isolated element to minimize cost of this check. + try { + Selector._div.querySelector(this.expression); + } catch(e) { + return false; + } + + return true; + }, + + compileMatcher: function() { + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + var e = this.expression, results; + + switch (this.mode) { + case 'selectorsAPI': + // querySelectorAll queries document-wide, then filters to descendants + // of the context element. That's not what we want. + // Add an explicit context to the selector if necessary. + if (root !== document) { + var oldId = root.id, id = $(root).identify(); + e = "#" + id + " " + e; + } + + results = $A(root.querySelectorAll(e)).map(Element.extend); + root.id = oldId; + + return results; + case 'xpath': + return document._getElementsByXPath(this.xpath, root); + default: + return this.matcher(root); + } + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: function(m) { + m[1] = m[1].toLowerCase(); + return new Template("[@#{1}]").evaluate(m); + }, + attr: function(m) { + m[1] = m[1].toLowerCase(); + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0)]", + 'checked': "[@checked]", + 'disabled': "[(@disabled) and (@type!='hidden')]", + 'enabled': "[not(@disabled) and (@type!='hidden')]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: +/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, + attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + var _true = Prototype.emptyFunction; + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = _true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._countedByPrototype = Prototype.emptyFunction; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._countedByPrototype) { + n._countedByPrototype = Prototype.emptyFunction; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + var uTagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() === uTagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._countedByPrototype) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || node.firstChild) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._countedByPrototype) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled && (!node.type || node.type !== 'hidden')) + results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); }, + '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); }, + '*=': function(nv, v) { return nv == v || nv && nv.include(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() + + '-').include('-' + (v || "").toUpperCase() + '-'); } + }, + + split: function(expression) { + var expressions = []; + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + return expressions; + }, + + matchElements: function(elements, expression) { + var matches = $$(expression), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._countedByPrototype) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + expressions = Selector.split(expressions.join(',')); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +if (Prototype.Browser.IE) { + Object.extend(Selector.handlers, { + // IE returns comment nodes on getElementsByTagName("*"). + // Filter them out. + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + if (node.tagName !== "!") a.push(node); + return a; + }, + + // IE improperly serializes _countedByPrototype in (inner|outer)HTML. + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node.removeAttribute('_countedByPrototype'); + return nodes; + } + }); +} + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (Object.isUndefined(value)) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + }, + + select: function(element, value) { + if (Object.isUndefined(value)) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + event = Event.extend(event); + + var node = event.target, + type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + // Firefox screws up the "click" event when moving between radio buttons + // via arrow keys. It also screws up the "load" and "error" events on images, + // reporting the document as the target instead of the original image. + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + if (node.nodeType == Node.TEXT_NODE) node = node.parentNode; + return Element.extend(node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + if (!expression) return element; + var elements = [element].concat(element.ancestors()); + return Selector.findElement(elements, expression, 0); + }, + + pointer: function(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0, scrollTop: 0 }; + return { + x: event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)), + y: event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__']; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._prototypeEventID) return element._prototypeEventID[0]; + arguments.callee.id = arguments.callee.id || 1; + return element._prototypeEventID = [++arguments.callee.id]; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event); + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + + // Internet Explorer needs to remove event handlers on page unload + // in order to avoid memory leaks. + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + // Safari has a dummy event handler on page unload so that it won't + // use its bfcache. Safari <= 3.1 has an issue with restoring the "document" + // object when page is returned to via the back button using its bfcache. + if (Prototype.Browser.WebKit) { + window.addEventListener('unload', Prototype.emptyFunction, false); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return Event.extend(event); + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize(), + loaded: false +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + document.loaded = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ricoLG_outerDiv + + + + + + +ricoLG_frozenTabsDiv + + + + + + + + + + + + + + + + + + + +ricoLG_innerDiv + + + +ricoLG_scrollTabsDiv + + + + + + + + + + + + + +ricoLG_scrollDiv + + + + + + + + + + + + + + + + + + + + + + + +ricoLG_table ricoLG_top +ricoLG_left +ricoLG_right + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ricoLG_hdg + + + +
+ + ricoLG_cell + + +
+
+
+
+
+ + + + + + + + + + + +ricoLG_table ricoLG_bottom +ricoLG_left +ricoLG_right + + + + + + + +
+ + + ricoLG_cell + + + +
+ +
+
+ +
+
+
+ + diff --git a/lib/rico/ricoSimpleGrid2xl.xsl b/lib/rico/ricoSimpleGrid2xl.xsl new file mode 100644 index 0000000..d827945 --- /dev/null +++ b/lib/rico/ricoSimpleGrid2xl.xsl @@ -0,0 +1,160 @@ + + + + + + + progid="Excel.Sheet" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + s22 + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/lib/rico/ricoStyles.js b/lib/rico/ricoStyles.js new file mode 100644 index 0000000..7259031 --- /dev/null +++ b/lib/rico/ricoStyles.js @@ -0,0 +1,645 @@ +/* + * Copyright 2005 Sabre Airline Solutions + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + + +Rico.Color = Class.create( +/** @lends Rico.Color# */ +{ +/** + * @class Methods to manipulate color values. + * @constructs + * @param red integer (0-255) + * @param green integer (0-255) + * @param blue integer (0-255) + */ + initialize: function(red, green, blue) { + this.rgb = { r: red, g : green, b : blue }; + }, + + setRed: function(r) { + this.rgb.r = r; + }, + + setGreen: function(g) { + this.rgb.g = g; + }, + + setBlue: function(b) { + this.rgb.b = b; + }, + + setHue: function(h) { + + // get an HSB model, and set the new hue... + var hsb = this.asHSB(); + hsb.h = h; + + // convert back to RGB... + this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); + }, + + setSaturation: function(s) { + // get an HSB model, and set the new hue... + var hsb = this.asHSB(); + hsb.s = s; + + // convert back to RGB and set values... + this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); + }, + + setBrightness: function(b) { + // get an HSB model, and set the new hue... + var hsb = this.asHSB(); + hsb.b = b; + + // convert back to RGB and set values... + this.rgb = Rico.Color.HSBtoRGB( hsb.h, hsb.s, hsb.b ); + }, + + darken: function(percent) { + var hsb = this.asHSB(); + this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.max(hsb.b - percent,0)); + }, + + brighten: function(percent) { + var hsb = this.asHSB(); + this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.min(hsb.b + percent,1)); + }, + + blend: function(other) { + this.rgb.r = Math.floor((this.rgb.r + other.rgb.r)/2); + this.rgb.g = Math.floor((this.rgb.g + other.rgb.g)/2); + this.rgb.b = Math.floor((this.rgb.b + other.rgb.b)/2); + }, + + isBright: function() { + var hsb = this.asHSB(); + return this.asHSB().b > 0.5; + }, + + isDark: function() { + return ! this.isBright(); + }, + + asRGB: function() { + return "rgb(" + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")"; + }, + + asHex: function() { + return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart(); + }, + + asHSB: function() { + return Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b); + }, + + toString: function() { + return this.asHex(); + } + +}); + +/** + * Factory method for creating a color from an RGB string + * @param hexCode a 3 or 6 digit hex string, optionally preceded by a # symbol + * @returns a Rico.Color object + */ +Rico.Color.createFromHex = function(hexCode) { + if(hexCode.length==4) { + var shortHexCode = hexCode; + hexCode = '#'; + for(var i=1;i<4;i++) + hexCode += (shortHexCode.charAt(i) + shortHexCode.charAt(i)); + } + if ( hexCode.indexOf('#') == 0 ) + hexCode = hexCode.substring(1); + if (!hexCode.match(/^[0-9A-Fa-f]{6}$/)) return null; + var red = hexCode.substring(0,2); + var green = hexCode.substring(2,4); + var blue = hexCode.substring(4,6); + return new Rico.Color( parseInt(red,16), parseInt(green,16), parseInt(blue,16) ); +}; + +/** + * Retrieves the background color of an HTML element + * @param elem the DOM element whose background color should be retreived + * @returns a Rico.Color object + */ +Rico.Color.createColorFromBackground = function(elem) { + + if (!elem.style) return new Rico.Color(255,255,255); + var actualColor = Element.getStyle(elem, "background-color"); + + // if color is tranparent, check parent + // Safari returns "rgba(0, 0, 0, 0)", which means transparent + if ( actualColor.match(/^(transparent|rgba\(0,\s*0,\s*0,\s*0\))$/i) && elem.parentNode ) + return Rico.Color.createColorFromBackground(elem.parentNode); + + if (actualColor == null) return new Rico.Color(255,255,255); + + if ( actualColor.indexOf("rgb(") == 0 ) { + var colors = actualColor.substring(4, actualColor.length - 1 ); + var colorArray = colors.split(","); + return new Rico.Color( parseInt( colorArray[0],10 ), + parseInt( colorArray[1],10 ), + parseInt( colorArray[2],10 ) ); + + } + else if ( actualColor.indexOf("#") == 0 ) { + return Rico.Color.createFromHex(actualColor); + } + else + return new Rico.Color(255,255,255); +}; + +/** + * Converts hue/saturation/brightness to RGB + * @returns a 3-element object: r=red, g=green, b=blue. + */ +Rico.Color.HSBtoRGB = function(hue, saturation, brightness) { + + var red = 0; + var green = 0; + var blue = 0; + + if (saturation == 0) { + red = parseInt(brightness * 255.0 + 0.5,10); + green = red; + blue = red; + } + else { + var h = (hue - Math.floor(hue)) * 6.0; + var f = h - Math.floor(h); + var p = brightness * (1.0 - saturation); + var q = brightness * (1.0 - saturation * f); + var t = brightness * (1.0 - (saturation * (1.0 - f))); + + switch (parseInt(h,10)) { + case 0: + red = (brightness * 255.0 + 0.5); + green = (t * 255.0 + 0.5); + blue = (p * 255.0 + 0.5); + break; + case 1: + red = (q * 255.0 + 0.5); + green = (brightness * 255.0 + 0.5); + blue = (p * 255.0 + 0.5); + break; + case 2: + red = (p * 255.0 + 0.5); + green = (brightness * 255.0 + 0.5); + blue = (t * 255.0 + 0.5); + break; + case 3: + red = (p * 255.0 + 0.5); + green = (q * 255.0 + 0.5); + blue = (brightness * 255.0 + 0.5); + break; + case 4: + red = (t * 255.0 + 0.5); + green = (p * 255.0 + 0.5); + blue = (brightness * 255.0 + 0.5); + break; + case 5: + red = (brightness * 255.0 + 0.5); + green = (p * 255.0 + 0.5); + blue = (q * 255.0 + 0.5); + break; + } + } + + return { r : parseInt(red,10), g : parseInt(green,10) , b : parseInt(blue,10) }; +}; + +/** + * Converts RGB value to hue/saturation/brightness + * @param r integer (0-255) + * @param g integer (0-255) + * @param b integer (0-255) + * @returns a 3-element object: h=hue, s=saturation, b=brightness. + * (unlike some HSB documentation which states hue should be a value 0-360, this routine returns hue values from 0 to 1.0) + */ +Rico.Color.RGBtoHSB = function(r, g, b) { + + var hue; + var saturation; + var brightness; + + var cmax = (r > g) ? r : g; + if (b > cmax) + cmax = b; + + var cmin = (r < g) ? r : g; + if (b < cmin) + cmin = b; + + brightness = cmax / 255.0; + if (cmax != 0) + saturation = (cmax - cmin)/cmax; + else + saturation = 0; + + if (saturation == 0) + hue = 0; + else { + var redc = (cmax - r)/(cmax - cmin); + var greenc = (cmax - g)/(cmax - cmin); + var bluec = (cmax - b)/(cmax - cmin); + + if (r == cmax) + hue = bluec - greenc; + else if (g == cmax) + hue = 2.0 + redc - bluec; + else + hue = 4.0 + greenc - redc; + + hue = hue / 6.0; + if (hue < 0) + hue = hue + 1.0; + } + + return { h : hue, s : saturation, b : brightness }; +}; + +/** + * Creates a vertical gradient inside an element + * @param e element where gradient will be created + * @param startColor starting color, either a Rico.Color object or 6-character RGB string + * @param endColor ending color, either a Rico.Color object or 6-character RGB string + */ +Rico.Color.createGradientV = function(e,startColor,endColor) { + var c1=typeof(startColor)=='string' ? Rico.Color.createFromHex(startColor) : startColor; + var c2=typeof(endColor)=='string' ? Rico.Color.createFromHex(endColor) : endColor; + if (Prototype.Browser.IE) { + e.style.filter = "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=\"" + c1.asHex() + "\",EndColorStr=\"" + c2.asHex() + "\")"; + } else { + var colorArray = Rico.Color.createColorPath(c1,c2,Math.min(e.offsetHeight,50)); + var remh=e.offsetHeight,l=colorArray.length; + var div=Rico.Color.createGradientContainer(); + var tmpDOM = document.createDocumentFragment(); + for(var g,h,p=0;p0); + return colorPath; +}; + +Rico.Color.setColorHue = function(originColor,opacityPercent,maskRGB) { + return new Rico.Color( + Math.round(originColor.rgb.r*opacityPercent + maskRGB.rgb.r*(1.0-opacityPercent)), + Math.round(originColor.rgb.g*opacityPercent + maskRGB.rgb.g*(1.0-opacityPercent)), + Math.round(originColor.rgb.b*opacityPercent + maskRGB.rgb.b*(1.0-opacityPercent)) + ); +}; + + +/** + * @namespace + */ +Rico.Corner = { + + round: function(e, options) { + e = $(e); + this._setOptions(options); + var color = this.options.color == "fromElement" ? this._background(e) : this.options.color; + var bgColor = this.options.bgColor == "fromParent" ? this._background(e.parentNode) : this.options.bgColor; + if (Prototype.Browser.Gecko && this.options.useMoz && !this.options.border && Element.getStyle(e,'background-image')=='none') + this._roundCornersGecko(e, color); + else if (typeof(Element.getStyle(e,'-webkit-border-radius'))=='string' && !this.options.border) + this._roundCornersWebKit(e, color); + else + this._roundCornersImpl(e, color, bgColor); + }, + + _roundCornersImpl: function(e, color, bgColor) { + this.options.numSlices = this.options.compact ? 2 : 4; + this.borderColor = this._borderColor(color,bgColor); + if(this.options.border) + this._renderBorder(e,bgColor); + if(this._isTopRounded()) + this._roundTopCorners(e,color,bgColor); + if(this._isBottomRounded()) + this._roundBottomCorners(e,color,bgColor); + }, + + _roundCornersGecko: function(e, color) { + var radius=this.options.compact ? '4px' : '8px'; + if (this._hasString(this.options.corners, "all")) + Element.setStyle(e, {MozBorderRadius:radius}, true); + else { + if (this._hasString(this.options.corners, "top", "tl")) Element.setStyle(e, {MozBorderRadiusTopleft:radius}, true); + if (this._hasString(this.options.corners, "top", "tr")) Element.setStyle(e, {MozBorderRadiusTopright:radius}, true); + if (this._hasString(this.options.corners, "bottom", "bl")) Element.setStyle(e, {MozBorderRadiusBottomleft:radius}, true); + if (this._hasString(this.options.corners, "bottom", "br")) Element.setStyle(e, {MozBorderRadiusBottomright:radius}, true); + } + }, + + _roundCornersWebKit: function(e, color) { + var radius=this.options.compact ? '4px' : '8px'; + if (this._hasString(this.options.corners, "all")) + Element.setStyle(e, {WebkitBorderRadius:radius}, true); + else { + if (this._hasString(this.options.corners, "top", "tl")) Element.setStyle(e, {WebkitBorderTopLeftRadius:radius}, true); + if (this._hasString(this.options.corners, "top", "tr")) Element.setStyle(e, {WebkitBorderTopRightRadius:radius}, true); + if (this._hasString(this.options.corners, "bottom", "bl")) Element.setStyle(e, {WebkitBorderBottomLeftRadius:radius}, true); + if (this._hasString(this.options.corners, "bottom", "br")) Element.setStyle(e, {WebkitBorderBottomRightRadius:radius}, true); + } + }, + + _renderBorder: function(el,bgColor) { + var wrapper=RicoUtil.wrapChildren(el); + var borderValue = "1px solid " + this._borderColor(bgColor); + Element.setStyle(wrapper,{ + borderLeft: borderValue, + borderRight: borderValue, + marginTop: '0px', + marginBottom: '0px', + padding: '1px', // prevents margin collapse + height: '100%' + }); + }, + + _roundTopCorners: function(el, color, bgColor) { + var corner = this._createCorner(bgColor); + for(var i=0 ; i < this.options.numSlices ; i++ ) + corner.appendChild(this._createCornerSlice(color,bgColor,i,"top")); + el.style.paddingTop = '0px'; + el.insertBefore(corner,el.firstChild); + }, + + _roundBottomCorners: function(el, color, bgColor) { + var corner = this._createCorner(bgColor); + for(var i=(this.options.numSlices-1) ; i >= 0 ; i-- ) + corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom")); + el.style.paddingBottom = 0; + el.appendChild(corner); + }, + + _createCorner: function(bgColor) { + var corner = document.createElement("div"); + corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor); + return corner; + }, + + _createCornerSlice: function(color,bgColor, n, position) { + var slice = document.createElement("span"); + + var inStyle = slice.style; + inStyle.backgroundColor = color; + inStyle.display = "block"; + inStyle.height = "1px"; + inStyle.overflow = "hidden"; + inStyle.fontSize = "1px"; + + if ( this.options.border && n == 0 ) { + inStyle.borderTopStyle = "solid"; + inStyle.borderTopWidth = "1px"; + inStyle.borderLeftWidth = "0px"; + inStyle.borderRightWidth = "0px"; + inStyle.borderBottomWidth = "0px"; + inStyle.height = "0px"; // assumes css compliant box model + inStyle.borderColor = this.borderColor; + } + else if(this.borderColor) { + inStyle.borderColor = this.borderColor; + inStyle.borderStyle = "solid"; + inStyle.borderWidth = "0px 1px"; + } + + if ( !this.options.compact && (n == (this.options.numSlices-1)) ) + inStyle.height = "2px"; + + this._setMargin(slice, n, position); + this._setBorder(slice, n, position); + return slice; + }, + + _setOptions: function(options) { + this.options = { + corners : "all", + color : "fromElement", + bgColor : "fromParent", + blend : true, + border : false, + compact : false, + useMoz : true // use native Gecko corners + }; + Object.extend(this.options, options || {}); + if (this._isTransparent()) this.options.blend = false; + }, + + _whichSideTop: function() { + if ( this._hasString(this.options.corners, "all", "top") ) + return ""; + + if ( this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0 ) + return ""; + + if (this.options.corners.indexOf("tl") >= 0) + return "left"; + else if (this.options.corners.indexOf("tr") >= 0) + return "right"; + return ""; + }, + + _whichSideBottom: function() { + if ( this._hasString(this.options.corners, "all", "bottom") ) + return ""; + + if ( this.options.corners.indexOf("bl")>=0 && this.options.corners.indexOf("br")>=0 ) + return ""; + + if(this.options.corners.indexOf("bl") >=0) + return "left"; + else if(this.options.corners.indexOf("br")>=0) + return "right"; + return ""; + }, + + _borderColor : function(color,bgColor) { + if (color == "transparent") return bgColor; + if (this.options.border) return this.options.border; + if (!this.options.blend) return ''; + var cc1 = Rico.Color.createFromHex(bgColor); + var cc2 = Rico.Color.createFromHex(color); + if (cc1==null || cc2==null) { + this.options.blend=false; + return ''; + } + cc1.blend(cc2); + return cc1; + }, + + + _setMargin: function(el, n, corners) { + var marginSize = this._marginSize(n); + var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); + + if ( whichSide == "left" ) { + el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px"; + } + else if ( whichSide == "right" ) { + el.style.marginRight = marginSize + "px"; el.style.marginLeft = "0px"; + } + else { + el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px"; + } + }, + + _setBorder: function(el,n,corners) { + var borderSize = this._borderSize(n); + var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); + if ( whichSide == "left" ) { + el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px"; + } + else if ( whichSide == "right" ) { + el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth = "0px"; + } + else { + el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; + } + if (this.options.border) { + el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; + } + }, + + _marginSize: function(n) { + if ( this._isTransparent() ) + return 0; + + var marginSizes = [ 5, 3, 2, 1 ]; + var blendedMarginSizes = [ 3, 2, 1, 0 ]; + var compactMarginSizes = [ 2, 1 ]; + var smBlendedMarginSizes = [ 1, 0 ]; + + if ( this.options.compact && this.options.blend ) + return smBlendedMarginSizes[n]; + else if ( this.options.compact ) + return compactMarginSizes[n]; + else if ( this.options.blend ) + return blendedMarginSizes[n]; + else + return marginSizes[n]; + }, + + _borderSize: function(n) { + var transparentBorderSizes = [ 5, 3, 2, 1 ]; + var blendedBorderSizes = [ 2, 1, 1, 1 ]; + var compactBorderSizes = [ 1, 0 ]; + var actualBorderSizes = [ 0, 2, 0, 0 ]; + + if ( this.options.compact && (this.options.blend || this._isTransparent()) ) + return 1; + else if ( this.options.compact ) + return compactBorderSizes[n]; + else if ( this.options.blend ) + return blendedBorderSizes[n]; + else if ( this.options.border ) + return actualBorderSizes[n]; + else if ( this._isTransparent() ) + return transparentBorderSizes[n]; + return 0; + }, + + _background: function(elem) { + try { + var actualColor = Element.getStyle(elem, "background-color"); + + // if color is tranparent, check parent + // Safari returns "rgba(0, 0, 0, 0)", which means transparent + if ( actualColor.match(/^(transparent|rgba\(0,\s*0,\s*0,\s*0\))$/i) && elem.parentNode ) + return this._background(elem.parentNode); + + return actualColor == null ? "#ffffff" : actualColor; + } catch(err) { + return "#ffffff"; + } + }, + + _hasString: function(str) { + for(var i=1 ; i= 0) return true; + } + return false; + }, + + _isTransparent: function() { return this.options.color == "transparent"; }, + _isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); }, + _isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); }, + _hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; } +}; + +Rico.includeLoaded('ricoStyles.js'); diff --git a/lib/rico/ricoTree.js b/lib/rico/ricoTree.js new file mode 100644 index 0000000..53f0eb6 --- /dev/null +++ b/lib/rico/ricoTree.js @@ -0,0 +1,315 @@ +// Rico Tree Control +// by Matt Brown +// Oct 2006, rewritten Jan 2008 +// email: dowdybrown@yahoo.com +// leafIcon logic added by Marco Catunda +// Requires prototype.js and ricoCommon.js + +// Data for the tree is obtained via AJAX requests +// Each record in the AJAX response should contain 5 or 6 cells: +// cells[0]=parent node id +// cells[1]=node id +// cells[2]=description +// cells[3]=L/zero (leaf), C/non-zero (container) +// cells[4]=0->not selectable, 1->selectable (use default action), otherwise the node is selectable and cells[4] contains the action +// cells[5]=leafIcon (optional) + + +Rico.TreeControl = Class.create( +/** @lends Rico.TreeControl# */ +{ +/** + * @class Implements a pop-up tree control. + * @extends Rico.Popup + * @constructs + * @param id unique identifier + * @param url data source + * @param options object may contain any of the following:
+ *
nodeIdDisplay
first, last, tooltip, or none? default=none
+ *
showCheckBox
show checkbox next to each item? default=false
+ *
showFolders
show folder icons? default=false
+ *
showPlusMinus
show +/- icons to open/close branches? default=true
+ *
showLines
show vertical lines connecting each level? default=true
+ *
defaultAction
function to call when user clicks on an item, default is to call returnValue method
+ *
height
control height? default=300px
+ *
width
control width? default=300px
+ *
leafIcon
url to img, default=doc.gif ('none'=no leaf icon)
+ *
+ */ + initialize: function(id,url,options) { + Object.extend(this, new Rico.Popup({ignoreClicks:true})); + Object.extend(this.options, { + nodeIdDisplay:'none', + showCheckBox: false, + showFolders: false, + showPlusMinus: true, + showLines: true, + defaultAction: this.nodeClick.bindAsEventListener(this), + height: '300px', + width: '300px', + leafIcon: Rico.imgDir+'doc.gif' + }); + Object.extend(this.options, options || {}); + this.id=id; + this.dataSource=url; + this.close=this.closePopup; + }, + + atLoad : function() { + var imgsrc = ["node.gif","nodelast.gif","folderopen.gif","folderclosed.gif"]; + // preload images + for (var i=0;i1) { + var tdParent=parentNode.getElementsByTagName('td'); + for (var i=0; i0) { + var suffix=isLast && this.options.showLines ? 'last' : ''; + var prefix=this.options.showLines ? 'node' : ''; + if (this.options.showPlusMinus && isContainer) { + var img = document.createElement("img"); + img.name=nodeId; + img.style.cursor='pointer'; + img.onclick=this.clickBranch.bindAsEventListener(this); + img.src=Rico.imgDir+prefix+"p"+suffix+".gif"; + row.insertCell(-1).appendChild(img); + } else if (this.options.showLines) { + var img = document.createElement("img"); + img.src=Rico.imgDir+"node"+suffix+".gif"; + row.insertCell(-1).appendChild(img); + } + if (this.options.showFolders && (isContainer || (leafIcon && leafIcon!='none'))) { + var img = document.createElement("img"); + if (!isContainer) { + img.src=leafIcon; + } else { + img.name=nodeId; + img.style.cursor='pointer'; + img.onclick=this.clickBranch.bindAsEventListener(this); + img.src=Rico.imgDir+"folderclosed.gif"; + } + row.insertCell(-1).appendChild(img); + } + } + if (isSelectable && this.options.showCheckBox) { + var chkbx=document.createElement("input"); + chkbx.type="checkbox"; + chkbx.value=nodeId; + row.insertCell(-1).appendChild(chkbx); + } + + if (isSelectable && !this.options.showCheckBox) { + var span=document.createElement('a'); + if (typeof isSelectable=='string') { + span.href=isSelectable; + } else { + span.href='javascript:void(0)'; + span.onclick=this.options.defaultAction; + } + } else { + var span=document.createElement('p'); + } + span.id=this.domID(nodeId,'Desc'); + span.className='ricoTreeLevel'+level; + switch (this.options.nodeIdDisplay) { + case 'last': nodeDesc+=' ('+nodeId+')'; break; + case 'first': nodeDesc=nodeId+' - '+nodeDesc; break; + case 'tooltip': span.title=nodeId; break; + } + span.appendChild(document.createTextNode(nodeDesc)); + row.insertCell(-1).appendChild(span); + + var parent=parentChildren || this.treeDiv; + parent.appendChild(tab); + parent.appendChild(div); + }, + + nodeClick: function(e) { + var node=Event.element(e); + if (this.returnValue) { + var t=this.domID('','Desc'); + this.returnValue(node.id.substr(t.length),node.innerHTML); + } + this.close(); + }, + + saveSelection: function(e) { + if (this.returnValue) { + this.returnValue(this.getCheckedItems()); + } + this.close(); + }, + + getCheckedItems: function() { + var inp=this.treeDiv.getElementsByTagName('input'); + var vals=[]; + for (var i=0; i