Moved rico.js to minsrc and is now part of rico_min.js. Files are now sent to the...
authorMatt Brown <dowdybrown@yahoo.com>
Sun, 26 Jun 2011 06:27:43 +0000 (06:27 +0000)
committerMatt Brown <dowdybrown@yahoo.com>
Sun, 26 Jun 2011 06:27:43 +0000 (06:27 +0000)
All fixed-point css styles have been eliminated, so all widgets can zoom appropriately.

Eliminated a bug in the jquery and ext bridge files in the addclass method - existing class names can now longer be added again to a DOM object. This was causing mulitple issues with the calendar.

Localization can now be changed by the user in the .net examples.

git-svn-id: svn://svn.code.sf.net/p/openrico/code/trunk/rico3@90 53df2df2-7ab5-4331-af62-ea79255fa4e2

42 files changed:
bin/Rico.dll
bin/Rico.xml
examples/asp/ex2editfilter.asp
examples/asp/index.html
examples/asp/widgets.asp
examples/dotnet/RicoDbViewer.aspx
examples/dotnet/menu.aspx
examples/dotnet/widgets.aspx
examples/menu.js
examples/welcome.html
minsrc/rico.js [new file with mode: 0644]
minsrc/rico3Min.bat
minsrc/ricoCalendar.js
minsrc/ricoGridCommon.js
minsrc/ricoLiveGrid.js
minsrc/ricoLocale_en.js
minsrc/ricoUI.js
plugins/asp/LoadRicoClient.asp
ricoClient/css/coffee-with-milk.css
ricoClient/css/grayedout.css
ricoClient/css/greenHdg.css
ricoClient/css/rico.css
ricoClient/css/seaglass.css
ricoClient/css/warmfall.css
ricoClient/js/rico.js [deleted file]
ricoClient/js/rico2doj.js
ricoClient/js/rico2ext.js
ricoClient/js/rico2glo.js
ricoClient/js/rico2jqu.js
ricoClient/js/rico2moo.js
ricoClient/js/rico2pro.js
ricoClient/js/ricoLocale_de.js
ricoClient/js/ricoLocale_es.js
ricoClient/js/ricoLocale_fr.js
ricoClient/js/ricoLocale_it.js
ricoClient/js/ricoLocale_ja.js
ricoClient/js/ricoLocale_ko.js
ricoClient/js/ricoLocale_pt.js
ricoClient/js/ricoLocale_ru.js
ricoClient/js/ricoLocale_uk.js
ricoClient/js/ricoLocale_zh.js
ricoClient/js/rico_min.js

index 9324592..6d6fa1a 100644 (file)
Binary files a/bin/Rico.dll and b/bin/Rico.dll differ
index cbc7804..d0f757a 100644 (file)
@@ -358,8 +358,6 @@ Rico
  Adds a new column to grid, returns column index\r
  </summary>\r
        <param name="ColumnObj"></param>\r
-       <returns></returns>\r
-       <remarks></remarks>\r
 </member><member name="T:Rico.LiveGrid">\r
        <summary>\r
  Class to define a LiveGrid\r
@@ -404,6 +402,10 @@ Rico
        <summary>\r
  Height of one line of text in ems. Default is 1.2, which should be fine for almost all situations.\r
  </summary>\r
+</member><member name="F:Rico.GridBase.windowResize">\r
+       <summary>\r
+ Resize grid when browser window is resized? Default is true.\r
+ </summary>\r
 </member><member name="P:Rico.GridBase.menuEvent">\r
        <summary>\r
  Specifies when the grid's popup menu should be invoked \r
@@ -480,6 +482,11 @@ Rico
        <summary>\r
  Specifies horizontal alignment: Left, Right, Center, or NotSet (default)\r
  </summary>\r
+</member><member name="P:Rico.StyleBase.Overflow">\r
+       <summary>\r
+ Normally, overflowed content is hidden, but this allows content in the cell to scroll.\r
+ Only applies to the grid, not to exports.\r
+ </summary>\r
 </member><member name="P:Rico.StyleBase.CssStyle">\r
        <summary>\r
  Used internally. Returns the style properties as a css string.\r
@@ -565,7 +572,6 @@ Rico
  Background image for grid headings and window titles.\r
  Should be left unset, as it is used only for the grayedout theme (in which case it is set automatically).\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.BaseLib">\r
        <summary>\r
  The base Javascript library to load from http://ajax.googleapis.com/ajax/libs/, possible values include:\r
@@ -586,18 +592,15 @@ Rico
                </list>\r
                <para>Default value is "proto_min", which loads prototype 1.7 from the server control.</para>\r
        </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.Logging">\r
        <summary>\r
  Enable Javascript console logging? Useful for debugging. Default is false.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.Language">\r
        <summary>\r
  Best left unset, in which case language will be set automatically based on request's HTTP_ACCEPT_LANGUAGE\r
  However, if you want to present the same locale settings to all users, then you can set this value to force the desired locale.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.LoadBaseLib">\r
        <summary>\r
  Load base Javascript library (prototype, jQuery, etc)?\r
@@ -605,34 +608,27 @@ Rico
  Set to false if library is being loaded another way. In this case, a BaseLib value is still required to indicate\r
  which library Rico should connect to.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.Striping">\r
        <summary>\r
  Apply row striping to LiveGrids? Default is true. Applies only when themes are used.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.SupportedLangs">\r
        <summary>\r
  Comma separated list of 2 letter locales that Rico supports.\r
  Do not set unless you have developed your own locale file.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="F:Rico.LoadClient.jQueryThemePath">\r
        <summary>\r
  URL to load jQuery themes from.\r
  Default is http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/\r
  Override this value if you have a jQuery theme on your own server.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="P:Rico.LoadClient.LoadedLanguage">\r
        <summary>\r
  Returns the 2 character string representing the Rico locale file that was actually used on the client.\r
  If there is no match between the requested languages and the available locale files, then english is used.\r
  Only available during the render phase.\r
  </summary>\r
-       <value></value>\r
-       <returns></returns>\r
-       <remarks></remarks>\r
 </member><member name="P:Rico.LoadClient.checkQueryString">\r
        <summary>\r
  Load settings from QueryString?  true for demo, false for anything else. Default is false.\r
@@ -652,14 +648,12 @@ Rico
                </list>\r
                <para>Boolean values in web.config should be the strings "true" or "1" for true, and "false" or "0" for false.</para>\r
        </summary>\r
-</member><member name="M:Rico.LoadClient.InitLiveGrids">\r
+</member><member name="M:Rico.LoadClient.InitLiveGrids(System.Web.UI.HtmlTextWriter)">\r
        <summary>\r
  Initialize all grids on the page\r
  Initialize grids with fixed # of rows first,\r
  then initialize grids with variable # of rows\r
  </summary>\r
-       <returns>javascript to initialize grids</returns>\r
-       <remarks></remarks>\r
 </member><member name="P:Rico.LoadClient.jTheme">\r
        <summary>\r
  Set theme to one of the jQuery Themeroller themes. Default is no theme.\r
@@ -682,7 +676,6 @@ Rico
        <summary>\r
  Loads the various Javascript, CSS, and image files required to make Rico function.\r
  </summary>\r
-       <remarks></remarks>\r
 </member><member name="P:Rico.My.Resources.Resources.ResourceManager">\r
        <summary>\r
   Returns the cached ResourceManager instance used by this class.\r
index 3e39f11..e278f92 100644 (file)
@@ -75,7 +75,7 @@ sub DefineFields()
   dim colnum,LookupSQL\r
   'oForm.options("showSaveMsg")="full"\r
   'oForm.DebugFlag=true\r
-  oForm.options("FilterLocation")=-1\r
+  oForm.options("AutoFilter")=true\r
   oForm.options("panelWidth")=500\r
   oForm.options("frozenColumns")=1\r
   oForm.options("menuEvent")="click"\r
index 14080b7..c897ae4 100644 (file)
@@ -5,7 +5,7 @@
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 </HEAD>\r
 <frameset cols="300, *">\r
-  <frame name="menu" src="menu.html">\r
+  <frame name="menu" src="menu.asp">\r
   <frame name="content" src="../welcome.html" scrolling="yes">\r
 </frameset>\r
 </html>\r
index 054e3de..0704495 100644 (file)
@@ -39,7 +39,7 @@ Rico.onLoad( function() {
   for (var i=0; i<links.length; i++) {\r
     links[i].onclick=themeClick;\r
   }\r
-  dialog=new Rico.Window('',{height:'250px',width:'300px',overflow:'auto'}, 'dialog');\r
+  dialog=new Rico.Window('',{height:'250px',width:'300px',overflow:'auto'}, 'GettysburgContent');\r
 });\r
 \r
 function openWindow(btn) {\r
@@ -51,10 +51,13 @@ function openWindow(btn) {
 <link href="../demo.css" type="text/css" rel="stylesheet" />\r
 <style type="text/css">\r
 #accExample {\r
-  width: 350px;\r
+  width: 25em;\r
 }\r
 #tabsExample {\r
-  width: 450px;\r
+  width: 25em;\r
+}\r
+body > div.ui-dialog {\r
+  font-size: 80%;\r
 }\r
 div.ricoLG_cell {\r
   white-space:nowrap;\r
@@ -64,7 +67,7 @@ div.ricoLG_cell {
 </head>\r
 \r
 \r
-<body style="font-size:80%;">\r
+<body>\r
   \r
 <div id='explanation'>\r
 Base Library: \r
@@ -428,7 +431,7 @@ Department of Economic and Social Affairs of the United Nations Secretariat</a>
 <h2>Rico Dialog Window</h2>\r
 \r
 <p><button onclick='openWindow(this)'>Open Dialog Window</button>\r
-<div id='dialog' title='The Gettysburg Address'>\r
+<div id='GettysburgContent' title='The Gettysburg Address'>\r
 <p>Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal. \r
 <p>Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this. \r
 <p>But, in a larger sense, we can not dedicate -- we can not consecrate -- we can not hallow -- this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us -- that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion -- that we here highly resolve that these dead shall not have died in vain -- that this nation, under God, shall have a new birth of freedom -- and that government of the people, by the people, for the people, shall not perish from the earth. \r
@@ -438,11 +441,7 @@ Department of Economic and Social Affairs of the United Nations Secretariat</a>
 \r
 <h2>Rico Calendar</h2>\r
 \r
-<table border='0' cellpadding='0' cellspacing='0'>\r
-<tr>\r
-<td id="ricoCal" style='position:relative;'></td>\r
-</tr>\r
-</table>\r
+<div id="ricoCal"></div>\r
 \r
 </body>\r
 </html>\r
index 639eb2d..e0c122b 100644 (file)
@@ -1,5 +1,6 @@
 <%@ Page Language="VB" ResponseEncoding="iso-8859-1" Debug="true" %>\r
 <%@ Import Namespace="System.Data" %>\r
+<%@ Import Namespace="Rico" %>\r
 <%@ Register TagPrefix="My" TagName="dbLib" Src="dbConnect.ascx" %>\r
 <My:dbLib id='app' runat='server' />\r
 \r
@@ -10,8 +11,8 @@ Sub Page_Load(Sender As object, e As EventArgs)
   if app.OpenDB() then\r
     \r
     select case app.dbDialect\r
-      case "Access": restrictions(3)="TABLE"\r
-      case else:     restrictions(3)="BASE TABLE"\r
+      case dbDialects.Access: restrictions(3)="TABLE"\r
+      case else:              restrictions(3)="BASE TABLE"\r
     end select\r
     \r
     TableList.DataSource = app.dbConnection.GetSchema ("Tables", restrictions)\r
index 13c817a..184b793 100644 (file)
@@ -1,11 +1,10 @@
-<%@ Page Language="VB" ResponseEncoding="iso-8859-1" %>\r
+<%@ Page Language="VB" ResponseEncoding="utf-8" %>\r
 <%@ Register TagPrefix="Rico" Assembly="Rico" NameSpace="Rico" %>\r
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
 <html>\r
 <head>\r
 <title>Rico 3.0</title>\r
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\r
-<base target="content">\r
 \r
 <Rico:LoadClient runat='server' />\r
 \r
@@ -29,11 +28,12 @@ ul li {
 </div>
 \r
 <div class='top'>\r
-<form action='' method='get' id='form1'>\r
+<form action='' method='get' id='form1' target='content'>\r
 <ul>\r
 <li id='demolist'>Example: <span id='demospan'></span>\r
 <li>Theme: <span id='themespan'></span><input type='hidden' name='theme' id='theme' value=''>\r
 <li>Base Lib: <span id='libspan'></span><input type='hidden' name='lib' id='lib' value=''>\r
+<li>Locale: <span id='langspan'>Automatic</span><input type='hidden' name='lang' id='lang' value=''>\r
 <li><input type='checkbox' name='log'>&nbsp; Enable logging\r
 </ul>\r
 </form>\r
@@ -63,6 +63,7 @@ ul li {
 <li><a id="demo_simpleNumbersDates.aspx">SimpleGrid - number and date formats</a>\r
 <li><a id="demo_tree1.aspx">Tree control</a>\r
 <li><a id="demo_RicoDbViewer.aspx">Northwind data browser</a>\r
+<li><a id="demo_widgetsRTL.aspx">Rico Widgets-RTL</a>\r
 </ul>\r
   </div>\r
 </div>\r
@@ -181,7 +182,6 @@ ul li {
 <li><a id='lib_jquery/1.6/jquery.min.js'>jQuery 1.6</a>\r
 <li><a id='lib_mootools/1.2/mootools-yui-compressed.js'>MooTools 1.2</a>\r
 <li><a id='lib_mootools/1.3/mootools-yui-compressed.js'>MooTools 1.3</a>\r
-<li><a id='lib_dojo/1.4/dojo/dojo.xd.js'>dojo 1.4</a>\r
 <li><a id='lib_dojo/1.5/dojo/dojo.xd.js'>dojo 1.5</a>\r
 <li><a id='lib_dojo/1.6/dojo/dojo.xd.js'>dojo 1.6</a>\r
 <li><a id='lib_ext-core/3.0/ext-core.js'>Ext 3.0</a>\r
@@ -190,5 +190,24 @@ ul li {
   </div>\r
 </div>\r
 \r
+<div>\r
+  <div>Choose the Locale</div>\r
+  <div>\r
+<ul>\r
+<li><a id='lang_en'>English</a>\r
+<li><a id='lang_fr'>French</a>\r
+<li><a id='lang_it'>Italian</a>\r
+<li><a id='lang_es'>Spanish</a>\r
+<li><a id='lang_pt'>Portugese</a>\r
+<li><a id='lang_de'>German</a>\r
+<li><a id='lang_ru'>Russian</a>\r
+<li><a id='lang_uk'>Ukranian</a>\r
+<li><a id='lang_zh'>Chinese</a>\r
+<li><a id='lang_ko'>Korean</a>\r
+<li><a id='lang_ja'>Japanese</a>\r
+</ul>\r
+  </div>\r
+</div>\r
+\r
 </div>\r
 </body></html>\r
index ed008c9..ead94d3 100644 (file)
@@ -1,10 +1,10 @@
-<%@ Page Language="VB" ResponseEncoding="iso-8859-1" Debug="true" validateRequest="false" %>\r
+<%@ Page Language="VB" ResponseEncoding="utf-8" Debug="true" validateRequest="false" %>\r
 <%@ Register TagPrefix="Rico" Assembly="Rico" NameSpace="Rico" %>\r
 \r
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
 <html>\r
 <head>\r
-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\r
+<meta http-equiv="content-type" content="text/html; charset=utf-8">\r
 <title>Rico widgets styled user-selectable themes</title>\r
 \r
 <Rico:LoadClient checkQueryString='true' runat='server' />\r
@@ -32,17 +32,20 @@ function openWindow(btn) {
 <link href="../demo.css" type="text/css" rel="stylesheet" />\r
 <style type="text/css">\r
 #accExample {\r
-  width: 350px;\r
+  width: 25em;\r
 }\r
 #tabsExample {\r
-  width: 450px;\r
+  width: 25em;\r
+}\r
+body > div.ui-dialog {\r
+  font-size: 80%;\r
 }\r
 </style>\r
 \r
 </head>\r
 \r
 \r
-<body style="font-size:80%;">\r
+<body>\r
 \r
 <div id='explanation'>\r
 Base Library:\r
@@ -421,9 +424,9 @@ Department of Economic and Social Affairs of the United Nations Secretariat</a>
 <h2>Rico Calendar</h2>\r
 \r
 <table border='0' cellpadding='0' cellspacing='0'>\r
-<tr>\r
-<td id="ricoCal" style='position:relative;'></td>\r
-</tr>\r
+<tr><td>\r
+<div id="ricoCal" style='position:relative;'></div>\r
+</td></tr>\r
 </table>\r
 \r
 </body>\r
index d7b5c2e..d067deb 100644 (file)
@@ -37,8 +37,10 @@ function processClick(e) {
   //alert(elem.tagName+' '+elem.id);\r
   setParm(elem);\r
   var form=document.forms[0];\r
-  if (!form.action) return;\r
-  //alert(form.id+': '+form.action);\r
+  if (!form.action) {\r
+    alert('Select an example first!');\r
+    return;\r
+  }\r
   // IE6 requires a delay\r
   setTimeout(function() { form.submit(); return false; }, 20);\r
 }\r
@@ -51,7 +53,7 @@ function setParm(elem) {
   //alert(prefix+' * '+suffix);\r
   var form=document.forms[0];\r
   if (prefix=='demo') {\r
-    form.action=suffix;\r
+    form.setAttribute("action", suffix);\r
   } else {\r
     Rico.$(prefix).value=suffix;\r
   }\r
index 44bee13..af86918 100644 (file)
@@ -58,14 +58,15 @@ or <a href="http://www.bbc.co.uk/glow/" target="_top">BBC Glow</a>.
 <li>Event model, Ajax model, Animation model, and CSS selector model tied to the base library, but adapters
 provide common calling conventions (since Prototype does not include animation support,
 the adapter for Prototype provides this support).
-<li>pop-up "windows" (div's) and menus with shadows
+<li>pop-up "windows", calendars, trees, color-pickers, and menus with shadows
 <li>scrolling grids with frozen columns and headings that can be
 populated with static content or dynamically loaded via AJAX.
 <li>localization support functions, with calendars and standard grid menus provided in 
 English, French, German, Italian, Portugese, Spanish, Chinese, Japanese, Korean, Russian, and Ukranian
 <li>number and date formatting
 <li>A variety of Rico themes are included, or you can use <a href="http://jqueryui.com/themeroller/">jQuery Themeroller</a> themes, 
-or you can create your own
+or you can create your own. You can use any theme, with any base library, with any supported browser (the jQuery library is not required to use the
+Themeroller themes).
 <li>Console logging to support debugging
 </ul>
 </p>
diff --git a/minsrc/rico.js b/minsrc/rico.js
new file mode 100644 (file)
index 0000000..73ecc75
--- /dev/null
@@ -0,0 +1,795 @@
+/*
+ *  (c) 2005-2011 Richard Cowin (http://openrico.org)
+ *  (c) 2005-2011 Matt Brown (http://dowdybrown.com)
+ *
+ *  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.Version='3.0b2';
+Rico.theme={};
+Rico.onLoadCallbacks=[];
+Rico.windowIsLoaded=false;
+Rico.inputtypes={search: 0, number: 0, range: 0, color: 0, tel: 0, url: 0, email: 0, date: 0, month: 0, week: 0, time: 0, datetime: 0, 'datetime-local': 0};
+
+// called by the document onload event
+Rico.windowLoaded=function() {
+  this.windowIsLoaded=true;
+  if (typeof Rico_CONFIG == 'object') {
+    var el = document.createElement('style');
+    document.getElementsByTagName('head')[0].appendChild(el);
+    if (!window.createPopup) { /* For Safari */
+      el.appendChild(document.createTextNode(''));
+    }
+    var s = document.styleSheets[document.styleSheets.length - 1];
+    this.addCssBackgroundRule(s,'.rico-icon',Rico_CONFIG.imgIcons,'no-repeat');
+    this.addCssBackgroundRule(s,'.ricoLG_Resize',Rico_CONFIG.imgResize,'repeat');
+    if (Rico_CONFIG.imgHeading) {
+      var repeat='repeat-x';
+      var pos='left center';
+      this.addCssBackgroundRule(s,'tr.ricoLG_hdg th',Rico_CONFIG.imgHeading,repeat,pos);
+      this.addCssBackgroundRule(s,'tr.ricoLG_hdg td',Rico_CONFIG.imgHeading,repeat,pos);
+      this.addCssBackgroundRule(s,'table.ricoLiveGrid thead td',Rico_CONFIG.imgHeading,repeat,pos);
+      this.addCssBackgroundRule(s,'table.ricoLiveGrid thead th',Rico_CONFIG.imgHeading,repeat,pos);
+      this.addCssBackgroundRule(s,'.ricoTitle',Rico_CONFIG.imgHeading,repeat,pos);
+      this.addCssBackgroundRule(s,'.Rico_accTitle',Rico_CONFIG.imgHeading,repeat,pos);
+    }
+
+    if (Rico_CONFIG.enableLogging) this.enableLogging();
+    if (Rico_CONFIG.enableHTML5) this._CheckInputTypes();
+  }
+  Rico.writeDebugMsg=Rico.log;  // for backwards compatibility
+  Rico.log('Processing callbacks');
+  while (this.onLoadCallbacks.length > 0) {
+    var callback=this.onLoadCallbacks.shift();
+    if (callback) callback();
+  }
+};
+
+Rico.addCssBackgroundRule=function(sheet,selector,imageUrl,repeat,position) {
+  if (!imageUrl) return;
+  this.addCssRule(sheet,selector,"background-image:url('"+imageUrl+"')");
+  this.addCssRule(sheet,selector,"background-repeat:"+repeat);
+  if (position) this.addCssRule(sheet,selector,"background-position:"+position);
+};
+
+Rico.addCssRule=function(sheet,selector,rule) {
+  if (sheet.addRule) {
+    sheet.addRule(selector, rule);
+  } else if (sheet.insertRule) {
+    sheet.insertRule (selector+" { "+rule+" }", 0);
+  } else {
+    alert('unable to add rule: '+rule);
+  }
+};
+
+// check for availability of HTML5 input types
+Rico._CheckInputTypes=function() {
+  var i = document.createElement("input");
+  for (var itype in this.inputtypes) {
+    i.setAttribute("type", "text");
+    i.setAttribute("type", itype);
+    this.inputtypes[itype]=(i.type !== "text");
+  }
+};
+
+Rico.onLoad=function(callback,frontOfQ) {
+  if (this.windowIsLoaded)
+    callback();
+  else if (frontOfQ)
+    this.onLoadCallbacks.unshift(callback);
+  else
+    this.onLoadCallbacks.push(callback);
+};
+
+Rico.isKonqueror=navigator.userAgent.toLowerCase().indexOf("konqueror") > -1;
+Rico.isIE=!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1);
+Rico.isOpera=navigator.userAgent.indexOf('Opera') > -1;
+Rico.isWebKit=navigator.userAgent.indexOf('AppleWebKit/') > -1;
+Rico.isGecko=navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') === -1;
+Rico.ieVersion=/MSIE (\d+\.\d+);/.test(navigator.userAgent) ? new Number(RegExp.$1) : null;
+
+// logging funtions
+
+Rico.startTime=new Date();
+
+Rico.timeStamp=function() {
+  var stamp = new Date();
+  return (stamp.getTime()-this.startTime.getTime())+": ";
+};
+
+Rico.setDebugArea=function(id, forceit) {
+  if (!this.debugArea || forceit) {
+    var newarea=document.getElementById(id);
+    if (!newarea) return;
+    this.debugArea=newarea;
+    newarea.value='';
+  }
+};
+
+Rico.log=function() {};
+
+Rico.enableLogging=function() {
+  if (this.debugArea) {
+    this.log = function(msg, resetFlag) {
+      if (resetFlag) this.debugArea.value='';
+      this.debugArea.value+=this.timeStamp()+msg+"\n";
+    };
+  } else if (window.console) {
+    if (window.console.firebug)
+      this.log = function(msg) { window.console.log(this.timeStamp(),msg); };
+    else
+      this.log = function(msg) { window.console.log(this.timeStamp()+msg); };\r
+  } else if (window.opera) {
+    this.log = function(msg) { window.opera.postError(this.timeStamp()+msg); };
+  }
+};
+
+Rico.$=function(e) {
+  return typeof e == 'string' ? document.getElementById(e) : e;
+};
+
+Rico.runLater=function() {
+  var args = Array.prototype.slice.call(arguments);
+  var msec = args.shift();
+  var object = args.shift();
+  var method = args.shift();
+  return setTimeout(function() { object[method].apply(object,args); },msec);
+};
+
+Rico.visible=function(element) {
+  return Rico.getStyle(element,"display") != 'none';
+};
+
+Rico.show=function(element) {
+  element.style.display = '';
+};
+
+Rico.hide=function(element) {
+  element.style.display = 'none';
+};
+
+Rico.toggle=function(element) {
+  element.style.display = element.style.display == 'none' ? '' : 'none';
+};
+
+// ltr or rtl
+Rico.direction=function(element) {
+  return (Rico.getStyle(element,'direction') || 'ltr').toLowerCase();
+};
+
+Rico.viewportOffset=function(element) {
+  var offset=Rico.cumulativeOffset(element);
+  offset.left -= this.docScrollLeft();
+  offset.top -= this.docScrollTop();
+  return offset;
+};
+
+/**
+ * Return text within an html element
+ * @param el DOM node
+ * @param xImg true to exclude img tag info
+ * @param xForm true to exclude input, select, and textarea tags
+ * @param xClass exclude elements with a class name of xClass
+ */
+Rico.getInnerText=function(el,xImg,xForm,xClass) {
+  switch (typeof el) {
+    case 'string': return el;
+    case 'undefined': return el;
+    case 'number': return el.toString();
+  }
+  var cs = el.childNodes;
+  var l = cs.length;
+  var str = "";
+  for (var i = 0; i < l; i++) {
+    switch (cs[i].nodeType) {
+    case 1: //ELEMENT_NODE
+      if (this.getStyle(cs[i],'display')=='none') continue;
+      if (xClass && this.hasClass(cs[i],xClass)) continue;
+      switch (cs[i].tagName.toLowerCase()) {
+        case 'img':   if (!xImg) str += cs[i].alt || cs[i].title || cs[i].src; break;
+        case 'input': if (!xForm && !cs[i].disabled && cs[i].type.toLowerCase()=='text') str += cs[i].value; break;
+        case 'select': if (!xForm && cs[i].selectedIndex>=0) str += cs[i].options[cs[i].selectedIndex].text; break;
+        case 'textarea': if (!xForm && !cs[i].disabled) str += cs[i].value; break;
+        default:      str += this.getInnerText(cs[i],xImg,xForm,xClass); break;
+      }
+      break;
+    case 3: //TEXT_NODE
+      str += cs[i].nodeValue;
+      break;
+    }
+  }
+  return str;
+};
+
+/**
+ * Return value of a node in an XML response.
+ * For Konqueror 3.5, isEncoded must be true.
+ */
+Rico.getContentAsString=function( parentNode, isEncoded ) {
+  if (isEncoded) return this._getEncodedContent(parentNode);
+  if (typeof parentNode.xml != 'undefined') return this._getContentAsStringIE(parentNode);
+  return this._getContentAsStringMozilla(parentNode);
+};
+
+Rico._getEncodedContent=function(parentNode) {
+  if (parentNode.innerHTML) return parentNode.innerHTML;
+  switch (parentNode.childNodes.length) {
+    case 0:  return "";
+    case 1:  return parentNode.firstChild.nodeValue;
+    default: return parentNode.childNodes[1].nodeValue;
+  }
+};
+
+Rico._getContentAsStringIE=function(parentNode) {
+  var contentStr = "";
+  for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
+     var n = parentNode.childNodes[i];
+     contentStr += (n.nodeType == 4) ? n.nodeValue : n.xml;
+  }
+  return contentStr;
+};
+
+Rico._getContentAsStringMozilla=function(parentNode) {
+   var xmlSerializer = new XMLSerializer();
+   var contentStr = "";
+   for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
+        var n = parentNode.childNodes[i];
+        if (n.nodeType == 4) { // CDATA node
+            contentStr += n.nodeValue;
+        }
+        else {
+          contentStr += xmlSerializer.serializeToString(n);
+      }
+   }
+   return contentStr;
+};
+
+/**
+ * @param n a number (or a string to be converted using parseInt)
+ * @returns the integer value of n, or 0 if n is not a number
+ */
+Rico.nan2zero=function(n) {
+  if (typeof(n)=='string') n=parseInt(n,10);
+  return isNaN(n) || typeof(n)=='undefined' ? 0 : n;
+};
+
+Rico.stripTags=function(s) {
+  return s.replace(/<\/?[^>]+>/gi, '');
+};
+
+Rico.truncate=function(s,length) {
+  return s.length > length ? s.substr(0, length - 3) + '...' : s;
+};
+
+Rico.zFill=function(n,slen, radix) {
+  var s=n.toString(radix || 10);
+  while (s.length<slen) s='0'+s;
+  return s;
+};
+
+Rico.keys=function(obj) {
+  var objkeys=[];
+  for(var k in obj)
+    objkeys.push[k];
+  return objkeys;
+};
+
+/**
+ * @param e event object
+ * @returns the key code stored in the event
+ */
+Rico.eventKey=function(e) {
+  if( typeof( e.keyCode ) == 'number'  ) {
+    return e.keyCode; //DOM
+  } else if( typeof( e.which ) == 'number' ) {
+    return e.which;   //NS 4 compatible
+  } else if( typeof( e.charCode ) == 'number'  ) {
+    return e.charCode; //also NS 6+, Mozilla 0.9+
+  }
+  return -1;  //total failure, we have no way of obtaining the key code
+};
+
+Rico.eventLeftClick=function(e) {
+  return (((e.which) && (e.which == 1)) ||
+          ((e.button) && (e.button == 1)));
+};
+
+Rico.eventRelatedTarget=function(e) {
+  return e.relatedTarget;
+};
+
+  /**
+ * Return the previous sibling that has the specified tagName
+ */
+ Rico.getPreviosSiblingByTagName=function(el,tagName) {
+   var sib=el.previousSibling;
+   while (sib) {
+     if ((sib.tagName==tagName) && (sib.style.display!='none')) return sib;
+     sib=sib.previousSibling;
+   }
+   return null;
+ };
+
+/**
+ * Return the parent of el that has the specified tagName.
+ * @param el DOM node
+ * @param tagName tag to search for
+ * @param className optional
+ */
+Rico.getParentByTagName=function(el,tagName,className) {
+  var par=el;
+  tagName=tagName.toLowerCase();
+  while (par) {
+    if (par.tagName && par.tagName.toLowerCase()==tagName) {
+      if (!className || par.className.indexOf(className)>=0) return par;
+    }
+       par=par.parentNode;
+  }
+  return null;
+};
+
+/**
+ * Wrap the children of a DOM element in a new element
+ * @param el the element whose children are to be wrapped
+ * @param cls class name of the wrapper (optional)
+ * @param id id of the wrapper (optional)
+ * @param wrapperTag type of wrapper element to be created (optional, defaults to DIV)
+ * @returns new wrapper element
+ */
+Rico.wrapChildren=function(el,cls,id,wrapperTag) {
+  var wrapper = document.createElement(wrapperTag || 'div');
+  if (id) wrapper.id=id;
+  if (cls) wrapper.className=cls;
+  while (el.firstChild) {
+    wrapper.appendChild(el.firstChild);
+  }
+  el.appendChild(wrapper);
+  return wrapper;
+};
+
+/**
+ * Positions ctl over icon
+ * @param ctl (div with position:absolute)
+ * @param icon element (img, button, etc) that ctl should be displayed next to
+ */
+Rico.positionCtlOverIcon=function(ctl,icon) {
+  icon=this.$(icon);
+  var offsets=this.cumulativeOffset(icon);
+  var scrTop=this.docScrollTop();
+  var winHt=this.windowHeight();
+  if (ctl.style.display=='none') ctl.style.display='block';
+  //var correction=this.isIE ? 1 : 2;  // based on a 1px border
+  var correction=2;  // based on a 1px border
+  var lpad=this.nan2zero(this.getStyle(icon,'paddingLeft'));
+  ctl.style.left = (offsets.left+lpad+correction)+'px';
+  var newTop=offsets.top + correction;// + scrTop;
+  var ctlht=ctl.offsetHeight;
+  var iconht=icon.offsetHeight;
+  var margin=10;  // account for shadow
+  if (newTop+iconht+ctlht+margin < winHt+scrTop) {
+    newTop+=iconht;  // display below icon
+  } else {
+    newTop=Math.max(newTop-ctlht,scrTop);  // display above icon
+  }
+  ctl.style.top = newTop+'px';
+};
+
+/**
+ * Creates a form element
+ * @param parent new element will be appended to this node
+ * @param elemTag element to be created (input, button, select, textarea, ...)
+ * @param elemType for input tag this specifies the type (checkbox, radio, text, ...)
+ * @param id id for new element
+ * @param name name for new element, if not specified then name will be the same as the id
+ * @returns new element
+ */
+Rico.createFormField=function(parent,elemTag,elemType,id,name) {
+  var field;
+  if (typeof name!='string') name=id;
+  if (this.isIE && this.ieVersion < 8) {
+    // IE cannot set NAME attribute on dynamically created elements
+    var s=elemTag+' id="'+id+'"';
+    if (elemType) {
+      s+=' type="'+elemType+'"';
+    }
+    if (elemTag.match(/^(form|input|select|textarea|object|button|img)$/)) {
+      s+=' name="'+name+'"';
+    }
+    field=document.createElement('<'+s+' />');
+  } else {
+    field=document.createElement(elemTag);
+    if (elemType) {
+      field.type=elemType;
+    }
+    field.id=id;
+    if (typeof field.name=='string') {
+      field.name=name;
+    }
+  }
+  parent.appendChild(field);
+  return field;
+};
+
+/**
+ * Adds a new option to the end of a select list
+ * @returns new option element
+ */
+Rico.addSelectOption=function(elem,value,text) {
+  var opt=document.createElement('option');
+  if (typeof value=='string') opt.value=value;
+  opt.text=text;
+  if (this.isIE) {
+    elem.add(opt);
+  } else {
+    elem.add(opt,null);
+  }
+  return opt;
+};
+
+/**
+ * @returns the value of the specified cookie (or null if it doesn't exist)
+ */
+Rico.getCookie=function(itemName) {
+  var arg = itemName+'=';
+  var alen = arg.length;
+  var clen = document.cookie.length;
+  var i = 0;
+  while (i < clen) {
+    var j = i + alen;
+    if (document.cookie.substring(i, j) == arg) {
+      var endstr = document.cookie.indexOf (';', j);
+      if (endstr == -1) {
+        endstr=document.cookie.length;
+      }
+      return unescape(document.cookie.substring(j, endstr));
+    }
+    i = document.cookie.indexOf(' ', i) + 1;
+    if (i == 0) break;
+  }
+  return null;
+};
+
+Rico.getTBody=function(tab) {
+  return tab.tBodies.length==0 ? tab.appendChild(document.createElement("tbody")) : tab.tBodies[0];
+};
+
+/**
+ * Write information to a cookie.
+ * For cookies to be retained for the current session only, set daysToKeep=null.
+ * To erase a cookie, pass a negative daysToKeep value.
+ * @see <a href="http://www.quirksmode.org/js/cookies.html">Quirksmode article</a> for more information about cookies.
+ */
+Rico.setCookie=function(itemName,itemValue,daysToKeep,cookiePath,cookieDomain) {
+  var c = itemName+"="+escape(itemValue);
+  if (typeof(daysToKeep)=='number') {
+    var date = new Date();
+    date.setTime(date.getTime()+(daysToKeep*24*60*60*1000));
+    c+="; expires="+date.toGMTString();
+  }
+  if (typeof(cookiePath)=='string') {
+    c+="; path="+cookiePath;
+  }
+  if (typeof(cookieDomain)=='string') {
+    c+="; domain="+cookieDomain;
+  }
+  document.cookie = c;
+};
+
+Rico.phrasesById = {};
+/** thousands separator for number formatting */
+Rico.thouSep = ",";
+/** decimal point for number formatting */
+Rico.decPoint = ".";
+/** target language (2 character code) */
+Rico.langCode = "en";
+/** date format */
+Rico.dateFmt = "mm/dd/yyyy";
+/** time format */
+Rico.timeFmt = "hh:nn:ss a/pm";
+/** month name array (Jan is at index 0) */
+Rico.monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December'];
+/** day of week array (Sunday is at index 0) */
+Rico.dayNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
+
+/**
+ * @param monthIdx 0-11
+ * @returns month abbreviation
+ */
+Rico.monthAbbr=function(monthIdx) {
+  return this.monthNamesShort ? this.monthNamesShort[monthIdx] : this.monthNames[monthIdx].substr(0,3);
+};
+
+/**
+ * @param dayIdx 0-6 (Sunday=0)
+ * @returns day of week abbreviation
+ */
+Rico.dayAbbr=function(dayIdx) {
+  return this.dayNamesShort ? this.dayNamesShort[dayIdx] : this.dayNames[dayIdx].substr(0,3);
+};
+
+Rico.addPhraseId=function(phraseId, phrase) {
+  this.phrasesById[phraseId]=phrase;
+};
+
+Rico.getPhraseById=function(phraseId) {
+  var phrase=this.phrasesById[phraseId];
+  if (!phrase) {
+    alert('Error: missing phrase for '+phraseId);
+    return '';
+  }
+  if (arguments.length <= 1) return phrase;
+  var a=arguments;
+  return phrase.replace(/(\$\d)/g,
+    function($1) {
+      var idx=parseInt($1.charAt(1),10);
+      return (idx < a.length) ? a[idx] : '';
+    }
+  );
+};
+
+/**
+ * Format a positive number (integer or float)
+ * @param posnum number to format
+ * @param decPlaces the number of digits to display after the decimal point
+ * @param thouSep boolean indicating whether to insert thousands separator
+ * @returns formatted string
+ */
+Rico.formatPosNumber=function(posnum,decPlaces,thouSep) {
+  var a=posnum.toFixed(decPlaces).split(/\./);
+  if (thouSep) {
+    var rgx = /(\d+)(\d{3})/;
+    while (rgx.test(a[0])) {
+      a[0]=a[0].replace(rgx, '$1'+Rico.thouSep+'$2');
+    }
+  }
+  return a.join(Rico.decPoint);
+};
+
+/**
+ * Format a number according to the specs in fmt object.
+ * @returns string, wrapped in a span element with a class of: negNumber, zeroNumber, posNumber
+ * These classes can be set in CSS to display negative numbers in red, for example.
+ *
+ * @param n number to be formatted
+ * @param fmt may contain any of the following:<dl>
+ *   <dt>multiplier </dt><dd> the original number is multiplied by this amount before formatting</dd>
+ *   <dt>decPlaces  </dt><dd> number of digits to the right of the decimal point</dd>
+ *   <dt>thouSep    </dt><dd> boolean indicating whether to insert thousands separator</dd>
+ *   <dt>prefix     </dt><dd> string added to the beginning of the result (e.g. a currency symbol)</dd>
+ *   <dt>suffix     </dt><dd> string added to the end of the result (e.g. % symbol)</dd>
+ *   <dt>negSign    </dt><dd> specifies format for negative numbers: L=leading minus, T=trailing minus, P=parens</dd>
+ *</dl>
+ */
+Rico.formatNumber=function(n,fmt) {
+  if (typeof n=='string') n=parseFloat(n.replace(/,/,'.'),10);
+  if (isNaN(n)) return 'NaN';
+  if (typeof fmt.multiplier=='number') n*=fmt.multiplier;
+  var decPlaces=typeof fmt.decPlaces=='number' ? fmt.decPlaces : 0;
+  var thouSep=typeof fmt.thouSep=='undefined' ? true : this.thouSep;
+  var prefix=fmt.prefix || "";
+  var suffix=fmt.suffix || "";
+  var negSign=typeof fmt.negSign=='string' ? fmt.negSign : "L";
+  negSign=negSign.toUpperCase();
+  var s,cls;
+  if (n<0.0) {
+    s=this.formatPosNumber(-n,decPlaces,thouSep);
+    if (negSign=="P") s="("+s+")";
+    s=prefix+s;
+    if (negSign=="L") s="-"+s;
+    if (negSign=="T") s+="-";
+    cls='negNumber';
+  } else {
+    cls=n==0.0 ? 'zeroNumber' : 'posNumber';
+    s=prefix+this.formatPosNumber(n,decPlaces,thouSep);
+  }
+  return "<span class='"+cls+"'>"+s+suffix+"</span>";
+};
+
+/**
+ * Converts a date to a string according to specs in fmt
+ * @returns formatted string
+ * @param d date to be formatted
+ * @param fmt string specifying the output format, may be one of the following:<dl>
+ * <dt>locale or localeDateTime</dt>
+ *   <dd>use javascript's built-in toLocaleString() function</dd>
+ * <dt>localeDate</dt>
+ *   <dd>use javascript's built-in toLocaleDateString() function</dd>
+ * <dt>translate or translateDateTime</dt>
+ *   <dd>use the formats specified in the Rico.dateFmt and Rico.timeFmt properties</dd>
+ * <dt>translateDate</dt>
+ *   <dd>use the date format specified in the Rico.dateFmt property</dd>
+ * <dt>Otherwise</dt>
+ *   <dd>Any combination of: yyyy, yy, mmmm, mmm, mm, m, dddd, ddd, dd, d, hh, h, HH, H, nn, ss, a/p</dd>
+ *</dl>
+ */
+Rico.formatDate=function(d,fmt) {
+  var datefmt=(typeof fmt=='string') ? fmt : 'translateDate';
+  switch (datefmt) {
+    case 'locale':
+    case 'localeDateTime':
+      return d.toLocaleString();
+    case 'localeDate':
+      return d.toLocaleDateString();
+    case 'translate':
+    case 'translateDateTime':
+      datefmt=this.dateFmt+' '+this.timeFmt;
+      break;
+    case 'translateDate':
+      datefmt=this.dateFmt;
+      break;
+  }
+  return datefmt.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|d|hh|nn|ss|a\/p)/gi,
+    function($1) {
+      var h;
+      switch ($1) {
+      case 'yyyy': return d.getFullYear();
+      case 'yy':   return d.getFullYear().toString().substr(2);
+      case 'mmmm': return Rico.monthNames[d.getMonth()];
+      case 'mmm':  return Rico.monthAbbr(d.getMonth());
+      case 'mm':   return Rico.zFill(d.getMonth() + 1, 2);
+      case 'm':    return (d.getMonth() + 1);
+      case 'dddd': return Rico.dayNames[d.getDay()];
+      case 'ddd':  return Rico.dayAbbr(d.getDay());
+      case 'dd':   return Rico.zFill(d.getDate(), 2);
+      case 'd':    return d.getDate();
+      case 'hh':   return Rico.zFill((h = d.getHours() % 12) ? h : 12, 2);
+      case 'h':    return ((h = d.getHours() % 12) ? h : 12);
+      case 'HH':   return Rico.zFill(d.getHours(), 2);
+      case 'H':    return d.getHours();
+      case 'nn':   return Rico.zFill(d.getMinutes(), 2);
+      case 'ss':   return Rico.zFill(d.getSeconds(), 2);
+      case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
+      }
+    }
+  );
+};
+
+/**
+ * Converts a string in ISO 8601 format to a date object.
+ * @returns date object, or false if string is not a valid date or date-time.
+ * @param string value to be converted
+ * @param offset can be used to bias the conversion and must be in minutes if provided
+ * @see Based on <a href='http://delete.me.uk/2005/03/iso8601.html'>delete.me.uk article</a>
+ */
+Rico.setISO8601=function (string,offset) {
+  if (!string) return false;
+  var d = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|(?:([-+])(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
+  if (!d) return false;
+  if (!offset) offset=0;
+  var date = new Date(d[1], 0, 1);
+
+  if (d[2]) { date.setMonth(d[2] - 1); }
+  if (d[3]) { date.setDate(d[3]); }
+  if (d[4]) { date.setHours(d[4]); }
+  if (d[5]) { date.setMinutes(d[5]); }
+  if (d[6]) { date.setSeconds(d[6]); }
+  if (d[7]) { date.setMilliseconds(Number("0." + d[7]) * 1000); }
+  if (d[8]) {
+      if (d[10] && d[11]) {
+        offset = (Number(d[10]) * 60) + Number(d[11]);
+      }
+      offset *= ((d[9] == '-') ? 1 : -1);
+      offset -= date.getTimezoneOffset();
+  }
+  var time = (Number(date) + (offset * 60 * 1000));
+  date.setTime(Number(time));
+  return date;
+};
+
+/**
+ * Convert date to an ISO 8601 formatted string.
+ * @param date date object to be converted
+ * @param format an integer in the range 1-6 (default is 6):<dl>
+ * <dt>1 (year)</dt>
+ *   <dd>YYYY (eg 1997)</dd>
+ * <dt>2 (year and month)</dt>
+ *   <dd>YYYY-MM (eg 1997-07)</dd>
+ * <dt>3 (complete date)</dt>
+ *   <dd>YYYY-MM-DD (eg 1997-07-16)</dd>
+ * <dt>4 (complete date plus hours and minutes)</dt>
+ *   <dd>YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)</dd>
+ * <dt>5 (complete date plus hours, minutes and seconds)</dt>
+ *   <dd>YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)</dd>
+ * <dt>6 (complete date plus hours, minutes, seconds and a decimal
+ *   fraction of a second)</dt>
+ *   <dd>YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)</dd>
+ *</dl>
+ * @see Based on: <a href='http://www.codeproject.com/jscript/dateformat.asp'>codeproject.com article</a>
+ */
+Rico.toISO8601String=function (date, format, offset) {
+  if (!format) format=6;
+  if (!offset) {
+      offset = 'Z';
+  } else {
+      var d = offset.match(/([-+])([0-9]{2}):([0-9]{2})/);
+      var offsetnum = (Number(d[2]) * 60) + Number(d[3]);
+      offsetnum *= ((d[1] == '-') ? -1 : 1);
+      date = new Date(Number(Number(date) + (offsetnum * 60000)));
+  }
+
+  var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; };
+
+  var str = date.getUTCFullYear();
+  if (format > 1) { str += "-" + zeropad(date.getUTCMonth() + 1); }
+  if (format > 2) { str += "-" + zeropad(date.getUTCDate()); }
+  if (format > 3) {
+      str += "T" + zeropad(date.getUTCHours()) +
+             ":" + zeropad(date.getUTCMinutes());
+  }
+  if (format > 5) {
+    var secs = Number(date.getUTCSeconds() + "." +
+               ((date.getUTCMilliseconds() < 100) ? '0' : '') +
+               zeropad(date.getUTCMilliseconds()));
+    str += ":" + zeropad(secs);
+  } else if (format > 4) {
+    str += ":" + zeropad(date.getUTCSeconds());
+  }
+
+  if (format > 3) { str += offset; }
+  return str;
+};
+
+/**
+ * Returns a new XML document object
+ */
+Rico.createXmlDocument=function() {
+  if (document.implementation && document.implementation.createDocument) {
+    var doc = document.implementation.createDocument("", "", null);
+    // some older versions of Moz did not support the readyState property
+    // and the onreadystate event so we patch it!
+    if (doc.readyState == null) {
+      doc.readyState = 1;
+      doc.addEventListener("load", function () {
+        doc.readyState = 4;
+        if (typeof doc.onreadystatechange == "function") {
+          doc.onreadystatechange();
+        }
+      }, false);
+    }
+    return doc;
+  }
+
+  if (window.ActiveXObject)
+      return Rico.tryFunctions(
+        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;
+};
+
+/**
+ * Update the contents of an HTML element via an AJAX call
+ */
+Rico.ajaxUpdater = function(elem,url,options) {
+  this.updateSend(elem,url,options);
+};
+
+Rico.ajaxUpdater.prototype = {
+  updateSend : function(elem,url,options) {
+    this.element=elem;
+    this.onComplete=options.onComplete;
+    var self=this;
+    options.onComplete=function(xhr) { self.updateComplete(xhr); };
+    new Rico.ajaxRequest(url,options);
+  },
+
+  updateComplete : function(xhr) {
+    this.element.innerHTML=xhr.responseText;
+    if (this.onComplete) this.onComplete(xhr);
+  }
+};
+
+try {  // fix IE background image flicker (credit: www.mister-pixel.com)
+  document.execCommand("BackgroundImageCache", false, true);
+} catch(err) {}
+Rico.eventBind(window,"load", Rico.eventHandle(Rico,'windowLoaded'));
index 5fbec1a..21f590d 100644 (file)
@@ -17,8 +17,9 @@ goto done
 rem *** Compress Javascript ***\r
 :compress\r
 \r
-type ricoUI.js >all.js\r
+type rico.js >all.js\r
 \r
+type ricoUI.js >>all.js\r
 type ricoCalendar.js >>all.js\r
 type ricoColorPicker.js >>all.js\r
 type ricoDragDrop.js >>all.js\r
index 99f43e5..5d7e589 100644 (file)
@@ -58,7 +58,6 @@ Rico.CalendarControl.prototype = {
     this.bPageLoaded=false;
     this.img=[];
     this.Holidays={};
-    this.weekString=Rico.getPhraseById("calWeekHdg");
     this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;
     this.setDateFmt(this.options.dateFmt);
   },
@@ -103,65 +102,86 @@ Rico.CalendarControl.prototype = {
       this.container.id=this.id;
     }
     Rico.addClass(this.content, Rico.theme.calendar || 'ricoCalContainer');
-    this.content.style.display='block';  // override jquery ui
-
-    // Navigation controls
-    this.heading=this.content.appendChild(document.createElement("div"));
-    this.heading.className='RicoCalHeading';
-    if (Rico.theme.calendarHeading) Rico.addClass(this.heading,Rico.theme.calendarHeading)
-    this.heading.appendChild(this._createTitleSection('Month'));
-    this.heading.appendChild(this._createTitleSection('Year'));
-    new Rico.HoverSet(this.heading.getElementsByTagName('a'));
-    if (this.position == 'absolute') this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,'close')));
+    this.direction=Rico.direction(this.container);
 
+    var r,c,i,j,img,dow,a,s,tab;
+    this.colStart=this.options.showWeekNumber ? 1 : 0;
+    var colcnt=7+this.colStart
     this.maintab=document.createElement("table");
     this.maintab.cellSpacing=2;
     this.maintab.cellPadding=0;
     this.maintab.border=0;
     this.maintab.style.borderCollapse='separate';
-    this.maintab.className='ricoCalTab';
-    if (Rico.theme.calendarTable) Rico.addClass(this.maintab,Rico.theme.calendarTable)
+    this.maintab.className=Rico.theme.calendarTable || 'ricoCalTab';
     this.tbody=Rico.getTBody(this.maintab);
+    this.tbody.className='ricoCalBody';
+    this.thead=this.maintab.createTHead();
+    r=this.thead.insertRow(-1);
+    this.heading=r.insertCell(-1);
+    this.heading.colSpan=colcnt;
 
-    var r,c,i,j,img,dow,a,s,tab;
-    this.colStart=this.options.showWeekNumber ? 1 : 0;
+    this.content.style.display='block';
+    if (this.position == 'absolute') {
+      this.content.style.width='auto';
+      this.maintab.style.width='auto';
+    } else {
+      this.container.style.position='relative';
+      this.heading.style.position='static';  // fixes issue with ie7
+      this.content.style.padding='0px';
+      this.content.style.width='15em';
+      this.maintab.style.width='100%';
+    }
+
+    // Navigation controls
+    //this.heading=this.content.appendChild(document.createElement("div"));
+    this.heading.className='RicoCalHeading';
+    if (Rico.theme.calendarHeading) Rico.addClass(this.heading,Rico.theme.calendarHeading)
+    this.navtab=this.heading.appendChild(document.createElement("table"));
+    this.navrow=this.navtab.insertRow(-1);
+    this._createTitleSection('Month');
+    this.navrow.insertCell(-1).innerHTML="&nbsp;&nbsp;";
+    this._createTitleSection('Year');
+    new Rico.HoverSet(this.heading.getElementsByTagName('a'));
+    if (this.position == 'absolute') this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,'close')));
+
+    this.styles=[];
     for (i=0; i<7; i++) {
       r=this.tbody.insertRow(-1);
-      r.className='row'+i;
-      for (c=0; c<7+this.colStart; c++) {
-        r.insertCell(-1);
+      r.className=i==0 ? 'ricoCalDayNames' : 'row'+i;
+      if (this.options.showWeekNumber) {
+        c=r.insertCell(-1);
+        c.className='ricoCalWeekNum';
+        if (i==0) c.innerHTML=Rico.getPhraseById("calWeekHdg");
       }
-    }
-    r=this.tbody.rows[0];
-    r.className='ricoCalDayNames';
-    if (this.options.showWeekNumber) {
-      r.cells[0].innerHTML=this.weekString;
-      for (i=0; i<7; i++) {
-        this.tbody.rows[i].cells[0].className='ricoCalWeekNum';
+      for (j=0; j<7; j++) {
+        c=r.insertCell(-1);
+        if (i==0) {
+          dow=(j+this.options.startAt) % 7;
+          c.innerHTML=Rico.dayAbbr(dow);
+          this.styles[j]='ricoCal'+dow;
+        } else {
+          c.className=this.styles[j];
+          if (Rico.theme.calendarDay) Rico.addClass(c,Rico.theme.calendarDay);
+        }
       }
     }
-    this.styles=[];
-    for (i=0; i<7; i++) {
-      dow=(i+this.options.startAt) % 7;
-      r.cells[i+this.colStart].innerHTML=Rico.dayAbbr(dow);
-      this.styles[i]='ricoCal'+dow;
-    }
     
     // table footer (today)
     if (this.options.showToday) {
       this.tfoot=this.maintab.createTFoot();
+      this.tfoot.className='ricoCalFoot';
       r=this.tfoot.insertRow(-1);
       this.todayCell=r.insertCell(-1);
-      this.todayCell.colSpan=7+this.colStart;
-      if (Rico.theme.calendarFooter) Rico.addClass(this.todayCell,Rico.theme.calendarFooter);
+      this.todayCell.colSpan=colcnt;
+      this.todayCell.className=Rico.theme.calendarFooter || 'ricoCalFoot';
       Rico.eventBind(this.todayCell,"click", Rico.eventHandle(this,'selectNow'), false);
     }
     this.content.appendChild(this.maintab);
     new Rico.HoverSet(this.tbody.getElementsByTagName('td'),{ hoverNodes: function(e) { return e.innerHTML.match(/^\d+$/) ? [e] : []; } });
     
     // month selector
-    this.monthPopup=new Rico.Popup(document.createElement("div"));
-    this.monthPopup.closePopup();
+    this.monthPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
+    this.monthPopup.content.className='ricoCalMonthPrompt';
     tab=document.createElement("table");
     tab.className='ricoCalMenu';
     if (Rico.theme.calendarPopdown) Rico.addClass(tab,Rico.theme.calendarPopdown);
@@ -185,10 +205,10 @@ Rico.CalendarControl.prototype = {
     new Rico.HoverSet(tab.getElementsByTagName('a'));
     this.monthPopup.content.appendChild(tab);
     this.container.appendChild(this.monthPopup.container);
+    this.monthPopup.closePopup();
     
     // year selector
-    this.yearPopup=new Rico.Popup(document.createElement("div"));
-    this.yearPopup.closePopup();
+    this.yearPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
     this.yearPopup.content.className='ricoCalYearPrompt';
     if (Rico.theme.calendarPopdown) Rico.addClass(this.yearPopup.content,Rico.theme.calendarPopdown);
     var p1=document.createElement("p");
@@ -205,9 +225,7 @@ Rico.CalendarControl.prototype = {
     this.yearPopup.content.appendChild(p1);
     this.yearPopup.content.appendChild(p2);
     this.container.appendChild(this.yearPopup.container);
-    this.yearPopup.container.style.left='';
-    this.yearPopup.container.style.right='5px';
-    this.yearPopup.container.style.zIndex=10;
+    this.yearPopup.closePopup();
 
     // fix anchors so they work in IE6
     a=this.content.getElementsByTagName('a');
@@ -221,22 +239,22 @@ Rico.CalendarControl.prototype = {
   },
 
   _createTitleSection : function(section) {
-    var s=document.createElement("span");
-    s.className='RicoCal'+section+'Heading';
-    if (Rico.theme.calendarSubheading) Rico.addClass(s,Rico.theme.calendarSubheading);
-
-    var a=s.appendChild(document.createElement("a"));
-    a.className='Rico_leftArrow';
-    a.appendChild(this.createNavArrow('dec'+section,'left'));
+    var arrows=['left','right'];
+    if (this.direction=='rtl') arrows.reverse();
+    var c=this.navrow.insertCell(-1);
+    var a=c.appendChild(document.createElement("a"));
+    a.className='Rico_'+arrows[0]+'Arrow';
+    a.appendChild(this.createNavArrow('dec'+section,arrows[0]));
 
-    var a=s.appendChild(document.createElement("a"));
+    c=this.navrow.insertCell(-1);
+    a=c.appendChild(document.createElement("a"));
     Rico.eventBind(a,"click", Rico.eventHandle(this,'popUp'+section), false);
     this['title'+section]=a;
 
-    a=s.appendChild(document.createElement("a"));
-    a.className='Rico_rightArrow';
-    a.appendChild(this.createNavArrow('inc'+section,'right'));
-    return s
+    c=this.navrow.insertCell(-1);
+    a=c.appendChild(document.createElement("a"));
+    a.className='Rico_'+arrows[1]+'Arrow';
+    a.appendChild(this.createNavArrow('inc'+section,arrows[1]));
   },
   
   selectNow : function() {
@@ -302,21 +320,23 @@ Rico.CalendarControl.prototype = {
     this.constructCalendar();
     Rico.eventStop(e);
   },
+  
+  // position: 0=left, 1=right
+  openYrMo : function(popup,position) {
+    if (this.direction=='rtl') position=1-position;
+    popup.openPopup();
+    var left=position ? this.content.offsetWidth - popup.container.offsetWidth - 5 : 3;
+    popup.move(left, this.heading.offsetHeight+2);
+  },
 
   popUpMonth : function(e) {
     Rico.eventStop(e);
     if (this.monthPopup.visible()) {
       this.popDownMonth();
-      return;
+      return false;
     }
     this.popDownYear();
-    if (Rico.isIE && Rico.ieVersion < 7) {
-      // fix position absolute inside container without hasLayout
-      this.monthPopup.openPopup(null, this.heading.offsetHeight+2);
-      this.monthPopup.container.style.left='';
-    } else {
-      this.monthPopup.openPopup(3, this.heading.offsetHeight+2);
-    }
+    this.openYrMo(this.monthPopup,0);
     return false;
   },
 
@@ -336,12 +356,12 @@ Rico.CalendarControl.prototype = {
     Rico.eventStop(e);
     if (this.yearPopup.visible()) {
       this.popDownYear();
-      return;
+      return false;
     }
     this.popDownMonth();
     this.yearInput.disabled=false;
     this.yearInput.value='';   // this.yearSelected
-    this.yearPopup.openPopup(null, this.heading.offsetHeight+2);
+    this.openYrMo(this.yearPopup,1);
     var self=this;
     setTimeout(function() { self.yearInput.focus(); }, 10);  // ie8 has issues without this delay
     return false;
@@ -452,6 +472,7 @@ Rico.CalendarControl.prototype = {
       c.style.color=h ? h.txtColor : '';
       c.style.backgroundColor=h ? h.bgColor : '';
       c.title=h ? h.desc : '';
+      c.style.visibility='visible';
       if (colnum==6) r++;
     }
     while (dayPointer<42) {
@@ -471,10 +492,8 @@ Rico.CalendarControl.prototype = {
 /** @private */
   resetCell: function(c) {
     c.innerHTML="&nbsp;";
-    c.className='ricoCalEmpty';
-    c.style.color='';
-    c.style.backgroundColor='';
     c.title='';
+    c.style.visibility='hidden';
   },
   
 /** @private */
index ced18d0..655e62e 100644 (file)
@@ -539,7 +539,7 @@ Rico.GridCommon = {
       }
     }
     Rico.log('opening columnChooser');
-    this.columnChooser.openPopup(1,this.hdrHt);
+    this.columnChooser.openPopup(3,this.hdrHt+3);
     for (x=0;x<this.columns.length;x++) {
       this.columns[x].ChooserBox.checked=this.columns[x].visible;
       this.columns[x].ChooserBox.disabled = !this.columns[x].canHideShow();
@@ -729,7 +729,7 @@ Rico.TableColumnBase.prototype = {
  * Common code used to initialize the column in both SimpleGrid & LiveGrid
  */
   baseInit: function(liveGrid,colIdx,hdrInfo,tabIdx) {
-    Rico.log("TableColumnBase.init index="+colIdx+" tabIdx="+tabIdx);
+    Rico.log("TableColumnBase.baseInit index="+colIdx+" tabIdx="+tabIdx);
     this.liveGrid  = liveGrid;
     this.index     = colIdx;
     this.hideWidth = Rico.isKonqueror || Rico.isWebKit || liveGrid.headerRowCnt>1 ? 5 : 2;  // column width used for "hidden" columns. Anything less than 5 causes problems with Konqueror. Best to keep this greater than padding used inside cell.
@@ -751,14 +751,12 @@ Rico.TableColumnBase.prototype = {
     this.mouseUpHandler  = Rico.eventHandle(this,'handleMouseUp');
     this.mouseOutHandler = Rico.eventHandle(this,'handleMouseOut');
 
-    this.fieldName = 'col'+this.index;
     this.format={type:"text"};
     var spec = liveGrid.options.columnSpecs[colIdx];
     if (typeof spec == 'object') Rico.extend(this.format, spec);
     Rico.addClass(this.dataColDiv, this.colClassName());
     this.visible=true;
     if (typeof this.format.visible=='boolean') this.visible=this.format.visible;
-    Rico.log("TableColumn.init index="+colIdx+" fieldName="+this.fieldName);
     this.sortable     = typeof this.format.canSort=='boolean' ? this.format.canSort : liveGrid.options.canSortDefault;
     this.currentSort  = Rico.ColumnConst.UNSORTED;
     this.filterable   = typeof this.format.canFilter=='boolean' ? this.format.canFilter : liveGrid.options.canFilterDefault;
@@ -866,7 +864,7 @@ Rico.TableColumnBase.prototype = {
     this.origWidth=parseInt(this.colWidth,10);
     var p=Rico.positionedOffset(this.hdrCell);
     if (this.liveGrid.direction=='rtl') {
-      this.edge=p.left+this.liveGrid.options.scrollBarWidth;
+      this.edge=p.left;
       switch (this.tabIdx) {
         case 0: this.edge+=this.liveGrid.innerDiv.offsetWidth; break;
         case 1: this.edge-=this.liveGrid.scrollDiv.scrollLeft; break;
index b947deb..c69d93a 100644 (file)
@@ -574,6 +574,13 @@ Rico.LiveGrid.prototype = {
     if (this.options.windowResize)
       Rico.runLater(100,this,'pluginWindowResize');
     Rico.log("initialize complete for "+this.tableId);
+    //alert('clientLeft='+this.scrollDiv.clientLeft);
+    if (this.direction=='rtl' && (!Rico.isWebKit || this.scrollDiv.clientLeft > 0)) {
+      this.scrollTab.style.right='0px';
+    } else {
+      this.scrollTab.style.left='0px';
+      Rico.setStyle(this.tabs[1], {'float': 'left'});
+    }
   }
 };
 
@@ -1660,13 +1667,6 @@ Rico.LiveGridMethods = {
     return -1;
   },
 
-  findColumnName: function(name) {
-    for (var n=0; n<this.columns.length; n++) {
-      if (this.columns[n].fieldName == name) return n;
-    }
-    return -1;
-  },
-  
 /**
  * Searches options.columnSpecs colAttr for matching colValue
  * @return array of matching column indexes
@@ -1682,8 +1682,8 @@ Rico.LiveGridMethods = {
 /**
  * Set initial sort
  */
-  setSortUI: function( columnNameOrNum, sortDirection ) {
-    Rico.log("setSortUI: "+columnNameOrNum+' '+sortDirection);
+  setSortUI: function( columnIdOrNum, sortDirection ) {
+    Rico.log("setSortUI: "+columnIdOrNum+' '+sortDirection);
     var colnum=this.findSortedColumn();
     if (colnum >= 0) {
       sortDirection=this.columns[colnum].getSortDirection();
@@ -1694,12 +1694,12 @@ Rico.LiveGridMethods = {
         sortDirection=sortDirection.toUpperCase();
         if (sortDirection != Rico.ColumnConst.SORT_DESC) sortDirection=Rico.ColumnConst.SORT_ASC;
       }
-      switch (typeof columnNameOrNum) {
+      switch (typeof columnIdOrNum) {
         case 'string':
-          colnum=this.findColumnName(columnNameOrNum);
+          colnum=this.findColumnsBySpec('id',columnIdOrNum);
           break;
         case 'number':
-          colnum=columnNameOrNum;
+          colnum=columnIdOrNum;
           break;
       }
     }
index c1cf502..012bb48 100644 (file)
@@ -1,8 +1,11 @@
 /*****************************************************************
- ricoLocale_en.js - a component of Rico 3.0
+ ricoLocale_en.js - a component of Rico 3
  English localization strings
+ This file is the basis for all translations
+
  If you would like to include translations for another language, 
- please send them to dowdybrown@yahoo.com
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='en';
 
index e5e47b7..c9bf141 100644 (file)
@@ -105,7 +105,6 @@ Rico.Popup.prototype = {
     }
     this.container.appendChild(this.content);
     this.content.className='RicoPopupContent';
-    this.content.style.position='relative';
     if (this.position != 'absolute') return;
 
     if (this.options.closeFunc) {
@@ -118,9 +117,10 @@ Rico.Popup.prototype = {
     this.container.style.left='0px';
     this.container.style.display='none';
     if (this.options.zIndex >= 0) this.container.style.zIndex=this.options.zIndex;
-    this.content.style.zIndex=2;
 
-    if (Rico.isIE && Rico.ieVersion < 7) {
+    if (Rico.isIE && Rico.ieVersion < 7 && this.options.shim!==false) {
+      this.content.style.position='relative';
+      this.content.style.zIndex=2;
       // create iframe shim
       this.ifr = document.createElement('iframe');
       this.ifr.className='RicoShim';
@@ -220,9 +220,8 @@ Rico.Popup.prototype = {
  * Display popup at specified position
  */
   openPopup: function(left,top) {
-    if (typeof left=='number') this.container.style.left=left+'px';
-    if (typeof top=='number') this.container.style.top=top+'px';
-    this.container.style.display=''; //this.position=='absolute' ? "block" : Rico.isIE && Rico.ieVersion<8 ? "inline" : "inline-block";
+    this.move(left,top);
+    this.container.style.display='';
     if (this.container.id) Rico.log('openPopup '+this.container.id+' at '+left+','+top);
     Rico._AddOpenPopup(this);
   },
@@ -260,7 +259,7 @@ Rico.closeButton = function(handle) {
   if (Rico.theme.closeAnchor) Rico.addClass(a,Rico.theme.closeAnchor);
   var span = a.appendChild(document.createElement('span'));
   span.title=Rico.getPhraseById('close');
-  new Rico.HoverSet([a]);
+  new Rico.HoverSet([a],{hoverClass: Rico.theme.hover || 'ricoCloseHover'});
   Rico.addClass(span,Rico.theme.close || 'rico-icon RicoClose');
   Rico.eventBind(a,"click", handle);
   return a;
@@ -331,7 +330,7 @@ Rico.Window.prototype = {
     if (options.width) this.contentDiv.style.width=options.width;
     if (options.overflow) this.contentDiv.style.overflow=options.overflow;
     Rico.addClass(this.content,'ricoWindow');
-    if (Rico.theme.dialog) Rico.addClass(this.content,Rico.theme.dialog);
+    if (Rico.theme.dialog) Rico.addClass(this.container,Rico.theme.dialog);
     /*
     if (Rico.isIE) {
       // fix float'ed content in IE
@@ -383,8 +382,7 @@ Rico.Menu.prototype = {
     this.createContainer(options);
     this.content.className = Rico.isWebKit ? 'ricoMenuSafari' : 'ricoMenu';
     this.content.style.width=this.options.width;
-    this.direction=Rico.getStyle(this.container,'direction') || 'ltr';
-    this.direction=this.direction.toLowerCase();  // ltr or rtl
+    this.direction=Rico.direction(this.container);
     this.hidemenu();
     this.itemCount=0;
   },
@@ -778,26 +776,10 @@ Rico._HoverItem.prototype = {
 };
 
 
-/** @namespace */
-Rico.Effect = {};
-Rico.Effect.easeIn = function(step){
-  return Math.sqrt(step);
-};
-Rico.Effect.easeOut = function(step){
-  return step*step;
-};
-
-
 /** @class core methods for transition effects */
 Rico.ContentTransitionBase = function() {};
 Rico.ContentTransitionBase.prototype = {
   initBase: function(titles, contents, options) {
-    Rico.log('ContentTransitionBase#initBase');
-    if (typeof titles == 'string')
-      titles = Rico.select(titles);
-    if (typeof contents == 'string')
-      contents = Rico.select(contents);
-
     this.options = options || {};
     this.titles = titles;
     this.contents = contents;
@@ -842,7 +824,6 @@ Rico.ContentTransitionBase.prototype = {
     Rico.hide(content);
     //this.selectionSet.select(title);
   },
-  removeBase: function(title){},
   removeAll: function(){
     this.hoverSet.removeAll();
     this.selectionSet.removeAll();
@@ -952,8 +933,10 @@ Rico.TabbedPanel.prototype = Rico.extend(new Rico.ContentTransitionBase(),
     items[1].className=options.contentContainerClass || Rico.theme.tabContentContainer || "Rico_tabContentContainer";
     var titles=Rico.getDirectChildrenByTag(items[0], childTag);
     var contents=Rico.getDirectChildrenByTag(items[1],'div');
+    var direction=Rico.direction(element);
     if (!options.corners) options.corners='top';
     for (var i=0; i<titles.length; i++) {
+      if (direction == 'rtl') Rico.setStyle(titles[i], {'float':'right'});
       titles[i].className=options.titleClass || Rico.theme.tabTitle || "Rico_tabTitle";
       var a=Rico.wrapChildren(titles[i],'','','a');
       a.href="javascript:void(0)";
index 8e89bfa..1100f69 100644 (file)
@@ -31,8 +31,8 @@ Public SupportedLangs    ' comma-separated list of 2-character codes, representi
 ' Constructor\r
 \r
 Private Sub Class_Initialize\r
-  BaseLib="proto_min"         ' default base library\r
-  jTheme="ui-lightness"\r
+  BaseLib="proto_min.js"         ' default base library\r
+  theme=""\r
   ricoLogging=false\r
   grid_striping = true\r
   LoadBaseLib = true\r
@@ -89,11 +89,10 @@ Public Sub CreateLinks()
       Response.Write vbLf & "<script src='" & jsDir & baseLib & "' type='text/javascript'></script>"\r
     end if\r
   end if\r
-  requireRicoJS ""\r
   requireRicoJS "2" & left(baseLib,3)\r
-  requireRicoCSS "rico"\r
   requireRicoJS "_min"\r
   setLang\r
+  requireRicoCSS "rico"\r
   if theme<>"" then LoadTheme\r
 End sub\r
 \r
@@ -103,7 +102,6 @@ Private sub SetConfig()
   Response.Write vbLf & "<script type='text/javascript'>"\r
   Response.Write vbLf & "Rico_CONFIG = {"\r
   if ricoLogging then Response.Write vbLf & "enableLogging: true,"\r
-  Response.Write vbLf & "jsDir: '" & jsDir & "',"\r
   if not IsEmpty(imgHeading) then Response.Write vbLf & "imgHeading: '" & imgDir & imgHeading & "',"\r
   Response.Write vbLf & "imgResize: '" & imgDir & "resize.gif',"\r
   Response.Write vbLf & "imgIcons: '" & imgDir & "ricoIcons.gif'"\r
index cbadb03..73cdcfb 100644 (file)
@@ -6,9 +6,11 @@ www.456bereastreet.com
 .ricoLG_table, tr.ricoLG_hdg .ricoLG_cell, .ricoTitle, a.RicoButton, .Rico_tabTitle , .Rico_accTitle, .ricoCalContainer *, .ricoTree *, .ricoBookmark {\r
   font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;\r
 }\r
-\r
-div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_outerDiv div.ricoLG_cell *, div.ricoLG_keywordDiv *, table.ricoLiveGrid td, table.ricoLiveGrid th  {\r
-  font-size: 11px;\r
+.Rico_accordion , .Rico_tabPanel, .ricoWindow {\r
+  font-size:80%;\r
+}\r
+div.ricoLG_outerDiv div.ricoLG_cell, table.ricoLiveGrid td, table.ricoLiveGrid th  {\r
+  font-size: 70%;\r
   color:#000;\r
 }\r
 \r
@@ -99,7 +101,6 @@ a.RicoButton.hover {
   border-bottom: 1px solid #523A0B;\r
   color: #000;\r
   font-weight: bold;\r
-  font-size:11pt;\r
 }\r
 \r
 \r
@@ -107,7 +108,7 @@ a.RicoButton.hover {
   background: #EBE5D9;\r
   cursor: auto;\r
 }\r
-.Rico_tabContent {\r
+.Rico_tabContent, .Rico_accContent {\r
   background-color: #ffffee;\r
 }\r
 .Rico_tabContentContainer {\r
@@ -130,7 +131,6 @@ a.RicoButton.hover {
 .Rico_accTitle {\r
   background-color: #EBE5D9;\r
   font-weight: normal;\r
-  font-size:11pt;\r
   height: 1.6em;\r
   border-bottom:1px solid #523A0B;\r
   border-top:1px solid #523A0B;\r
@@ -153,35 +153,27 @@ a.RicoButton.hover {
 .Rico_accordion  {\r
   border : 1px solid #523A0B;\r
 }\r
-.Rico_accContent {\r
-  background-color: #ffffee;\r
-}\r
-\r
 .ricoCalContainer {\r
   border : 1px solid #523A0B;\r
 }\r
-div.RicoCalHeading {\r
-  font-size: 10pt !important;\r
+td.RicoCalHeading {\r
   font-weight: normal;\r
   color:#000;\r
   background-color: #EBE5D9;\r
   border-bottom : 1px solid #523A0B;\r
 }\r
-div.RicoCalHeading a.hover {\r
+td.RicoCalHeading a.hover, a.ricoCloseHover {\r
   background-color: #F7F4EE !important;\r
 }\r
-div.RicoCalHeading a:link, div.RicoCalHeading a:visited {\r
+td.RicoCalHeading a:link, td.RicoCalHeading a:visited {\r
   color:#000;\r
 }\r
-span.RicoCalMonthHeading {\r
-  margin: 0px 1em 0px 1.3em !ie;\r
-}\r
 .ricoCalContainer tfoot td {\r
   border-top : 1px solid #523A0B;\r
   background-color:#EBE5D9;\r
   color:#000;\r
 }\r
-.ricoCalContainer table.ricoCalTab, .ricoCalContainer td.ricoCalEmpty, .ricoCalContainer tr.ricoCalDayNames td {\r
+.ricoCalContainer  {\r
   background-color:#F7F4EE;\r
 }\r
 .ricoCalContainer tbody td.hover {\r
index 6632025..33f3727 100644 (file)
@@ -6,9 +6,11 @@ URL: http://www.imaputz.com/
 div.ricoLG_outerDiv *, div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_editDiv *, .ricoTitle, .Rico_tabTitle, .Rico_accTitle, .ricoTree *, .ricoBookmark  {\r
   font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;\r
 }\r
-\r
-div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_outerDiv div.ricoLG_cell *, div.ricoLG_keywordDiv *, table.ricoLiveGrid td, table.ricoLiveGrid th  {\r
-  font-size: 11px;\r
+.Rico_accordion , .Rico_tabPanel, .ricoWindow {\r
+  font-size:80%;\r
+}\r
+div.ricoLG_outerDiv div.ricoLG_cell, table.ricoLiveGrid td, table.ricoLiveGrid th  {\r
+  font-size: 70%;\r
   font-weight: normal;\r
 }\r
 \r
@@ -71,7 +73,6 @@ caption {
 \r
 .ricoWindow {\r
   border: 1px solid #CCC;\r
-  font-size: 11px;\r
   background-color: #FCFCFC;\r
 }\r
 .ricoTitle  {\r
@@ -79,7 +80,6 @@ caption {
   border-bottom: 1px solid #CCC;\r
   color: #000;\r
   font-weight: bold;\r
-  font-size: 11px;\r
 }\r
 \r
 .Rico_tabNavContainer .selected {\r
@@ -106,7 +106,6 @@ caption {
 \r
 .Rico_accTitle {\r
   background-color: #FFF !important;\r
-  font-size: 11px;\r
   height: 1.7em;\r
   font-weight : normal;\r
   border-bottom:1px solid #CCC;\r
@@ -134,11 +133,11 @@ caption {
 .Rico_accordion  {\r
   border : 1px solid #CCC;\r
 }\r
-div.RicoCalHeading, .ricoCalContainer tfoot td {\r
+td.RicoCalHeading, .ricoCalContainer tfoot td {\r
   background-color: #999;\r
   color:#FFFFFF;\r
 }\r
-.ricoCalContainer table.ricoCalTab, .ricoCalContainer td.ricoCalEmpty, .ricoCalContainer tr.ricoCalDayNames td  {\r
+.ricoCalContainer  {\r
   background-color:#DDD;\r
 }\r
 span.Rico_leftArrow {\r
@@ -147,13 +146,13 @@ span.Rico_leftArrow {
 span.Rico_rightArrow {\r
   background-position: -10px -1139px;\r
 }\r
-div.RicoCalHeading span.RicoClose {\r
+.RicoCalHeading span.RicoClose {\r
   background-position: -10px -155px;\r
 }\r
-div.RicoCalHeading a.hover {\r
+.RicoCalHeading a.hover, .RicoCalHeading  a.ricoCloseHover {\r
   background-color: #AAA !important;\r
 }\r
-div.RicoCalHeading a:link, div.RicoCalHeading a:visited {\r
+.RicoCalHeading a:link, .RicoCalHeading a:visited {\r
   color:#FFFFFF;\r
 }\r
 .ricoTree a.hover {\r
index b468e3c..665ea3a 100644 (file)
@@ -3,6 +3,9 @@
 div.ricoLG_outerDiv *, div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_editDiv *, .ricoTitle, .Rico_tabTitle, .Rico_accTitle, .ricoTree *, .ricoBookmark  {\r
   font-family: Arial, Helvetica, sans-serif;\r
 }\r
+.Rico_accordion , .Rico_tabPanel, .ricoWindow {\r
+  font-size:90%;\r
+}\r
 \r
 tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td {  /* td/th required for IE */\r
   background-color : #cedebd;\r
@@ -40,7 +43,6 @@ a.RicoButton.hover {
   background-color: #cedebd;\r
   color: black;\r
   font-weight: bold;\r
-  font-size:9pt;\r
   border: 1px solid #aebe9d;\r
 }\r
 \r
@@ -67,7 +69,9 @@ a.RicoButton.hover {
   padding: 3px 5px 0px 5px;\r
 }\r
 \r
-\r
+.Rico_accordion  {\r
+  border : 1px solid #1f669b;\r
+}\r
 .Rico_accTitle {\r
   background-color : #cedebd;\r
   height: 1.7em;\r
@@ -91,16 +95,13 @@ a.RicoButton.hover {
   font-weight : bold;\r
   \r
 }\r
-.Rico_accordion  {\r
-  border : 1px solid #1f669b;\r
-}\r
-div.RicoCalHeading {\r
+td.RicoCalHeading {\r
   background-color: #becead;\r
 }\r
-div.RicoCalHeading a.hover {\r
+td.RicoCalHeading a.hover, a.ricoCloseHover {\r
   background-color: #deeecd !important;\r
 }\r
-div.RicoCalHeading a:link, div.RicoCalHeading a:visited {\r
+td.RicoCalHeading a:link, td.RicoCalHeading a:visited {\r
   color:blue;\r
 }\r
 .ricoTree a.hover {\r
index 2d880ed..cfb2d45 100644 (file)
@@ -2,6 +2,8 @@
  *Rico stylesheet\r
  */\r
 \r
+body {font-size:100%;}\r
\r
 /* LiveGrid & SimpleGrid */\r
  \r
 .ricoLG_outerDiv {\r
@@ -26,7 +28,6 @@ div.ricoLG_scrollContainerDiv {
 \r
 div.ricoLG_scrollTabDiv {\r
   position:absolute;\r
-  left:0px;\r
   top:0px;\r
   overflow:hidden;\r
 }\r
@@ -68,8 +69,8 @@ div.ricoLG_mFilter {
   z-index:200;\r
   border: 1px solid #888;\r
 }\r
-div.ricoLG_mFilter {\r
-  font-size: 8pt;\r
+div.ricoLG_mFilter {\r
+  font-size: 67%;\r
 }\r
 div.ricoLG_mFilter_content {\r
   height: 150px;\r
@@ -77,6 +78,9 @@ div.ricoLG_mFilter_content {
   overflow: auto;\r
   background-color: white;\r
 }\r
+div.ricoLG_mFilter_button  button{\r
+  font-size: 80%;\r
+}\r
 div.ricoLG_mFilter_button {\r
   padding: 3px;\r
   background-color: #DDD;\r
@@ -139,9 +143,9 @@ div.ricoLG_cell, table.ricoLiveGrid td, table.ricoLiveGrid th {
   height:1.2em;\r
   padding-left: 3px;\r
   margin: 0px;\r
-  font-size: 10pt;\r
-       padding-top:3px;\r
-       padding-bottom:3px;\r
+  font-size: 80%;\r
+  padding-top:3px;\r
+  padding-bottom:3px;\r
 }\r
 \r
 .ricoLG_messageDiv {\r
@@ -155,13 +159,12 @@ div.ricoLG_cell, table.ricoLiveGrid td, table.ricoLiveGrid th {
 \r
 p.ricoBookmark {\r
   margin-bottom: 3px;\r
-  font-size: 10pt;\r
+  font-size: 80%;\r
   white-space: nowrap;\r
 }\r
 \r
 p.ricoBookmark span {\r
   margin-right: 1em;\r
-  font-size: 10pt;\r
 }\r
 \r
 span.ricoCaption {\r
@@ -175,7 +178,7 @@ span.ricoSessionTimer {
 \r
 thead.ricoLG_top option, thead.ricoLG_top select, thead.ricoLG_top input {\r
   font-weight: normal;\r
-  font-size: 8pt !important;\r
+  font-size: 90% !important;\r
   padding: 1px;\r
 }\r
 \r
@@ -185,8 +188,8 @@ div.ricoLG_chooserDiv {
   z-index:200;\r
 }\r
 div.ricoLG_chooserDiv  .ricoContent {\r
-  height: 150px;\r
-  width: 200px;\r
+  height: 13em;\r
+  width: 16em;\r
 }\r
 .ricoContent {\r
   padding: 3px;\r
@@ -201,8 +204,8 @@ div.ricoLG_chooserDiv .ricoContent input {
 \r
 /* grid keyword entry */\r
 \r
-div.ricoLG_chooserDiv  *, div.ricoLG_keywordDiv * {\r
-  font-size: 8pt;\r
+div.ricoLG_chooserDiv, div.ricoLG_keywordDiv  {\r
+  font-size: smaller;\r
 }\r
 div.ricoLG_keywordDiv {\r
   position:absolute;\r
@@ -212,7 +215,7 @@ div.ricoLG_keywordDiv {
 \r
 div.ricoLG_keywordDiv input {\r
   position: relative;\r
-  font-size: 9pt;\r
+  font-size: 90%;\r
   float: left;\r
 }\r
 \r
@@ -239,8 +242,8 @@ div.ricoLG_editResponseDiv {
   left:0px;\r
 }\r
 \r
-.ricoLG_editDiv *, div.ricoLG_editResponseDiv {\r
-  font-size: 10pt;\r
+.ricoLG_editDiv, div.ricoLG_editResponseDiv {\r
+  font-size: 75%;\r
 }\r
 \r
 form .ricoEditLabel sup {\r
@@ -295,20 +298,20 @@ padding:2px;
 cursor:default;\r
 }\r
 \r
-div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu a {\r
+div.ricoMenu {\r
 background-color:menu;\r
 color: menutext;\r
 text-decoration: none;\r
 font-family:tahoma,arial,helvetica,sans-serif;\r
-font-size: 8pt;\r
+font-size: 70%;\r
 display:block;\r
 }\r
 \r
-div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari a {\r
+div.ricoMenuSafari {\r
 background-color:#EDEDED;\r
 text-decoration: none;\r
 font-family:tahoma,arial,helvetica,sans-serif;\r
-font-size: 8pt;\r
+font-size: 70%;\r
 display:block;\r
 }\r
 \r
@@ -399,25 +402,25 @@ a.RicoButton {
   white-space: nowrap;\r
 }\r
 \r
-.ui-dialog, .ui-datepicker {\r
+.ui-dialog {\r
   width: auto !important;\r
 }\r
 \r
+a.RicoButtonAnchorNative {\r
+  background-color: #DDD;\r
+  border: 1px outset;\r
+}\r
+a.RicoButtonAnchorNative  span {\r
+  vertical-align: middle;\r
+}\r
 a.RicoButtonAnchor {\r
   padding: 1px;\r
   margin: 0px 3px;\r
   cursor: pointer;\r
-  border: 1px outset;\r
-}\r
-\r
-a.RicoButtonAnchorNative {\r
-  border:1px solid #888;\r
-  background-color: #DDD;\r
+  font-size: 16px;\r
 }\r
-\r
 a.RicoButtonAnchor span {\r
   display: inline-block;\r
-  vertical-align: top;\r
 }\r
 \r
 a.RicoButtonAnchorNative:hover {\r
@@ -437,7 +440,7 @@ a.RicoButtonAnchorNative:hover {
 \r
 /* ricoKeywordSearch */\r
 .ricoKeywordSearch * {\r
-  font-size: 8pt;\r
+  font-size: 70%;\r
 }\r
 \r
 \r
@@ -476,8 +479,8 @@ a.RicoButtonAnchorNative:hover {
   display:block;\r
 }\r
 \r
-.ricoTreeContainer *, .ricoTree * {\r
-  font-size:8pt;\r
+.ricoTreeContainer, .ricoTree {\r
+  font-size:70%;\r
   white-space:nowrap;\r
 }\r
 \r
@@ -488,45 +491,53 @@ a.RicoButtonAnchorNative:hover {
 \r
 /* ricoCalendar */\r
 \r
-table.ricoCalTab, table.ricoCalTab *, .ricoCalYearPrompt * {\r
-  font-size:8pt !important;\r
+.ricoCalContainer {\r
+  font-size:85%;\r
+  background-color:#eee;\r
 }\r
-\r
-.RicoCalHeading {\r
-  font-size:8pt !important;\r
-  text-align: center;\r
-  text-align: left !ie;  /* ie6+ie7 */\r
-  padding: 0.3em 0px;\r
+.ricoCalBody {\r
+  font-size:70%;\r
 }\r
-\r
-.RicoCalHeading a {\r
-  text-decoration: none;\r
-  font-weight: bold !important;\r
-  margin: 0px;\r
-  padding: 0px 0.2em;\r
-  text-align: center;\r
-  border: 0px none !important;\r
+.ricoCalMonthPrompt {\r
+  font-size:95%;\r
 }\r
-\r
-.ui-datepicker-title  > .Rico_leftArrow, .ui-datepicker-title > .Rico_rightArrow {\r
-  position:relative; \r
-  top:3px;\r
+.ricoCalYearPrompt p {\r
+  font-size:70%;\r
 }\r
 \r
-*+html .ui-datepicker-title  > .Rico_leftArrow, *+html .ui-datepicker-title  > .Rico_rightArrow {\r
-  top:-2px;  /* ie7 */\r
+td.RicoCalHeading {\r
+  text-align: left;\r
+  padding: 0px !important;\r
 }\r
-\r
-.ui-datepicker-title  span {\r
-  text-indent: 0px;\r
+* html td.RicoCalHeading {\r
+  position: relative;\r
 }\r
-\r
-table.ricoCalTab {\r
-  width: auto !important;\r
+.ui-datepicker td.RicoCalHeading  table{\r
+  width: auto;\r
+  margin: 0px 2em !important;\r
+}\r
+.ricoCalContainer td.RicoCalHeading  table{\r
+  width: auto;\r
+  margin: 2px 2em 0px 2em;\r
+}\r
+td.RicoCalHeading td {\r
+  padding: 0.2em 0px;\r
+}\r
+td.RicoCalHeading {\r
+  font-size:90%;\r
+}\r
+td.RicoCalHeading table a {\r
+  text-decoration: none;\r
+  font-weight: bold !important;\r
+  margin: 0px !important;\r
+  text-align: center;\r
+  border: 0px none !important;\r
+  font-family: "Lucida Console", Courier, "Courier New", monospace;\r
 }\r
 \r
-.ricoCalContainer table.ricoCalTab, .ricoCalContainer td.ricoCalEmpty, .ricoCalContainer tr.ricoCalDayNames td  {\r
-  background-color:#eee;\r
+.ui-datepicker-header  span {\r
+  text-indent: 0px !important;\r
+  padding: 0px !important;\r
 }\r
 \r
 .ricoCalContainer  .ricoCalToday {\r
@@ -543,16 +554,6 @@ table.ricoCalTab {
   background-color: #FDD;\r
 }\r
 \r
-span.RicoCalMonthHeading, span.RicoCalYearHeading {\r
-  font-weight:bold;\r
-  margin: 0px 1em;\r
-  padding: 0px;\r
-}\r
-\r
-span.RicoCalMonthHeading {\r
-  margin: 0px 1em 0px 3em !ie;\r
-}\r
-\r
 span.Rico_leftArrow {\r
   background-position: -10px -1046px;\r
   display: inline-block;\r
@@ -560,10 +561,16 @@ span.Rico_leftArrow {
   height: 11px;\r
 }\r
 \r
-a.Rico_leftArrow {\r
+.ui-datepicker a.Rico_leftArrow, .ui-datepicker a.Rico_rightArrow {\r
   display: inline-block;\r
-  width: 15px;\r
-  height: 1.1em;\r
+  width: 16px;\r
+  height: 16px;\r
+}\r
+\r
+.ricoCalContainer a.Rico_leftArrow, .ricoCalContainer a.Rico_rightArrow {\r
+  display: inline-block;\r
+  width: 16px;\r
+  height: 14px;\r
 }\r
 \r
 span.Rico_rightArrow {\r
@@ -573,14 +580,8 @@ span.Rico_rightArrow {
   height: 11px;\r
 }\r
 \r
-a.Rico_rightArrow {\r
-  display: inline-block;\r
-  width: 15px;\r
-  height: 1.1em;\r
-}\r
-\r
-table.ricoCalTab thead a.hover {\r
-  cursor:pointer;\r
+.ui-datepicker-header a.ui-dialog-titlebar-close {\r
+  top: 2px;\r
 }\r
 \r
 div.ricoCalYearPrompt {\r
@@ -601,26 +602,19 @@ div.ricoCalYearPrompt {
   vertical-align: middle;\r
 }\r
 \r
-table.ricoCalTab tfoot td {\r
+.ricoCalFoot td {\r
+  font-size:75% !important;\r
   text-align:center;\r
   padding: 2px;\r
+  text-decoration: underline;\r
   cursor:pointer;\r
 }\r
 \r
-.ricoCalContainer  tfoot td {\r
+td.ricoCalFoot {\r
   color:#FFF;\r
   background-color: #666666;\r
 }\r
 \r
-table.ricoCalTab tfoot span {\r
-  text-decoration: underline;\r
-  cursor:pointer;\r
-}\r
-\r
-.ricoCalContainer table.ricoCalTab tbody {\r
-  background-color: white;\r
-}\r
-\r
 tr.ricoCalDayNames td {\r
   font-weight: bold;\r
 /*  padding: 0px 2px 0px 2px;*/\r
@@ -628,11 +622,11 @@ tr.ricoCalDayNames td {
   text-align:right;\r
 }\r
 \r
-table.ricoCalTab td, table.ricoCalTab th {\r
+.ricoCalBody td {\r
   width:2.7em;\r
 }\r
 \r
-td.ricoCal0, td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5, td.ricoCal6, td.ricoCalToday, td.ricoCalEmpty {\r
+td.ricoCal0, td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5, td.ricoCal6, td.ricoCalToday {\r
   text-align:right;\r
   text-decoration:none;\r
 }\r
@@ -668,7 +662,7 @@ td.ricoCalWeekNum {
 }\r
 \r
 .ricoCalMenu {\r
-  width:12em !important;\r
+  width:12em;\r
   background-color: #FEE;\r
   border-bottom:1px solid #666666;\r
   border-right:1px solid #666666;\r
@@ -683,7 +677,7 @@ td.ricoCalWeekNum {
   display:block;\r
   text-decoration:none;\r
   cursor:pointer;\r
-  font-size:8pt;\r
+  font-size:70%;\r
   text-align: center !important;\r
   color:black;\r
 }\r
@@ -702,7 +696,7 @@ div.ricoColorPicker {
 div.ricoColorPicker td {\r
   width: 12px;\r
   height: 12px;\r
-  font-size: 10px;\r
+  font-size: 60%;\r
 }\r
 \r
 /* tabbed panels and accordion */\r
@@ -938,14 +932,14 @@ span.ricoClear {
 }\r
 \r
 span.RicoCheckmark {\r
-  display: block;\r
+  display: inline-block;\r
   height: 17px;\r
   width: 17px;\r
   background-position: -10px -85px;\r
 }\r
 \r
 span.RicoCancel {\r
-  display: block;\r
+  display: inline-block;\r
   height: 17px;\r
   width: 17px;\r
   background-position: -10px -188px;\r
@@ -956,7 +950,7 @@ span.RicoCancel {
   cursor: pointer;\r
   position: absolute;\r
   display: block;\r
-  top: 2px;\r
+  top: 5px;\r
   right: 2px;\r
   border: 0px none !important;\r
 }\r
index a3ea9a4..32f2e58 100644 (file)
@@ -3,9 +3,14 @@ Based on sea glass table design
 Author: Stephanie Leary
 URL: http://www.sillybean.net/
  ------------------------------------------------------- */
-.ricoLG_table, .ricoTitle, a.RicoButton, .Rico_tabTitle , .Rico_accTitle, .ricoTree *, .ricoBookmark {
-  font: .9em/1.2em Georgia, "Times New Roman", Times, serif;
+.ricoLG_table, .ricoTitle, a.RicoButton, .Rico_tabTitle , .Rico_accTitle, .ricoTree *, .ricoBookmark, 
+.ricoCalContainer div.ricoCalYearPrompt, .ricoCalContainer .ricoCalMenu {
+  font-family: Georgia, "Times New Roman", Times, serif;
 }
+.Rico_accordion , .Rico_tabPanel, .ricoWindow {
+  font-size:90%;
+}
+
 caption { font-size: 1.3em; font-weight: bold; text-align: left; padding: 1em 4px; }
 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, table.ricoLiveGrid thead td, table.ricoLiveGrid thead th {
   background-color: #2C5755 !important;
@@ -16,7 +21,7 @@ tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg .ricoLG_cell a, tr.ricoLG_hdg .ricoLG_
   font-weight: normal;
 }
 tr.ricoLG_hdg .ricoLG_cell a:hover {
-       text-decoration: underline;
+  text-decoration: underline;
 }
 .odd th { background: #6E8D88; }
 .ricoLG_bottom .ricoLG_cell { padding: 3px; }
@@ -48,7 +53,6 @@ div.ricoLG_selection {
 .ricoTitle  {
   background-color: #2C5755;
   color: #FFF;
-  font-size:9pt;
   padding: 0.4em 1em;
 }
 a.RicoButton {
@@ -63,7 +67,7 @@ a.RicoButton.hover {
   background: #2C5755;
   cursor: auto;
 }
-.Rico_tabContent {
+.Rico_tabContent, .Rico_accContent {
   background: #f1f8ee;
 }
 
@@ -85,7 +89,6 @@ a.RicoButton.hover {
 .Rico_accTitle {
   background-color : #2C5755;
   height: 1.7em;
-  font-weight : normal;
   border-bottom:1px solid #1C4745;
   border-top:1px solid #6C9795;
   font-weight : normal;
@@ -109,7 +112,7 @@ a.RicoButton.hover {
   border : 1px solid #1f669b;
 }
 
-div.RicoCalHeading {
+td.RicoCalHeading {
   background-color: #2C5755;
   color:#FFFFFF;
 }
@@ -117,19 +120,14 @@ div.RicoCalHeading {
   background-color:#1C4745;
   color:#FFFFFF;
 }
-.ricoCalContainer table.ricoCalTab, .ricoCalContainer td.ricoCalEmpty, .ricoCalContainer tr.ricoCalDayNames td {
+.ricoCalContainer, .ricoCalContainer tr.ricoCalDayNames td  {
   background-color:#DBE6DD;
 }
-.ricoCal0, .ricoCal1, .ricoCal2, .ricoCal3, .ricoCal4, .ricoCal4, .ricoCal6 {
-  font: .9em/1.2em Georgia, "Times New Roman", Times, serif;
-}
 .ricoCalContainer div.ricoCalYearPrompt {
   background-color:#f1f8ee;
   border:1px solid #2C5755;
-  font: .9em/1.2em Georgia, "Times New Roman", Times, serif;
 }
 .ricoCalContainer .ricoCalMenu {
-  font: .9em/1.2em Georgia, "Times New Roman", Times, serif;
   background-color:#f1f8ee;
   border-bottom:1px solid #2C5755;
   border-right:1px solid #2C5755;
@@ -143,10 +141,10 @@ span.Rico_rightArrow {
 span.RicoClose {
   background-position: -10px -155px;
 }
-div.RicoCalHeading a.hover {
+td.RicoCalHeading a.hover, a.ricoCloseHover {
   background-color: #4C7775 !important;
 }
-div.RicoCalHeading a:link, div.RicoCalHeading a:visited {
+td.RicoCalHeading a:link, td.RicoCalHeading a:visited {
   color:#FFFFFF;
 }
 .ricoTree a.hover {
index 32a9e95..dab6ee1 100644 (file)
@@ -7,6 +7,9 @@ URL: http://www.myaleigh.com
 div.ricoLG_outerDiv *, div.ricoLG_outerDiv div.ricoLG_cell, div.ricoLG_editDiv *, .ricoTitle, .Rico_tabTitle, .Rico_accTitle, .ricoTree *, .ricoBookmark {\r
   font-family: Verdana, Arial, Helvetica, sans-serif;\r
 }\r
+.Rico_accordion , .Rico_tabPanel, .ricoWindow {\r
+  font-size:90%;\r
+}\r
 \r
 .ricoLG_table thead {\r
   border-top: 1px solid #84785e;\r
@@ -86,15 +89,13 @@ caption {
   background-color: #a24116;\r
   color: #FFF;\r
   font-weight: bold;\r
-  font-size:11pt;\r
 }\r
 \r
-\r
 .Rico_tabNavContainer .selected {\r
   background: #a24116;\r
   cursor: auto;\r
 }\r
-.Rico_tabContent {\r
+.Rico_tabContent, .Rico_accContent {\r
   background-color: #fffee1;\r
 }\r
 \r
@@ -141,7 +142,7 @@ caption {
 }\r
 \r
 \r
-div.RicoCalHeading {\r
+td.RicoCalHeading {\r
   background-color: #a24116;\r
   color:#FFFFFF;\r
 }\r
@@ -149,7 +150,7 @@ div.RicoCalHeading {
   background-color:#923106;\r
   color:#FFFFFF;\r
 }\r
-.ricoCalContainer table.ricoCalTab, .ricoCalContainer td.ricoCalEmpty, .ricoCalContainer tr.ricoCalDayNames td {\r
+.ricoCalContainer, .ricoCalContainer tr.ricoCalDayNames td  {\r
   background-color:#f8f3d0;\r
 }\r
 div.ricoCalYearPrompt {\r
@@ -170,10 +171,10 @@ span.Rico_rightArrow {
 span.RicoClose {\r
   background-position: -10px -155px;\r
 }\r
-div.RicoCalHeading a.hover {\r
+td.RicoCalHeading a.hover, a.ricoCloseHover {\r
   background-color: #c26136 !important;\r
 }\r
-div.RicoCalHeading a:link, div.RicoCalHeading a:visited {\r
+td.RicoCalHeading a:link, td.RicoCalHeading a:visited {\r
   color:#FFFFFF;\r
 }\r
 .ricoTree a.hover {\r
diff --git a/ricoClient/js/rico.js b/ricoClient/js/rico.js
deleted file mode 100644 (file)
index cb46cba..0000000
+++ /dev/null
@@ -1,811 +0,0 @@
-/*
- *  (c) 2005-2011 Richard Cowin (http://openrico.org)
- *  (c) 2005-2011 Matt Brown (http://dowdybrown.com)
- *
- *  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.
- */
-
-/**
- * @namespace Main Rico object
- */
-var Rico = {
-  Version: '3.0b2',
-  theme: {},
-  onLoadCallbacks: [],
-  windowIsLoaded: false,
-  preloadMsgs: '',
-  inputtypes: {search: 0, number: 0, range: 0, color: 0, tel: 0, url: 0, email: 0, date: 0, month: 0, week: 0, time: 0, datetime: 0, 'datetime-local': 0},
-
-  init : function() {
-    try {  // fix IE background image flicker (credit: www.mister-pixel.com)
-      document.execCommand("BackgroundImageCache", false, true);
-    } catch(err) {}
-    if (typeof Rico_CONFIG == 'object') this.setConfig(Rico_CONFIG);
-    this.onLoad(function() { Rico.log('Pre-load messages:\n'+Rico.preloadMsgs); });
-  },
-
-  // called by rico2xxx.js
-  _bindLoadEvent : function() {
-    Rico.eventBind(window,"load", Rico.eventHandle(Rico,'windowLoaded'));
-  },
-
-  setConfig : function(ConfigObj) {
-    var el = document.createElement('style');
-    document.getElementsByTagName('head')[0].appendChild(el);
-    if (!window.createPopup) { /* For Safari */
-      el.appendChild(document.createTextNode(''));
-    }
-    var s = document.styleSheets[document.styleSheets.length - 1];
-    this.addCssBackgroundRule(s,'.rico-icon',ConfigObj.imgIcons,'no-repeat');
-    this.addCssBackgroundRule(s,'.ricoLG_Resize',ConfigObj.imgResize,'repeat');
-    if (ConfigObj.imgHeading) {
-      var repeat='repeat-x';
-      var pos='left center';
-      this.addCssBackgroundRule(s,'tr.ricoLG_hdg th',ConfigObj.imgHeading,repeat,pos);
-      this.addCssBackgroundRule(s,'tr.ricoLG_hdg td',ConfigObj.imgHeading,repeat,pos);
-      this.addCssBackgroundRule(s,'table.ricoLiveGrid thead td',ConfigObj.imgHeading,repeat,pos);
-      this.addCssBackgroundRule(s,'table.ricoLiveGrid thead th',ConfigObj.imgHeading,repeat,pos);
-      this.addCssBackgroundRule(s,'.ricoTitle',ConfigObj.imgHeading,repeat,pos);
-      this.addCssBackgroundRule(s,'.Rico_accTitle',ConfigObj.imgHeading,repeat,pos);
-    }
-
-    if (ConfigObj.enableLogging) this.enableLogging();
-    if (ConfigObj.enableHTML5) this._CheckInputTypes();
-  },
-
-  addCssBackgroundRule: function(sheet,selector,imageUrl,repeat,position) {
-    if (!imageUrl) return;
-    this.addCssRule(sheet,selector,"background-image:url('"+imageUrl+"')");
-    this.addCssRule(sheet,selector,"background-repeat:"+repeat);
-    if (position) this.addCssRule(sheet,selector,"background-position:"+position);
-  },
-
-  addCssRule: function(sheet,selector,rule) {
-    if (sheet.addRule) {
-      sheet.addRule(selector, rule);
-    } else if (sheet.insertRule) {
-      sheet.insertRule (selector+" { "+rule+" }", 0);
-    } else {
-      alert('unable to add rule: '+rule);
-    }
-  },
-
-  // called by the document onload event
-  windowLoaded: function() {
-    this.windowIsLoaded=true;
-    this.addPreloadMsg('Processing callbacks');
-    while (this.onLoadCallbacks.length > 0) {
-      var callback=this.onLoadCallbacks.shift();
-      if (callback) callback();
-    }
-  },
-  
-  // check for availability of HTML5 input types
-  _CheckInputTypes: function() {
-    var i = document.createElement("input");
-    for (var itype in this.inputtypes) {
-      i.setAttribute("type", "text");
-      i.setAttribute("type", itype);
-      this.inputtypes[itype]=(i.type !== "text");
-    }
-  },
-
-  onLoad: function(callback,frontOfQ) {
-    if (frontOfQ)
-      this.onLoadCallbacks.unshift(callback);
-    else
-      this.onLoadCallbacks.push(callback);
-    if (this.windowIsLoaded) this.windowLoaded();
-  },
-
-  isKonqueror : navigator.userAgent.toLowerCase().indexOf("konqueror") > -1,
-  isIE:  !!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1),
-  isOpera: navigator.userAgent.indexOf('Opera') > -1,
-  isWebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-  isGecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') === -1,
-  ieVersion: /MSIE (\d+\.\d+);/.test(navigator.userAgent) ? new Number(RegExp.$1) : null,
-
-  // logging funtions
-
-  startTime : new Date(),
-
-  timeStamp: function() {
-    var stamp = new Date();
-    return (stamp.getTime()-this.startTime.getTime())+": ";
-  },
-
-setDebugArea: function(id, forceit) {
-  if (!this.debugArea || forceit) {
-    var newarea=document.getElementById(id);
-    if (!newarea) return;
-    this.debugArea=newarea;
-    newarea.value='';
-  }
-},
-
-addPreloadMsg: function(msg) {
-  this.preloadMsgs+=this.timeStamp()+msg+"\n";
-},
-
-log: function() {},
-
-enableLogging: function() {
-  if (this.debugArea) {
-    this.log = function(msg, resetFlag) {
-      if (resetFlag) this.debugArea.value='';
-      this.debugArea.value+=this.timeStamp()+msg+"\n";
-    };
-  } else if (window.console) {
-    if (window.console.firebug)
-      this.log = function(msg) { window.console.log(this.timeStamp(),msg); };
-    else
-      this.log = function(msg) { window.console.log(this.timeStamp()+msg); };\r
-  } else if (window.opera) {
-    this.log = function(msg) { window.opera.postError(this.timeStamp()+msg); };
-  }
-},
-
-$: function(e) {
-  return typeof e == 'string' ? document.getElementById(e) : e;
-},
-
-runLater: function() {
-  var args = Array.prototype.slice.call(arguments);
-  var msec = args.shift();
-  var object = args.shift();
-  var method = args.shift();
-  return setTimeout(function() { object[method].apply(object,args); },msec);
-},
-
-visible: function(element) {
-  return Rico.getStyle(element,"display") != 'none';
-},
-
-show: function(element) {
-  element.style.display = '';
-},
-
-hide: function(element) {
-  element.style.display = 'none';
-},
-
-toggle: function(element) {
-  element.style.display = element.style.display == 'none' ? '' : 'none';
-},
-
-viewportOffset: function(element) {
-  var offset=Rico.cumulativeOffset(element);
-  offset.left -= this.docScrollLeft();
-  offset.top -= this.docScrollTop();
-  return offset;
-},
-
-/**
- * Return text within an html element
- * @param el DOM node
- * @param xImg true to exclude img tag info
- * @param xForm true to exclude input, select, and textarea tags
- * @param xClass exclude elements with a class name of xClass
- */
-getInnerText: function(el,xImg,xForm,xClass) {
-  switch (typeof el) {
-    case 'string': return el;
-    case 'undefined': return el;
-    case 'number': return el.toString();
-  }
-  var cs = el.childNodes;
-  var l = cs.length;
-  var str = "";
-  for (var i = 0; i < l; i++) {
-    switch (cs[i].nodeType) {
-    case 1: //ELEMENT_NODE
-      if (this.getStyle(cs[i],'display')=='none') continue;
-      if (xClass && this.hasClass(cs[i],xClass)) continue;
-      switch (cs[i].tagName.toLowerCase()) {
-        case 'img':   if (!xImg) str += cs[i].alt || cs[i].title || cs[i].src; break;
-        case 'input': if (!xForm && !cs[i].disabled && cs[i].type.toLowerCase()=='text') str += cs[i].value; break;
-        case 'select': if (!xForm && cs[i].selectedIndex>=0) str += cs[i].options[cs[i].selectedIndex].text; break;
-        case 'textarea': if (!xForm && !cs[i].disabled) str += cs[i].value; break;
-        default:      str += this.getInnerText(cs[i],xImg,xForm,xClass); break;
-      }
-      break;
-    case 3: //TEXT_NODE
-      str += cs[i].nodeValue;
-      break;
-    }
-  }
-  return str;
-},
-
-/**
- * Return value of a node in an XML response.
- * For Konqueror 3.5, isEncoded must be true.
- */
-getContentAsString: function( parentNode, isEncoded ) {
-  if (isEncoded) return this._getEncodedContent(parentNode);
-  if (typeof parentNode.xml != 'undefined') return this._getContentAsStringIE(parentNode);
-  return this._getContentAsStringMozilla(parentNode);
-},
-
-_getEncodedContent: function(parentNode) {
-  if (parentNode.innerHTML) return parentNode.innerHTML;
-  switch (parentNode.childNodes.length) {
-    case 0:  return "";
-    case 1:  return parentNode.firstChild.nodeValue;
-    default: return parentNode.childNodes[1].nodeValue;
-  }
-},
-
-_getContentAsStringIE: function(parentNode) {
-  var contentStr = "";
-  for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
-     var n = parentNode.childNodes[i];
-     contentStr += (n.nodeType == 4) ? n.nodeValue : n.xml;
-  }
-  return contentStr;
-},
-
-_getContentAsStringMozilla: function(parentNode) {
-   var xmlSerializer = new XMLSerializer();
-   var contentStr = "";
-   for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
-        var n = parentNode.childNodes[i];
-        if (n.nodeType == 4) { // CDATA node
-            contentStr += n.nodeValue;
-        }
-        else {
-          contentStr += xmlSerializer.serializeToString(n);
-      }
-   }
-   return contentStr;
-},
-
-/**
- * @param n a number (or a string to be converted using parseInt)
- * @returns the integer value of n, or 0 if n is not a number
- */
-nan2zero: function(n) {
-  if (typeof(n)=='string') n=parseInt(n,10);
-  return isNaN(n) || typeof(n)=='undefined' ? 0 : n;
-},
-
-stripTags: function(s) {
-  return s.replace(/<\/?[^>]+>/gi, '');
-},
-
-truncate: function(s,length) {
-  return s.length > length ? s.substr(0, length - 3) + '...' : s;
-},
-
-zFill: function(n,slen, radix) {
-  var s=n.toString(radix || 10);
-  while (s.length<slen) s='0'+s;
-  return s;
-},
-
-keys: function(obj) {
-  var objkeys=[];
-  for(var k in obj)
-    objkeys.push[k];
-  return objkeys;
-},
-
-/**
- * @param e event object
- * @returns the key code stored in the event
- */
-eventKey: function(e) {
-  if( typeof( e.keyCode ) == 'number'  ) {
-    return e.keyCode; //DOM
-  } else if( typeof( e.which ) == 'number' ) {
-    return e.which;   //NS 4 compatible
-  } else if( typeof( e.charCode ) == 'number'  ) {
-    return e.charCode; //also NS 6+, Mozilla 0.9+
-  }
-  return -1;  //total failure, we have no way of obtaining the key code
-},
-
-eventLeftClick: function(e) {
-  return (((e.which) && (e.which == 1)) ||
-          ((e.button) && (e.button == 1)));
-},
-
-eventRelatedTarget: function(e) {
-  return e.relatedTarget;
-},
-
-  /**
- * Return the previous sibling that has the specified tagName
- */
- getPreviosSiblingByTagName: function(el,tagName) {
-       var sib=el.previousSibling;
-       while (sib) {
-               if ((sib.tagName==tagName) && (sib.style.display!='none')) return sib;
-               sib=sib.previousSibling;
-       }
-       return null;
- },
-
-/**
- * Return the parent of el that has the specified tagName.
- * @param el DOM node
- * @param tagName tag to search for
- * @param className optional
- */
-getParentByTagName: function(el,tagName,className) {
-  var par=el;
-  tagName=tagName.toLowerCase();
-  while (par) {
-    if (par.tagName && par.tagName.toLowerCase()==tagName) {
-      if (!className || par.className.indexOf(className)>=0) return par;
-    }
-       par=par.parentNode;
-  }
-  return null;
-},
-
-/**
- * Wrap the children of a DOM element in a new element
- * @param el the element whose children are to be wrapped
- * @param cls class name of the wrapper (optional)
- * @param id id of the wrapper (optional)
- * @param wrapperTag type of wrapper element to be created (optional, defaults to DIV)
- * @returns new wrapper element
- */
-wrapChildren: function(el,cls,id,wrapperTag) {
-  var wrapper = document.createElement(wrapperTag || 'div');
-  if (id) wrapper.id=id;
-  if (cls) wrapper.className=cls;
-  while (el.firstChild) {
-    wrapper.appendChild(el.firstChild);
-  }
-  el.appendChild(wrapper);
-  return wrapper;
-},
-
-/**
- * Positions ctl over icon
- * @param ctl (div with position:absolute)
- * @param icon element (img, button, etc) that ctl should be displayed next to
- */
-positionCtlOverIcon: function(ctl,icon) {
-  icon=this.$(icon);
-  var offsets=this.cumulativeOffset(icon);
-  var scrTop=this.docScrollTop();
-  var winHt=this.windowHeight();
-  if (ctl.style.display=='none') ctl.style.display='block';
-  //var correction=this.isIE ? 1 : 2;  // based on a 1px border
-  var correction=2;  // based on a 1px border
-  var lpad=this.nan2zero(this.getStyle(icon,'paddingLeft'));
-  ctl.style.left = (offsets.left+lpad+correction)+'px';
-  var newTop=offsets.top + correction;// + scrTop;
-  var ctlht=ctl.offsetHeight;
-  var iconht=icon.offsetHeight;
-  var margin=10;  // account for shadow
-  if (newTop+iconht+ctlht+margin < winHt+scrTop) {
-    newTop+=iconht;  // display below icon
-  } else {
-    newTop=Math.max(newTop-ctlht,scrTop);  // display above icon
-  }
-  ctl.style.top = newTop+'px';
-},
-
-/**
- * Creates a form element
- * @param parent new element will be appended to this node
- * @param elemTag element to be created (input, button, select, textarea, ...)
- * @param elemType for input tag this specifies the type (checkbox, radio, text, ...)
- * @param id id for new element
- * @param name name for new element, if not specified then name will be the same as the id
- * @returns new element
- */
-createFormField: function(parent,elemTag,elemType,id,name) {
-  var field;
-  if (typeof name!='string') name=id;
-  if (this.isIE && this.ieVersion < 8) {
-    // IE cannot set NAME attribute on dynamically created elements
-    var s=elemTag+' id="'+id+'"';
-    if (elemType) {
-      s+=' type="'+elemType+'"';
-    }
-    if (elemTag.match(/^(form|input|select|textarea|object|button|img)$/)) {
-      s+=' name="'+name+'"';
-    }
-    field=document.createElement('<'+s+' />');
-  } else {
-    field=document.createElement(elemTag);
-    if (elemType) {
-      field.type=elemType;
-    }
-    field.id=id;
-    if (typeof field.name=='string') {
-      field.name=name;
-    }
-  }
-  parent.appendChild(field);
-  return field;
-},
-
-/**
- * Adds a new option to the end of a select list
- * @returns new option element
- */
-addSelectOption: function(elem,value,text) {
-  var opt=document.createElement('option');
-  if (typeof value=='string') opt.value=value;
-  opt.text=text;
-  if (this.isIE) {
-    elem.add(opt);
-  } else {
-    elem.add(opt,null);
-  }
-  return opt;
-},
-
-/**
- * @returns the value of the specified cookie (or null if it doesn't exist)
- */
-getCookie: function(itemName) {
-  var arg = itemName+'=';
-  var alen = arg.length;
-  var clen = document.cookie.length;
-  var i = 0;
-  while (i < clen) {
-    var j = i + alen;
-    if (document.cookie.substring(i, j) == arg) {
-      var endstr = document.cookie.indexOf (';', j);
-      if (endstr == -1) {
-        endstr=document.cookie.length;
-      }
-      return unescape(document.cookie.substring(j, endstr));
-    }
-    i = document.cookie.indexOf(' ', i) + 1;
-    if (i == 0) break;
-  }
-  return null;
-},
-
-getTBody: function(tab) {
-  return tab.tBodies.length==0 ? tab.appendChild(document.createElement("tbody")) : tab.tBodies[0];
-},
-
-/**
- * Write information to a cookie.
- * For cookies to be retained for the current session only, set daysToKeep=null.
- * To erase a cookie, pass a negative daysToKeep value.
- * @see <a href="http://www.quirksmode.org/js/cookies.html">Quirksmode article</a> for more information about cookies.
- */
-setCookie: function(itemName,itemValue,daysToKeep,cookiePath,cookieDomain) {
-       var c = itemName+"="+escape(itemValue);
-       if (typeof(daysToKeep)=='number') {
-               var date = new Date();
-               date.setTime(date.getTime()+(daysToKeep*24*60*60*1000));
-               c+="; expires="+date.toGMTString();
-       }
-       if (typeof(cookiePath)=='string') {
-    c+="; path="+cookiePath;
-  }
-       if (typeof(cookieDomain)=='string') {
-    c+="; domain="+cookieDomain;
-  }
-  document.cookie = c;
-},
-
-phrasesById : {},
-/** thousands separator for number formatting */
-thouSep : ",",
-/** decimal point for number formatting */
-decPoint: ".",
-/** target language (2 character code) */
-langCode: "en",
-/** date format */
-dateFmt : "mm/dd/yyyy",
-/** time format */
-timeFmt : "hh:nn:ss a/pm",
-/** month name array (Jan is at index 0) */
-monthNames: ['January','February','March','April','May','June',
-             'July','August','September','October','November','December'],
-/** day of week array (Sunday is at index 0) */
-dayNames: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
-
-/**
- * @param monthIdx 0-11
- * @returns month abbreviation
- */
-monthAbbr: function(monthIdx) {
-  return this.monthNamesShort ? this.monthNamesShort[monthIdx] : this.monthNames[monthIdx].substr(0,3);
-},
-
-/**
- * @param dayIdx 0-6 (Sunday=0)
- * @returns day of week abbreviation
- */
-dayAbbr: function(dayIdx) {
-  return this.dayNamesShort ? this.dayNamesShort[dayIdx] : this.dayNames[dayIdx].substr(0,3);
-},
-
-addPhraseId: function(phraseId, phrase) {
-  this.phrasesById[phraseId]=phrase;
-},
-
-getPhraseById: function(phraseId) {
-  var phrase=this.phrasesById[phraseId];
-  if (!phrase) {
-    alert('Error: missing phrase for '+phraseId);
-    return '';
-  }
-  if (arguments.length <= 1) return phrase;
-  var a=arguments;
-  return phrase.replace(/(\$\d)/g,
-    function($1) {
-      var idx=parseInt($1.charAt(1),10);
-      return (idx < a.length) ? a[idx] : '';
-    }
-  );
-},
-
-/**
- * Format a positive number (integer or float)
- * @param posnum number to format
- * @param decPlaces the number of digits to display after the decimal point
- * @param thouSep boolean indicating whether to insert thousands separator
- * @returns formatted string
- */
-formatPosNumber: function(posnum,decPlaces,thouSep) {
-  var a=posnum.toFixed(decPlaces).split(/\./);
-  if (thouSep) {
-    var rgx = /(\d+)(\d{3})/;
-    while (rgx.test(a[0])) {
-      a[0]=a[0].replace(rgx, '$1'+Rico.thouSep+'$2');
-    }
-  }
-  return a.join(Rico.decPoint);
-},
-
-/**
- * Format a number according to the specs in fmt object.
- * @returns string, wrapped in a span element with a class of: negNumber, zeroNumber, posNumber
- * These classes can be set in CSS to display negative numbers in red, for example.
- *
- * @param n number to be formatted
- * @param fmt may contain any of the following:<dl>
- *   <dt>multiplier </dt><dd> the original number is multiplied by this amount before formatting</dd>
- *   <dt>decPlaces  </dt><dd> number of digits to the right of the decimal point</dd>
- *   <dt>thouSep    </dt><dd> boolean indicating whether to insert thousands separator</dd>
- *   <dt>prefix     </dt><dd> string added to the beginning of the result (e.g. a currency symbol)</dd>
- *   <dt>suffix     </dt><dd> string added to the end of the result (e.g. % symbol)</dd>
- *   <dt>negSign    </dt><dd> specifies format for negative numbers: L=leading minus, T=trailing minus, P=parens</dd>
- *</dl>
- */
-formatNumber : function(n,fmt) {
-  if (typeof n=='string') n=parseFloat(n.replace(/,/,'.'),10);
-  if (isNaN(n)) return 'NaN';
-  if (typeof fmt.multiplier=='number') n*=fmt.multiplier;
-  var decPlaces=typeof fmt.decPlaces=='number' ? fmt.decPlaces : 0;
-  var thouSep=typeof fmt.thouSep=='undefined' ? true : this.thouSep;
-  var prefix=fmt.prefix || "";
-  var suffix=fmt.suffix || "";
-  var negSign=typeof fmt.negSign=='string' ? fmt.negSign : "L";
-  negSign=negSign.toUpperCase();
-  var s,cls;
-  if (n<0.0) {
-    s=this.formatPosNumber(-n,decPlaces,thouSep);
-    if (negSign=="P") s="("+s+")";
-    s=prefix+s;
-    if (negSign=="L") s="-"+s;
-    if (negSign=="T") s+="-";
-    cls='negNumber';
-  } else {
-    cls=n==0.0 ? 'zeroNumber' : 'posNumber';
-    s=prefix+this.formatPosNumber(n,decPlaces,thouSep);
-  }
-  return "<span class='"+cls+"'>"+s+suffix+"</span>";
-},
-
-/**
- * Converts a date to a string according to specs in fmt
- * @returns formatted string
- * @param d date to be formatted
- * @param fmt string specifying the output format, may be one of the following:<dl>
- * <dt>locale or localeDateTime</dt>
- *   <dd>use javascript's built-in toLocaleString() function</dd>
- * <dt>localeDate</dt>
- *   <dd>use javascript's built-in toLocaleDateString() function</dd>
- * <dt>translate or translateDateTime</dt>
- *   <dd>use the formats specified in the Rico.dateFmt and Rico.timeFmt properties</dd>
- * <dt>translateDate</dt>
- *   <dd>use the date format specified in the Rico.dateFmt property</dd>
- * <dt>Otherwise</dt>
- *   <dd>Any combination of: yyyy, yy, mmmm, mmm, mm, m, dddd, ddd, dd, d, hh, h, HH, H, nn, ss, a/p</dd>
- *</dl>
- */
-formatDate : function(d,fmt) {
-  var datefmt=(typeof fmt=='string') ? fmt : 'translateDate';
-  switch (datefmt) {
-    case 'locale':
-    case 'localeDateTime':
-      return d.toLocaleString();
-    case 'localeDate':
-      return d.toLocaleDateString();
-    case 'translate':
-    case 'translateDateTime':
-      datefmt=this.dateFmt+' '+this.timeFmt;
-      break;
-    case 'translateDate':
-      datefmt=this.dateFmt;
-      break;
-  }
-  return datefmt.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|d|hh|nn|ss|a\/p)/gi,
-    function($1) {
-      var h;
-      switch ($1) {
-      case 'yyyy': return d.getFullYear();
-      case 'yy':   return d.getFullYear().toString().substr(2);
-      case 'mmmm': return Rico.monthNames[d.getMonth()];
-      case 'mmm':  return Rico.monthAbbr(d.getMonth());
-      case 'mm':   return Rico.zFill(d.getMonth() + 1, 2);
-      case 'm':    return (d.getMonth() + 1);
-      case 'dddd': return Rico.dayNames[d.getDay()];
-      case 'ddd':  return Rico.dayAbbr(d.getDay());
-      case 'dd':   return Rico.zFill(d.getDate(), 2);
-      case 'd':    return d.getDate();
-      case 'hh':   return Rico.zFill((h = d.getHours() % 12) ? h : 12, 2);
-      case 'h':    return ((h = d.getHours() % 12) ? h : 12);
-      case 'HH':   return Rico.zFill(d.getHours(), 2);
-      case 'H':    return d.getHours();
-      case 'nn':   return Rico.zFill(d.getMinutes(), 2);
-      case 'ss':   return Rico.zFill(d.getSeconds(), 2);
-      case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
-      }
-    }
-  );
-},
-
-/**
- * Converts a string in ISO 8601 format to a date object.
- * @returns date object, or false if string is not a valid date or date-time.
- * @param string value to be converted
- * @param offset can be used to bias the conversion and must be in minutes if provided
- * @see Based on <a href='http://delete.me.uk/2005/03/iso8601.html'>delete.me.uk article</a>
- */
-setISO8601 : function (string,offset) {
-  if (!string) return false;
-  var d = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|(?:([-+])(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
-  if (!d) return false;
-  if (!offset) offset=0;
-  var date = new Date(d[1], 0, 1);
-
-  if (d[2]) { date.setMonth(d[2] - 1); }
-  if (d[3]) { date.setDate(d[3]); }
-  if (d[4]) { date.setHours(d[4]); }
-  if (d[5]) { date.setMinutes(d[5]); }
-  if (d[6]) { date.setSeconds(d[6]); }
-  if (d[7]) { date.setMilliseconds(Number("0." + d[7]) * 1000); }
-  if (d[8]) {
-      if (d[10] && d[11]) {
-        offset = (Number(d[10]) * 60) + Number(d[11]);
-      }
-      offset *= ((d[9] == '-') ? 1 : -1);
-      offset -= date.getTimezoneOffset();
-  }
-  var time = (Number(date) + (offset * 60 * 1000));
-  date.setTime(Number(time));
-  return date;
-},
-
-/**
- * Convert date to an ISO 8601 formatted string.
- * @param date date object to be converted
- * @param format an integer in the range 1-6 (default is 6):<dl>
- * <dt>1 (year)</dt>
- *   <dd>YYYY (eg 1997)</dd>
- * <dt>2 (year and month)</dt>
- *   <dd>YYYY-MM (eg 1997-07)</dd>
- * <dt>3 (complete date)</dt>
- *   <dd>YYYY-MM-DD (eg 1997-07-16)</dd>
- * <dt>4 (complete date plus hours and minutes)</dt>
- *   <dd>YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)</dd>
- * <dt>5 (complete date plus hours, minutes and seconds)</dt>
- *   <dd>YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)</dd>
- * <dt>6 (complete date plus hours, minutes, seconds and a decimal
- *   fraction of a second)</dt>
- *   <dd>YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)</dd>
- *</dl>
- * @see Based on: <a href='http://www.codeproject.com/jscript/dateformat.asp'>codeproject.com article</a>
- */
-toISO8601String : function (date, format, offset) {
-  if (!format) format=6;
-  if (!offset) {
-      offset = 'Z';
-  } else {
-      var d = offset.match(/([-+])([0-9]{2}):([0-9]{2})/);
-      var offsetnum = (Number(d[2]) * 60) + Number(d[3]);
-      offsetnum *= ((d[1] == '-') ? -1 : 1);
-      date = new Date(Number(Number(date) + (offsetnum * 60000)));
-  }
-
-  var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; };
-
-  var str = date.getUTCFullYear();
-  if (format > 1) { str += "-" + zeropad(date.getUTCMonth() + 1); }
-  if (format > 2) { str += "-" + zeropad(date.getUTCDate()); }
-  if (format > 3) {
-      str += "T" + zeropad(date.getUTCHours()) +
-             ":" + zeropad(date.getUTCMinutes());
-  }
-  if (format > 5) {
-    var secs = Number(date.getUTCSeconds() + "." +
-               ((date.getUTCMilliseconds() < 100) ? '0' : '') +
-               zeropad(date.getUTCMilliseconds()));
-    str += ":" + zeropad(secs);
-  } else if (format > 4) {
-    str += ":" + zeropad(date.getUTCSeconds());
-  }
-
-  if (format > 3) { str += offset; }
-  return str;
-},
-
-/**
- * Returns a new XML document object
- */
-createXmlDocument : function() {
-  if (document.implementation && document.implementation.createDocument) {
-    var doc = document.implementation.createDocument("", "", null);
-    // some older versions of Moz did not support the readyState property
-    // and the onreadystate event so we patch it!
-    if (doc.readyState == null) {
-      doc.readyState = 1;
-      doc.addEventListener("load", function () {
-        doc.readyState = 4;
-        if (typeof doc.onreadystatechange == "function") {
-          doc.onreadystatechange();
-        }
-      }, false);
-    }
-    return doc;
-  }
-
-  if (window.ActiveXObject)
-      return Rico.tryFunctions(
-        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;
-}
-
-};
-
-/**
- * Update the contents of an HTML element via an AJAX call
- */
-Rico.ajaxUpdater = function(elem,url,options) {
-  this.updateSend(elem,url,options);
-};
-
-Rico.ajaxUpdater.prototype = {
-  updateSend : function(elem,url,options) {
-    this.element=elem;
-    this.onComplete=options.onComplete;
-    options.onComplete=function(xhr) { self.updateComplete(xhr); };
-    new Rico.ajaxRequest(url,options);
-  },
-
-  updateComplete : function(xhr) {
-    this.element.innerHTML=xhr.responseText;
-    if (this.onComplete) this.onComplete(xhr);
-  }
-};
-
-Rico.writeDebugMsg=Rico.log;  // for backwards compatibility
-Rico.init();
index 61a47a5..bab0e0a 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof dojo=='undefined') throw('This version of Rico requires the Dojo library');
 
-Rico.Lib='dojo';
-Rico.LibVersion=dojo.version.toString();
-Rico.extend=dojo.mixin;
-Rico.trim=dojo.trim;
-
-Rico.tryFunctions = function() {
-  for (var i=0; i<arguments.length; i++) {
-               try {
-                       return arguments[i]();
-               } catch(e){}
-       }
-       return null;
-};
+var Rico = {
+  Lib: 'dojo',
+  LibVersion: dojo.version.toString(),
+  extend: dojo.mixin,
+  trim: dojo.trim,
+
+  tryFunctions: function() {
+    for (var i=0; i<arguments.length; i++) {
+      try {
+        return arguments[i]();
+      } catch(e){}
+    }
+    return null;
+  },
 
-Rico.select=dojo.query;
-  
-Rico.eventBind=function(element, eventName, handler) {
-  handler.connection=dojo.connect(Rico.$(element), eventName, handler.object, handler.method);
-};
+  select: dojo.query,
 
-Rico.eventUnbind=function(element, eventName, handler) {
-  dojo.disconnect(handler.connection);
-};
+  eventBind: function(element, eventName, handler) {
+    handler.connection=dojo.connect(Rico.$(element), eventName, handler.object, handler.method);
+  },
 
-Rico.eventElement=function(ev) {
-  return ev.target;
-};
+  eventUnbind: function(element, eventName, handler) {
+    dojo.disconnect(handler.connection);
+  },
 
-// the Dojo native function has problems on IE
-Rico.eventStop=function(ev) {
-  if (window.attachEvent) {
-    window.event.returnValue = false;
-    window.event.cancelBubble = true;
-  } else {
-    ev.preventDefault();
-    ev.stopPropagation();
-  }
-};
+  eventElement: function(ev) {
+    return ev.target;
+  },
 
-Rico.eventClient=function(ev) {
-  return {x:ev.pageX, y:ev.pageY};
-};
+  eventStop: dojo.stopEvent,
 
-Rico.eventHandle=function(object, method) {
-  return { object: object, method: method };
-};
+  eventClient: function(ev) {
+    return {x:ev.pageX, y:ev.pageY};
+  },
 
-Rico.addClass=dojo.addClass;
-Rico.removeClass=dojo.removeClass;
-Rico.hasClass=dojo.hasClass;
+  eventHandle: function(object, method) {
+    return { object: object, method: method };
+  },
 
-Rico.getStyle=function(element, name) {
-  var camelCase = name.replace(/\-(\w)/g, function(all, letter){
-    return letter.toUpperCase();
-  });
-  return dojo.style(element,camelCase);
-};
+  addClass: dojo.addClass,
+  removeClass: dojo.removeClass,
+  hasClass: dojo.hasClass,
 
-Rico.setStyle=dojo.style;
-
-// tried to use dojo._abs - 1.3.0 was broken in webkit, nightlies broken on IE8
-Rico.cumulativeOffset=function(element) {
-//  var offset=dojo._abs(element);
-//  return {top:offset.y, left:offset.x};
-  element=Rico.$(element);
-  var valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-  } while (element);
-  return {left: valueL, top: valueT};
-};
+  getStyle: function(element, name) {
+    var camelCase = name.replace(/\-(\w)/g, function(all, letter){
+      return letter.toUpperCase();
+    });
+    return dojo.style(element,camelCase);
+  },
+
+  setStyle: dojo.style,
+
+  // tried to use dojo._abs - 1.3.0 was broken in webkit, nightlies broken on IE8
+  cumulativeOffset: function(element) {
+  //  var offset=dojo._abs(element);
+  //  return {top:offset.y, left:offset.x};
+    element=Rico.$(element);
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
 
-Rico.positionedOffset=function(element) {
-  element=Rico.$(element);
-  var p, valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-    if (element) {
-      p = dojo.style(element,'position');
-      if (p == 'relative' || p == 'absolute') break;
+  positionedOffset: function(element) {
+    element=Rico.$(element);
+    var p, valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        p = dojo.style(element,'position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
+
+  getDirectChildrenByTag: function(element, tagName) {
+    var kids = [];
+    var allKids = element.childNodes;
+    tagName=tagName.toLowerCase();
+    for( var i = 0 ; i < allKids.length ; i++ ) {
+      if ( allKids[i] && allKids[i].tagName && allKids[i].tagName.toLowerCase() == tagName )
+        kids.push(allKids[i]);
     }
-  } while (element);
-  return {left: valueL, top: valueT};
-};
+    return kids;
+  },
 
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  var kids = [];
-  var allKids = element.childNodes;
-  tagName=tagName.toLowerCase();
-  for( var i = 0 ; i < allKids.length ; i++ ) {
-    if ( allKids[i] && allKids[i].tagName && allKids[i].tagName.toLowerCase() == tagName )
-      kids.push(allKids[i]);
-  }
-  return kids;
-};
+  // logic borrowed from Prototype
+  _getWinDimension: function(D) {
+    if (this.isWebKit && !document.evaluate) {
+      // Safari <3.0 needs self.innerWidth/Height
+      return self['inner' + D];
+    } else if (this.isOpera && parseFloat(window.opera.version()) < 9.5) {
+      // Opera <9.5 needs document.body.clientWidth/Height
+      return document.body['client' + D]
+    } else {
+      return document.documentElement['client' + D];
+    }
+  },
 
-// logic borrowed from Prototype
-Rico._getWinDimension=function(D) {
-  if (this.isWebKit && !document.evaluate) {
-    // Safari <3.0 needs self.innerWidth/Height
-    return self['inner' + D];
-  } else if (this.isOpera && parseFloat(window.opera.version()) < 9.5) {
-    // Opera <9.5 needs document.body.clientWidth/Height
-    return document.body['client' + D]
-  } else {
-    return document.documentElement['client' + D];
-  }
-};
+  windowHeight: function() {
+    return this._getWinDimension('Height');
+  },
 
-Rico.windowHeight=function() {
-  return this._getWinDimension('Height');
-};
+  windowWidth: function() {
+    return this._getWinDimension('Width');
+  },
 
-Rico.windowWidth=function() {
-  return this._getWinDimension('Width');
-};
+  docScrollLeft: function() {
+    return dojo._docScroll().x;
+  },
 
-Rico.docScrollLeft=function() {
-  return dojo._docScroll().x;
-};
+  docScrollTop: function() {
+    return dojo._docScroll().y;
+  },
 
-Rico.docScrollTop=function() {
-  return dojo._docScroll().y;
-};
+  // Animation
+
+  fadeIn: function(element,duration,onEnd) {
+    var a=dojo.fadeIn({node:element, duration:duration});
+    if (onEnd) dojo.connect(a,"onEnd",onEnd);
+    a.play();
+  },
+
+  fadeOut: function(element,duration,onEnd) {
+    var a=dojo.fadeOut({node:element, duration:duration});
+    if (onEnd) dojo.connect(a,"onEnd",onEnd);
+    a.play();
+  },
+
+  animate: function(element,options,properties) {
+    options.node=element;
+    options.properties=properties;
+    a=dojo.animateProperty(options);
+    a.play();
+  },
+
+  // AJAX
 
-Rico.ajaxRequest=function(url,options) {
-  this.dojoSend(url,options);
-}
+  toQueryString: dojo.objectToQuery,
+
+  getJSON: function(xhr) { return dojo.fromJson(xhr.responseText); },
+
+  ajaxRequest: function(url,options) {
+    this.dojoSend(url,options);
+  }
+};
 
 Rico.ajaxRequest.prototype = {
   dojoSend : function(url,options) {
@@ -164,49 +184,22 @@ Rico.ajaxRequest.prototype = {
     var method=options.method.toUpperCase();
     dojo.xhr(method, dOptions, method=='POST');
   },
-  
+
   dojoComplete : function(dataORerror, ioArgs) {
     if (this.onComplete) this.onComplete(ioArgs.xhr);
   },
-  
+
   dojoError : function(response, ioArgs) {
     if (this.onFailure) this.onFailure(ioArgs.xhr);
   },
-  
+
   dojoLoad : function(response, ioArgs) {
     if (this.onSuccess) this.onSuccess(ioArgs.xhr);
   }
-}
-
-Rico.getJSON=function(xhr) { return dojo.fromJson(xhr.responseText); };
+};
 
 Rico.ajaxSubmit=function(form,url,options) {
   options.form=form;
   if (!options.method) options.method='post';
   new Rico.ajaxRequest(url,options);
-}
-
-Rico.toQueryString=dojo.objectToQuery;
-
-// Animation
-
-Rico.fadeIn=function(element,duration,onEnd) {
-  var a=dojo.fadeIn({node:element, duration:duration});
-  if (onEnd) dojo.connect(a,"onEnd",onEnd);
-  a.play();
-};
-
-Rico.fadeOut=function(element,duration,onEnd) {
-  var a=dojo.fadeOut({node:element, duration:duration});
-  if (onEnd) dojo.connect(a,"onEnd",onEnd);
-  a.play();
 };
-
-Rico.animate=function(element,options,properties) {
-  options.node=element;
-  options.properties=properties;
-  a=dojo.animateProperty(options);
-  a.play();
-};
-
-Rico._bindLoadEvent();
index 4923247..ff0fa05 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof Ext=='undefined') throw('This version of Rico requires the Ext-core library');
 
-
-Rico.Lib='Ext-core';
-Rico.LibVersion=Ext.version;
-Rico.extend=Ext.apply;
-Rico.trim=function(s) { return s.replace(Ext.DomQuery.trimRe,''); };
-Rico.tryFunctions = function() {
-  for (var i=0; i<arguments.length; i++) {
-    try {
-      return arguments[i]();
-    } catch(e){}
-  }
-  return null;
-};
-
-
-Rico.select=Ext.query;
-  
-Rico.eventBind=function(element, eventName, handler) {
-  Ext.EventManager.addListener(element, eventName, handler.object[handler.method], handler.object);
-};
-
-Rico.eventUnbind=function(element, eventName, handler) {
-  Ext.EventManager.removeListener(element, eventName, handler.object[handler.method], handler.object);
-};
-
-Rico.eventHandle=function(object, method) {
-  return { object: object, method: method };
-};
-
-Rico.eventElement=function(ev) {
-  return ev.target;
-};
-
-Rico.eventClient=function(ev) {
-  return {x:ev.browserEvent.clientX, y:ev.browserEvent.clientY};
-};
-
-Rico.eventStop=function(ev) {
-  ev.stopEvent();
-};
-
-Rico.eventRelatedTarget=function(ev) {
-  return ev.getRelatedTarget();
-};
-  
-Rico.eventKey=function(ev) {
-  return ev.getKey();
-};
-  
-Rico.eventLeftClick=function(ev) {
-  return ev.button===0;
-};
-  
-Rico.addClass=function(element, className) {
-  return Ext.get(element).addClass(className);
-};
-
-Rico.removeClass=function(element, className) {
-  return Ext.get(element).removeClass(className);
-};
-
-Rico.hasClass=function(element, className) {
-  return Ext.get(element).hasClass(className);
-};
-  
-Rico.getStyle=function(element, property) {
-  return Ext.get(element).getStyle(property);
-};
-Rico.setStyle=function(element, properties) {
-  return Ext.get(element).setStyle(properties);
-};
-
-// logic borrowed from Prototype
-// Ext.lib.Dom.getViewportWidth/Height includes scrollbar in Gecko browsers
-Rico._getWinDimension=function(D) {
-  if (this.isWebKit && !document.evaluate) {
-    // Safari <3.0 needs self.innerWidth/Height
-    return self['inner' + D];
-  } else if (this.isOpera && parseFloat(window.opera.version()) < 9.5) {
-    // Opera <9.5 needs document.body.clientWidth/Height
-    return document.body['client' + D]
-  } else {
-    return document.documentElement['client' + D];
-  }
-};
-
-Rico.windowHeight=function() {
-  return this._getWinDimension('Height');
-};
-
-Rico.windowWidth=function() {
-  return this._getWinDimension('Width');
-};
-
-Rico.cumulativeOffset=function(element) {
-  element=Rico.$(element);
-  var valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-  } while (element);
-  return {left: valueL, top: valueT};
-};
-
-Rico.positionedOffset=function(element) {
-  element=Rico.$(element);
-  var p, valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-    if (element) {
-      p = Ext.get(element).getStyle('position');
-      if (p == 'relative' || p == 'absolute') break;
+var Rico = {
+  Lib: 'Ext-core',
+  LibVersion: Ext.version,
+  extend: Ext.apply,
+  trim: function(s) { return s.replace(Ext.DomQuery.trimRe,''); },
+  tryFunctions: function() {
+    for (var i=0; i<arguments.length; i++) {
+      try {
+        return arguments[i]();
+      } catch(e){}
     }
-  } while (element);
-  return {left: valueL, top: valueT};
-};
-
-Rico.docScrollLeft=function() {
-  return Ext.get(document).getScroll().left;
-};
-
-Rico.docScrollTop=function() {
-  return Ext.get(document).getScroll().top;
-};
-
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  var kids = [];
-  var allKids = element.childNodes;
-  tagName=tagName.toLowerCase();
-  for( var i = 0 ; i < allKids.length ; i++ ) {
-    if ( allKids[i] && allKids[i].tagName && allKids[i].tagName.toLowerCase() == tagName )
-      kids.push(allKids[i]);
-  }
-  return kids;
-};
+    return null;
+  },
+
+  select: Ext.query,
+
+  eventBind: function(element, eventName, handler) {
+    Ext.EventManager.addListener(element, eventName, handler.object[handler.method], handler.object);
+  },
+
+  eventUnbind: function(element, eventName, handler) {
+    Ext.EventManager.removeListener(element, eventName, handler.object[handler.method], handler.object);
+  },
+
+  eventHandle: function(object, method) {
+    return { object: object, method: method };
+  },
+
+  eventElement: function(ev) {
+    return ev.target;
+  },
+
+  eventClient: function(ev) {
+    return {x:ev.browserEvent.clientX, y:ev.browserEvent.clientY};
+  },
+
+  eventStop: function(ev) {
+    ev.stopEvent();
+  },
+
+  eventRelatedTarget: function(ev) {
+    return ev.getRelatedTarget();
+  },
+
+  eventKey: function(ev) {
+    return ev.getKey();
+  },
+
+  eventLeftClick: function(ev) {
+    return ev.button===0;
+  },
+
+  addClass: function(element, className) {
+    var xElem=Ext.get(element);
+    if (!xElem.hasClass(className)) xElem.addClass(className);
+    return xElem;
+  },
+
+  removeClass: function(element, className) {
+    return Ext.get(element).removeClass(className);
+  },
+
+  hasClass: function(element, className) {
+    return Ext.get(element).hasClass(className);
+  },
+
+  getStyle: function(element, property) {
+    return Ext.get(element).getStyle(property);
+  },
+  setStyle: function(element, properties) {
+    return Ext.get(element).setStyle(properties);
+  },
+
+  // logic borrowed from Prototype
+  // Ext.lib.Dom.getViewportWidth/Height includes scrollbar in Gecko browsers
+  _getWinDimension: function(D) {
+    if (this.isWebKit && !document.evaluate) {
+      // Safari <3.0 needs self.innerWidth/Height
+      return self['inner' + D];
+    } else if (this.isOpera && parseFloat(window.opera.version()) < 9.5) {
+      // Opera <9.5 needs document.body.clientWidth/Height
+      return document.body['client' + D]
+    } else {
+      return document.documentElement['client' + D];
+    }
+  },
+
+  windowHeight: function() {
+    return this._getWinDimension('Height');
+  },
+
+  windowWidth: function() {
+    return this._getWinDimension('Width');
+  },
+
+  cumulativeOffset: function(element) {
+    element=Rico.$(element);
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
+
+  positionedOffset: function(element) {
+    element=Rico.$(element);
+    var p, valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        p = Ext.get(element).getStyle('position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
+
+  docScrollLeft: function() {
+    return Ext.get(document).getScroll().left;
+  },
+
+  docScrollTop: function() {
+    return Ext.get(document).getScroll().top;
+  },
+
+  getDirectChildrenByTag: function(element, tagName) {
+    var kids = [];
+    var allKids = element.childNodes;
+    tagName=tagName.toLowerCase();
+    for( var i = 0 ; i < allKids.length ; i++ ) {
+      if ( allKids[i] && allKids[i].tagName && allKids[i].tagName.toLowerCase() == tagName )
+        kids.push(allKids[i]);
+    }
+    return kids;
+  },
+
+  // Animation
+
+  fadeIn: function(element,duration,onEnd) {
+    Ext.get(element).fadeIn({duration:duration/1000.0, callback: onEnd});
+  },
+
+  fadeOut: function(element,duration,onEnd) {
+    Ext.get(element).fadeOut({duration:duration/1000.0, callback: onEnd});
+  },
+
+  animate: function(element,options,properties) {
+    var opts={};
+    opts.callback=options.onEnd;
+    opts.duration=options.duration/1000.0;
+    opts.width=properties.width;
+    opts.height=properties.height;
+    opts.x=properties.left;
+    opts.y=properties.top;
+    opts.opacity=properties.opacity;
+    Ext.get(element).shift(opts);
+  },
+
+  // AJAX
+
+  toQueryString: Ext.urlEncode,
+
+  getJSON: function(xhr) { return Ext.util.JSON.decode(xhr.responseText); },
+
+  ajaxRequest: function(url,options) {
+    var extOptions = {
+      success : options.onSuccess || options.onComplete,
+      failure : options.onFailure || options.onComplete,
+      method : options.method.toUpperCase(),
+      url : url,
+      form : options.form,
+      params : options.parameters
+    }
+    Ext.Ajax.request(extOptions);
+  },
 
-Rico.ajaxRequest=function(url,options) {
-  var extOptions = {
-    success : options.onSuccess || options.onComplete,
-    failure : options.onFailure || options.onComplete,
-    method : options.method.toUpperCase(),
-    url : url,
-    form : options.form,
-    params : options.parameters
+  ajaxSubmit: function(form,url,options) {
+    options.form=form;
+    if (!options.method) options.method='post';
+    Rico.ajaxRequest(url,options);
   }
-  Ext.Ajax.request(extOptions);
-}
-
-Rico.getJSON=function(xhr) { return window["eval"]("(" + xhr.responseText + ")"); };
-
-Rico.ajaxSubmit=function(form,url,options) {
-  options.form=form;
-  if (!options.method) options.method='post';
-  Rico.ajaxRequest(url,options);
-}
-Rico.toQueryString=Ext.urlEncode;
-
-// Animation
-
-Rico.fadeIn=function(element,duration,onEnd) {
-  Ext.get(element).fadeIn({duration:duration/1000.0, callback: onEnd});
-};
-
-Rico.fadeOut=function(element,duration,onEnd) {
-  Ext.get(element).fadeOut({duration:duration/1000.0, callback: onEnd});
 };
-
-Rico.animate=function(element,options,properties) {
-  var opts={};
-  opts.callback=options.onEnd;
-  opts.duration=options.duration/1000.0;
-  opts.width=properties.width;
-  opts.height=properties.height;
-  opts.x=properties.left;
-  opts.y=properties.top;
-  opts.opacity=properties.opacity;
-  Ext.get(element).shift(opts);
-};
-
-Rico._bindLoadEvent();
index 8ed4278..1b5f70a 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof glow=='undefined') throw('This version of Rico requires the glow library');
 
+var Rico = {
+  Lib: 'Glow',
+  LibVersion: glow.VERSION,
+  extend: glow.lang.apply,
+  trim: glow.lang.trim,
+  tryFunctions: function() {
+    for (var i=0; i<arguments.length; i++) {
+      try {
+        return arguments[i]();
+      } catch(e){}
+    }
+    return null;
+  },
+  _g: function(element) {
+    if (typeof element=='string')
+      element = document.getElementById(element);
+    return glow.dom.get(element);
+  },
 
-Rico.Lib='Glow';
-Rico.LibVersion=glow.VERSION;
-Rico.extend=glow.lang.apply;
-Rico.trim=glow.lang.trim;
-Rico.tryFunctions = function() {
-  for (var i=0; i<arguments.length; i++) {
-    try {
-      return arguments[i]();
-    } catch(e){}
-  }
-  return null;
-};
-Rico._g=function(element) {
-  if (typeof element=='string')
-    element = document.getElementById(element);
-  return glow.dom.get(element);
-};
+  select: function(selector, element) {
+    return element ? this._g(element).get(selector) : glow.dom.get(selector);
+  },
 
-Rico.select=function(selector, element) {
-  return element ? this._g(element).get(selector) : glow.dom.get(selector);
-};
-  
-Rico.eventBind=function(element, eventName, handler) {
-  handler.id=glow.events.addListener(Rico.$(element), eventName, handler.object[handler.method], handler.object);
-};
+  eventBind: function(element, eventName, handler) {
+    handler.id=glow.events.addListener(Rico.$(element), eventName, handler.object[handler.method], handler.object);
+  },
 
-Rico.eventUnbind=function(element, eventName, handler) {
-  glow.events.removeListener(handler.id);
-};
+  eventUnbind: function(element, eventName, handler) {
+    glow.events.removeListener(handler.id);
+  },
 
-Rico.eventHandle=function(object, method) {
-  return { object: object, method: method };
-};
+  eventHandle: function(object, method) {
+    return { object: object, method: method };
+  },
 
-Rico.eventElement=function(ev) {
-  return ev.source;
-};
+  eventElement: function(ev) {
+    return ev.source;
+  },
 
-Rico.eventClient=function(ev) {
-  return {x:ev.pageX - document.body.scrollLeft - document.documentElement.scrollLeft, 
-          y:ev.pageY - document.body.scrollTop - document.documentElement.scrollTop};
-};
+  eventClient: function(ev) {
+    return {x:ev.pageX - document.body.scrollLeft - document.documentElement.scrollLeft,
+            y:ev.pageY - document.body.scrollTop - document.documentElement.scrollTop};
+  },
 
-Rico.eventStop=function(ev) {
-  ev.preventDefault();
-  ev.stopPropagation();
-};
+  eventStop: function(ev) {
+    ev.preventDefault();
+    ev.stopPropagation();
+  },
 
-Rico.eventKey=function(ev) {
-  return ev.keyCode;
-};
+  eventKey: function(ev) {
+    return ev.keyCode;
+  },
 
-Rico.eventLeftClick=function(ev) {
-  return ev.button==0;
-};
-  
-Rico.addClass=function(element, className) {
-  return this._g(element).addClass(className);
-};
+  eventLeftClick: function(ev) {
+    return ev.button==0;
+  },
 
-Rico.removeClass=function(element, className) {
-  return this._g(element).removeClass(className);
-};
+  addClass: function(element, className) {
+    return this._g(element).addClass(className);
+  },
 
-Rico.hasClass=function(element, className) {
-  return this._g(element).hasClass(className);
-};
+  removeClass: function(element, className) {
+    return this._g(element).removeClass(className);
+  },
+
+  hasClass: function(element, className) {
+    return this._g(element).hasClass(className);
+  },
 
 /*
 ran into bugs on FF and Safari with native Glow function
-Rico.getStyle=function(element, property) {
+getStyle=function(element, property) {
   return this._g(element).css(property);
 };
 
 Use a modified version of Prototype's method
 */
-Rico.getStyle=function(element, style) {
-  element = Rico.$(element);
-  var camelCase = style.replace(/\-(\w)/g, function(all, letter){
-    return letter.toUpperCase();
-  });
-  style = style == 'float' ? 'cssFloat' : camelCase;
-  var value = element.style[style];
-  if (!value || value == 'auto') {
-    if (element.currentStyle) {
-      value=element.currentStyle[style];
-    } else if (document.defaultView) {
-      var css = document.defaultView.getComputedStyle(element, null);
-      value = css ? css[style] : null;
+  getStyle: function(element, style) {
+    element = Rico.$(element);
+    var camelCase = style.replace(/\-(\w)/g, function(all, letter){
+      return letter.toUpperCase();
+    });
+    style = style == 'float' ? 'cssFloat' : camelCase;
+    var value = element.style[style];
+    if (!value || value == 'auto') {
+      if (element.currentStyle) {
+        value=element.currentStyle[style];
+      } else if (document.defaultView) {
+        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;
-};
+    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+    return value == 'auto' ? null : value;
+  },
 
 
-Rico.setStyle=function(element, properties) {
-  var elem=this._g(element);
-  for (var prop in properties) {
-    elem.css(prop,properties[prop])
-  }
-};
+  setStyle: function(element, properties) {
+    var elem=this._g(element);
+    for (var prop in properties) {
+      elem.css(prop,properties[prop])
+    }
+  },
 
-/**
- * @returns available height, excluding scrollbar & margin
- */
-Rico.windowHeight=function() {
-  return glow.dom.get(window).height();
-};
+  /**
  * @returns available height, excluding scrollbar & margin
  */
+  windowHeight: function() {
+    return glow.dom.get(window).height();
+  },
 
-/**
- * @returns available width, excluding scrollbar & margin
- */
-Rico.windowWidth=function() {
-  return glow.dom.get(window).width();
-};
+  /**
  * @returns available width, excluding scrollbar & margin
  */
+  windowWidth: function() {
+    return glow.dom.get(window).width();
+  },
 
-Rico.positionedOffset=function(element) {
-  var p, valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-    if (element) {
-      p = glow.dom.get(element).css('position');
-      if (p == 'relative' || p == 'absolute') break;
-    }
-  } while (element);
-  return {left: valueL, top: valueT};
-};
+  positionedOffset: function(element) {
+    var p, valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        p = glow.dom.get(element).css('position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
 
-Rico.cumulativeOffset=function(element) {
-  return this._g(element).offset();
-};
+  cumulativeOffset: function(element) {
+    return this._g(element).offset();
+  },
 
-Rico._docElement=function() {
-  return (document.compatMode && document.compatMode.indexOf("CSS")!=-1) ? document.documentElement : document.getElementsByTagName("body")[0];
-},
+  _docElement: function() {
+    return (document.compatMode && document.compatMode.indexOf("CSS")!=-1) ? document.documentElement : document.getElementsByTagName("body")[0];
+  },
 
-Rico.docScrollLeft=function() {
-  return Rico._docElement.scrollLeft || window.pageXOffset || 0;
-};
+  docScrollLeft: function() {
+    return Rico._docElement.scrollLeft || window.pageXOffset || 0;
+  },
 
-Rico.docScrollTop=function() {
-  return Rico._docElement.scrollTop || window.pageYOffset || 0;
-};
+  docScrollTop: function() {
+    return Rico._docElement.scrollTop || window.pageYOffset || 0;
+  },
 
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  tagName=tagName.toLowerCase();
-  return this._g(element).children().filter(function(i) { return this.tagName && this.tagName.toLowerCase()==tagName; });
-};
+  getDirectChildrenByTag: function(element, tagName) {
+    tagName=tagName.toLowerCase();
+    return this._g(element).children().filter(function(i) { return this.tagName && this.tagName.toLowerCase()==tagName; });
+  },
+
+  // Animation
 
-Rico.getJSON=function(xhr) { return glow.data.decodeJson(xhr.responseText); };
+  fadeIn: function(element,duration,onEnd) {
+    glow.anim.fadeIn(this._g(element), duration/1000.0, {onComplete:onEnd});
+  },
+
+  fadeOut: function(element,duration,onEnd) {
+    glow.anim.fadeOut(this._g(element), duration/1000.0, {onComplete:onEnd});
+  };
+
+  animate: function(element,options,properties) {
+    var effect=glow.anim.css(this._g(element), options.duration/1000.0, properties);
+    glow.events.addListener(effect, "complete", options.onEnd);
+    effect.start();
+    return effect;
+  },
+
+  // AJAX
 
-Rico.ajaxRequest=function(url,options) {
-  this.glowSend(url,options);
-}
+  toQueryString: glow.data.encodeUrl,
+
+  getJSON: function(xhr) { return glow.data.decodeJson(xhr.responseText); },
+
+  ajaxRequest=function(url,options) {
+    this.glowSend(url,options);
+  }
+};
 
 Rico.ajaxRequest.prototype = {
   glowSend : function(url,options) {
@@ -188,41 +210,21 @@ Rico.ajaxRequest.prototype = {
       glow.net.get(url+'?'+glow.data.encodeUrl(options.parameters),options);
     }
   },
-  
+
   glowError : function(response) {
     if (this.onFailure) this.onFailure(response);
     if (this.onComplete) this.onComplete(response.nativeResponse);
   },
-  
+
   glowLoad : function(response) {
     if (this.onSuccess) this.onSuccess(response.nativeResponse);
     if (this.onComplete) this.onComplete(response.nativeResponse);
   }
-}
+};
 
 Rico.ajaxSubmit=function(form,url,options) {
   options.parameters=glow.data.encodeUrl(this._g(form).val());
   if (!options.method) options.method='post';
   url=url || form.action;
   new Rico.ajaxRequest(url,options);
-}
-Rico.toQueryString=glow.data.encodeUrl;
-
-// Animation
-
-Rico.fadeIn=function(element,duration,onEnd) {
-  glow.anim.fadeIn(this._g(element), duration/1000.0, {onComplete:onEnd});
 };
-
-Rico.fadeOut=function(element,duration,onEnd) {
-  glow.anim.fadeOut(this._g(element), duration/1000.0, {onComplete:onEnd});
-};
-
-Rico.animate=function(element,options,properties) {
-  var effect=glow.anim.css(this._g(element), options.duration/1000.0, properties);
-  glow.events.addListener(effect, "complete", options.onEnd);
-  effect.start();
-  return effect;
-};
-
-Rico._bindLoadEvent();
index 07ea288..8d0447a 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof jQuery=='undefined') throw('This version of Rico requires the jQuery library');
 
+var Rico = {
+  Lib: 'jQuery',
+  LibVersion: jQuery().jquery,
+  extend: jQuery.extend,
+  trim: jQuery.trim,
+  tryFunctions: function() {
+    for (var i=0; i<arguments.length; i++) {
+      try {
+        return arguments[i]();
+      } catch(e){}
+    }
+    return null;
+  },
 
-Rico.Lib='jQuery';
-Rico.LibVersion=jQuery().jquery;
-Rico.extend=jQuery.extend;
-Rico.trim=jQuery.trim;
-Rico.tryFunctions = function() {
-  for (var i=0; i<arguments.length; i++) {
-    try {
-      return arguments[i]();
-    } catch(e){}
-  }
-  return null;
-};
+  _j: function(element) {
+    if (typeof element=='string')
+      element = document.getElementById(element);
+    return jQuery(element);
+  },
 
+  select: function(selector, element) {
+    return element ? this._j(element).find(selector) : jQuery(selector);
+  },
 
-Rico._j=function(element) {
-  if (typeof element=='string')
-    element = document.getElementById(element);
-  return jQuery(element);
-};
-  
-Rico.select=function(selector, element) {
-  return element ? this._j(element).find(selector) : jQuery(selector);
-};
-  
-Rico.eventBind=function(element, eventName, handler) {
-  this._j(element).bind(eventName, handler);
-};
+  eventBind: function(element, eventName, handler) {
+    this._j(element).bind(eventName, handler);
+  },
 
-Rico.eventUnbind=function(element, eventName, handler) {
-  this._j(element).unbind(eventName, handler);
-};
+  eventUnbind: function(element, eventName, handler) {
+    this._j(element).unbind(eventName, handler);
+  },
 
-Rico.eventHandle=function(object, method) {
-  return function(e) {
-    return object[method].call(object,e);
-  }
-};
+  eventHandle: function(object, method) {
+    return function(e) {
+      return object[method].call(object,e);
+    }
+  },
 
-Rico.eventElement=function(ev) {
-  return ev.target;
-};
+  eventElement: function(ev) {
+    return ev.target;
+  },
 
-Rico.eventClient=function(ev) {
-  return {x:ev.clientX, y:ev.clientY};
-};
+  eventClient: function(ev) {
+    return {x:ev.clientX, y:ev.clientY};
+  },
 
-Rico.eventStop=function(ev) {
-  ev.preventDefault();
-  ev.stopPropagation();
-};
-  
-Rico.addClass=function(element, className) {
-  return this._j(element).addClass(className);
-};
+  eventStop: function(ev) {
+    ev.preventDefault();
+    ev.stopPropagation();
+  },
 
-Rico.removeClass=function(element, className) {
-  return this._j(element).removeClass(className);
-};
+  addClass: function(element, className) {
+    var j=this._j(element);
+    if (!j.hasClass(className)) j.addClass(className);
+    return j;
+  },
 
-Rico.hasClass=function(element, className) {
-  return this._j(element).hasClass(className);
-};
-  
-Rico.getStyle=function(element, property) {
-  return this._j(element).css(property);
-};
-Rico.setStyle=function(element, properties) {
-  return this._j(element).css(properties);
-};
+  removeClass: function(element, className) {
+    return this._j(element).removeClass(className);
+  },
 
-/**
- * @returns available height, excluding scrollbar & margin
- */
-Rico.windowHeight=function() {
-  return jQuery(window).height();
-};
+  hasClass: function(element, className) {
+    return this._j(element).hasClass(className);
+  },
 
-/**
- * @returns available width, excluding scrollbar & margin
- */
-Rico.windowWidth=function() {
-  return jQuery(window).width();
-};
+  getStyle: function(element, property) {
+    return this._j(element).css(property);
+  },
+  setStyle: function(element, properties) {
+    return this._j(element).css(properties);
+  },
 
-Rico.positionedOffset=function(element) {
-  return this._j(element).position();
-};
+  /**
+   * @returns available height, excluding scrollbar & margin
+   */
+  windowHeight: function() {
+    return jQuery(window).height();
+  },
 
-Rico.cumulativeOffset=function(element) {
-  return this._j(element).offset();
-};
+  /**
+   * @returns available width, excluding scrollbar & margin
+   */
+  windowWidth: function() {
+    return jQuery(window).width();
+  },
 
-Rico.docScrollLeft=function() {
-  return jQuery('html').scrollLeft();
-};
+  positionedOffset: function(element) {
+    return this._j(element).position();
+  },
 
-Rico.docScrollTop=function() {
-  return jQuery('html').scrollTop();
-};
+  cumulativeOffset: function(element) {
+    return this._j(element).offset();
+  },
 
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  return this._j(element).children(tagName);
-};
+  docScrollLeft: function() {
+    return jQuery('html').scrollLeft();
+  },
+
+  docScrollTop: function() {
+    return jQuery('html').scrollTop();
+  },
+
+  getDirectChildrenByTag: function(element, tagName) {
+    return this._j(element).children(tagName);
+  },
 
-Rico.ajaxRequest=function(url,options) {
-  this.jSend(url,options);
-}
+  toQueryString: jQuery.param,
+
+  // Animation
+
+  fadeIn: function(element,duration,onEnd) {
+    this._j(element).fadeIn(duration,onEnd);
+  },
+
+  fadeOut: function(element,duration,onEnd) {
+    this._j(element).fadeOut(duration,onEnd);
+  },
+
+  animate: function(element,options,properties) {
+    options.complete=options.onEnd;
+    this._j(element).animate(properties,options);
+  },
+
+  getJSON: jQuery.httpData ? function(xhr) { return jQuery.httpData(xhr,'json'); } : function(xhr) { return jQuery.parseJSON(xhr.responseText); },
+
+  ajaxRequest: function(url,options) {
+    this.jSend(url,options);
+  }
+};
 
 Rico.ajaxRequest.prototype = {
   jSend: function(url,options) {
@@ -137,35 +158,15 @@ Rico.ajaxRequest.prototype = {
     }
     this.xhr=jQuery.ajax(jOptions);
   },
-  
+
   jSuccess: function() {
     if (this.onSuccess) this.onSuccess(this.xhr);
   }
-}
-
-Rico.getJSON=function(xhr) { return jQuery.httpData(xhr,'json'); };
+};
 
 Rico.ajaxSubmit=function(form,url,options) {
   options.parameters=this._j(form).serialize();
   if (!options.method) options.method='post';
   url=url || form.action;
   new Rico.ajaxRequest(url,options);
-}
-Rico.toQueryString=jQuery.param;
-
-// Animation
-
-Rico.fadeIn=function(element,duration,onEnd) {
-  this._j(element).fadeIn(duration,onEnd);
-};
-
-Rico.fadeOut=function(element,duration,onEnd) {
-  this._j(element).fadeOut(duration,onEnd);
-};
-
-Rico.animate=function(element,options,properties) {
-  options.complete=options.onEnd;
-  this._j(element).animate(properties,options);
 };
-
-Rico._bindLoadEvent();
index 75c2842..ada54c3 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009, 2010 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof MooTools=='undefined') throw('This version of Rico requires the MooTools library');
 
+var Rico = {
+  Lib: 'MooTools',
+  LibVersion: MooTools.version,
+  extend: typeof($extend) != 'undefined' ? $extend : Object.append,
+  tryFunctions: typeof($try) != 'undefined' ? $try : Function.attempt,
+  trim: function(s) { return s.trim(); },
 
-Rico.Lib='MooTools';
-Rico.LibVersion=MooTools.version;
-Rico.extend=typeof($extend) != 'undefined' ? $extend : Object.append;
-Rico.tryFunctions = typeof($try) != 'undefined' ? $try : Function.attempt;
-Rico.trim=function(s) { return s.trim(); };
+  select: function(selector, element) {
+    return $(element || document).getElements(selector);
+  },
 
-Rico.select=function(selector, element) {
-  return $(element || document).getElements(selector);
-};
-  
-Rico.eventBind=function(element, eventName, handler) {
-  $(element).addEvent(eventName, handler);
-};
+  eventBind: function(element, eventName, handler) {
+    $(element).addEvent(eventName, handler);
+  },
 
-Rico.eventUnbind=function(element, eventName, handler) {
-  $(element).removeEvent(eventName, handler);
-};
+  eventUnbind: function(element, eventName, handler) {
+    $(element).removeEvent(eventName, handler);
+  },
 
-Rico.eventHandle=function(object, method) {
-  return function(e) { object[method].call(object,e); };
-};
+  eventHandle: function(object, method) {
+    return function(e) { object[method].call(object,e); };
+  },
 
-Rico.eventElement=function(ev) {
-  return ev.target;
-};
+  eventElement: function(ev) {
+    return ev.target;
+  },
 
-Rico.eventClient=function(ev) {
-  return ev.client;
-};
+  eventClient: function(ev) {
+    return ev.client;
+  },
 
-Rico.eventKey=function(ev) {
-  return ev.code;
-};
+  eventKey: function(ev) {
+    return ev.code;
+  },
 
-Rico.eventStop=function(ev) {
-  ev.stop();
-};
+  eventStop: function(ev) {
+    ev.stop();
+  },
 
-Rico.eventLeftClick=function(ev) {
-  return !ev.rightClick;
-};
-  
-Rico.addClass=function(element, className) {
-  return $(element).addClass(className);
-};
+  eventLeftClick: function(ev) {
+    return !ev.rightClick;
+  },
 
-Rico.removeClass=function(element, className) {
-  return $(element).removeClass(className);
-};
+  addClass: function(element, className) {
+    return $(element).addClass(className);
+  },
 
-Rico.hasClass=function(element, className) {
-  return $(element).hasClass(className);
-};
-  
-Rico.getStyle=function(element, property) {
-  return $(element).getStyle(property);
-};
+  removeClass: function(element, className) {
+    return $(element).removeClass(className);
+  },
 
-Rico.setStyle=function(element, properties) {
-  return $(element).setStyles(properties);
-};
+  hasClass: function(element, className) {
+    return $(element).hasClass(className);
+  },
 
-/**
- * @returns available height, excluding scrollbar & margin
- */
-Rico.windowHeight=function() {
-  return Window.getSize().y;
-};
+  getStyle: function(element, property) {
+    return $(element).getStyle(property);
+  },
 
-/**
- * @returns available width, excluding scrollbar & margin
- */
-Rico.windowWidth=function() {
-  return Window.getSize().x;
-};
+  setStyle: function(element, properties) {
+    return $(element).setStyles(properties);
+  },
 
-Rico._fixOffsets=function(o) {
-  return {top: o.y, left: o.x};
-}
-
-Rico.positionedOffset=function(element) {
-  var p, valueT = 0, valueL = 0;
-  do {
-    valueT += element.offsetTop  || 0;
-    valueL += element.offsetLeft || 0;
-    element = element.offsetParent;
-    if (element) {
-      p = $(element).getStyle('position');
-      if (p == 'relative' || p == 'absolute') break;
-    }
-  } while (element);
-  return {left: valueL, top: valueT};
-};
+  /**
+   * @returns available height, excluding scrollbar & margin
+   */
+  windowHeight: function() {
+    return Window.getSize().y;
+  },
 
-Rico.cumulativeOffset=function(element) {
-  return this._fixOffsets($(element).getPosition());
-};
+  /**
+   * @returns available width, excluding scrollbar & margin
+   */
+  windowWidth: function() {
+    return Window.getSize().x;
+  },
 
-Rico.docScrollLeft=function() {
-  return Window.getScroll().x;
-};
+  _fixOffsets: function(o) {
+    return {top: o.y, left: o.x};
+  },
 
-Rico.docScrollTop=function() {
-  return Window.getScroll().y;
-};
+  positionedOffset: function(element) {
+    var p, valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        p = $(element).getStyle('position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return {left: valueL, top: valueT};
+  },
 
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  return $(element).getChildren(tagName);
-};
+  cumulativeOffset: function(element) {
+    return this._fixOffsets($(element).getPosition());
+  },
+
+  docScrollLeft: function() {
+    return Window.getScroll().x;
+  },
+
+  docScrollTop: function() {
+    return Window.getScroll().y;
+  },
+
+  getDirectChildrenByTag: function(element, tagName) {
+    return $(element).getChildren(tagName);
+  },
+
+  // Animation
+
+  fadeIn: function(element,duration,onEnd) {
+    var a = new Fx.Tween(element, {duration:duration, onComplete:onEnd});
+    a.start('opacity', 1);
+  },
+
+  fadeOut: function(element,duration,onEnd) {
+    var a = new Fx.Tween(element, {duration:duration, onComplete:onEnd});
+    a.start('opacity', 0);
+  },
 
-Rico.ajaxRequest=function(url,options) {
-  this.mooSend(url,options);
-}
+  animate: function(element,options,properties) {
+    options.onComplete=options.onEnd;
+    var effect=new Fx.Morph(element,options);
+    effect.start(properties);
+    return effect;
+  },
+
+  // AJAX
+
+  getJSON: function(xhr) { return JSON.decode(xhr.responseText,true); },
+
+  toQueryString: typeof(Hash) != 'undefined' ? Hash.toQueryString : Object.toQueryString,
+
+  ajaxRequest: function(url,options) {
+    this.mooSend(url,options);
+  }
+};
 
 Rico.ajaxRequest.prototype = {
   mooSend : function(url,options) {
@@ -145,43 +171,19 @@ Rico.ajaxRequest.prototype = {
     this.mooRequest = new Request(mooOptions);
     this.mooRequest.send();
   },
-  
+
   mooSuccess : function() {
     if (this.onSuccess) this.onSuccess(this.mooRequest.xhr);
   },
-  
+
   mooComplete : function() {
     if (this.onComplete) this.onComplete(this.mooRequest.xhr);
   }
-}
-
-Rico.getJSON=function(xhr) { return JSON.decode(xhr.responseText,true); };
+};
 
 Rico.ajaxSubmit=function(form,url,options) {
   options.parameters=$(form).toQueryString();
   if (!options.method) options.method='post';
   url=url || form.action;
   new Rico.ajaxRequest(url,options);
-}
-Rico.toQueryString=typeof(Hash) != 'undefined' ? Hash.toQueryString : Object.toQueryString;
-
-// Animation
-
-Rico.fadeIn=function(element,duration,onEnd) {
-  var a = new Fx.Tween(element, {duration:duration, onComplete:onEnd});
-  a.start('opacity', 1);
 };
-
-Rico.fadeOut=function(element,duration,onEnd) {
-  var a = new Fx.Tween(element, {duration:duration, onComplete:onEnd});
-  a.start('opacity', 0);
-};
-
-Rico.animate=function(element,options,properties) {
-  options.onComplete=options.onEnd;
-  var effect=new Fx.Morph(element,options);
-  effect.start(properties);
-  return effect;
-};
-
-Rico._bindLoadEvent();
index 792b9d1..9ae3001 100644 (file)
@@ -1,5 +1,5 @@
 /**
-  *  Copyright (c) 2009 Matt Brown
+  *  Copyright (c) 2009-2011 Matt Brown
   *
   *  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
 
 if (typeof Prototype=='undefined') throw('This version of Rico requires the Prototype library');
 
-Rico.Lib='Prototype';
-Rico.LibVersion=Prototype.Version;
-Rico.extend=Object.extend;
-Rico.tryFunctions=Try.these;
-Rico.trim=function(s) { return s.strip(); };
-
-Rico.toQueryString=Object.toQueryString;
-Rico.ajaxRequest=Ajax.Request;
-
-Rico.ajaxSubmit=function(form,url,options) {
-  options.parameters=Form.serialize(form);
-  if (!options.method) options.method='post';
-  url=url || form.action;
-  new Ajax.Request(url,options);
-}
-
-Rico.getJSON=function(xhr) { return xhr.responseJSON; };
-
-Rico.select=function(selector, element) {
-  return element ? $(element).select(selector) : $$(selector);
-};
-  
-Rico.eventBind=Event.observe;
-Rico.eventUnbind=Event.stopObserving;
-Rico.eventElement=Event.element;
-Rico.eventStop=Event.stop;
-Rico.eventClient=function(ev) {
-  return {x:ev.clientX, y:ev.clientY};
-};
-
-Rico.eventHandle=function(object, method) {
-  return object[method].bindAsEventListener(object);
-};
+var Rico = {
+  Lib: 'Prototype',
+  LibVersion: Prototype.Version,
+  extend: Object.extend,
+  tryFunctions: Try.these,
+  trim: function(s) { return s.strip(); },
+
+  toQueryString: Object.toQueryString,
+  ajaxRequest: Ajax.Request,
+  ajaxSubmit: function(form,url,options) {
+    options.parameters=Form.serialize(form);
+    if (!options.method) options.method='post';
+    url=url || form.action;
+    new Ajax.Request(url,options);
+  },
 
-Rico.addClass=Element.addClassName;
-Rico.removeClass=Element.removeClassName;
-Rico.hasClass=Element.hasClassName;
+  getJSON: function(xhr) { return xhr.responseJSON; },
 
-Rico.getStyle=Element.getStyle;
-Rico.setStyle=Element.setStyle;
-Rico.windowHeight=function() {
-  return document.viewport.getHeight();
-};
-Rico.windowWidth=function() {
-  return document.viewport.getWidth();
-};
-Rico.positionedOffset=function(element) {
-  return $(element).positionedOffset();
-};
-Rico.cumulativeOffset=function(element) {
-  return $(element).cumulativeOffset();
-};
+  select: function(selector, element) {
+    return element ? $(element).select(selector) : $$(selector);
+  },
+    
+  eventBind: Event.observe,
+  eventUnbind: Event.stopObserving,
+  eventElement: Event.element,
+  eventStop: Event.stop,
+  eventClient: function(ev) {
+    return {x:ev.clientX, y:ev.clientY};
+  },
 
-Rico.docScrollLeft=function() {
-  return document.viewport.getScrollOffsets().left;
-};
+  eventHandle: function(object, method) {
+    return object[method].bindAsEventListener(object);
+  },
 
-Rico.docScrollTop=function() {
-  return document.viewport.getScrollOffsets().top;
-};
+  addClass: Element.addClassName,
+  removeClass: Element.removeClassName,
+  hasClass: Element.hasClassName,
 
-Rico.getDirectChildrenByTag=function(element, tagName) {
-  tagName=tagName.toLowerCase();
-  return $(element).childElements().inject([],function(result,child) {
-    if (child.tagName && child.tagName.toLowerCase()==tagName) result.push(child);
-    return result;});
+  getStyle: Element.getStyle,
+  setStyle: Element.setStyle,
+  windowHeight: function() {
+    return document.viewport.getHeight();
+  },
+  windowWidth: function() {
+    return document.viewport.getWidth();
+  },
+  positionedOffset: function(element) {
+    return $(element).positionedOffset();
+  },
+  cumulativeOffset: function(element) {
+    return $(element).cumulativeOffset();
+  },
+  docScrollLeft: function() {
+    return document.viewport.getScrollOffsets().left;
+  },
+  docScrollTop: function() {
+    return document.viewport.getScrollOffsets().top;
+  },
+  getDirectChildrenByTag: function(element, tagName) {
+    tagName=tagName.toLowerCase();
+    return $(element).childElements().inject([],function(result,child) {
+      if (child.tagName && child.tagName.toLowerCase()==tagName) result.push(child);
+      return result;});
+  }
 };
 
-
 // Animation
 
 Rico._animate=Class.create({
@@ -144,5 +141,3 @@ Rico.fadeIn=function(element,duration,onEnd) {
 Rico.fadeOut=function(element,duration,onEnd) {
   new Rico._animate(element, {duration:duration, onEnd:onEnd}, {opacity:0.0})
 };
-
-Rico._bindLoadEvent();
index 198ee4f..27b7477 100644 (file)
@@ -3,8 +3,9 @@
  Localization strings for German
  Initial translator: rainer@langheiter@.com
  May 08: minor changes by klaus
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='de';
 
index d717c79..8200337 100644 (file)
@@ -1,8 +1,9 @@
 /*****************************************************************
- ricoLocale_es.js - a component of Rico 2.0
+ ricoLocale_es.js - a component of Rico 3
  Localization strings for Spanish
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='es';\r
 \r
index 1440e5e..05d40e0 100644 (file)
@@ -1,8 +1,9 @@
 /*****************************************************************
- ricoLocale_fr.js - a component of Rico 2.0
+ ricoLocale_fr.js - a component of Rico 3
  Localization strings for French
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='fr';
 
index ff0834c..801baf9 100644 (file)
@@ -1,8 +1,9 @@
 /*****************************************************************
- ricoLocale_it.js - a component of Rico 2.0
+ ricoLocale_it.js - a component of Rico 3
  Localization strings for Italian
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='it';\r
 \r
index e98d6b2..94a4ba8 100644 (file)
@@ -1,9 +1,10 @@
 /*****************************************************************
- ricoLocale_ja.js - a component of Rico 2.0
+ ricoLocale_ja.js - a component of Rico 3
  Localization strings for Japanese
  Initial translator: Nobuhito Takeuchi
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='ja';
 
index e19b6ae..4a826be 100644 (file)
-/*****************************************************************
- ricoLocale_ko.js - a component of Rico 2.0
+/*****************************************************************
+ ricoLocale_ko.js - a component of Rico 3
  Localization strings for Korean
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='ko';
 
 // used in ricoLiveGrid.js
 
-Rico.addPhraseId('bookmarkExact',"ÃÑ $3 Áß $1 ~ $2");
-Rico.addPhraseId('bookmarkAbout',"ÃÑ ¾à $3 Áß $1 ~ $2");
-Rico.addPhraseId('bookmarkNoRec',"ÀÚ·á°¡ ¾ø½À´Ï´Ù.");
-Rico.addPhraseId('bookmarkNoMatch',"Á¶°Ç¿¡ ÀÏÄ¡Çϴ ÀÚ·á°¡ ¾ø½À´Ï´Ù.");
-Rico.addPhraseId('bookmarkLoading',"ºÒ·¯¿À´Â Áß......");
-Rico.addPhraseId('sorting',"Á¤·Ä Áß......");
-Rico.addPhraseId('exportStatus',"$1 ¹ø° ¿­À» Àü´ÞÇÏ°í ÀÖ½À´Ï´Ù.");
-Rico.addPhraseId('filterAll',"(¸ðµÎ)");
-Rico.addPhraseId('filterBlank',"(¾ø½¿)");
-Rico.addPhraseId('filterEmpty',"(ºó)");
-Rico.addPhraseId('filterNotEmpty',"(ºñÁö ¾ÊÀº)");
-Rico.addPhraseId('filterLike',"$1 °ú À¯»çÇÑ");
-Rico.addPhraseId('filterNot',"$1 ÀÌ ¾Æ´Ñ");
-Rico.addPhraseId('requestError',"ÀÔ·ÂÇϽŠ¿äûÀÌ ¿À·ù¸¦ ¹ÝȯÇß½À´Ï´Ù:\n$1");
-Rico.addPhraseId('keywordPrompt',"ªOÀ¸½Ã·Á´Â Å°¿öµå¸¦ ÀÔ·ÂÇϽʽÿÀ. ( * Å°µµ »ç¿ëÇϽǠ¼ö ÀÖ½À´Ï´Ù.):");
+Rico.addPhraseId('bookmarkExact',"총 $3 중 $1 ~ $2");
+Rico.addPhraseId('bookmarkAbout',"총 약 $3 중 $1 ~ $2");
+Rico.addPhraseId('bookmarkNoRec',"자료가 없습니다.");
+Rico.addPhraseId('bookmarkNoMatch',"조건에 일치하는 자료가 없습니다.");
+Rico.addPhraseId('bookmarkLoading',"불러오는 중...");
+Rico.addPhraseId('sorting',"정렬 중...");
+Rico.addPhraseId('exportStatus',"$1 번째 열을 전달하고 있습니다.");
+Rico.addPhraseId('filterAll',"(모두)");
+Rico.addPhraseId('filterBlank',"(없슴)");
+Rico.addPhraseId('filterEmpty',"()");
+Rico.addPhraseId('filterNotEmpty',"(비지 않은)");
+Rico.addPhraseId('filterLike',"$1 과 유사한");
+Rico.addPhraseId('filterNot',"$1 이 아닌");
+Rico.addPhraseId('requestError',"입력하신 요청이 오류를 반환했습니다:\n$1");
+Rico.addPhraseId('keywordPrompt',"찿으시려는 키워드를 입력하십시오. ( * 키도 사용하실 수 있습니다.):");
 
 // used in ricoLiveGridMenu.js
 
-Rico.addPhraseId('gridmenuSortBy',"$1 À¸·Î Á¤·Ä");
-Rico.addPhraseId('gridmenuSortAsc',"¿À¸§Â÷¼ø");
-Rico.addPhraseId('gridmenuSortDesc',"³»¸²Â÷¼ø");
-Rico.addPhraseId('gridmenuFilterBy',"$1 À¸·Î Ã£±â");
-Rico.addPhraseId('gridmenuRefresh',"´Ù½Ãº¸±â");
-Rico.addPhraseId('gridmenuChgKeyword',"Å°¿öµå ¹Ù²Ù±â...");
-Rico.addPhraseId('gridmenuExcludeAlso',"ÀÌ °ªµµ Á¦¿Ü");
-Rico.addPhraseId('gridmenuInclude',"ÀÌ °ª¸¸ Æ÷ÇÔ");
-Rico.addPhraseId('gridmenuGreaterThan',"ÀÌ °ªº¸´Ù Å©°Å³ª °°´Ù.");
-Rico.addPhraseId('gridmenuLessThan',"ÀÌ °ªº¸´Ù À۰ųª °°´Ù.");
-Rico.addPhraseId('gridmenuContains',"°ª(Å°¿öµå)À» Æ÷ÇÔ.");
-Rico.addPhraseId('gridmenuExclude',"ÀÌ °ªÀº Á¦¿Ü.");
-Rico.addPhraseId('gridmenuRemoveFilter',"ÇÊÅÍ ¾ø¾Ö±â");
-Rico.addPhraseId('gridmenuRemoveAll',"¸ðµç ÇÊÅÍ ¾ø¾Ö±â");
-
-Rico.addPhraseId('gridmenuExport',"Àμâ/³»º¸³»±â");
-Rico.addPhraseId('gridmenuExportVis2Web',"º¸À̴ Çà À¥ÆäÀÌÁö·Î");
-Rico.addPhraseId('gridmenuExportAll2Web',"¸ðµç Çà À¥ÆäÀÌÁö·Î");
-Rico.addPhraseId('gridmenuExportVis2SS',"º¸À̴ Çà °è»êÆÇÀ¸·Î(¿¢¼¿)·Î");
-Rico.addPhraseId('gridmenuExportAll2SS',"¸ðµç Çà °è»êÆÇÀ¸·Î(¿¢¼¿)·Î");
-
-Rico.addPhraseId('gridmenuHideShow',"¼û±â±â/º¸À̱â");
-Rico.addPhraseId('gridmenuChooseCols',"¿­ ¼±ÅÃ...");
-Rico.addPhraseId('gridmenuHide',"$1 ¼û±â±â");
-Rico.addPhraseId('gridmenuShow',"$1 º¸À̱â");
-Rico.addPhraseId('gridmenuShowAll',"¸ðµÎ º¸À̱â");
+Rico.addPhraseId('gridmenuSortBy',"$1 으로 정렬");
+Rico.addPhraseId('gridmenuSortAsc',"오름차순");
+Rico.addPhraseId('gridmenuSortDesc',"내림차순");
+Rico.addPhraseId('gridmenuFilterBy',"$1 으로 찾기");
+Rico.addPhraseId('gridmenuRefresh',"다시보기");
+Rico.addPhraseId('gridmenuChgKeyword',"키워드 바꾸기...");
+Rico.addPhraseId('gridmenuExcludeAlso',"이 값도 제외");
+Rico.addPhraseId('gridmenuInclude',"이 값만 포함");
+Rico.addPhraseId('gridmenuGreaterThan',"이 값보다 크거나 같다.");
+Rico.addPhraseId('gridmenuLessThan',"이 값보다 작거나 같다.");
+Rico.addPhraseId('gridmenuContains',"값(키워드)을 포함.");
+Rico.addPhraseId('gridmenuExclude',"이 값은 제외.");
+Rico.addPhraseId('gridmenuRemoveFilter',"필터 없애기");
+Rico.addPhraseId('gridmenuRemoveAll',"모든 필터 없애기");
+
+Rico.addPhraseId('gridmenuExport',"인쇄/내보내기");
+Rico.addPhraseId('gridmenuExportVis2Web',"보이는 행 웹페이지로");
+Rico.addPhraseId('gridmenuExportAll2Web',"모든 행 웹페이지로");
+Rico.addPhraseId('gridmenuExportVis2SS',"보이는 행 계산판으로(엑셀)로");
+Rico.addPhraseId('gridmenuExportAll2SS',"모든 행 계산판으로(엑셀)로");
+
+Rico.addPhraseId('gridmenuHideShow',"숨기기/보이기");
+Rico.addPhraseId('gridmenuChooseCols',"열 선택...");
+Rico.addPhraseId('gridmenuHide',"$1 숨기기");
+Rico.addPhraseId('gridmenuShow',"$1 보이기");
+Rico.addPhraseId('gridmenuShowAll',"모두 보이기");
 
 // used in ricoLiveGridAjax.js
 
-Rico.addPhraseId('sessionExpireMinutes',"ºÐ ³²¾Ò½À´Ï´Ù. (¼¼¼Ç)");
+Rico.addPhraseId('sessionExpireMinutes',"분 남았습니다. (세션)");
 //could you please, change the above format in this way? $1 minutes before ........
-Rico.addPhraseId('sessionExpired',"³¡³µ½À´Ï´Ù.");
-Rico.addPhraseId('requestTimedOut',"ÀÚ·á¿äûÀÌ Á¦ÇÑ ½Ã°£À» ÃÊ°úÇß½À´Ï´Ù!");
-Rico.addPhraseId('waitForData',"ÀڷḦ ±â´Ù¸®°í ÀÖ½À´Ï´Ù......");
-Rico.addPhraseId('httpError',"HTTP ¿À·ù¸¦ ¹Þ¾Ò½À´Ï´Ù: $1");
-Rico.addPhraseId('invalidResponse',"¼­¹ö°¡ ºÎÀûÀýÇÑ ´äº¯À» º¸³Â½À´Ï´Ù.");
+Rico.addPhraseId('sessionExpired',"끝났습니다.");
+Rico.addPhraseId('requestTimedOut',"자료요청이 제한 시간을 초과했습니다!");
+Rico.addPhraseId('waitForData',"자료를 기다리고 있습니다......");
+Rico.addPhraseId('httpError',"HTTP 오류를 받았습니다: $1");
+Rico.addPhraseId('invalidResponse',"서버가 부적절한 답변을 보냈습니다.");
 
 // used in ricoLiveGridCommon.js
 
-Rico.addPhraseId('gridChooseCols',"¿­ ¼±ÅÃ");
-Rico.addPhraseId('exportComplete',"³»º¸³»±â ¿Ï·á.");
-Rico.addPhraseId('exportInProgress',"³»º¸³»´Â ÁßÀÔ´Ï´Ù.");
-Rico.addPhraseId('showFilterRow',"ÇÊÅÍ Çà º¸À̱â");  // img alt text
-Rico.addPhraseId('hideFilterRow',"ÇÊÅÍ Çà ¼û±â±â");  // img alt text
+Rico.addPhraseId('gridChooseCols',"열 선택");
+Rico.addPhraseId('exportComplete',"내보내기 완료.");
+Rico.addPhraseId('exportInProgress',"내보내는 중입니다.");
+Rico.addPhraseId('showFilterRow',"필터 행 보이기");  // img alt text
+Rico.addPhraseId('hideFilterRow',"필터 행 숨기기");  // img alt text
 
 // used in ricoLiveGridForms.js
 
-Rico.addPhraseId('selectNone',"(¼±Åþø½¿)");
-Rico.addPhraseId('selectNewVal',"(»õ °ª)");
+Rico.addPhraseId('selectNone',"(선택없슴)");
+Rico.addPhraseId('selectNewVal',"(새 값)");
 Rico.addPhraseId('record',"record");
-Rico.addPhraseId('thisRecord',"ÀÌ $1");
-Rico.addPhraseId('confirmDelete',"$1À» »èÁ¦ÇϽðڽÀ´Ï±î?");
-Rico.addPhraseId('deleting',"»èÁ¦ Áß......");
-Rico.addPhraseId('formPleaseEnter',"$1 ¿¡ ÀûÀýÇÑ °ªÀ» ÀÔ·ÂÇϽʽÿÀ.");
-Rico.addPhraseId('formInvalidFmt',"$1 ¿¡°Ô ÀûÀýÇÑ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.");
-Rico.addPhraseId('formOutOfRange',"$1 ¿¡ ÀûÀýÇÑ ¹üÀ§¸¦ ¹þ¾î³µ½À´Ï´Ù.");
-Rico.addPhraseId('formNewValue',"»õ °ª");
-Rico.addPhraseId('saving',"ÀúÀå Áß......");
-Rico.addPhraseId('clear',"ºñ¿ì±â");
-Rico.addPhraseId('close',"´Ý±â");
-Rico.addPhraseId('saveRecord',"$1 ÀúÀå");
-Rico.addPhraseId('cancel',"Ãë¼Ò");
-Rico.addPhraseId('editRecord',"$1 ¼öÁ¤");
-Rico.addPhraseId('deleteRecord',"$1 »èÁ¦");
-Rico.addPhraseId('cloneRecord',"$1 º¹Á¦");
-Rico.addPhraseId('addRecord',"»õ $1 Ãß°¡");
-Rico.addPhraseId('addedSuccessfully',"$1 Àº ¼º°øÀûÀ¸·Î Ãß°¡µÇ¾ú½À´Ï´Ù.");
-Rico.addPhraseId('deletedSuccessfully',"$1 Àº ¼º°øÀûÀ¸·Î »èÁ¦µÇ¾ú½À´Ï´Ù.");
-Rico.addPhraseId('updatedSuccessfully',"$1 Àº ¼º°øÀûÀ¸·Î ¼öÁ¤µÇ¾ú½À´Ï´Ù.");
+Rico.addPhraseId('thisRecord'," $1");
+Rico.addPhraseId('confirmDelete',"$1을 삭제하시겠습니까?");
+Rico.addPhraseId('deleting',"삭제 중......");
+Rico.addPhraseId('formPleaseEnter',"$1 에 적절한 값을 입력하십시오.");
+Rico.addPhraseId('formInvalidFmt',"$1 에게 적절한 형식이 아닙니다.");
+Rico.addPhraseId('formOutOfRange',"$1 에 적절한 범위를 벗어났습니다.");
+Rico.addPhraseId('formNewValue',"새 값");
+Rico.addPhraseId('saving',"저장 중......");
+Rico.addPhraseId('clear',"비우기");
+Rico.addPhraseId('close',"닫기");
+Rico.addPhraseId('saveRecord',"$1 저장");
+Rico.addPhraseId('cancel',"취소");
+Rico.addPhraseId('editRecord',"$1 수정");
+Rico.addPhraseId('deleteRecord',"$1 삭제");
+Rico.addPhraseId('cloneRecord',"$1 복제");
+Rico.addPhraseId('addRecord',"새 $1 추가");
+Rico.addPhraseId('addedSuccessfully',"$1 은 성공적으로 추가되었습니다.");
+Rico.addPhraseId('deletedSuccessfully',"$1 은 성공적으로 삭제되었습니다.");
+Rico.addPhraseId('updatedSuccessfully',"$1 은 성공적으로 수정되었습니다.");
 
 // used in ricoTree.js
 
-Rico.addPhraseId('treeSave',"¼±Åÿµ¿ª ÀúÀå");
-Rico.addPhraseId('treeClear',"¸ðµÎ ºñ¿ì±â/¿ø»óÅ·Î");
+Rico.addPhraseId('treeSave',"선택영역 저장");
+Rico.addPhraseId('treeClear',"모두 비우기/원상태로");
 
 // used in ricoCalendar.js
 
-Rico.addPhraseId('calToday',"¿À´ÃÀº $3³â $4¿ù $1ÀÏ ÀÔ´Ï´Ù.");  // $1=day, $2=monthabbr, $3=year, $4=month number
+Rico.addPhraseId('calToday',"오늘은 $3년 $4월 $1일 입니다.");  // $1=day, $2=monthabbr, $3=year, $4=month number
 Rico.addPhraseId('calWeekHdg',"Wk");
-Rico.addPhraseId('calYearRange',"$1³â ºÎÅÍ $2³â ±îÁö)");
-Rico.addPhraseId('calInvalidYear',"³âµµ°¡ ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù.");
+Rico.addPhraseId('calYearRange',"$1년 부터 $2년 까지)");
+Rico.addPhraseId('calInvalidYear',"년도가 적절하지 않습니다.");
 
 
 // Date & number formats
@@ -114,5 +115,5 @@ Rico.thouSep=","
 Rico.decPoint="."
 Rico.dateFmt="yyyy/mm/dd"
 
-Rico.monthNames=['1¿ù','2¿ù', '3¿ù', '4¿ù', '5¿ù','6¿ù', '7¿ù','8¿ù','9¿ù','10¿ù','11¿ù','12¿ù']
-Rico.dayNames=['ÀÏ','¿ù','È­','¼ö','¸ñ','±Ý','Åä']
+Rico.monthNames=['1월','2월', '3월', '4월', '5월','6월', '7월','8월','9월','10월','11월','12월']
+Rico.dayNames=['일','월','화','수','목','금','토']
index faca24f..c3b74e6 100644 (file)
@@ -1,8 +1,9 @@
 /*****************************************************************
- ricoLocale_pt.js - a component of Rico 2.0
+ ricoLocale_pt.js - a component of Rico 3
  Localization strings for Portugese
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='pt';\r
 \r
index b7c61f2..f593d79 100644 (file)
@@ -2,8 +2,9 @@
  Page : ricoLocale_ru.js
  Description : russian localization strings
  Version 0.1 (revisions by Alexey Uvarov,Illiya Gannitskiy)
- If you would like to include translations for another language, 
- please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='ru';
 
index f076645..c7f3ce7 100644 (file)
@@ -2,10 +2,11 @@
  Page : ricoLocale_uk.js
  Description : ukrainian localization strings
  Version 0.1 (revisions by Alexey Uvarov,Illiya Gannitskiy)
- If you would like to include translations for another language, 
- please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
-Rico.langCode='ua';
+Rico.langCode='uk';  // uk-UA
 
 // used in ricoLiveGrid.js
 
index d8daa09..e4d6fb3 100644 (file)
@@ -1,9 +1,10 @@
 /*****************************************************************
- ricoLocale_zh.js - a component of Rico 2.0
+ ricoLocale_zh.js - a component of Rico 3
  Localization strings for Simplified Chinese
  Initial translator: Xinjun Liu
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
+ If you have better translations, or would like to include translations for another language, 
+ please post them on http://sourceforge.net/projects/openrico/
 ******************************************************************/
 Rico.langCode='zh';
 
index b02d1bf..9215cf8 100644 (file)
@@ -1,3 +1,385 @@
+Rico.Version="3.0b2";
+Rico.theme={};
+Rico.onLoadCallbacks=[];
+Rico.windowIsLoaded=false;
+Rico.inputtypes={search:0,number:0,range:0,color:0,tel:0,url:0,email:0,date:0,month:0,week:0,time:0,datetime:0,"datetime-local":0};
+Rico.windowLoaded=function(){this.windowIsLoaded=true;
+if(typeof Rico_CONFIG=="object"){var b=document.createElement("style");
+document.getElementsByTagName("head")[0].appendChild(b);
+if(!window.createPopup){b.appendChild(document.createTextNode(""))
+}var a=document.styleSheets[document.styleSheets.length-1];
+this.addCssBackgroundRule(a,".rico-icon",Rico_CONFIG.imgIcons,"no-repeat");
+this.addCssBackgroundRule(a,".ricoLG_Resize",Rico_CONFIG.imgResize,"repeat");
+if(Rico_CONFIG.imgHeading){var c="repeat-x";
+var e="left center";
+this.addCssBackgroundRule(a,"tr.ricoLG_hdg th",Rico_CONFIG.imgHeading,c,e);
+this.addCssBackgroundRule(a,"tr.ricoLG_hdg td",Rico_CONFIG.imgHeading,c,e);
+this.addCssBackgroundRule(a,"table.ricoLiveGrid thead td",Rico_CONFIG.imgHeading,c,e);
+this.addCssBackgroundRule(a,"table.ricoLiveGrid thead th",Rico_CONFIG.imgHeading,c,e);
+this.addCssBackgroundRule(a,".ricoTitle",Rico_CONFIG.imgHeading,c,e);
+this.addCssBackgroundRule(a,".Rico_accTitle",Rico_CONFIG.imgHeading,c,e)
+}if(Rico_CONFIG.enableLogging){this.enableLogging()
+}if(Rico_CONFIG.enableHTML5){this._CheckInputTypes()
+}}Rico.writeDebugMsg=Rico.log;
+Rico.log("Processing callbacks");
+while(this.onLoadCallbacks.length>0){var d=this.onLoadCallbacks.shift();
+if(d){d()
+}}};
+Rico.addCssBackgroundRule=function(d,b,c,e,a){if(!c){return
+}this.addCssRule(d,b,"background-image:url('"+c+"')");
+this.addCssRule(d,b,"background-repeat:"+e);
+if(a){this.addCssRule(d,b,"background-position:"+a)
+}};
+Rico.addCssRule=function(b,a,c){if(b.addRule){b.addRule(a,c)
+}else{if(b.insertRule){b.insertRule(a+" { "+c+" }",0)
+}else{alert("unable to add rule: "+c)
+}}};
+Rico._CheckInputTypes=function(){var a=document.createElement("input");
+for(var b in this.inputtypes){a.setAttribute("type","text");
+a.setAttribute("type",b);
+this.inputtypes[b]=(a.type!=="text")
+}};
+Rico.onLoad=function(b,a){if(this.windowIsLoaded){b()
+}else{if(a){this.onLoadCallbacks.unshift(b)
+}else{this.onLoadCallbacks.push(b)
+}}};
+Rico.isKonqueror=navigator.userAgent.toLowerCase().indexOf("konqueror")>-1;
+Rico.isIE=!!(window.attachEvent&&navigator.userAgent.indexOf("Opera")===-1);
+Rico.isOpera=navigator.userAgent.indexOf("Opera")>-1;
+Rico.isWebKit=navigator.userAgent.indexOf("AppleWebKit/")>-1;
+Rico.isGecko=navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")===-1;
+Rico.ieVersion=/MSIE (\d+\.\d+);/.test(navigator.userAgent)?new Number(RegExp.$1):null;
+Rico.startTime=new Date();
+Rico.timeStamp=function(){var a=new Date();
+return(a.getTime()-this.startTime.getTime())+": "
+};
+Rico.setDebugArea=function(c,a){if(!this.debugArea||a){var b=document.getElementById(c);
+if(!b){return
+}this.debugArea=b;
+b.value=""
+}};
+Rico.log=function(){};
+Rico.enableLogging=function(){if(this.debugArea){this.log=function(b,a){if(a){this.debugArea.value=""
+}this.debugArea.value+=this.timeStamp()+b+"\n"
+}
+}else{if(window.console){if(window.console.firebug){this.log=function(a){window.console.log(this.timeStamp(),a)
+}
+}else{this.log=function(a){window.console.log(this.timeStamp()+a)
+}
+}}else{if(window.opera){this.log=function(a){window.opera.postError(this.timeStamp()+a)
+}
+}}}};
+Rico.$=function(a){return typeof a=="string"?document.getElementById(a):a
+};
+Rico.runLater=function(){var b=Array.prototype.slice.call(arguments);
+var c=b.shift();
+var a=b.shift();
+var d=b.shift();
+return setTimeout(function(){a[d].apply(a,b)
+},c)
+};
+Rico.visible=function(a){return Rico.getStyle(a,"display")!="none"
+};
+Rico.show=function(a){a.style.display=""
+};
+Rico.hide=function(a){a.style.display="none"
+};
+Rico.toggle=function(a){a.style.display=a.style.display=="none"?"":"none"
+};
+Rico.direction=function(a){return(Rico.getStyle(a,"direction")||"ltr").toLowerCase()
+};
+Rico.viewportOffset=function(a){var b=Rico.cumulativeOffset(a);
+b.left-=this.docScrollLeft();
+b.top-=this.docScrollTop();
+return b
+};
+Rico.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<a;
+c++){switch(d[c].nodeType){case 1:if(this.getStyle(d[c],"display")=="none"){continue
+}if(e&&this.hasClass(d[c],e)){continue
+}switch(d[c].tagName.toLowerCase()){case"img":if(!b){h+=d[c].alt||d[c].title||d[c].src
+}break;
+case"input":if(!g&&!d[c].disabled&&d[c].type.toLowerCase()=="text"){h+=d[c].value
+}break;
+case"select":if(!g&&d[c].selectedIndex>=0){h+=d[c].options[d[c].selectedIndex].text
+}break;
+case"textarea":if(!g&&!d[c].disabled){h+=d[c].value
+}break;
+default:h+=this.getInnerText(d[c],b,g,e);
+break
+}break;
+case 3:h+=d[c].nodeValue;
+break
+}}return h
+};
+Rico.getContentAsString=function(a,b){if(b){return this._getEncodedContent(a)
+}if(typeof a.xml!="undefined"){return this._getContentAsStringIE(a)
+}return this._getContentAsStringMozilla(a)
+};
+Rico._getEncodedContent=function(a){if(a.innerHTML){return a.innerHTML
+}switch(a.childNodes.length){case 0:return"";
+case 1:return a.firstChild.nodeValue;
+default:return a.childNodes[1].nodeValue
+}};
+Rico._getContentAsStringIE=function(a){var c="";
+for(var b=0;
+b<a.childNodes.length;
+b++){var d=a.childNodes[b];
+c+=(d.nodeType==4)?d.nodeValue:d.xml
+}return c
+};
+Rico._getContentAsStringMozilla=function(b){var a=new XMLSerializer();
+var d="";
+for(var c=0;
+c<b.childNodes.length;
+c++){var e=b.childNodes[c];
+if(e.nodeType==4){d+=e.nodeValue
+}else{d+=a.serializeToString(e)
+}}return d
+};
+Rico.nan2zero=function(a){if(typeof(a)=="string"){a=parseInt(a,10)
+}return isNaN(a)||typeof(a)=="undefined"?0:a
+};
+Rico.stripTags=function(a){return a.replace(/<\/?[^>]+>/gi,"")
+};
+Rico.truncate=function(a,b){return a.length>b?a.substr(0,b-3)+"...":a
+};
+Rico.zFill=function(d,c,b){var a=d.toString(b||10);
+while(a.length<c){a="0"+a
+}return a
+};
+Rico.keys=function(c){var b=[];
+for(var a in c){b.push[a]
+}return b
+};
+Rico.eventKey=function(a){if(typeof(a.keyCode)=="number"){return a.keyCode
+}else{if(typeof(a.which)=="number"){return a.which
+}else{if(typeof(a.charCode)=="number"){return a.charCode
+}}}return -1
+};
+Rico.eventLeftClick=function(a){return(((a.which)&&(a.which==1))||((a.button)&&(a.button==1)))
+};
+Rico.eventRelatedTarget=function(a){return a.relatedTarget
+};
+Rico.getPreviosSiblingByTagName=function(c,b){var a=c.previousSibling;
+while(a){if((a.tagName==b)&&(a.style.display!="none")){return a
+}a=a.previousSibling
+}return null
+};
+Rico.getParentByTagName=function(d,a,c){var b=d;
+a=a.toLowerCase();
+while(b){if(b.tagName&&b.tagName.toLowerCase()==a){if(!c||b.className.indexOf(c)>=0){return b
+}}b=b.parentNode
+}return null
+};
+Rico.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
+};
+Rico.positionCtlOverIcon=function(g,k){k=this.$(k);
+var c=this.cumulativeOffset(k);
+var j=this.docScrollTop();
+var a=this.windowHeight();
+if(g.style.display=="none"){g.style.display="block"
+}var h=2;
+var b=this.nan2zero(this.getStyle(k,"paddingLeft"));
+g.style.left=(c.left+b+h)+"px";
+var i=c.top+h;
+var f=g.offsetHeight;
+var e=k.offsetHeight;
+var d=10;
+if(i+e+f+d<a+j){i+=e
+}else{i=Math.max(i-f,j)
+}g.style.top=i+"px"
+};
+Rico.createFormField=function(d,b,f,g,a){var e;
+if(typeof a!="string"){a=g
+}if(this.isIE&&this.ieVersion<8){var c=b+' id="'+g+'"';
+if(f){c+=' type="'+f+'"'
+}if(b.match(/^(form|input|select|textarea|object|button|img)$/)){c+=' name="'+a+'"'
+}e=document.createElement("<"+c+" />")
+}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
+};
+Rico.addSelectOption=function(b,c,d){var a=document.createElement("option");
+if(typeof c=="string"){a.value=c
+}a.text=d;
+if(this.isIE){b.add(a)
+}else{b.add(a,null)
+}return a
+};
+Rico.getCookie=function(g){var b=g+"=";
+var f=b.length;
+var a=document.cookie.length;
+var d=0;
+while(d<a){var c=d+f;
+if(document.cookie.substring(d,c)==b){var e=document.cookie.indexOf(";",c);
+if(e==-1){e=document.cookie.length
+}return unescape(document.cookie.substring(c,e))
+}d=document.cookie.indexOf(" ",d)+1;
+if(d==0){break
+}}return null
+};
+Rico.getTBody=function(a){return a.tBodies.length==0?a.appendChild(document.createElement("tbody")):a.tBodies[0]
+};
+Rico.setCookie=function(e,g,f,d,a){var h=e+"="+escape(g);
+if(typeof(f)=="number"){var b=new Date();
+b.setTime(b.getTime()+(f*24*60*60*1000));
+h+="; expires="+b.toGMTString()
+}if(typeof(d)=="string"){h+="; path="+d
+}if(typeof(a)=="string"){h+="; domain="+a
+}document.cookie=h
+};
+Rico.phrasesById={};
+Rico.thouSep=",";
+Rico.decPoint=".";
+Rico.langCode="en";
+Rico.dateFmt="mm/dd/yyyy";
+Rico.timeFmt="hh:nn:ss a/pm";
+Rico.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];
+Rico.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
+Rico.monthAbbr=function(a){return this.monthNamesShort?this.monthNamesShort[a]:this.monthNames[a].substr(0,3)
+};
+Rico.dayAbbr=function(a){return this.dayNamesShort?this.dayNamesShort[a]:this.dayNames[a].substr(0,3)
+};
+Rico.addPhraseId=function(b,a){this.phrasesById[b]=a
+};
+Rico.getPhraseById=function(d){var b=this.phrasesById[d];
+if(!b){alert("Error: missing phrase for "+d);
+return""
+}if(arguments.length<=1){return b
+}var c=arguments;
+return b.replace(/(\$\d)/g,function(e){var a=parseInt(e.charAt(1),10);
+return(a<c.length)?c[a]:""
+})
+};
+Rico.formatPosNumber=function(e,f,c){var b=e.toFixed(f).split(/\./);
+if(c){var d=/(\d+)(\d{3})/;
+while(d.test(b[0])){b[0]=b[0].replace(d,"$1"+Rico.thouSep+"$2")
+}}return b.join(Rico.decPoint)
+};
+Rico.formatNumber=function(b,c){if(typeof b=="string"){b=parseFloat(b.replace(/,/,"."),10)
+}if(isNaN(b)){return"NaN"
+}if(typeof c.multiplier=="number"){b*=c.multiplier
+}var h=typeof c.decPlaces=="number"?c.decPlaces:0;
+var e=typeof c.thouSep=="undefined"?true:this.thouSep;
+var d=c.prefix||"";
+var f=c.suffix||"";
+var a=typeof c.negSign=="string"?c.negSign:"L";
+a=a.toUpperCase();
+var i,g;
+if(b<0){i=this.formatPosNumber(-b,h,e);
+if(a=="P"){i="("+i+")"
+}i=d+i;
+if(a=="L"){i="-"+i
+}if(a=="T"){i+="-"
+}g="negNumber"
+}else{g=b==0?"zeroNumber":"posNumber";
+i=d+this.formatPosNumber(b,h,e)
+}return"<span class='"+g+"'>"+i+f+"</span>"
+};
+Rico.formatDate=function(c,a){var b=(typeof a=="string")?a:"translateDate";
+switch(b){case"locale":case"localeDateTime":return c.toLocaleString();
+case"localeDate":return c.toLocaleDateString();
+case"translate":case"translateDateTime":b=this.dateFmt+" "+this.timeFmt;
+break;
+case"translateDate":b=this.dateFmt;
+break
+}return b.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|d|hh|nn|ss|a\/p)/gi,function(d){var e;
+switch(d){case"yyyy":return c.getFullYear();
+case"yy":return c.getFullYear().toString().substr(2);
+case"mmmm":return Rico.monthNames[c.getMonth()];
+case"mmm":return Rico.monthAbbr(c.getMonth());
+case"mm":return Rico.zFill(c.getMonth()+1,2);
+case"m":return(c.getMonth()+1);
+case"dddd":return Rico.dayNames[c.getDay()];
+case"ddd":return Rico.dayAbbr(c.getDay());
+case"dd":return Rico.zFill(c.getDate(),2);
+case"d":return c.getDate();
+case"hh":return Rico.zFill((e=c.getHours()%12)?e:12,2);
+case"h":return((e=c.getHours()%12)?e:12);
+case"HH":return Rico.zFill(c.getHours(),2);
+case"H":return c.getHours();
+case"nn":return Rico.zFill(c.getMinutes(),2);
+case"ss":return Rico.zFill(c.getSeconds(),2);
+case"a/p":return c.getHours()<12?"a":"p"
+}})
+};
+Rico.setISO8601=function(b,f){if(!b){return false
+}var e=b.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|(?:([-+])(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
+if(!e){return false
+}if(!f){f=0
+}var a=new Date(e[1],0,1);
+if(e[2]){a.setMonth(e[2]-1)
+}if(e[3]){a.setDate(e[3])
+}if(e[4]){a.setHours(e[4])
+}if(e[5]){a.setMinutes(e[5])
+}if(e[6]){a.setSeconds(e[6])
+}if(e[7]){a.setMilliseconds(Number("0."+e[7])*1000)
+}if(e[8]){if(e[10]&&e[11]){f=(Number(e[10])*60)+Number(e[11])
+}f*=((e[9]=="-")?1:-1);
+f-=a.getTimezoneOffset()
+}var c=(Number(a)+(f*60*1000));
+a.setTime(Number(c));
+return a
+};
+Rico.toISO8601String=function(a,e,h){if(!e){e=6
+}if(!h){h="Z"
+}else{var g=h.match(/([-+])([0-9]{2}):([0-9]{2})/);
+var c=(Number(g[2])*60)+Number(g[3]);
+c*=((g[1]=="-")?-1:1);
+a=new Date(Number(Number(a)+(c*60000)))
+}var i=function(d){return((d<10)?"0":"")+d
+};
+var f=a.getUTCFullYear();
+if(e>1){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
+};
+Rico.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 Rico.tryFunctions(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
+};
+Rico.ajaxUpdater=function(c,b,a){this.updateSend(c,b,a)
+};
+Rico.ajaxUpdater.prototype={updateSend:function(d,c,b){this.element=d;
+this.onComplete=b.onComplete;
+var a=this;
+b.onComplete=function(e){a.updateComplete(e)
+};
+new Rico.ajaxRequest(c,b)
+},updateComplete:function(a){this.element.innerHTML=a.responseText;
+if(this.onComplete){this.onComplete(a)
+}}};
+try{document.execCommand("BackgroundImageCache",false,true)
+}catch(err){}Rico.eventBind(window,"load",Rico.eventHandle(Rico,"windowLoaded"));
 Rico.applyShadow=function(b,a){if(typeof a=="undefined"){a=true
 }if(a){Rico.addClass(b,"ricoShadow")
 }return b
@@ -33,7 +415,6 @@ if(this.options.position=="auto"){this.position=Rico.getStyle(this.container,"po
 while(this.container.firstChild){this.content.appendChild(this.container.firstChild)
 }this.container.appendChild(this.content);
 this.content.className="RicoPopupContent";
-this.content.style.position="relative";
 if(this.position!="absolute"){return
 }if(this.options.closeFunc){this.closeFunc=this.options.closeFunc
 }else{var a=this;
@@ -43,8 +424,9 @@ this.closeFunc=function(){a.closePopup()
 this.container.style.left="0px";
 this.container.style.display="none";
 if(this.options.zIndex>=0){this.container.style.zIndex=this.options.zIndex
-}this.content.style.zIndex=2;
-if(Rico.isIE&&Rico.ieVersion<7){this.ifr=document.createElement("iframe");
+}if(Rico.isIE&&Rico.ieVersion<7&&this.options.shim!==false){this.content.style.position="relative";
+this.content.style.zIndex=2;
+this.ifr=document.createElement("iframe");
 this.ifr.className="RicoShim";
 this.ifr.frameBorder=0;
 this.ifr.src="javascript:'';";
@@ -89,9 +471,8 @@ Rico.eventStop(d)
 },_endDrag:function(){this.container.style.cursor="";
 Rico.eventUnbind(document,"mousemove",this.dragHandler);
 Rico.eventUnbind(document,"mouseup",this.dropHandler)
-},openPopup:function(b,a){if(typeof b=="number"){this.container.style.left=b+"px"
-}if(typeof a=="number"){this.container.style.top=a+"px"
-}this.container.style.display="";
+},openPopup:function(b,a){this.move(b,a);
+this.container.style.display="";
 if(this.container.id){Rico.log("openPopup "+this.container.id+" at "+b+","+a)
 }Rico._AddOpenPopup(this)
 },centerPopup:function(){this.openPopup();
@@ -113,7 +494,7 @@ b.className="RicoCloseAnchor";
 if(Rico.theme.closeAnchor){Rico.addClass(b,Rico.theme.closeAnchor)
 }var c=b.appendChild(document.createElement("span"));
 c.title=Rico.getPhraseById("close");
-new Rico.HoverSet([b]);
+new Rico.HoverSet([b],{hoverClass:Rico.theme.hover||"ricoCloseHover"});
 Rico.addClass(c,Rico.theme.close||"rico-icon RicoClose");
 Rico.eventBind(b,"click",d);
 return b
@@ -164,7 +545,7 @@ if(a.height){this.contentDiv.style.height=a.height
 }if(a.width){this.contentDiv.style.width=a.width
 }if(a.overflow){this.contentDiv.style.overflow=a.overflow
 }Rico.addClass(this.content,"ricoWindow");
-if(Rico.theme.dialog){Rico.addClass(this.content,Rico.theme.dialog)
+if(Rico.theme.dialog){Rico.addClass(this.container,Rico.theme.dialog)
 }this.content=this.contentDiv
 },setTitle:function(a){this.titleContent.innerHTML=a
 }};
@@ -184,8 +565,7 @@ if(a){c.parent=a
 }this.createContainer(c);
 this.content.className=Rico.isWebKit?"ricoMenuSafari":"ricoMenu";
 this.content.style.width=this.options.width;
-this.direction=Rico.getStyle(this.container,"direction")||"ltr";
-this.direction=this.direction.toLowerCase();
+this.direction=Rico.direction(this.container);
 this.hidemenu();
 this.itemCount=0
 },showmenu:function(b,c){Rico.eventStop(b);
@@ -381,16 +761,8 @@ b++){Rico.removeClass(a[b],this.hoverClass)
 }},remove:function(){Rico.eventUnbind(element,"mousemove",this.movehandle);
 Rico.eventUnbind(element,"mouseout",this.outhandle)
 }};
-Rico.Effect={};
-Rico.Effect.easeIn=function(a){return Math.sqrt(a)
-};
-Rico.Effect.easeOut=function(a){return a*a
-};
 Rico.ContentTransitionBase=function(){};
-Rico.ContentTransitionBase.prototype={initBase:function(e,d,b){Rico.log("ContentTransitionBase#initBase");
-if(typeof e=="string"){e=Rico.select(e)
-}if(typeof d=="string"){d=Rico.select(d)
-}this.options=b||{};
+Rico.ContentTransitionBase.prototype={initBase:function(e,d,b){this.options=b||{};
 this.titles=e;
 this.contents=d;
 this.hoverSet=new Rico.HoverSet(e,b);
@@ -417,7 +789,7 @@ this.contents.push(a);
 this.hoverSet.add(b);
 this.selectionSet.add(b);
 Rico.hide(a)
-},removeBase:function(a){},removeAll:function(){this.hoverSet.removeAll();
+},removeAll:function(){this.hoverSet.removeAll();
 this.selectionSet.removeAll()
 }};
 Rico.Accordion=function(b,a){this.initialize(b,a)
@@ -465,36 +837,38 @@ this.selected.style.height=this.options.panelHeight+"px"
 }});
 Rico.TabbedPanel=function(b,a){this.initialize(b,a)
 };
-Rico.TabbedPanel.prototype=Rico.extend(new Rico.ContentTransitionBase(),{initialize:function(d,k){d=Rico.$(d);
-k=k||{};
-if(typeof k.panelWidth=="number"){k.panelWidth+="px"
-}if(typeof k.panelHeight=="number"){k.panelHeight+="px"
-}d.className=k.tabClass||Rico.theme.tabPanel||"Rico_tabPanel";
-if(k.panelWidth){d.style.width=k.panelWidth
+Rico.TabbedPanel.prototype=Rico.extend(new Rico.ContentTransitionBase(),{initialize:function(d,l){d=Rico.$(d);
+l=l||{};
+if(typeof l.panelWidth=="number"){l.panelWidth+="px"
+}if(typeof l.panelHeight=="number"){l.panelHeight+="px"
+}d.className=l.tabClass||Rico.theme.tabPanel||"Rico_tabPanel";
+if(l.panelWidth){d.style.width=l.panelWidth
 }var g=[];
-var j=d.childNodes;
+var k=d.childNodes;
 for(var e=0;
-e<j.length;
-e++){if(j[e]&&j[e].tagName&&j[e].tagName.match(/^div|ul$/i)){g.push(j[e])
+e<k.length;
+e++){if(k[e]&&k[e].tagName&&k[e].tagName.match(/^div|ul$/i)){g.push(k[e])
 }}if(g.length<2){return
 }var c=g[0].tagName.toLowerCase()=="ul"?"li":"div";
-g[0].className=k.navContainerClass||Rico.theme.tabNavContainer||"Rico_tabNavContainer";
+g[0].className=l.navContainerClass||Rico.theme.tabNavContainer||"Rico_tabNavContainer";
 g[0].style.listStyle="none";
-g[1].className=k.contentContainerClass||Rico.theme.tabContentContainer||"Rico_tabContentContainer";
+g[1].className=l.contentContainerClass||Rico.theme.tabContentContainer||"Rico_tabContentContainer";
 var f=Rico.getDirectChildrenByTag(g[0],c);
 var b=Rico.getDirectChildrenByTag(g[1],"div");
-if(!k.corners){k.corners="top"
+var j=Rico.direction(d);
+if(!l.corners){l.corners="top"
 }for(var e=0;
 e<f.length;
-e++){f[e].className=k.titleClass||Rico.theme.tabTitle||"Rico_tabTitle";
+e++){if(j=="rtl"){Rico.setStyle(f[e],{"float":"right"})
+}f[e].className=l.titleClass||Rico.theme.tabTitle||"Rico_tabTitle";
 var h=Rico.wrapChildren(f[e],"","","a");
 h.href="javascript:void(0)";
-b[e].className=k.contentClass||Rico.theme.tabContent||"Rico_tabContent";
-if(k.panelHeight){b[e].style.overflow="auto"
-}if(k.corners!="none"){if(k.panelHdrWidth){f[e].style.width=k.panelHdrWidth
-}Rico.Corner.round(f[e],Rico.theme.tabCornerOptions||k)
-}}k.selectedClass=Rico.theme.tabSelected||"selected";
-this.initBase(f,b,k);
+b[e].className=l.contentClass||Rico.theme.tabContent||"Rico_tabContent";
+if(l.panelHeight){b[e].style.overflow="auto"
+}if(l.corners!="none"){if(l.panelHdrWidth){f[e].style.width=l.panelHdrWidth
+}Rico.Corner.round(f[e],Rico.theme.tabCornerOptions||l)
+}}l.selectedClass=Rico.theme.tabSelected||"selected";
+this.initBase(f,b,l);
 if(this.selected){this.transition(this.selected)
 }},transition:function(a){Rico.log("TabbedPanel#transition "+typeof(a));
 if(this.selected){Rico.hide(this.selected)
@@ -697,7 +1071,6 @@ this.close=this.closePopup;
 this.bPageLoaded=false;
 this.img=[];
 this.Holidays={};
-this.weekString=Rico.getPhraseById("calWeekHdg");
 this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;
 this.setDateFmt(this.options.dateFmt)
 },setDateFmt:function(a){this.dateFmt=(a=="rico")?Rico.dateFmt:a;
@@ -714,54 +1087,67 @@ if(d){this.setDiv(d)
 }else{this.createContainer();
 this.container.id=this.id
 }Rico.addClass(this.content,Rico.theme.calendar||"ricoCalContainer");
-this.content.style.display="block";
-this.heading=this.content.appendChild(document.createElement("div"));
-this.heading.className="RicoCalHeading";
-if(Rico.theme.calendarHeading){Rico.addClass(this.heading,Rico.theme.calendarHeading)
-}this.heading.appendChild(this._createTitleSection("Month"));
-this.heading.appendChild(this._createTitleSection("Year"));
-new Rico.HoverSet(this.heading.getElementsByTagName("a"));
-if(this.position=="absolute"){this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,"close")))
-}this.maintab=document.createElement("table");
+this.direction=Rico.direction(this.container);
+var b,k,g,f,h,p,m,q,e;
+this.colStart=this.options.showWeekNumber?1:0;
+var l=7+this.colStart;
+this.maintab=document.createElement("table");
 this.maintab.cellSpacing=2;
 this.maintab.cellPadding=0;
 this.maintab.border=0;
 this.maintab.style.borderCollapse="separate";
-this.maintab.className="ricoCalTab";
-if(Rico.theme.calendarTable){Rico.addClass(this.maintab,Rico.theme.calendarTable)
-}this.tbody=Rico.getTBody(this.maintab);
-var b,k,g,f,h,o,l,p,e;
-this.colStart=this.options.showWeekNumber?1:0;
+this.maintab.className=Rico.theme.calendarTable||"ricoCalTab";
+this.tbody=Rico.getTBody(this.maintab);
+this.tbody.className="ricoCalBody";
+this.thead=this.maintab.createTHead();
+b=this.thead.insertRow(-1);
+this.heading=b.insertCell(-1);
+this.heading.colSpan=l;
+this.content.style.display="block";
+if(this.position=="absolute"){this.content.style.width="auto";
+this.maintab.style.width="auto"
+}else{this.container.style.position="relative";
+this.heading.style.position="static";
+this.content.style.padding="0px";
+this.content.style.width="15em";
+this.maintab.style.width="100%"
+}this.heading.className="RicoCalHeading";
+if(Rico.theme.calendarHeading){Rico.addClass(this.heading,Rico.theme.calendarHeading)
+}this.navtab=this.heading.appendChild(document.createElement("table"));
+this.navrow=this.navtab.insertRow(-1);
+this._createTitleSection("Month");
+this.navrow.insertCell(-1).innerHTML="&nbsp;&nbsp;";
+this._createTitleSection("Year");
+new Rico.HoverSet(this.heading.getElementsByTagName("a"));
+if(this.position=="absolute"){this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,"close")))
+}this.styles=[];
 for(g=0;
 g<7;
 g++){b=this.tbody.insertRow(-1);
-b.className="row"+g;
-for(k=0;
-k<7+this.colStart;
-k++){b.insertCell(-1)
-}}b=this.tbody.rows[0];
-b.className="ricoCalDayNames";
-if(this.options.showWeekNumber){b.cells[0].innerHTML=this.weekString;
-for(g=0;
-g<7;
-g++){this.tbody.rows[g].cells[0].className="ricoCalWeekNum"
-}}this.styles=[];
-for(g=0;
-g<7;
-g++){o=(g+this.options.startAt)%7;
-b.cells[g+this.colStart].innerHTML=Rico.dayAbbr(o);
-this.styles[g]="ricoCal"+o
-}if(this.options.showToday){this.tfoot=this.maintab.createTFoot();
+b.className=g==0?"ricoCalDayNames":"row"+g;
+if(this.options.showWeekNumber){k=b.insertCell(-1);
+k.className="ricoCalWeekNum";
+if(g==0){k.innerHTML=Rico.getPhraseById("calWeekHdg")
+}}for(f=0;
+f<7;
+f++){k=b.insertCell(-1);
+if(g==0){p=(f+this.options.startAt)%7;
+k.innerHTML=Rico.dayAbbr(p);
+this.styles[f]="ricoCal"+p
+}else{k.className=this.styles[f];
+if(Rico.theme.calendarDay){Rico.addClass(k,Rico.theme.calendarDay)
+}}}}if(this.options.showToday){this.tfoot=this.maintab.createTFoot();
+this.tfoot.className="ricoCalFoot";
 b=this.tfoot.insertRow(-1);
 this.todayCell=b.insertCell(-1);
-this.todayCell.colSpan=7+this.colStart;
-if(Rico.theme.calendarFooter){Rico.addClass(this.todayCell,Rico.theme.calendarFooter)
-}Rico.eventBind(this.todayCell,"click",Rico.eventHandle(this,"selectNow"),false)
+this.todayCell.colSpan=l;
+this.todayCell.className=Rico.theme.calendarFooter||"ricoCalFoot";
+Rico.eventBind(this.todayCell,"click",Rico.eventHandle(this,"selectNow"),false)
 }this.content.appendChild(this.maintab);
 new Rico.HoverSet(this.tbody.getElementsByTagName("td"),{hoverNodes:function(a){return a.innerHTML.match(/^\d+$/)?[a]:[]
 }});
-this.monthPopup=new Rico.Popup(document.createElement("div"));
-this.monthPopup.closePopup();
+this.monthPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
+this.monthPopup.content.className="ricoCalMonthPrompt";
 e=document.createElement("table");
 e.className="ricoCalMenu";
 if(Rico.theme.calendarPopdown){Rico.addClass(e,Rico.theme.calendarPopdown)
@@ -776,56 +1162,55 @@ g++){b=e.insertRow(-1);
 for(f=0;
 f<3;
 f++){k=b.insertCell(-1);
-l=document.createElement("a");
-l.innerHTML=Rico.monthAbbr(g*3+f);
-l.name=g*3+f;
-if(Rico.theme.calendarDay){Rico.addClass(l,Rico.theme.calendarDay)
-}k.appendChild(l);
-Rico.eventBind(l,"click",Rico.eventHandle(this,"selectMonth"),false)
+m=document.createElement("a");
+m.innerHTML=Rico.monthAbbr(g*3+f);
+m.name=g*3+f;
+if(Rico.theme.calendarDay){Rico.addClass(m,Rico.theme.calendarDay)
+}k.appendChild(m);
+Rico.eventBind(m,"click",Rico.eventHandle(this,"selectMonth"),false)
 }}new Rico.HoverSet(e.getElementsByTagName("a"));
 this.monthPopup.content.appendChild(e);
 this.container.appendChild(this.monthPopup.container);
-this.yearPopup=new Rico.Popup(document.createElement("div"));
-this.yearPopup.closePopup();
+this.monthPopup.closePopup();
+this.yearPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
 this.yearPopup.content.className="ricoCalYearPrompt";
 if(Rico.theme.calendarPopdown){Rico.addClass(this.yearPopup.content,Rico.theme.calendarPopdown)
-}var n=document.createElement("p");
-n.innerHTML=Rico.getPhraseById("calYearRange",this.options.minDate.getFullYear(),this.options.maxDate.getFullYear());
-var m=document.createElement("p");
-this.yearInput=m.appendChild(document.createElement("input"));
+}var o=document.createElement("p");
+o.innerHTML=Rico.getPhraseById("calYearRange",this.options.minDate.getFullYear(),this.options.maxDate.getFullYear());
+var n=document.createElement("p");
+this.yearInput=n.appendChild(document.createElement("input"));
 this.yearInput.maxlength=4;
 this.yearInput.size=4;
 Rico.eventBind(this.yearInput,"keyup",Rico.eventHandle(this,"yearKey"),false);
-l=Rico.floatButton("Checkmark",Rico.eventHandle(this,"processPopUpYear"));
-m.appendChild(l);
-l=Rico.floatButton("Cancel",Rico.eventHandle(this,"popDownYear"));
-m.appendChild(l);
+m=Rico.floatButton("Checkmark",Rico.eventHandle(this,"processPopUpYear"));
+n.appendChild(m);
+m=Rico.floatButton("Cancel",Rico.eventHandle(this,"popDownYear"));
+n.appendChild(m);
+this.yearPopup.content.appendChild(o);
 this.yearPopup.content.appendChild(n);
-this.yearPopup.content.appendChild(m);
 this.container.appendChild(this.yearPopup.container);
-this.yearPopup.container.style.left="";
-this.yearPopup.container.style.right="5px";
-this.yearPopup.container.style.zIndex=10;
-l=this.content.getElementsByTagName("a");
+this.yearPopup.closePopup();
+m=this.content.getElementsByTagName("a");
 for(g=0;
-g<l.length;
-g++){l[g].href="javascript:void(0)"
+g<m.length;
+g++){m[g].href="javascript:void(0)"
 }Rico.eventBind(this.tbody,"click",Rico.eventHandle(this,"saveAndClose"));
 this.close();
 this.bPageLoaded=true
-},_createTitleSection:function(d){var c=document.createElement("span");
-c.className="RicoCal"+d+"Heading";
-if(Rico.theme.calendarSubheading){Rico.addClass(c,Rico.theme.calendarSubheading)
-}var b=c.appendChild(document.createElement("a"));
-b.className="Rico_leftArrow";
-b.appendChild(this.createNavArrow("dec"+d,"left"));
-var b=c.appendChild(document.createElement("a"));
-Rico.eventBind(b,"click",Rico.eventHandle(this,"popUp"+d),false);
-this["title"+d]=b;
-b=c.appendChild(document.createElement("a"));
-b.className="Rico_rightArrow";
-b.appendChild(this.createNavArrow("inc"+d,"right"));
-return c
+},_createTitleSection:function(e){var d=["left","right"];
+if(this.direction=="rtl"){d.reverse()
+}var f=this.navrow.insertCell(-1);
+var b=f.appendChild(document.createElement("a"));
+b.className="Rico_"+d[0]+"Arrow";
+b.appendChild(this.createNavArrow("dec"+e,d[0]));
+f=this.navrow.insertCell(-1);
+b=f.appendChild(document.createElement("a"));
+Rico.eventBind(b,"click",Rico.eventHandle(this,"popUp"+e),false);
+this["title"+e]=b;
+f=this.navrow.insertCell(-1);
+b=f.appendChild(document.createElement("a"));
+b.className="Rico_"+d[1]+"Arrow";
+b.appendChild(this.createNavArrow("inc"+e,d[1]))
 },selectNow:function(){var a=new Date();
 this.dateNow=a.getDate();
 this.monthNow=a.getMonth();
@@ -863,24 +1248,26 @@ this.constructCalendar()
 this.monthSelected=parseInt(a.name,10);
 this.constructCalendar();
 Rico.eventStop(b)
+},openYrMo:function(b,a){if(this.direction=="rtl"){a=1-a
+}b.openPopup();
+var c=a?this.content.offsetWidth-b.container.offsetWidth-5:3;
+b.move(c,this.heading.offsetHeight+2)
 },popUpMonth:function(a){Rico.eventStop(a);
 if(this.monthPopup.visible()){this.popDownMonth();
-return
+return false
 }this.popDownYear();
-if(Rico.isIE&&Rico.ieVersion<7){this.monthPopup.openPopup(null,this.heading.offsetHeight+2);
-this.monthPopup.container.style.left=""
-}else{this.monthPopup.openPopup(3,this.heading.offsetHeight+2)
-}return false
+this.openYrMo(this.monthPopup,0);
+return false
 },popDownMonth:function(){this.monthPopup.closePopup()
 },popDownYear:function(){this.yearPopup.closePopup();
 this.yearInput.disabled=true
 },popUpYear:function(b){Rico.eventStop(b);
 if(this.yearPopup.visible()){this.popDownYear();
-return
+return false
 }this.popDownMonth();
 this.yearInput.disabled=false;
 this.yearInput.value="";
-this.yearPopup.openPopup(null,this.heading.offsetHeight+2);
+this.openYrMo(this.yearPopup,1);
 var a=this;
 setTimeout(function(){a.yearInput.focus()
 },10);
@@ -949,6 +1336,7 @@ if(!g){g=this.Holidays[this.holidayKey(0,this.monthSelected,k)]
 }m.style.color=g?g.txtColor:"";
 m.style.backgroundColor=g?g.bgColor:"";
 m.title=g?g.desc:"";
+m.style.visibility="visible";
 if(b==6){a++
 }}while(n<42){b=n%7;
 this.resetCell(this.tbody.rows[a].cells[b+this.colStart]);
@@ -958,10 +1346,8 @@ if(b==6){a++
 this.titleYear.innerHTML=this.yearSelected;
 if(this.todayCell){this.todayCell.innerHTML=Rico.getPhraseById("calToday",this.dateNow,Rico.monthAbbr(this.monthNow),this.yearNow,this.monthNow+1)
 }},resetCell:function(a){a.innerHTML="&nbsp;";
-a.className="ricoCalEmpty";
-a.style.color="";
-a.style.backgroundColor="";
-a.title=""
+a.title="";
+a.style.visibility="hidden"
 },saveAndClose:function(g){Rico.eventStop(g);
 var f=Rico.eventElement(g);
 var c=f.innerHTML.replace(/&nbsp;/g,"");
@@ -1821,7 +2207,7 @@ d=e.appendChild(document.createElement("span"));
 d.innerHTML=b.displayName;
 Rico.eventBind(b.ChooserBox,"click",Rico.eventHandle(b,"chooseColumn"),false)
 }}Rico.log("opening columnChooser");
-this.columnChooser.openPopup(1,this.hdrHt);
+this.columnChooser.openPopup(3,this.hdrHt+3);
 for(a=0;
 a<this.columns.length;
 a++){this.columns[a].ChooserBox.checked=this.columns[a].visible;
@@ -1925,7 +2311,7 @@ a++){b.push(escape(c.filterValues[a]))
 }};
 Rico.ColumnConst={UNFILTERED:0,SYSTEMFILTER:1,USERFILTER:2,UNSORTED:0,SORT_ASC:"ASC",SORT_DESC:"DESC",MINWIDTH:10};
 Rico.TableColumnBase=function(){};
-Rico.TableColumnBase.prototype={baseInit:function(h,g,e,d){Rico.log("TableColumnBase.init index="+g+" tabIdx="+d);
+Rico.TableColumnBase.prototype={baseInit:function(h,g,e,d){Rico.log("TableColumnBase.baseInit index="+g+" tabIdx="+d);
 this.liveGrid=h;
 this.index=g;
 this.hideWidth=Rico.isKonqueror||Rico.isWebKit||h.headerRowCnt>1?5:2;
@@ -1945,15 +2331,13 @@ this.mouseDownHandler=Rico.eventHandle(this,"handleMouseDown");
 this.mouseMoveHandler=Rico.eventHandle(this,"handleMouseMove");
 this.mouseUpHandler=Rico.eventHandle(this,"handleMouseUp");
 this.mouseOutHandler=Rico.eventHandle(this,"handleMouseOut");
-this.fieldName="col"+this.index;
 this.format={type:"text"};
 var b=h.options.columnSpecs[g];
 if(typeof b=="object"){Rico.extend(this.format,b)
 }Rico.addClass(this.dataColDiv,this.colClassName());
 this.visible=true;
 if(typeof this.format.visible=="boolean"){this.visible=this.format.visible
-}Rico.log("TableColumn.init index="+g+" fieldName="+this.fieldName);
-this.sortable=typeof this.format.canSort=="boolean"?this.format.canSort:h.options.canSortDefault;
+}this.sortable=typeof this.format.canSort=="boolean"?this.format.canSort:h.options.canSortDefault;
 this.currentSort=Rico.ColumnConst.UNSORTED;
 this.filterable=typeof this.format.canFilter=="boolean"?this.format.canFilter:h.options.canFilterDefault;
 this.filterType=Rico.ColumnConst.UNFILTERED;
@@ -2009,7 +2393,7 @@ this.mousePluggedIn=false
 },handleMouseDown:function(b){this.resizeStart=Rico.eventClient(b).x;
 this.origWidth=parseInt(this.colWidth,10);
 var a=Rico.positionedOffset(this.hdrCell);
-if(this.liveGrid.direction=="rtl"){this.edge=a.left+this.liveGrid.options.scrollBarWidth;
+if(this.liveGrid.direction=="rtl"){this.edge=a.left;
 switch(this.tabIdx){case 0:this.edge+=this.liveGrid.innerDiv.offsetWidth;
 break;
 case 1:this.edge-=this.liveGrid.scrollDiv.scrollLeft;
@@ -2614,8 +2998,11 @@ if(this.options.offset&&this.options.offset<this.buffer.totalRows){Rico.runLater
 this.setHorizontalScroll();
 Rico.log("setHorizontalScroll done");
 if(this.options.windowResize){Rico.runLater(100,this,"pluginWindowResize")
-}Rico.log("initialize complete for "+this.tableId)
-}};
+}Rico.log("initialize complete for "+this.tableId);
+if(this.direction=="rtl"&&(!Rico.isWebKit||this.scrollDiv.clientLeft>0)){this.scrollTab.style.right="0px"
+}else{this.scrollTab.style.left="0px";
+Rico.setStyle(this.tabs[1],{"float":"left"})
+}}};
 Rico.LiveGridMethods={createHoverSet:function(){var a=[];
 for(var b=0;
 b<this.headerColCnt;
@@ -3270,28 +3657,24 @@ a++){this.columns[a].setImage()
 a<this.columns.length;
 a++){if(this.columns[a].isSorted()){return a
 }}return -1
-},findColumnName:function(a){for(var b=0;
-b<this.columns.length;
-b++){if(this.columns[b].fieldName==a){return b
-}}return -1
 },findColumnsBySpec:function(b,c){var a=[];
 for(var d=0;
 d<this.options.columnSpecs.length;
 d++){if(this.options.columnSpecs[d][b]==c){a.push(d)
 }}return a
-},setSortUI:function(b,c){Rico.log("setSortUI: "+b+" "+c);
+},setSortUI:function(c,b){Rico.log("setSortUI: "+c+" "+b);
 var a=this.findSortedColumn();
-if(a>=0){c=this.columns[a].getSortDirection()
-}else{if(typeof c!="string"){c=Rico.ColumnConst.SORT_ASC
-}else{c=c.toUpperCase();
-if(c!=Rico.ColumnConst.SORT_DESC){c=Rico.ColumnConst.SORT_ASC
-}}switch(typeof b){case"string":a=this.findColumnName(b);
+if(a>=0){b=this.columns[a].getSortDirection()
+}else{if(typeof b!="string"){b=Rico.ColumnConst.SORT_ASC
+}else{b=b.toUpperCase();
+if(b!=Rico.ColumnConst.SORT_DESC){b=Rico.ColumnConst.SORT_ASC
+}}switch(typeof c){case"string":a=this.findColumnsBySpec("id",c);
 break;
-case"number":a=b;
+case"number":a=c;
 break
 }}if(typeof(a)!="number"||a<0){return
 }this.clearSort();
-this.columns[a].setSorted(c);
+this.columns[a].setSorted(b);
 this.buffer.sortBuffer(a)
 },clearSort:function(){for(var a=0;
 a<this.columns.length;