From f8909d18bb34e88201e1594513905260bd58ec15 Mon Sep 17 00:00:00 2001
From: Gabriel Monnerat <gabriel@tiolive.com>
Date: Mon, 8 Nov 2010 12:07:35 +0000
Subject: [PATCH] 2010-11-08 gabriel * The initial commit

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@40025 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../erp5_web/WebTable_viewEditor.xml          |  146 +
 .../WebTable_viewEditor/my_text_content.xml   |  280 ++
 .../WebTable_viewEditor/text_content.xml      |  407 ++
 .../portal_skins/erp5_jquery_sheet_editor.xml |   26 +
 .../WebTable_setTextContent.xml               |  124 +
 .../jquery.sheet.css.xml                      |  322 ++
 .../jquery.sheet.erp5.js.xml                  |   77 +
 .../jquery.sheet.html.xml                     | 1085 +++++
 .../jquery.sheet.js.xml                       | 4189 +++++++++++++++++
 .../jquery.sheet.min.js.xml                   |   68 +
 .../jquery_sheet_form_view.xml                |   97 +
 .../jquery_sheet_image.xml                    |   26 +
 .../jquery_sheet_image/DV_Tools.jpg.xml       |  161 +
 .../jquery_sheet_image/arrow_down.png.xml     |   58 +
 .../jquery_sheet_image/arrow_out.png.xml      |   62 +
 .../jquery_sheet_image/arrow_refresh.png.xml  |   58 +
 .../jquery_sheet_image/arrow_up.png.xml       |   58 +
 .../jquery_sheet_image/bgnd_sel_1.jpg.xml     |   58 +
 .../jquery_sheet_image/bgnd_sel_2.jpg.xml     |   57 +
 .../jquery_sheet_image/bgnd_sel_3.jpg.xml     |   58 +
 .../jquery_sheet_image/disk.png.xml           |   59 +
 .../jquery_sheet_image/find.png.xml           |   63 +
 .../jquery_sheet_image/header_bgnd.jpg.xml    |   63 +
 .../jquery_sheet_image/noparse.png.xml        |   66 +
 .../jquery_sheet_image/page_link.png.xml      |   68 +
 .../jquery_sheet_image/palette.png.xml        |   67 +
 .../jquery_sheet_image/palette_bg.png.xml     |   67 +
 .../jquery_sheet_image/sheet_col_add.png.xml  |   59 +
 .../sheet_col_add_multi.png.xml               |   60 +
 .../sheet_col_delete.png.xml                  |   59 +
 .../sheet_get_range.png.xml                   |   59 +
 .../jquery_sheet_image/sheet_row_add.png.xml  |   59 +
 .../sheet_row_add_multi.png.xml               |   60 +
 .../sheet_row_delete.png.xml                  |   59 +
 .../jquery_sheet_image/table_delete.png.xml   |   63 +
 .../text_align_center.png.xml                 |   55 +
 .../text_align_left.png.xml                   |   55 +
 .../text_align_right.png.xml                  |   55 +
 .../jquery_sheet_image/text_bold.png.xml      |   56 +
 .../jquery_sheet_image/text_italic.png.xml    |   55 +
 .../text_strikethrough.png.xml                |   56 +
 .../jquery_sheet_image/text_underline.png.xml |   56 +
 .../erp5_jquery_sheet_editor/menu.html.xml    |  170 +
 .../erp5_jquery_sheet_editor/save.html.xml    |   50 +
 bt5/erp5_jquery_sheet_editor/bt/change_log    |    2 +
 .../bt/copyright_list                         |    1 +
 .../bt/dependency_list                        |    2 +
 bt5/erp5_jquery_sheet_editor/bt/description   |    1 +
 bt5/erp5_jquery_sheet_editor/bt/license       |    1 +
 .../bt/maintainer_list                        |    1 +
 bt5/erp5_jquery_sheet_editor/bt/revision      |    1 +
 .../bt/template_format_version                |    1 +
 .../bt/template_path_list                     |    2 +
 .../bt/template_skin_id_list                  |    1 +
 bt5/erp5_jquery_sheet_editor/bt/title         |    1 +
 bt5/erp5_jquery_sheet_editor/bt/version       |    1 +
 56 files changed, 8971 insertions(+)
 create mode 100644 bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/my_text_content.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/text_content.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/WebTable_setTextContent.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.css.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.erp5.js.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.html.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.js.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.min.js.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_form_view.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/DV_Tools.jpg.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_down.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_out.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_up.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_1.jpg.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_2.jpg.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_3.jpg.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/disk.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/find.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/header_bgnd.jpg.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/noparse.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/page_link.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette_bg.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/table_delete.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_center.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_left.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_right.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_bold.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_italic.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_underline.png.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/menu.html.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/save.html.xml
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/change_log
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/copyright_list
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/dependency_list
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/description
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/license
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/maintainer_list
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/revision
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/template_format_version
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/template_path_list
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/template_skin_id_list
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/title
 create mode 100644 bt5/erp5_jquery_sheet_editor/bt/version

diff --git a/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor.xml b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor.xml
new file mode 100644
index 0000000000..e6fc767035
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string>Base_edit</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left (Page Properties)</string>
+                <string>right (Publication)</string>
+                <string>center</string>
+                <string>bottom</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>bottom</string> </key>
+                    <value>
+                      <list>
+                        <string>text_content</string>
+                        <string>my_text_content</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>center</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left (Page Properties)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right (Publication)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebTable_viewEditor</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>jquery_sheet_form_view</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>4</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Web Table</string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>update_action_title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/my_text_content.xml b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/my_text_content.xml
new file mode 100644
index 0000000000..8826b096a9
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/my_text_content.xml
@@ -0,0 +1,280 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="TextAreaField" module="Products.Formulator.StandardFields"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_text_content</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+                <item>
+                    <key> <string>line_too_long</string> </key>
+                    <value> <string>A line was too long.</string> </value>
+                </item>
+                <item>
+                    <key> <string>required_not_found</string> </key>
+                    <value> <string>Input is required but no input given.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_long</string> </key>
+                    <value> <string>You entered too many characters.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_many_lines</string> </key>
+                    <value> <string>You entered too many lines.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string>hidden</string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>my_text_content</string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/text_content.xml b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/text_content.xml
new file mode 100644
index 0000000000..0aaa8096dd
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/PathTemplateItem/portal_skins/erp5_web/WebTable_viewEditor/text_content.xml
@@ -0,0 +1,407 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="EditorField" module="Products.ERP5Form.EditorField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>text_content</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+                <item>
+                    <key> <string>line_too_long</string> </key>
+                    <value> <string>A line was too long.</string> </value>
+                </item>
+                <item>
+                    <key> <string>required_not_found</string> </key>
+                    <value> <string>Input is required but no input given.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_long</string> </key>
+                    <value> <string>You entered too many characters.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_many_lines</string> </key>
+                    <value> <string>You entered too many lines.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>text_editor</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>text_editor</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string encoding="cdata"><![CDATA[
+
+<script type="text/javascript">\n
+$(function() {\n
+//Here is where we initiate the sheets\n
+//every time sheet is created it creates a new jQuery.sheet.instance (array), to manipulate each sheet, the jQuery object is returned\n
+$(\'#jQuerySheet0\').sheet({\n
+title: \'Spreadsheet Playground\',\n
+inlineMenu: inlineMenu($.sheet.instance),\n
+urlGet: \'./getTextContent\',\n
+urlSave: \'./WebTable_setTextContent\'\n
+});\n
+\n
+//This is to give a themeswitcher on the page\n
+$(\'#themeSwitcher\').themeswitcher();\n
+});\n
+\n
+//This function builds the inline menu to make it easy to interact with each sheet instance\n
+function inlineMenu(instance) {\n
+var I = (instance ? instance.length : 0);\n
+\n
+//we want to be able to edit the html for the menu to make them multi-instance\n
+var html = $(\'#inlineMenu\').html().replace(/sheetInstance/g, "$.sheet.instance[" + I + "]");\n
+\n
+var menu = $(html);\n
+\n
+//The following is just so you get an idea of how to style cells\n
+menu.find(\'.colorPickerCell\')\n
+.colorPicker()\n
+.change(function() {\n
+$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it undoable\n
+$.sheet.instance[I].obj.cellHighlighted().css(\'background-color\', $(this).val());\n
+$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it redoable\n
+});\n
+\n
+menu.find(\'.colorPickerFont\')\n
+.colorPicker()\n
+.change(function() {\n
+$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it undoable\n
+$.sheet.instance[I].obj.cellHighlighted().css(\'color\', $(this).val());\n
+$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it redoable\n
+});\n
+\n
+menu.find(\'.colorPickers\')\n
+.children().eq(1).css(\'background-image\', "url(\'jquery_sheet_image/palette.png\')");\n
+menu.find(\'.colorPickers\')\n
+.children().eq(3).css(\'background-image\', "url(\'jquery_sheet_image/palette_bg.png\')");\n
+\n
+\n
+return menu;\n
+}\n
+\n
+function goToObj(s) {\n
+$(\'html, body\').animate({\n
+scrollTop: $(s).offset().top\n
+}, \'slow\');\n
+return false;\n
+}\n
+</script>\n
+\n
+\n
+<div id="jQuerySheet0" style="height: 400px;"></div>\n
+<span id="themeSwitcher"></span>\n
+\n
+<span id="inlineMenu" style="display: none;">\n
+<span>\n
+<a href="#" onclick="sheetInstance.controlFactory.addRow(); return false;" title="Insert Row After Selected"><img alt="Insert Row After Selected" src="jquery_sheet_image/sheet_row_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addRow(null, true); return false;" title="Insert Row Before Selected"><img alt="Insert Row Before Selected" src="jquery_sheet_image/sheet_row_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addRow(null, null, \':last\'); return false;" title="Add Row At End"><img alt="Add Row" src="jquery_sheet_image/sheet_row_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addRowMulti(); return false;" title="Add Multi-Rows"><img alt="Add Multi-Rows" src="jquery_sheet_image/sheet_row_add_multi.png"/></a>\n
+<a href="#" onclick="sheetInstance.deleteRow(); return false;" title="Delete Row"><img alt="Delete Row" src="jquery_sheet_image/sheet_row_delete.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addColumn(); return false;" title="Insert Column After Selected"><img alt="Insert Column After Selected" src="jquery_sheet_image/sheet_col_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, true); return false;" title="Insert Column Before Selected"><img alt="Insert Column Before Selected" src="jquery_sheet_image/sheet_col_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, null, \':last\'); return false;" title="Add Column At End"><img alt="Add Column At End" src="jquery_sheet_image/sheet_col_add.png"/></a>\n
+<a href="#" onclick="sheetInstance.controlFactory.addColumnMulti(); return false;" title="Insert Multi-Columns"><img alt="Add Multi-Columns" src="jquery_sheet_image/sheet_col_add_multi.png"/></a>\n
+<a href="#" onclick="sheetInstance.deleteColumn(); return false;" title="Delete Column"><img alt="Delete Column" src="jquery_sheet_image/sheet_col_delete.png"/></a>\n
+<a href="#" onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val()); return false;" title="Get Cell Range"><img alt="Get Cell Range" src="jquery_sheet_image/sheet_get_range.png"/></a>\n
+<a href="#" onclick="sheetInstance.s.fnSave(); return false;" title="Save Sheets"><img alt="Save Sheet" src="jquery_sheet_image/disk.png"/></a>\n
+<a href="#" onclick="sheetInstance.deleteSheet(); return false;" title="Delete Current Sheet"><img alt="Delete Current Sheet" src="jquery_sheet_image/table_delete.png"/></a>\n
+<a href="#" onclick="sheetInstance.calc(sheetInstance.i); return false;" title="Refresh Calculations"><img alt="Refresh Calculations" src="jquery_sheet_image/arrow_refresh.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellFind(); return false;" title="Find"><img alt="Find" src="jquery_sheet_image/find.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleBold\'); return false;" title="Bold"><img alt="Bold" src="jquery_sheet_image/text_bold.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleItalics\'); return false;" title="Italic"><img alt="Italic" src="jquery_sheet_image/text_italic.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleUnderline\', \'styleLineThrough\'); return false;" title="Underline"><img alt="Underline" src="jquery_sheet_image/text_underline.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleLineThrough\', \'styleUnderline\'); return false;" title="Strikethrough"><img alt="Strikethrough" src="jquery_sheet_image/text_strikethrough.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleLeft\', \'styleCenter styleRight\'); return false;" title="Align Left"><img alt="Align Left" src="jquery_sheet_image/text_align_left.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleCenter\', \'styleLeft styleRight\'); return false;" title="Align Center"><img alt="Align Center" src="jquery_sheet_image/text_align_center.png"/></a>\n
+<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleRight\', \'styleLeft styleCenter\'); return false;" title="Align Right"><img alt="Align Right" src="jquery_sheet_image/text_align_right.png"/></a>\n
+<a href="#" onclick="sheetInstance.fillUpOrDown(); return false;" title="Fill Down"><img alt="Fill Down" src="jquery_sheet_image/arrow_down.png"/></a>\n
+<a href="#" onclick="sheetInstance.fillUpOrDown(true); return false;" title="Fill Up"><img alt="Fill Up" src="jquery_sheet_image/arrow_up.png"/></a>\n
+<span class="colorPickers">\n
+<input title="Foreground color" class="colorPickerFont" style="background-image: url(\'jquery_sheet_image/palette.png\') ! important; width: 16px; height: 16px;" />\n
+<input title="Background Color" class="colorPickerCell" style="background-image: url(\'jquery_sheet_image/palette_bg.png\') ! important; width: 16px; height: 16px;" />\n
+</span>\n
+<a href="#" onclick="sheetInstance.obj.formula().val(\'=HYPERLINK(\\\'\' + prompt(\'Enter Web Address\', \'http://www.visop-dev.com/\') + \'\\\')\').keydown(); return false;" title="HyperLink"><img alt="Web Link" src="jquery_sheet_image/page_link.png"/></a>\n
+<a href="#" onclick="sheetInstance.toggleFullScreen(); $(\'#lockedMenu\').toggle(); return false;" title="Toggle Full Screen"><img alt="Web Link" src="jquery_sheet_image/arrow_out.png"/></a>\n
+<!--<a href="#" onclick="insertAt(\'jSheetControls_formula\', \'~np~text~\'+\'/np~\');return false;" title="Non-parsed"><img alt="Non-parsed" src="jquery_sheet_image/noparse.png"/></a>-->\n
+</span>\n
+</span>
+
+]]></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string>Content of the web page</string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>text_editor</string> </key>
+                    <value> <string>text_area</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Page Content</string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>120</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>here/Base_getEditorFieldPreferredTextEditor</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor.xml
new file mode 100644
index 0000000000..eddc906db3
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Folder" module="OFS.Folder"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>erp5_jquery_sheet_editor</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/WebTable_setTextContent.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/WebTable_setTextContent.xml
new file mode 100644
index 0000000000..8a1d9b1042
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/WebTable_setTextContent.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>if s is not None:\n
+  context.edit(text_content=s)\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>s=None</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>s</string>
+                            <string>None</string>
+                            <string>_getattr_</string>
+                            <string>context</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <none/>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebTable_setTextContent</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.css.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.css.xml
new file mode 100644
index 0000000000..4d9525576f
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.css.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>jquery.sheet.css</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>raw</string> </key>
+            <value> <string>/* Controls styling */\r\n
+.jSheetControls_loc, .jSheetControls_fx\r\n
+{\r\n
+\tborder-width: 0px ! important;\r\n
+\tbackground: none ! important;\r\n
+}\r\n
+\r\n
+.jSheetControls_formula\r\n
+{\r\n
+\twidth: 99%;\r\n
+    height: 17px;\r\n
+}\r\n
+\r\n
+.jSheetLog\r\n
+{\r\n
+\theight: 100px;\r\n
+\twidth: 100%;\r\n
+\toverflow-y: scroll;\r\n
+\tposition: relative;\r\n
+}\r\n
+\r\n
+.jSheetControls, .jSheetControls table\r\n
+{\r\n
+\tpadding: 0px ! important;\r\n
+\tborder: none ! important;\r\n
+\twidth: 100%; \r\n
+\tmargin: 0px; \r\n
+}\r\n
+\r\n
+.jSheetMenu\r\n
+{\r\n
+\tcursor: pointer;\r\n
+\tbackground-color: transparent ! important;\r\n
+\tpadding: 0px ! important;\r\n
+\tmargin: 0px ! important;\r\n
+\tborder: none ! important;\r\n
+}\r\n
+\r\n
+.jSheetMenu *\r\n
+{\r\n
+\tcolor: inherit ! important;\r\n
+\tbackground-color: inherit ! important;\r\n
+}\r\n
+.menu\r\n
+{\r\n
+\tdisplay: none;\r\n
+}\r\n
+#titleHolder\r\n
+{\r\n
+\tpadding-left: 10px;\r\n
+}\r\n
+.jSheetUI\r\n
+{\r\n
+\twidth: inherit ! important;\r\n
+\tborder-color: inherit ! important;\r\n
+}\r\n
+.jSheetTabContainer\r\n
+{\r\n
+\tvertical-align: bottom;\r\n
+\ttext-align: left ! important;\r\n
+}\r\n
+.jSheetTabContainer span\r\n
+{\r\n
+\t\r\n
+\tpadding: 2px 5px 0 5px ! important;\r\n
+\tcursor: pointer;\r\n
+}\r\n
+.jSheetTabContainer *, .menuDiv *\r\n
+{\r\n
+\tfont-size: 1em ! important;\r\n
+}\r\n
+\r\n
+.tableControl\r\n
+{\r\n
+\tborder-collapse: collapse ! important;\r\n
+\tborder: none ! important;\r\n
+\tmargin: none ! important;\r\n
+\tpadding: none ! important;\r\n
+\tposition: absolute ! important;\r\n
+}\r\n
+\r\n
+/* Sheet styling */\r\n
+.jSheet\r\n
+{\r\n
+\tposition: relative ! important;\r\n
+\tmargin-top: -1px ! important;\r\n
+\tmargin-left: -1px ! important;\r\n
+    table-layout: fixed;\r\n
+    empty-cells: show;\r\n
+\tbackground-image: none ! important;\r\n
+\tfont-family: arial, serif;\r\n
+\toverflow: hidden;\r\n
+\theight: auto ! important;\r\n
+\tborder-spacing: 0px ! important;\r\n
+\tborder-width: 1px ! important;\r\n
+\tmargin-bottom: 20px ! important;\r\n
+}\r\n
+.jSheet tbody\r\n
+{\r\n
+\tbackground-color: transparent;\r\n
+\tcolor: inherit ! important;\r\n
+\tborder-color: inherit ! important;\r\n
+}\r\n
+\r\n
+.jSheet tr {\r\n
+\tborder-color: inherit ! important;\r\n
+\tpadding: 0px ! important;\r\n
+\tborder-style: solid ! important;\r\n
+\tbackground-color: transparent;\r\n
+\t-moz-border-radius: 0px 0px 0px 0px;\r\n
+\tcolor:  inherit ! important;\r\n
+\tborder-width: 0px ! important;\r\n
+}\r\n
+.jSheet td {\r\n
+\tborder-width: 1px ! important;\r\n
+\tborder-color: inherit;\r\n
+\tpadding: 0px ! important;\r\n
+\tborder-style: solid ! important;\r\n
+\t-moz-border-radius: 0px 0px 0px 0px;\r\n
+\toverflow: hidden ! important;\r\n
+    text-overflow: ellipsis ! important;\r\n
+    white-space: nowrap ! important;\r\n
+\tmargin: 0px ! important;\r\n
+\tpadding: 0px ! important;\r\n
+\tfont-size: 1em ! important;\r\n
+\theight: inherit ! important;\r\n
+\tcolor:  inherit;\r\n
+\tposition: relative;\r\n
+\tmin-width: 25px ! important;\r\n
+}\r\n
+\r\n
+.jSheet colgroup col\r\n
+{\r\n
+\tborder: none ! important;\r\n
+}\r\n
+\r\n
+/* Containers styleing*/\r\n
+.jSheetBarCorner\r\n
+{\r\n
+\tcursor: pointer;\r\n
+\tborder-width: 1px ! important;\r\n
+}\r\n
+\r\n
+.jSheetBarCornerParent\r\n
+{\r\n
+\tborder: none ! important;\r\n
+}\r\n
+\r\n
+.jSheetBarTopParent\r\n
+{\r\n
+    position: relative ! important;\r\n
+\tbackground-image: none ! important;\r\n
+\tvertical-align: middle;\r\n
+\toverflow: hidden ! important;\r\n
+\tcursor: pointer;\r\n
+\toverflow: hidden ! important;\r\n
+}\r\n
+\r\n
+.jSheetBarLeftParent\r\n
+{\r\n
+    position: relative ! important;\r\n
+\tbackground-image: none ! important;\r\n
+\tvertical-align: middle;\r\n
+\toverflow: hidden ! important;\r\n
+\tcursor: pointer;\r\n
+\toverflow: hidden ! important;\r\n
+}\r\n
+\r\n
+.jSheetEditPane\r\n
+{\r\n
+    overflow: auto ! important;\r\n
+\tbackground-image: none ! important;\r\n
+\tborder-width: 0px;\r\n
+\tposition: relative ! important;\r\n
+}\r\n
+/* Bar item styling */\r\n
+\r\n
+.jSheetBarTop\r\n
+{\r\n
+    position: relative ! important;\r\n
+\tborder-width: 0px ! important;\r\n
+\tmin-width: 100000px;\r\n
+}\r\n
+\r\n
+.jSheetBarLeft\r\n
+{\r\n
+\tposition: relative ! important;\r\n
+\tborder-width: 0px ! important;\r\n
+\tmin-height: 100000px;\r\n
+}\r\n
+.jSheetBarLeft div\r\n
+{\r\n
+\ttext-align: center;\r\n
+\tfont-size: .8em;\r\n
+\theight: inherit;\r\n
+\tborder-left: none ! important;\r\n
+\tborder-right: none ! important;\r\n
+\tposition: relative ! important;\r\n
+\tvertical-align: middle ! important;\r\n
+\tmin-width: 14px ! important;\r\n
+}\r\n
+.jSheetBarTop div\r\n
+{\r\n
+\ttext-align: center ! important;\r\n
+\tfont-size: .8em;\r\n
+\tfloat: left;\r\n
+\tdisplay:block;\r\n
+\theight: inherit ! important;\r\n
+\tpadding-top: 2px;\r\n
+\toverflow: hidden;\r\n
+\tborder-top: none ! important;\r\n
+\tborder-bottom: none ! important;\r\n
+\tmin-width: 25px ! important;\r\n
+}\r\n
+\r\n
+.jSheetControls img\r\n
+{\r\n
+\tborder: none;\r\n
+}\r\n
+\r\n
+.safeImg\r\n
+{\r\n
+\tdisplay: inline;\r\n
+}\r\n
+\r\n
+.jSheetInPlaceEdit\r\n
+{\r\n
+\tposition: absolute;\r\n
+}\r\n
+\r\n
+.colorPickers *\r\n
+{\r\n
+\tdisplay: inline-block;\r\n
+\twidth: 16px ! important;\r\n
+\theight: 16px ! important;\r\n
+\tbackground-color: transparent ! important;\r\n
+}\r\n
+\r\n
+.jSheetFullScreen\r\n
+{\r\n
+\ttop: 5px;\r\n
+\tleft: 5px;\r\n
+\tposition: fixed;\r\n
+\ttop: expression(eval(document.body.scrollTop + 15) + "px");\r\n
+\tleft: expression(eval(document.body.scrollLeft) + "px");\r\n
+}\r\n
+\r\n
+.jSheetFullScreenTabContainer\r\n
+{\r\n
+\tbottom: 10px;\r\n
+\tleft: 10px;\r\n
+\tposition: fixed;\r\n
+\ttop: expression(eval(document.body.scrollTop + 15) + "px");\r\n
+\tleft: expression(eval(document.body.scrollLeft) + "px");\r\n
+}\r\n
+\r\n
+/* Cell styler classes */\r\n
+.styleBold\r\n
+{ font-weight: bold; }\r\n
+.styleItalics\t\r\n
+{ font-style: italic; }\r\n
+.styleUnderline\t\r\n
+{ text-decoration: underline; }\r\n
+.styleLineThrough\r\n
+{ text-decoration: line-through;}\r\n
+.styleLeft\t\t\r\n
+{ text-align: left; }\r\n
+.styleRight\t\t\r\n
+{ text-align: right; }\r\n
+.styleCenter\t\r\n
+{ text-align: center; }\r\n
+.styleTop\t\t\r\n
+{ vertical-align: top; }\r\n
+.styleMiddle\t\r\n
+{ vertical-align: middle; }\r\n
+.styleBottom\t\r\n
+{ vertical-align: bottom; }\r\n
+.styleUpper \t\t\r\n
+{ text-transform: uppercase; }\r\n
+.styleCapital \t\r\n
+{ text-transform: capitalize; }\r\n
+.styleLower \t\t\r\n
+{ text-transform: lowercase; }\r\n
+.styleHidden \t\r\n
+{ display: none; }\r\n
+.styleWrap\r\n
+{ word-wrap: break-word; }</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.erp5.js.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.erp5.js.xml
new file mode 100644
index 0000000000..b844689344
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.erp5.js.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <unicode>// This function will be called when the user click the save button. As\n
+// submitAction function may have changed the action before, it\'s better to\n
+// reset the form action to it\'s original behaviour. This is actually\n
+// usefull when the user click the back button.\n
+function clickSaveButton(act) {\n
+ changed = false;\n
+ document.forms[0].action = act;\n
+ // Here we should use \n
+ document.forms[0].elements[\'field_my_text_content\'].value = $.sheet.instance[0].getSource(true);\n
+} \n
+\n
+</unicode> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>expand</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>jquery.sheet.erp5.js</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <unicode></unicode> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.html.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.html.xml
new file mode 100644
index 0000000000..a235cd19fe
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.html.xml
@@ -0,0 +1,1085 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <unicode encoding="cdata"><![CDATA[
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r\n
+<html>\r\n
+<head>\r\n
+\t<META HTTP-EQUIV="Pragma" CONTENT="no-cache">\r\n
+\t<META HTTP-EQUIV="Expires" CONTENT="-1">\r\n
+\t<title>jQuery.sheet - The Web Based Spreadsheet</title>\r\n
+\t<!--Required-->\r\n
+\t\t<link rel="stylesheet" type="text/css" href="jquery.sheet.css"></link>\r\n
+\t\t<link rel="stylesheet" type="text/css" href="theme/jquery-ui-1.8.1.custom.css"></link>\r\n
+\t\t<script type="text/javascript" src="jquery-1.4.2.min.js"></script>\r\n
+\t\t<script type="text/javascript" src="jquery.sheet.min.js"></script>\r\n
+\t<!--/Required-->\r\n
+\t\r\n
+\t<!--Optional-->\r\n
+\t\t<!--Menu-->\r\n
+\t\t\t<link rel="stylesheet" type="text/css" href="plugins/menu.css"></link>\r\n
+\t\t\t<script type="text/javascript" src="plugins/mbMenu.min.js"></script>\r\n
+\t\t<!--/Menu-->\r\n
+\t\t\r\n
+\t\t<!--ScrollTo-->\r\n
+\t\t\t<script type="text/javascript" src="plugins/jquery.scrollTo-min.js"></script>\r\n
+\t\t<!--/ScrollTo-->\r\n
+\t\t\r\n
+\t\t<!--jQuery UI-->\r\n
+\t\t\t<script type="text/javascript" src="jquery-ui-1.8.1.custom.min.js"></script>\r\n
+\t\t<!--/jQuery UI-->\r\n
+\t\t\r\n
+\t\t<!--Charts-->\r\n
+\t\t\t<script type="text/javascript" src="plugins/jgcharts.min.js"></script>\r\n
+\t\t<!--/Charts-->\r\n
+\t\t\r\n
+\t\t<!--ColorPicker-->\r\n
+\t\t\t<link rel="stylesheet" type="text/css" href="plugins/jquery.colorPicker.css"></link>\r\n
+\t\t\t<script type="text/javascript" src="plugins/jquery.colorPicker.min.js"></script>\r\n
+\t\t<!--/ColorPicker-->\r\n
+\t\t\r\n
+\t\t<!--Theme Switcher Tool-->\r\n
+\t\t\t<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>\r\n
+\t\t<!--/Theme Switcher Tool-->\r\n
+\t\t\r\n
+\t\t<!--Elastic-->\r\n
+\t\t\t<script type="text/javascript" src="plugins/jquery.elastic.min.js"></script>\r\n
+\t\t<!--/Elastic-->\r\n
+\t<!--/Optional-->\r\n
+\t\r\n
+\t<script type="text/javascript">\r\n
+\t\t$(function() {\r\n
+\t\t\t//Here is where we initiate the sheets\r\n
+\t\t\t//every time sheet is created it creates a new jQuery.sheet.instance (array), to manipulate each sheet, the jQuery object is returned\r\n
+\t\t\t$(\'#jQuerySheet0\').sheet({\r\n
+\t\t\t\ttitle: \'Spreadsheet Playground\',\r\n
+\t\t\t\tinlineMenu: inlineMenu($.sheet.instance),\r\n
+\t\t\t\turlGet: \'sheets/numberstesting.html\'\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\t\r\n
+\t\t\t$(\'#jQuerySheet1\').sheet({\r\n
+\t\t\t\ttitle: \'Enduser Documentation <a href="#" onclick="jQuery.sheet.instance[1].toggleState(); return false;">EDIT</a>\',\r\n
+\t\t\t\tinlineMenu: inlineMenu($.sheet.instance),\r\n
+\t\t\t\teditable: false\r\n
+\t\t\t});\r\n
+\r\n
+\t\t\t$(\'#jQuerySheet2\').sheet({\r\n
+\t\t\t\ttitle: \'Developer Documentation <a href="#" onclick="jQuery.sheet.instance[2].toggleState(); return false;">EDIT</a>\',\r\n
+\t\t\t\tinlineMenu: inlineMenu($.sheet.instance),\r\n
+\t\t\t\turlGet: \'sheets/developer.documentation.html\',\r\n
+\t\t\t\teditable: false\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\t//examples of how to use jQuery.sheet\r\n
+\t\t\t/*\r\n
+\t\t\t//Inline sheet(s), non-editable (like a gridview)\r\n
+\t\t\t$(\'#jQuerySheet\').sheet({\r\n
+\t\t\t\ttitle: \'jQuery.sheet - The Web Based Spreadsheet Demo\',\r\n
+\t\t\t\tbuildSheet: true, //will turn object #jQuerySheet\'s child tables into sheets\r\n
+\t\t\t\teditable: false,\r\n
+\t\t\t\tcalcOff: true\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\t//New single custom sized sheet\r\n
+\t\t\t$(\'#jQuerySheet\').sheet({\r\n
+\t\t\t\ttitle: \'jQuery.sheet - The Web Based Spreadsheet Demo\',\r\n
+\t\t\t\tinlineMenu: inlineMenu(jQuery.sheet.instance),\r\n
+\t\t\t\tbuildSheet: \'5x100\'\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\t//Custom object sheet(s)\r\n
+\t\t\t$(\'#jQuerySheet\').sheet({\r\n
+\t\t\t\ttitle: \'jQuery.sheet - The Web Based Spreadsheet Demo\',\r\n
+\t\t\t\tinlineMenu: inlineMenu(jQuery.sheet.instance),\r\n
+\t\t\t\tbuildSheet: $(\'#jQuerySheet\').find(\'table\')\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\t//Custom object sheet(s)\r\n
+\t\t\t$(\'#jQuerySheet\').sheet({\r\n
+\t\t\t\ttitle: \'jQuery.sheet - The Web Based Spreadsheet Demo\',\r\n
+\t\t\t\tinlineMenu: inlineMenu(jQuery.sheet.instance),\r\n
+\t\t\t\tbuildSheet: $.sheet.makeTable.fromSize(\'5x100\').add($.sheet.makeTable.fromSize(\'5x100\'))\r\n
+\t\t\t});\r\n
+\t\t\t*/\r\n
+\r\n
+\t\t\t//This is to give a themeswitcher on the page\r\n
+\t\t\t$(\'#themeSwitcher\').themeswitcher();\r\n
+\r\n
+\t\t\t//This is for some fancy menu stuff\r\n
+\t\t\tvar o = $(\'#structures\');\r\n
+\t\t\tvar top = o.offset().top - 300;\r\n
+\t\t\t$(document).scroll(function(e) {\r\n
+\t\t\t\tif ($(this).scrollTop() > top) {\r\n
+\t\t\t\t\t$(\'#lockedMenu\').removeClass(\'locked\');\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\t$(\'#lockedMenu\').addClass(\'locked\');\r\n
+\t\t\t\t}\r\n
+\t\t\t}).scroll();\r\n
+\t\t});\r\n
+\t\t\r\n
+\t\t//This function builds the inline menu to make it easy to interact with each sheet instance\r\n
+\t\tfunction inlineMenu(instance) {\r\n
+\t\t\tvar I = (instance ? instance.length : 0);\r\n
+\t\t\t\r\n
+\t\t\t//we want to be able to edit the html for the menu to make them multi-instance\r\n
+\t\t\tvar html = $(\'#inlineMenu\').html().replace(/sheetInstance/g, "$.sheet.instance[" + I + "]");\r\n
+\t\t\t\r\n
+\t\t\tvar menu = $(html); \r\n
+\t\t\t\r\n
+\t\t\t//The following is just so you get an idea of how to style cells\r\n
+\t\t\tmenu.find(\'.colorPickerCell\')\r\n
+\t\t\t\t.colorPicker()\r\n
+\t\t\t\t.change(function() {\r\n
+\t\t\t\t\t$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it undoable\r\n
+\t\t\t\t\t$.sheet.instance[I].obj.cellHighlighted().css(\'background-color\', $(this).val());\r\n
+\t\t\t\t\t$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it redoable\r\n
+\t\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\tmenu.find(\'.colorPickerFont\')\r\n
+\t\t\t\t.colorPicker()\r\n
+\t\t\t\t.change(function() {\r\n
+\t\t\t\t\t$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it undoable\r\n
+\t\t\t\t\t$.sheet.instance[I].obj.cellHighlighted().css(\'color\', $(this).val());\r\n
+\t\t\t\t\t$.sheet.instance[I].cellUndoable.add($.sheet.instance[I].obj.cellHighlighted()); //save state, make it redoable\r\n
+\t\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\tmenu.find(\'.colorPickers\')\r\n
+\t\t\t\t.children().eq(1).css(\'background-image\', "url(\'pics/icons/palette.png\')");\r\n
+\t\t\tmenu.find(\'.colorPickers\')\r\n
+\t\t\t\t.children().eq(3).css(\'background-image\', "url(\'pics/icons/palette_bg.png\')");\r\n
+\r\n
+\t\t\t\t\t\t\r\n
+\t\t\treturn menu;\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tfunction goToObj(s) {\r\n
+\t\t\t$(\'html, body\').animate({\r\n
+\t\t\t\tscrollTop: $(s).offset().top\r\n
+\t\t\t}, \'slow\');\r\n
+\t\t\treturn false;\r\n
+\t\t}\r\n
+\t</script>\r\n
+\t<!--Page styles-->\r\n
+\t<style>\r\n
+\t\tbody\r\n
+\t\t{\r\n
+\t\t\tbackground-color: #464646;\r\n
+\t\t\tpadding: 0px;\r\n
+\t\t\tmargin: 0px;\r\n
+\t\t\tpadding-bottom: 100px;\r\n
+\t\t}\r\n
+\t\t.wrapper\r\n
+\t\t{\r\n
+\t\t\tmargin: 10px;\r\n
+\t\t\tbackground-color: #CCCCCC;\r\n
+\t\t}\r\n
+\t\t.locked\r\n
+\t\t{\r\n
+\t\t\tposition: fixed;\r\n
+\t\t\ttop: expression(eval(document.body.scrollTop) + "px");\r\n
+\t\t\tleft: 20px;\r\n
+\t\t\tz-index: 100;\r\n
+\t\t}\r\n
+\t\t#structures\r\n
+\t\t{\r\n
+\t\t\ttext-align: center;\r\n
+\t\t\tfont-size: 1.5em;\r\n
+\t\t\tpadding: 10px;\r\n
+\t\t\tborder: none;\r\n
+\t\t}\r\n
+\t\t#header\r\n
+\t\t{\r\n
+\t\t\ttext-align: center;\r\n
+\t\t\tfont-size: 1.5em;\r\n
+\t\t\tpadding: 18px;\r\n
+\t\t\tborder: none;\r\n
+\t\t}\r\n
+\t\t#footer\r\n
+\t\t{\r\n
+\t\t\ttext-align: center;\r\n
+\t\t\tcolor: white;\r\n
+\t\t\tfont-size: .9em;\r\n
+\t\t}\r\n
+\t\t#footer a\r\n
+\t\t{\r\n
+\t\t\tfont-size: 1.2em;\r\n
+\t\t\tcolor: #FFFFFF;\r\n
+\t\t}\r\n
+\t</style>\r\n
+</head>\r\n
+<body>\r\n
+\t<h1 id="header" class="ui-state-default">jQuery.sheet - The Web Based Spreadsheet, Examples and Documentation</h1>\r\n
+\t<div id="mainWrapper" class="ui-corner-all wrapper">\r\n
+\t\t<table style="width: 100%;">\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td rowspan="2" style="width: 200px; vertical-align: top;">\t\t\t\t\r\n
+\t\t\t\t\t<table id="lockedMenu" class="locked ui-widget-header ui-corner-all" style="background-image: none;">\r\n
+\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t<td style="text-align: center; padding-left: 20px;">\r\n
+\t\t\t\t\t\t\t\t<span id="themeSwitcher"></span>\r\n
+\t\t\t\t\t\t\t</td>\r\n
+\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t<td colspan="2">\r\n
+\t\t\t\t\t\t\t\t<ul style="padding-left: 15px;">\r\n
+\t\t\t\t\t\t\t\t\t<li><a href="#jQuerySheet0" onclick="return goToObj(\'#jQuerySheet0\');">Playground</a></li>\r\n
+\t\t\t\t\t\t\t\t\t<li><a href="#jQuerySheet0" onclick="return goToObj(\'#jQuerySheet1\');">Enduser Documentation</a></li>\r\n
+\t\t\t\t\t\t\t\t\t<li><a href="#jQuerySheet1" onclick="return goToObj(\'#jQuerySheet2\');">Developer Documentation</a></li>\r\n
+\t\t\t\t\t\t\t\t\t<li><a href="#structures" onclick="return goToObj(\'#structures\');">XML &amp; JSON Structures</a></li>\r\n
+\t\t\t\t\t\t\t\t</ul>\r\n
+\t\t\t\t\t\t\t</td>\r\n
+\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t<td style="text-align: center;">\r\n
+\t\t\t\t\t\t\t\t<form method="post" action="https://www.paypal.com/cgi-bin/webscr" name="_xclick">\r\n
+\t\t\t\t\t\t\t\t\t<input type="hidden" name="cmd" value="_xclick"/>\r\n
+\t\t\t\t\t\t\t\t\t<input type="hidden" name="business" value="axel180@aim.com"/>\r\n
+\t\t\t\t\t\t\t\t\t<input type="hidden" name="item_name" value="jQuery.Sheet Development"/>\r\n
+\t\t\t\t\t\t\t\t\t<input type="hidden" name="currency_code" value="USD"/>\r\n
+\t\t\t\t\t\t\t\t\t<input type="hidden" name="amount" value="25.00"/>\r\n
+\t\t\t\t\t\t\t\t\t<input type="image" border="0" name="submit" src="http://www.paypal.com/en_US/i/btn/btn_donate_LG.gif" alt="Make payments with PayPal - it"/>\r\n
+\t\t\t\t\t\t\t\t</form>\r\n
+\t\t\t\t\t\t\t</td>\r\n
+\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t</table>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t</tr>\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td colspan="2" style="vertical-align: top;">\r\n
+\t\t\t\t\t<div id="jQuerySheet0" style="height: 450px;"></div>\r\n
+\t\t\t\t\t<br /><br />\r\n
+\t\t\t\t\t<div id="jQuerySheet1" style="height: 450px;"></div>\r\n
+\t\t\t\t\t<br /><br />\r\n
+\t\t\t\t\t<div id="jQuerySheet2" style="height: 450px;">\r\n
+\t\t\t\t\t\t<table title="Spreeadsheet 1">\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t</table>\r\n
+\t\t\t\t\t\t<table title="Spreeadsheet 2">\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t</table>\r\n
+\t\t\t\t\t\t<table title="Spreeadsheet 3">\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t\t<tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr><tr>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t\t<td></td>\r\n
+\t\t\t\t\t\t\t</tr>\r\n
+\t\t\t\t\t\t</table>\r\n
+\t\t\t\t\t</div>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t</tr>\r\n
+\t\t</table>\r\n
+\t</div>\r\n
+\t\r\n
+\t<h2 id="structures" class="ui-state-default">Structures</h2>\r\n
+\t\r\n
+\t<div class="wrapper ui-corner-all">\r\n
+\t\t<table style="width: 100%;">\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td class="ui-widget-header ui-corner-tl">HTML</td>\r\n
+\t\t\t\t<td class="ui-widget-header">XML</td>\r\n
+\t\t\t\t<td class="ui-widget-header ui-corner-tr">JSON</td>\r\n
+\t\t\t</tr>\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td style="width: 33%; vertical-align: top;">\r\n
+\t\t\t\t\t&lt;TABLE&nbsp;title=""&gt;<br>&nbsp;&nbsp;&lt;COLGROUP&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;COL&nbsp;width=""&nbsp;style="width:&nbsp;;"/&gt;<br>&nbsp;&nbsp;&lt;/COLGROUP&gt;<br>&nbsp;&nbsp;&lt;TBODY&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;TR&nbsp;&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&nbsp;&nbsp;class="Classes&nbsp;used&nbsp;for&nbsp;styling."&gt;&lt;/TD&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/TR&gt;<br>&nbsp;&nbsp;&lt;/TBODY&gt;<br>&lt;/TABLE&gt;<br><br>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t\t<td style="width: 33%; vertical-align: top;">\r\n
+\t\t\t\t\t&lt;documents&gt;<br />&nbsp;&nbsp; &nbsp;&lt;document&gt; //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;metadata&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;columns&gt;{Column_Count}&lt;/columns&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;rows&gt;{Row_Count}&lt;/rows&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;title&gt;&lt;/title&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/metadata&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;data&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;r{Row_Index}&gt; //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;c{Column_Index} style="" width="0" cl="{Classes used for styling}"&gt;&lt;/c{Column_Index}&gt; //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/r{Row_Index}&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/data&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/document&gt;<br />&lt;/documents&gt;<br />\r\n
+\t\t\t\t</td>\r\n
+\t\t\t\t<td style="width: 33%; vertical-align: top;">\r\n
+\t\t\t\t\t[<br />&nbsp;&nbsp; &nbsp;{ //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; metadata: {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; columns: Column_Count,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rows: Row_Count,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; title: \'\'<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; data: {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; r{Row_Index}: { //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c{Column_Index}: { //repeats<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value: \'\',<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; style: \'\',<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; width: 0,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cl: {Classes used for styling}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;}<br />];\r\n
+\t\t\t\t</td>\r\n
+\t\t\t</tr>\r\n
+\t\t</table>\r\n
+\t\t<table style="width: 100%">\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td class="ui-widget-header ui-corner-tl" style="width: 50%;">Export Methods</td>\r\n
+\t\t\t\t<td class="ui-widget-header ui-corner-tr" style="width: 50%;">Import (makeTable) Methods</td>\r\n
+\t\t\t</tr>\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td style="vertical-align: top;">\r\n
+\t\t\t\t\t<ul>\r\n
+\t\t\t\t\t\t<li>jQuery().sheetInstance.export.html()</li>\r\n
+\t\t\t\t\t\t<li>jQuery().sheetInstance.export.xml()</li>\r\n
+\t\t\t\t\t\t<li>jQuery().sheetInstance.export.json()</li>\r\n
+\t\t\t\t\t</ul>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t\t<td style="vertical-align: top;">\r\n
+\t\t\t\t\t<ul>\r\n
+\t\t\t\t\t\t<li>jQuery.sheet.makeTable.fromSize(\'10x100\')</li>\r\n
+\t\t\t\t\t\t<li>jQuery.sheet.makeTable.xml()</li>\r\n
+\t\t\t\t\t\t<li>jQuery.sheet.makeTable.json()</li>\r\n
+\t\t\t\t\t</ul>\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tUse these like this:<br />\r\n
+\t\t\t\t\t$(function() {<br />\r\n
+\t\t\t\t\t&nbsp;&nbsp;$(\'#div\').sheet({<br />\r\n
+\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;buildSheet: jQuery.sheet.makeTable.xml(myXmlVariable)<br/>\r\n
+\t\t\t\t\t&nbsp;&nbsp;});<br/>\r\n
+\t\t\t\t\t});<br/>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t</tr>\r\n
+\t\t\t<tr>\r\n
+\t\t\t\t<td colspan="2" style="text-align: center;">\r\n
+\t\t\t\t\t<span style="font-size: 0.9em;">(*NOTE: jQuery.sheet.instance[instanceIndex] == jQuery().sheetInstance)</span>\r\n
+\t\t\t\t</td>\r\n
+\t\t\t</tr>\r\n
+\t\t</table>\r\n
+\t</div>\r\n
+\r\n
+\t<span id="inlineMenu" style="display: none;">\r\n
+\t\t<span>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addRow(); return false;" title="Insert Row After Selected"><img alt="Insert Row After Selected" src="pics/icons/sheet_row_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addRow(null, true); return false;" title="Insert Row Before Selected"><img alt="Insert Row Before Selected" src="pics/icons/sheet_row_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addRow(null, null, \':last\'); return false;" title="Add Row At End"><img alt="Add Row" src="pics/icons/sheet_row_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addRowMulti(); return false;" title="Add Multi-Rows"><img alt="Add Multi-Rows" src="pics/icons/sheet_row_add_multi.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.deleteRow(); return false;" title="Delete Row"><img alt="Delete Row" src="pics/icons/sheet_row_delete.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addColumn(); return false;" title="Insert Column After Selected"><img alt="Insert Column After Selected" src="pics/icons/sheet_col_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, true); return false;" title="Insert Column Before Selected"><img alt="Insert Column Before Selected" src="pics/icons/sheet_col_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, null, \':last\'); return false;" title="Add Column At End"><img alt="Add Column At End" src="pics/icons/sheet_col_add.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.controlFactory.addColumnMulti(); return false;" title="Insert Multi-Columns"><img alt="Add Multi-Columns" src="pics/icons/sheet_col_add_multi.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.deleteColumn(); return false;" title="Delete Column"><img alt="Delete Column" src="pics/icons/sheet_col_delete.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val()); return false;" title="Get Cell Range"><img alt="Get Cell Range" src="pics/icons/sheet_get_range.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.s.fnSave(); return false;" title="Save Sheets"><img alt="Save Sheet" src="pics/icons/disk.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.deleteSheet(); return false;" title="Delete Current Sheet"><img alt="Delete Current Sheet" src="pics/icons/table_delete.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.calc(sheetInstance.i); return false;" title="Refresh Calculations"><img alt="Refresh Calculations" src="pics/icons/arrow_refresh.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellFind(); return false;" title="Find"><img alt="Find" src="pics/icons/find.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleBold\'); return false;" title="Bold"><img alt="Bold" src="pics/icons/text_bold.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleItalics\'); return false;" title="Italic"><img alt="Italic" src="pics/icons/text_italic.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleUnderline\', \'styleLineThrough\'); return false;" title="Underline"><img alt="Underline" src="pics/icons/text_underline.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleLineThrough\', \'styleUnderline\'); return false;" title="Strikethrough"><img alt="Strikethrough" src="pics/icons/text_strikethrough.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleLeft\', \'styleCenter styleRight\'); return false;" title="Align Left"><img alt="Align Left" src="pics/icons/text_align_left.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleCenter\', \'styleLeft styleRight\'); return false;" title="Align Center"><img alt="Align Center" src="pics/icons/text_align_center.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.cellStyleToggle(\'styleRight\', \'styleLeft styleCenter\'); return false;" title="Align Right"><img alt="Align Right" src="pics/icons/text_align_right.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.fillUpOrDown(); return false;" title="Fill Down"><img alt="Fill Down" src="pics/icons/arrow_down.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.fillUpOrDown(true); return false;" title="Fill Up"><img alt="Fill Up" src="pics/icons/arrow_up.png"/></a>\r\n
+\t\t\t<span class="colorPickers">\r\n
+\t\t\t\t<input title="Foreground color" class="colorPickerFont" style="background-image: url(\'pics/icons/palette.png\') ! important; width: 16px; height: 16px;" />\r\n
+\t\t\t\t<input title="Background Color" class="colorPickerCell" style="background-image: url(\'pics/icons/palette_bg.png\') ! important; width: 16px; height: 16px;" />\r\n
+\t\t\t</span>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.obj.formula().val(\'=HYPERLINK(\\\'\' + prompt(\'Enter Web Address\', \'http://www.visop-dev.com/\') + \'\\\')\').keydown(); return false;" title="HyperLink"><img alt="Web Link" src="pics/icons/page_link.png"/></a>\r\n
+\t\t\t<a href="#" onclick="sheetInstance.toggleFullScreen(); $(\'#lockedMenu\').toggle(); return false;" title="Toggle Full Screen"><img alt="Web Link" src="pics/icons/arrow_out.png"/></a>\r\n
+\t\t\t<!--<a href="#" onclick="insertAt(\'jSheetControls_formula\', \'~np~text~\'+\'/np~\');return false;" title="Non-parsed"><img alt="Non-parsed" src="pics/icons/noparse.png"/></a>-->\r\n
+\t\t</span>\r\n
+\t</span>\r\n
+\r\n
+\t<div id="footer" class="ui-corner-all">\r\n
+\t\t<a href="http://www.visop-dev.com/jquerysheet.html">jQuery.sheet() The Web Based Spreadsheet</a> |\r\n
+\t\t<a href="http://www.VisOp-Dev.com">Home</a> | \r\n
+\t\t<a href="http://plugins.jquery.com/project/sheet">Project</a>  | \r\n
+\t\t<a href="http://code.google.com/p/jquerysheet">Code</a><br />\r\n
+\t\t<a href="mailto:rplummer@visop-dev.com">Copyright (C) 2010 Robert Plummer</a> | \r\n
+\t\t<a href="http://www.gnu.org/licenses/">Dual licensed under the LGPL v2 and GPL v2 licenses</a>\r\n
+\t</div>\r\n
+</body>\r\n
+</html>\r\n
+
+
+]]></unicode> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>jquery.sheet.html</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.js.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.js.xml
new file mode 100644
index 0000000000..002e014c4b
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.js.xml
@@ -0,0 +1,4189 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79979098.47</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>jquery.sheet.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/x-javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>131137</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Pdata" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+/*\r\n
+jQuery.sheet() The Web Based Spreadsheet\r\n
+Version: 1.1.0\r\n
+http://code.google.com/p/jquerysheet/\r\n
+\t\t\r\n
+Copyright (C) 2010 Robert Plummer\r\n
+Dual licensed under the LGPL v2 and GPL v2 licenses.\r\n
+http://www.gnu.org/licenses/\r\n
+*/\r\n
+\r\n
+/*\r\n
+\tDimensions Info:\r\n
+\t\tWhen dealing with size, it seems that outerHeight is generally the most stable cross browser\r\n
+\t\tattribute to use for bar sizing.  We try to use this as much as possible.  But because col\'s\r\n
+\t\tdon\'t have boarders, we subtract or add jS.s.boxModelCorrection for those browsers.\r\n
+\ttr/td column and row Index VS cell/column/row index\r\n
+\t\tDOM elements are all 0 based (tr/td/table)\r\n
+\t\tSpreadsheet elements are all 1 based (A1, A1:B4, TABLE2:A1, TABLE2:A1:B4)\r\n
+\t\tColumn/Row/Cell\r\n
+\tDOCTYPE:\r\n
+\t\tIt is recommended to use STRICT doc types on the viewing page when using sheet to ensure that the heights/widths of bars and sheet rows show up correctly\r\n
+\t\tExample of recommended doc type: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r\n
+*/\r\n
+jQuery.fn.extend({\r\n
+\tsheet: function(settings) {\r\n
+\t\tsettings = jQuery.extend({\r\n
+\t\t\turlGet: \t\t"sheets/enduser.documentation.html", //local url, if you want to get a sheet from a url\r\n
+\t\t\turlSave: \t\t"save.html", \t\t\t\t\t//local url, for use only with the default save for sheet\r\n
+\t\t\teditable: \t\ttrue, \t\t\t\t\t\t\t//bool, Makes the jSheetControls_formula & jSheetControls_fx appear\r\n
+\t\t\tallowToggleState: true,\t\t\t\t\t\t\t//allows the function that changes the spreadsheet\'s state from static to editable and back\r\n
+\t\t\turlMenu: \t\t"menu.html", \t\t\t\t\t//local url, for the menu to the right of title\r\n
+\t\t\tnewColumnWidth: 120, \t\t\t\t\t\t\t//int, the width of new columns or columns that have no width assigned\r\n
+\t\t\ttitle: \t\t\tnull, \t\t\t\t\t\t\t//html, general title of the sheet group\r\n
+\t\t\tinlineMenu:\t\tnull, \t\t\t\t\t\t\t//html, menu for editing sheet\r\n
+\t\t\tbuildSheet: \tfalse,\t\t\t\t\t\t\t//bool, string, or object\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//bool true - build sheet inside of parent\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//bool false - use urlGet from local url\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//string  - \'{number_of_cols}x{number_of_rows} (5x100)\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//object - table\r\n
+\t\t\tcalcOff: \t\tfalse, \t\t\t\t\t\t\t//bool, turns calculationEngine off (no spreadsheet, just grid)\r\n
+\t\t\tlog: \t\t\tfalse, \t\t\t\t\t\t\t//bool, turns some debugging logs on (jS.log(\'msg\'))\r\n
+\t\t\tlockFormulas: \tfalse, \t\t\t\t\t\t\t//bool, turns the ability to edit any formula off\r\n
+\t\t\tparent: \t\tjQuery(this), \t\t\t\t\t//object, sheet\'s parent, DON\'T CHANGE\r\n
+\t\t\tcolMargin: \t\t18, \t\t\t\t\t\t\t//int, the height and the width of all bar items, and new rows\r\n
+\t\t\tfnBefore: \t\tfunction() {}, \t\t\t\t\t//fn, fires just before jQuery.sheet loads\r\n
+\t\t\tfnAfter: \t\tfunction() {},\t \t\t\t\t//fn, fires just after all sheets load\r\n
+\t\t\tfnSave: \t\tfunction() { jS.saveSheet(); }, //fn, default save function, more of a proof of concept\r\n
+\t\t\tfnOpen: \t\tfunction() { \t\t\t\t\t//fn, by default allows you to paste table html into a javascript prompt for you to see what it looks likes if you where to use sheet\r\n
+\t\t\t\tvar t = prompt(\'Paste your table html here\');\r\n
+\t\t\t\tif (t) {\r\n
+\t\t\t\t\tjS.openSheet(t);\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tfnClose: \t\tfunction() {}, \t\t\t\t\t//fn, default clase function, more of a proof of concept\r\n
+\t\t\tfnAfterCellEdit:function() {},\t\t\t\t\t//fn, fires just after someone edits a cell\r\n
+\t\t\tjoinedResizing: false, \t\t\t\t\t\t\t//bool, this joins the column/row with the resize bar\r\n
+\t\t\tboxModelCorrection: 2, \t\t\t\t\t\t\t//int, attempts to correct the differences found in heights and widths of different browsers, if you mess with this, get ready for the must upsetting and delacate js ever\r\n
+\t\t\tshowErrors:\t\ttrue,\t\t\t\t\t\t\t//bool, will make cells value an error if spreadsheet function isn\'t working correctly or is broken\r\n
+\t\t\tcalculations:\t{},\t\t\t\t\t\t\t\t//object, used to extend the standard functions that come with sheet\r\n
+\t\t\tcellSelectModel: \'excel\',\t\t\t\t\t\t//string, \'excel\' || \'oo\' || \'gdocs\' Excel sets the first cell onmousedown active, openoffice sets the last, now you can choose how you want it to be ;)\r\n
+\t\t\tautoAddCells:\ttrue,\r\n
+\t\t\tcaseInsensitive: false\r\n
+\t\t}, settings);\r\n
+\t\t\r\n
+\t\t\r\n
+\t\tvar o = settings.parent;\r\n
+\t\tif (jQuery.sheet.instance) {\r\n
+\t\t\to.sheetInstance = jQuery.sheet.createInstance(settings, jQuery.sheet.instance.length, o);\r\n
+\t\t\tjQuery.sheet.instance.push(o.sheetInstance);\r\n
+\t\t} else {\r\n
+\t\t\to.sheetInstance = jQuery.sheet.createInstance(settings, 0, o);\r\n
+\t\t\tjQuery.sheet.instance = [o.sheetInstance];\r\n
+\t\t}\r\n
+\t\treturn o;\r\n
+\t}\r\n
+});\r\n
+\r\n
+jQuery.sheet = {\r\n
+\tcreateInstance: function(s, I, origParent) { //s = jQuery.sheet settings, I = jQuery.sheet Instance Integer\r\n
+\t\tvar jS = {\r\n
+\t\t\tversion: \'1.1.0\',\r\n
+\t\t\ti: 0,\r\n
+\t\t\tI: I,\r\n
+\t\t\tsheetCount: 0,\r\n
+\t\t\ts: {},//s = settings object, used for shorthand, populated from jQuery.sheet\r\n
+\t\t\tobj: {//obj = object references\r\n
+\t\t\t\t//Please note, class references use the tag name because it\'s about 4 times faster\r\n
+\t\t\t\tbarCorner:\t\t\tfunction() { return jQuery(\'#\' + jS.id.barCorner + jS.i); },\r\n
+\t\t\t\tbarCornerAll:\t\tfunction() { return s.parent.find(\'div.\' + jS.cl.barCorner); },\r\n
+\t\t\t\tbarCornerParent:\tfunction() { return jQuery(\'#\' + jS.id.barCornerParent + jS.i); },\r\n
+\t\t\t\tbarCornerParentAll: function() { return s.parent.find(\'td.\' + jS.cl.barCornerParent); },\r\n
+\t\t\t\tbarTop: \t\t\tfunction() { return jQuery(\'#\' + jS.id.barTop + jS.i); },\r\n
+\t\t\t\tbarTopAll:\t\t\tfunction() { return s.parent.find(\'div.\' + jS.cl.barTop); },\r\n
+\t\t\t\tbarTopParent: \t\tfunction() { return jQuery(\'#\' + jS.id.barTopParent + jS.i); },\r\n
+\t\t\t\tbarTopParentAll:\tfunction() { return s.parent.find(\'div.\' + jS.cl.barTopParent); },\r\n
+\t\t\t\tbarLeft: \t\t\tfunction() { return jQuery(\'#\' + jS.id.barLeft + jS.i); },\r\n
+\t\t\t\tbarLeftAll:\t\t\tfunction() { return s.parent.find(\'div.\' + jS.cl.barLeft); },\r\n
+\t\t\t\tbarLeftParent: \t\tfunction() { return jQuery(\'#\' + jS.id.barLeftParent + jS.i); },\r\n
+\t\t\t\tbarLeftParentAll:\tfunction() { return s.parent.find(\'div.\' + jS.cl.barLeftParent); },\r\n
+\t\t\t\tcellActive:\t\t\tfunction() { return jQuery(jS.cellLast.td); },\r\n
+\t\t\t\tcellHighlighted:\tfunction() { return jQuery(jS.highlightedLast.td); },\r\n
+\t\t\t\tcontrols:\t\t\tfunction() { return jQuery(\'#\' + jS.id.controls); },\r\n
+\t\t\t\tformula: \t\t\tfunction() { return jQuery(\'#\' + jS.id.formula); },\r\n
+\t\t\t\tfullScreen:\t\t\tfunction() { return jQuery(\'div.\' + jS.cl.fullScreen); },\r\n
+\t\t\t\tinPlaceEdit:\t\tfunction() { return jQuery(\'#\' + jS.id.inPlaceEdit); },\r\n
+\t\t\t\tlabel: \t\t\t\tfunction() { return jQuery(\'#\' + jS.id.label); },\r\n
+\t\t\t\tlog: \t\t\t\tfunction() { return jQuery(\'#\' + jS.id.log); },\r\n
+\t\t\t\tmenu:\t\t\t\tfunction() { return jQuery(\'#\' + jS.id.menu); },\r\n
+\t\t\t\tpane: \t\t\t\tfunction() { return jQuery(\'#\' + jS.id.pane + jS.i); },\r\n
+\t\t\t\tpaneAll:\t\t\tfunction() { return s.parent.find(\'div.\' + jS.cl.pane); },\r\n
+\t\t\t\tparent: \t\t\tfunction() { return s.parent; },\r\n
+\t\t\t\tsheet: \t\t\t\tfunction() { return jQuery(\'#\' + jS.id.sheet + jS.i); },\r\n
+\t\t\t\tsheetAll: \t\t\tfunction() { return s.parent.find(\'table.\' + jS.cl.sheet); },\r\n
+\t\t\t\ttab:\t\t\t\tfunction() { return jQuery(\'#\' + jS.id.tab + jS.i); },\r\n
+\t\t\t\ttabAll:\t\t\t\tfunction() { return this.tabContainer().find(\'a.\' + jS.cl.tab); },\r\n
+\t\t\t\ttabContainer:\t\tfunction() { return jQuery(\'#\' + jS.id.tabContainer); },\r\n
+\t\t\t\ttableBody: \t\t\tfunction() { return document.getElementById(jS.id.sheet + jS.i); },\r\n
+\t\t\t\ttableControl:\t\tfunction() { return jQuery(\'#\' + jS.id.tableControl + jS.i); },\r\n
+\t\t\t\ttableControlAll:\tfunction() { return s.parent.find(\'table.\' + jS.cl.tableControl); },\r\n
+\t\t\t\tui:\t\t\t\t\tfunction() { return jQuery(\'#\' + jS.id.ui); },\r\n
+\t\t\t\tuiActive:\t\t\tfunction() { return s.parent.find(\'div.\' + jS.cl.uiActive); }\r\n
+\t\t\t},\r\n
+\t\t\tid: {//id = id\'s references\r\n
+\t\t\t\tbarCorner:\t\t\t\'jSheetBarCorner_\' + I + \'_\',\r\n
+\t\t\t\tbarCornerParent:\t\'jSheetBarCornerParent_\' + I + \'_\',\r\n
+\t\t\t\tbarTop: \t\t\t\'jSheetBarTop_\' + I + \'_\',\r\n
+\t\t\t\tbarTopParent: \t\t\'jSheetBarTopParent_\' + I + \'_\',\r\n
+\t\t\t\tbarLeft: \t\t\t\'jSheetBarLeft_\' + I + \'_\',\r\n
+\t\t\t\tbarLeftParent: \t\t\'jSheetBarLeftParent_\' + I + \'_\',\r\n
+\t\t\t\tcontrols:\t\t\t\'jSheetControls_\' + I,\r\n
+\t\t\t\tformula: \t\t\t\'jSheetControls_formula_\' + I,\r\n
+\t\t\t\tinPlaceEdit:\t\t\'jSheetInPlaceEdit_\' + I,\r\n
+\t\t\t\tlabel: \t\t\t\t\'jSheetControls_loc_\' + I,\r\n
+\t\t\t\tlog: \t\t\t\t\'jSheetLog_\' + I,\r\n
+\t\t\t\tmenu:\t\t\t\t\'jSheetMenu_\' + I,\r\n
+\t\t\t\tpane: \t\t\t\t\'jSheetEditPane_\' + I + \'_\',\r\n
+\t\t\t\tsheet: \t\t\t\t\'jSheet_\' + I + \'_\',\r\n
+\t\t\t\ttableControl:\t\t\'tableControl_\' + I + \'_\',\r\n
+\t\t\t\ttab:\t\t\t\t\'jSheetTab_\' + I,\r\n
+\t\t\t\ttabContainer:\t\t\'jSheetTabContainer_\' + I + \'_\',\r\n
+\t\t\t\tui:\t\t\t\t\t\'jSheetUI_\' + I\r\n
+\t\t\t},\r\n
+\t\t\tcl: {//cl = class references\r\n
+\t\t\t\tbarCorner:\t\t\t\'jSheetBarCorner\',\r\n
+\t\t\t\tbarCornerParent:\t\'jSheetBarCornerParent\',\r\n
+\t\t\t\tbarLeftTd:\t\t\t\'barLeft\',\r\n
+\t\t\t\tbarLeft: \t\t\t\'jSheetBarLeft\',\r\n
+\t\t\t\tbarLeftParent: \t\t\'jSheetBarLeftParent\',\r\n
+\t\t\t\tbarTop: \t\t\t\'jSheetBarTop\',\r\n
+\t\t\t\tbarTopParent: \t\t\'jSheetBarTopParent\',\r\n
+\t\t\t\tbarTopTd:\t\t\t\'barTop\',\r\n
+\t\t\t\tcellActive:\t\t\t\'jSheetCellActive\',\r\n
+\t\t\t\tcellHighlighted: \t\'jSheetCellHighighted\',\r\n
+\t\t\t\tcontrols:\t\t\t\'jSheetControls\',\r\n
+\t\t\t\tformula: \t\t\t\'jSheetControls_formula\',\r\n
+\t\t\t\tfullScreen:\t\t\t\'jSheetFullScreen\',\r\n
+\t\t\t\tinPlaceEdit:\t\t\'jSheetInPlaceEdit\',\r\n
+\t\t\t\tmenu:\t\t\t\t\'jSheetMenu\',\r\n
+\t\t\t\tsheet: \t\t\t\t\'jSheet\',\r\n
+\t\t\t\tsheetPaneTd:\t\t\'sheetPane\',\r\n
+\t\t\t\tlabel: \t\t\t\t\'jSheetControls_loc\',\r\n
+\t\t\t\tlog: \t\t\t\t\'jSheetLog\',\r\n
+\t\t\t\tpane: \t\t\t\t\'jSheetEditPane\',\r\n
+\t\t\t\ttab:\t\t\t\t\'jSheetTab\',\r\n
+\t\t\t\ttabContainer:\t\t\'jSheetTabContainer\',\r\n
+\t\t\t\ttabContainerFullScreen: \'jSheetFullScreenTabContainer\',\r\n
+\t\t\t\ttableControl:\t\t\'tableControl\',\r\n
+\t\t\t\ttoggle:\t\t\t\t\'cellStyleToggle\',\r\n
+\t\t\t\tui:\t\t\t\t\t\'jSheetUI\',\r\n
+\t\t\t\tuiActive:\t\t\t\'ui-state-active\',\r\n
+\t\t\t\tuiBar: \t\t\t\t\'ui-widget-header\',\r\n
+\t\t\t\tuiCellActive:\t\t\'ui-state-active\',\r\n
+\t\t\t\tuiCellHighlighted: \t\'ui-state-highlight\',\r\n
+\t\t\t\tuiControl: \t\t\t\'ui-widget-header ui-corner-top\',\r\n
+\t\t\t\tuiControlTextBox:\t\'ui-widget-content\',\r\n
+\t\t\t\tuiFullScreen:\t\t\'ui-widget-content ui-corner-all\',\r\n
+\t\t\t\tuiInPlaceEdit:\t\t\'ui-state-active\',\r\n
+\t\t\t\tuiMenu:\t\t\t\t\'ui-state-highlight\',\r\n
+\t\t\t\tuiMenuUl: \t\t\t\'ui-widget-header\',\r\n
+\t\t\t\tuiMenuLi: \t\t\t\'ui-widget-header\',\r\n
+\t\t\t\tuiMenuHighlighted: \t\'ui-state-highlight\',\r\n
+\t\t\t\tuiPane: \t\t\t\'ui-widget-content\',\r\n
+\t\t\t\tuiParent: \t\t\t\'ui-widget-content ui-corner-all\',\r\n
+\t\t\t\tuiSheet:\t\t\t\'ui-widget-content\',\r\n
+\t\t\t\tuiTab:\t\t\t\t\'ui-widget-header\',\r\n
+\t\t\t\tuiTabActive:\t\t\'ui-state-highlight\'\r\n
+\t\t\t},\r\n
+\t\t\tkill: function() {\r\n
+\t\t\t\tjS.obj.tabContainer().remove();\r\n
+\t\t\t\tjS.obj.fullScreen().remove();\r\n
+\t\t\t\tjS.obj.inPlaceEdit().remove();\r\n
+\t\t\t\torigParent.removeClass(jS.cl.uiParent).html(\'\');\r\n
+\t\t\t\tcE = s = jQuery.sheet.instance[I] = jS = origParent.sheetInstance = null;\r\n
+\t\t\t\tdelete cE;\r\n
+\t\t\t\tdelete s;\r\n
+\t\t\t\tdelete jQuery.sheet.instance[I];\r\n
+\t\t\t\tdelete jS;\r\n
+\t\t\t\tdelete origParent.sheetInstance;\r\n
+\t\t\t},\r\n
+\t\t\tcontrolFactory: {\r\n
+\t\t\t\taddRowMulti: function(qty, isBefore) {\r\n
+\t\t\t\t\tif (!qty) {\r\n
+\t\t\t\t\t\tqty = prompt(\'How many rows would you like to add?\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (qty) {\r\n
+\t\t\t\t\t\tjS.controlFactory.addCells(null, isBefore, null, qty, \'row\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\taddColumnMulti: function(qty, isBefore) {\r\n
+\t\t\t\t\tif (!qty) {\r\n
+\t\t\t\t\t\tqty = prompt(\'How many columns would you like to add?\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (qty) {\r\n
+\t\t\t\t\t\tjS.controlFactory.addCells(null, isBefore, null, qty, \'col\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\taddCells: function(eq, isBefore, eqO, qty, type) {\r\n
+\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar sheet = jS.obj.sheet();\r\n
+\t\t\t\t\tvar sheetWidth = sheet.width();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//jS.evt.cellEditAbandon();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tqty = (qty ? qty : 1);\r\n
+\t\t\t\t\ttype = (type ? type : \'col\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//var barLast = (type == \'row\' ? jS.rowLast : jS.colLast);\r\n
+\t\t\t\t\tvar cellLastBar = (type == \'row\' ? jS.cellLast.row : jS.cellLast.col);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (!eq) {\r\n
+\t\t\t\t\t\tif (cellLastBar == -1) {\r\n
+\t\t\t\t\t\t\teq = \':last\';\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\teq = \':eq(\' + cellLastBar + \')\';\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} else if (!isNaN(eq)){\r\n
+\t\t\t\t\t\teq = \':eq(\' + (eq - 1) + \')\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t/*\r\n
+\t\t\t\t\tif (!eqO) {\r\n
+\t\t\t\t\t\tif (!eq && barLast > -1) {\r\n
+\t\t\t\t\t\t\teqO = \':eq(\' + barLast + \')\';\r\n
+\t\t\t\t\t\t} else if (!eq || barLast < 1) {\r\n
+\t\t\t\t\t\t\t//if eq has no value, lets just add it to the end.\r\n
+\t\t\t\t\t\t\teqO = \':last\';\r\n
+\t\t\t\t\t\t\teq = false;\r\n
+\t\t\t\t\t\t} else if (eq === true) {//if eq is boolean, then lets add it just after the currently selected row.\r\n
+\t\t\t\t\t\t\teqO = \':eq(\' + (cellLastBar - 1) + \')\';\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t//If eq is a number, lets add it at that row\r\n
+\t\t\t\t\t\t\teqO = \':eq(\' + (eq - 1) + \')\';\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t*/\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar o;\r\n
+\t\t\t\t\tswitch (type) {\r\n
+\t\t\t\t\t\tcase "row":\r\n
+\t\t\t\t\t\t\to = {\r\n
+\t\t\t\t\t\t\t\tbar: jS.obj.barLeft().find(\'div\' + eq),\r\n
+\t\t\t\t\t\t\t\tbarParent: jS.obj.barLeft(),\r\n
+\t\t\t\t\t\t\t\tcells: function() {\r\n
+\t\t\t\t\t\t\t\t\treturn sheet.find(\'tr\' + eq);\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tcol: function() { return \'\'; },\r\n
+\t\t\t\t\t\t\t\tnewBar: \'<div class="\' + jS.cl.uiBar + \'" style="height: \' + (s.colMargin - s.boxModelCorrection) + \'px;" />\',\r\n
+\t\t\t\t\t\t\t\tloc: function() {\r\n
+\t\t\t\t\t\t\t\t\treturn jS.getTdLocation(o.cells().find(\'td:last\'));\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tnewCells: function() {\r\n
+\t\t\t\t\t\t\t\t\tvar j = o.loc()[1];\r\n
+\t\t\t\t\t\t\t\t\tvar newCells = \'\';\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tfor (var i = 0; i <= j; i++) {\r\n
+\t\t\t\t\t\t\t\t\t\tnewCells += \'<td />\';\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\treturn \'<tr style="height: \' + s.colMargin + \'px;">\' + newCells + \'</tr>\';\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tnewCol: \'\',\r\n
+\t\t\t\t\t\t\t\treLabel: function() {\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\to.barParent.children().each(function(i) {\r\n
+\t\t\t\t\t\t\t\t\t\tjQuery(this).text(i + 1);\r\n
+\t\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tdimensions: function(loc, bar, cell, col) {\r\n
+\t\t\t\t\t\t\t\t\tbar.height(cell.height(s.colMargin).outerHeight() - s.boxModelCorrection);\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\toffset: [qty, 0]\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase "col":\r\n
+\t\t\t\t\t\t\to = {\r\n
+\t\t\t\t\t\t\t\tbar: jS.obj.barTop().find(\'div\' + eq),\r\n
+\t\t\t\t\t\t\t\tbarParent: jS.obj.barTop(),\r\n
+\t\t\t\t\t\t\t\tcells: function() {\r\n
+\t\t\t\t\t\t\t\t\tvar cellStart = sheet.find(\'tr:first td\' + eq);\r\n
+\t\t\t\t\t\t\t\t\tvar cellEnd = sheet.find(\'td:last\');\r\n
+\t\t\t\t\t\t\t\t\tvar loc1 = jS.getTdLocation(cellStart);\r\n
+\t\t\t\t\t\t\t\t\tvar loc2 = jS.getTdLocation(cellEnd);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t//we get the first cell then get all the other cells directly... faster ;)\r\n
+\t\t\t\t\t\t\t\t\tvar cells = jQuery(jS.getTd(jS.i, loc1[0], loc1[1]));\r\n
+\t\t\t\t\t\t\t\t\tvar cell;\r\n
+\t\t\t\t\t\t\t\t\tfor (var i = 1; i <= loc2[0]; i++) {\r\n
+\t\t\t\t\t\t\t\t\t\tcells.push(jS.getTd(jS.i, i, loc1[1]));\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\treturn cells;\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tcol: function() {\r\n
+\t\t\t\t\t\t\t\t\treturn sheet.find(\'col\' + eq);\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tnewBar: \'<div class="\' + jS.cl.uiBar + \'"/>\',\r\n
+\t\t\t\t\t\t\t\tnewCol: \'<col />\',\r\n
+\t\t\t\t\t\t\t\tloc: function(cells) {\r\n
+\t\t\t\t\t\t\t\t\tcells = (cells ? cells : o.cells());\r\n
+\t\t\t\t\t\t\t\t\treturn jS.getTdLocation(cells.first());\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tnewCells: function() {\r\n
+\t\t\t\t\t\t\t\t\treturn \'<td />\';\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\treLabel: function() {\r\n
+\t\t\t\t\t\t\t\t\to.barParent.children().each(function(i) {\r\n
+\t\t\t\t\t\t\t\t\t\tjQuery(this).text(cE.columnLabelString(i + 1));\r\n
+\t\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\tdimensions: function(loc, bar, cell, col) {\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tvar w = s.newColumnWidth;\r\n
+\t\t\t\t\t\t\t\t\tcol\r\n
+\t\t\t\t\t\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t\t\t\t\t\t.css(\'width\', w + \'px\')\r\n
+\t\t\t\t\t\t\t\t\t\t.attr(\'width\', w + \'px\');\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tbar\r\n
+\t\t\t\t\t\t\t\t\t\t.width(w - s.boxModelCorrection);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tsheet.width(sheetWidth + (w * qty));\r\n
+\t\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\t\toffset: [0, qty]\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//make undoable\r\n
+\t\t\t\t\tjS.cellUndoable.add(jQuery(sheet).add(o.barParent));\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar cells = o.cells();\r\n
+\t\t\t\t\tvar loc = o.loc(cells);\t\r\n
+\t\t\t\t\tvar col = o.col();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar newBar = o.newBar;\r\n
+\t\t\t\t\tvar newCell = o.newCells();\r\n
+\t\t\t\t\tvar newCol = o.newCol;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar newCols = \'\';\r\n
+\t\t\t\t\tvar newBars = \'\';\r\n
+\t\t\t\t\tvar newCells = \'\';\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tfor (var i = 0; i < qty; i++) { //by keeping these variables strings temporarily, we cut down on using system resources\r\n
+\t\t\t\t\t\tnewCols += newCol;\r\n
+\t\t\t\t\t\tnewBars += newBar;\r\n
+\t\t\t\t\t\tnewCells += newCell;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tnewCols = jQuery(newCols);\r\n
+\t\t\t\t\tnewBars = jQuery(newBars);\r\n
+\t\t\t\t\tnewCells = jQuery(newCells);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (isBefore) {\r\n
+\t\t\t\t\t\tcells.before(newCells);\r\n
+\t\t\t\t\t\to.bar.before(newBars);\r\n
+\t\t\t\t\t\tjQuery(col).before(newCols);\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tcells.after(newCells);\r\n
+\t\t\t\t\t\to.bar.after(newBars);\r\n
+\t\t\t\t\t\tjQuery(col).after(newCols);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.setTdIds(sheet);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\to.dimensions(loc, newBars, newCells, newCols);\r\n
+\t\t\t\t\to.reLabel();\r\n
+\r\n
+\t\t\t\t\tjS.obj.pane().scroll();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//offset formulas\r\n
+\t\t\t\t\tjS.offsetFormulaRange((isBefore ? loc[0] - qty : loc[0]) , (isBefore ? loc[1] - qty : loc[0]), o.offset[0], o.offset[1], isBefore);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//Because the line numbers get bigger, it is possible that the bars have changed in size, lets sync them\r\n
+\t\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//Let\'s make it redoable\r\n
+\t\t\t\t\tjS.cellUndoable.add(jQuery(sheet).add(o.barParent));\r\n
+\t\t\t\t},\r\n
+\t\t\t\taddRow: function(atRow, isBefore, atRowQ) {\r\n
+\t\t\t\t\tjS.controlFactory.addCells(atRow, isBefore, atRowQ, 1, \'row\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\taddColumn: function(atColumn, isBefore, atColumnQ) {\r\n
+\t\t\t\t\tjS.controlFactory.addCells(atColumn, isBefore, atColumnQ, 1, \'col\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\tbarLeft: function(reload, o) {//Works great!\r\n
+\t\t\t\t\tjS.obj.barLeft().remove();\r\n
+\t\t\t\t\tvar barLeft = jQuery(\'<div border="1px" id="\' + jS.id.barLeft + jS.i + \'" class="\' + jS.cl.barLeft + \'" />\');\r\n
+\t\t\t\t\tvar heightFn;\r\n
+\t\t\t\t\tif (reload) { //This is our standard way of detecting height when a sheet loads from a url\r\n
+\t\t\t\t\t\theightFn = function(i, objSource, objBar) {\r\n
+\t\t\t\t\t\t\tobjBar.height(parseInt(objSource.outerHeight()) - s.boxModelCorrection);\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t} else { //This way of detecting height is used becuase the object has some problems getting\r\n
+\t\t\t\t\t\t\t//height because both tr and td have height set\r\n
+\t\t\t\t\t\t\t//This corrects the problem\r\n
+\t\t\t\t\t\t\t//This is only used when a sheet is already loaded in the pane\r\n
+\t\t\t\t\t\theightFn = function(i, objSource, objBar) {\r\n
+\t\t\t\t\t\t\tobjBar.height(parseInt(objSource.css(\'height\').replace(\'px\',\'\')) - s.boxModelCorrection);\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\to.find(\'tr\').each(function(i) {\r\n
+\t\t\t\t\t\tvar child = jQuery(\'<div>\' + (i + 1) + \'</div>\');\r\n
+\t\t\t\t\t\tjQuery(barLeft).append(child);\r\n
+\t\t\t\t\t\theightFn(i, jQuery(this), child);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.evt.barMouseDown.height(\r\n
+\t\t\t\t\t\tjS.obj.barLeftParent().append(barLeft)\r\n
+\t\t\t\t\t);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tbarTop: function(reload, o) { //Works great!\r\n
+\t\t\t\t\tjS.obj.barTop().remove();\r\n
+\t\t\t\t\tvar barTop = jQuery(\'<div id="\' + jS.id.barTop + jS.i + \'" class="\' + jS.cl.barTop + \'" />\');\r\n
+\t\t\t\t\tbarTop.height(s.colMargin);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar parents;\r\n
+\t\t\t\t\tvar widthFn;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (reload) {\r\n
+\t\t\t\t\t\tparents = o.find(\'tr:first td\');\r\n
+\t\t\t\t\t\twidthFn = function(obj) {\r\n
+\t\t\t\t\t\t\treturn jS.attrH.width(obj);\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tparents = o.find(\'col\');\r\n
+\t\t\t\t\t\twidthFn = function(obj) {\r\n
+\t\t\t\t\t\t\treturn parseInt(jQuery(obj).css(\'width\').replace(\'px\',\'\')) - s.boxModelCorrection;\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tparents.each(function(i) {\r\n
+\t\t\t\t\t\tvar v = cE.columnLabelString(i + 1);\r\n
+\t\t\t\t\t\tvar w = widthFn(this);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tvar child = jQuery("<div>" + v + "</div>")\r\n
+\t\t\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t\t\t.height(s.colMargin);\r\n
+\t\t\t\t\t\tbarTop.append(child);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.evt.barMouseDown.width(\r\n
+\t\t\t\t\t\tjS.obj.barTopParent().append(barTop)\r\n
+\t\t\t\t\t);\r\n
+\t\t\t\t},\r\n
+\t\t\t\theader: function() {\r\n
+\t\t\t\t\tjS.obj.controls().remove();\r\n
+\t\t\t\t\tjS.obj.tabContainer().remove();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar header = jQuery(\'<div id="\' + jS.id.controls + \'" class="\' + jS.cl.controls + \'"></div>\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar firstRow = jQuery(\'<table cellpadding="0" cellspacing="0" border="0"><tr /></table>\').prependTo(header);\r\n
+\t\t\t\t\tvar firstRowTr = jQuery(\'<tr />\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (s.title) {\r\n
+\t\t\t\t\t\tvar title;\r\n
+\t\t\t\t\t\tif (jQuery.isFunction(s.title)) {\r\n
+\t\t\t\t\t\t\ttitle = jS.title(jS);\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\ttitle = s.title;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tfirstRowTr.append(jQuery(\'<td style="width: auto;text-align: center;" />\').html(title));\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (s.inlineMenu && s.editable) {\r\n
+\t\t\t\t\t\tvar inlineMenu;\r\n
+\t\t\t\t\t\tif (jQuery.isFunction(s.inlineMenu)) {\r\n
+\t\t\t\t\t\t\tinlineMenu = s.inlineMenu(jS);\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\tinlineMenu = s.inlineMenu;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tfirstRowTr.append(jQuery(\'<td style="text-align: center;" />\').html(inlineMenu));\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (s.editable) {\r\n
+\t\t\t\t\t\t//Page Menu Control\t\r\n
+\t\t\t\t\t\tif (jQuery.mbMenu) {\r\n
+\t\t\t\t\t\t\tjQuery(\'<div />\').load(s.urlMenu, function() {\r\n
+\t\t\t\t\t\t\t\tvar menu = jQuery(\'<td style="width: 50px; text-align: center;" id="\' + jS.id.menu + \'" class="rootVoices ui-corner-tl \' + jS.cl.menu + \'" />\')\r\n
+\t\t\t\t\t\t\t\t\t.html(\r\n
+\t\t\t\t\t\t\t\t\t\tjQuery(this).html()\r\n
+\t\t\t\t\t\t\t\t\t\t\t.replace(/sheetInstance/g, "jQuery.sheet.instance[" + I + "]")\r\n
+\t\t\t\t\t\t\t\t\t\t\t.replace(/menuInstance/g, I));\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tmenu\r\n
+\t\t\t\t\t\t\t\t\t\t.prependTo(firstRowTr)\r\n
+\t\t\t\t\t\t\t\t\t\t.buildMenu({\r\n
+\t\t\t\t\t\t\t\t\t\t\tmenuWidth:\t\t100,\r\n
+\t\t\t\t\t\t\t\t\t\t\topenOnRight:\tfalse,\r\n
+\t\t\t\t\t\t\t\t\t\t\tcontainment: \ts.parent.attr(\'id\'),\r\n
+\t\t\t\t\t\t\t\t\t\t\thasImages:\t\tfalse,\r\n
+\t\t\t\t\t\t\t\t\t\t\tfadeInTime:\t\t0,\r\n
+\t\t\t\t\t\t\t\t\t\t\tfadeOutTime:\t0,\r\n
+\t\t\t\t\t\t\t\t\t\t\tadjustLeft:\t\t2,\r\n
+\t\t\t\t\t\t\t\t\t\t\tminZindex:\t\t"auto",\r\n
+\t\t\t\t\t\t\t\t\t\t\tadjustTop:\t\t10,\r\n
+\t\t\t\t\t\t\t\t\t\t\topacity:\t\t.95,\r\n
+\t\t\t\t\t\t\t\t\t\t\tshadow:\t\t\tfalse,\r\n
+\t\t\t\t\t\t\t\t\t\t\tcloseOnMouseOut:true,\r\n
+\t\t\t\t\t\t\t\t\t\t\tcloseAfter:\t\t1000,\r\n
+\t\t\t\t\t\t\t\t\t\t\thoverIntent:\t0, //if you use jquery.hoverIntent.js set this to time in milliseconds; 0= false;\r\n
+\t\t\t\t\t\t\t\t\t\t\tsubmenuHoverIntent: 0\r\n
+\t\t\t\t\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t\t\t\t\t.hover(function() {\r\n
+\t\t\t\t\t\t\t\t\t\t\t//not going to add to jS.cl because this isn\'t our control\r\n
+\t\t\t\t\t\t\t\t\t\t\tjQuery(this).addClass(jS.cl.uiMenu);\r\n
+\t\t\t\t\t\t\t\t\t\t}, function() {\r\n
+\t\t\t\t\t\t\t\t\t\t\tjQuery(this).removeClass(jS.cl.uiMenu);\r\n
+\t\t\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t//Edit box menu\r\n
+\t\t\t\t\t\tvar secondRow = jQuery(\'<table cellpadding="0" cellspacing="0" border="0">\' +\r\n
+\t\t\t\t\t\t\t\t\'<tr>\' +\r\n
+\t\t\t\t\t\t\t\t\t\'<td style="width: 35px; text-align: right;" id="\' + jS.id.label + \'" class="\' + jS.cl.label + \'"></td>\' +\r\n
+\t\t\t\t\t\t\t\t\t\'<td>\' +\r\n
+\t\t\t\t\t\t\t\t\t\t\'<textarea id="\' + jS.id.formula + \'" class="\' + jS.cl.formula + \'"></textarea>\' +\r\n
+\t\t\t\t\t\t\t\t\t\'</td>\' +\r\n
+\t\t\t\t\t\t\t\t\'</tr>\' +\r\n
+\t\t\t\t\t\t\t\'</table>\')\r\n
+\t\t\t\t\t\t\t.keydown(jS.evt.keyDownHandler.formulaOnKeyDown)\r\n
+\t\t\t\t\t\t\t.keyup(function() {\r\n
+\t\t\t\t\t\t\t\tjS.obj.inPlaceEdit().val(jS.obj.formula().val());\r\n
+\t\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t\t.change(function() {\r\n
+\t\t\t\t\t\t\t\tjS.obj.inPlaceEdit().val(jS.obj.formula().val());\r\n
+\t\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t\t.appendTo(header);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tfirstRowTr.appendTo(firstRow);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar tabParent = jQuery(\'<div id="\' + jS.id.tabContainer + \'" class="\' + jS.cl.tabContainer + \'">\' + \r\n
+\t\t\t\t\t\t\t\t\t(s.editable ? \'<span class="\' + jS.cl.uiTab + \' ui-corner-bottom" title="Add a spreadsheet" i="-1">+</span>\' : \'<span />\') + \r\n
+\t\t\t\t\t\t\t\t\'</div>\')\r\n
+\t\t\t\t\t\t\t.mousedown(jS.evt.tabOnMouseDown);\r\n
+\r\n
+\t\t\t\t\ts.parent\r\n
+\t\t\t\t\t\t.html(\'\')\r\n
+\t\t\t\t\t\t.append(header) //add controls header\r\n
+\t\t\t\t\t\t.append(\'<div id="\' + jS.id.ui + \'" class="\' + jS.cl.ui + \'">\') //add spreadsheet control\r\n
+\t\t\t\t\t\t.after(tabParent);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsheet: function(size) {\r\n
+\t\t\t\t\tif (!size) {\r\n
+\t\t\t\t\t\tsize = s.buildSheet;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tsize = size.toLowerCase().split(\'x\');\r\n
+\r\n
+\t\t\t\t\tvar columnsCount = parseInt(size[0]);\r\n
+\t\t\t\t\tvar rowsCount = parseInt(size[1]);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//Create elements before loop to make it faster.\r\n
+\t\t\t\t\tvar newSheet = jQuery(\'<table  cellpadding="0" cellspacing="0" border="0" border="1px" class="\' + jS.cl.sheet + \'" id="\' + jS.id.sheet + jS.i + \'"></table>\');\r\n
+\t\t\t\t\tvar standardTd = \'<td> </td>\';\r\n
+\t\t\t\t\tvar tds = \'\';\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//Using -- is many times faster than ++\r\n
+\t\t\t\t\tfor (var i = columnsCount; i >= 1; i--) {\r\n
+\t\t\t\t\t\ttds += standardTd;\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\tvar standardTr = \'<tr height="\' + s.colMargin + \'" style="height: \' + s.colMarg + \';">\' + tds + \'</tr>\';\r\n
+\t\t\t\t\tvar trs = \'\';\r\n
+\t\t\t\t\tfor (var i = rowsCount; i >= 1; i--) {\r\n
+\t\t\t\t\t\ttrs += standardTr;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tnewSheet.html(\'<tbody>\' + trs + \'</tbody>\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tnewSheet.width(columnsCount * s.newColumnWidth);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn newSheet;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsheetUI: function(o, i, fn, reloadBars) {\r\n
+\t\t\t\t\tif (!i) {\r\n
+\t\t\t\t\t\tjS.sheetCount = 0;\r\n
+\t\t\t\t\t\tjS.i = 0;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tjS.sheetCount++;\r\n
+\t\t\t\t\t\tjS.i = jS.sheetCount;\r\n
+\t\t\t\t\t\ti = jS.i;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar objContainer = jS.controlFactory.table().appendTo(jS.obj.ui());\r\n
+\t\t\t\t\tvar pane = jS.obj.pane().html(o);\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\to = jS.tuneTableForSheetUse(o);\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\tjS.sheetDecorate(o);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.controlFactory.barTop(reloadBars, o);\r\n
+\t\t\t\t\tjS.controlFactory.barLeft(reloadBars, o);\r\n
+\t\t\t\t\r\n
+\t\t\t\t\tjS.sheetTab(true);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (s.editable) {\r\n
+\t\t\t\t\t\tpane\r\n
+\t\t\t\t\t\t\t.mousedown(function(e) {\r\n
+\t\t\t\t\t\t\t\tjS.evt.cellOnMouseDown(e);\r\n
+\t\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tpane\r\n
+\t\t\t\t\t\t\t.dblclick(jS.evt.cellOnDblClick);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.themeRoller.start(i);\r\n
+\r\n
+\t\t\t\t\tjS.setTdIds(o);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.evt.scrollBars();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.addTab();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (fn) {\r\n
+\t\t\t\t\t\tfn();\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.log(\'Sheet Initialized\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn objContainer;\r\n
+\t\t\t\t},\r\n
+\t\t\t\ttable: function() {\r\n
+\t\t\t\t\treturn jQuery(\'<table cellpadding="0" cellspacing="0" border="0" id="\' + jS.id.tableControl + jS.i + \'" class="\' + jS.cl.tableControl + \'">\' +\r\n
+\t\t\t\t\t\t\'<tbody>\' +\r\n
+\t\t\t\t\t\t\t\'<tr>\' + \r\n
+\t\t\t\t\t\t\t\t\'<td id="\' + jS.id.barCornerParent + jS.i + \'" class="\' + jS.cl.barCornerParent + \'">\' + //corner\r\n
+\t\t\t\t\t\t\t\t\t\'<div style="height: \' + s.colMargin + \'; width: \' + s.colMargin + \';" id="\' + jS.id.barCorner + jS.i + \'" class="\' + jS.cl.barCorner +\'"\' + (s.editable ? \' onClick="jQuery.sheet.instance[\' + I + \'].cellSetActiveBar(\\\'all\\\');"\' : \'\') + \' title="Select All">&nbsp;</div>\' +\r\n
+\t\t\t\t\t\t\t\t\'</td>\' + \r\n
+\t\t\t\t\t\t\t\t\'<td class="\' + jS.cl.barTopTd + \'">\' + //barTop\r\n
+\t\t\t\t\t\t\t\t\t\'<div id="\' + jS.id.barTopParent + jS.i + \'" class="\' + jS.cl.barTopParent + \'"></div>\' +\r\n
+\t\t\t\t\t\t\t\t\'</td>\' +\r\n
+\t\t\t\t\t\t\t\'</tr>\' +\r\n
+\t\t\t\t\t\t\t\'<tr>\' +\r\n
+\t\t\t\t\t\t\t\t\'<td class="\' + jS.cl.barLeftTd + \'">\' + //barLeft\r\n
+\t\t\t\t\t\t\t\t\t\'<div style="width: \' + s.colMargin + \';" id="\' + jS.id.barLeftParent + jS.i + \'" class="\' + jS.cl.barLeftParent + \'"></div>\' +\r\n
+\t\t\t\t\t\t\t\t\'</td>\' +\r\n
+\t\t\t\t\t\t\t\t\'<td class="\' + jS.cl.sheetPaneTd + \'">\' + //pane\r\n
+\t\t\t\t\t\t\t\t\t\'<div id="\' + jS.id.pane + jS.i + \'" class="\' + jS.cl.pane + \'"></div>\' +\r\n
+\t\t\t\t\t\t\t\t\'</td>\' +\r\n
+\t\t\t\t\t\t\t\'</tr>\' +\r\n
+\t\t\t\t\t\t\'</tbody>\' +\r\n
+\t\t\t\t\t\'</table>\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\tchart: function(type, data, legend, axisLabels, w, h, row) {\r\n
+\t\t\t\t\tif (jGCharts) {\r\n
+\t\t\t\t\t\tvar api = new jGCharts.Api();\r\n
+\t\t\t\t\t\tfunction refine(v) {\r\n
+\t\t\t\t\t\t\tvar refinedV = new Array();\r\n
+\t\t\t\t\t\t\tjQuery(v).each(function(i) {\r\n
+\t\t\t\t\t\t\t\trefinedV[i] = jS.manageHtmlToText(v[i] + \'\');\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\treturn refinedV;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tvar o = {};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (type) {\r\n
+\t\t\t\t\t\t\to.type = type;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (data) {\r\n
+\t\t\t\t\t\t\tdata = data.filter(function(v) { return (v ? v : 0); }); //remove nulls\r\n
+\t\t\t\t\t\t\to.data = data;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (legend) {\r\n
+\t\t\t\t\t\t\to.legend = refine(legend);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (axisLabels) {\r\n
+\t\t\t\t\t\t\to.axis_labels = refine(axisLabels);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (w || h) {\r\n
+\t\t\t\t\t\t\to.size = w + \'x\' + h;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\treturn jS.controlFactory.safeImg(api.make(o), row);\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn jQuery(\'<div>Charts are not enabled</div>\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsafeImg: function(src, row) {\r\n
+\t\t\t\t\treturn jQuery(\'<img />\')\r\n
+\t\t\t\t\t\t.hide()\r\n
+\t\t\t\t\t\t.load(function() { //prevent the image from being too big for the row\r\n
+\t\t\t\t\t\t\tjQuery(this).fadeIn(function() {\r\n
+\t\t\t\t\t\t\t\tjQuery(this).addClass(\'safeImg\');\r\n
+\t\t\t\t\t\t\t\tjS.attrH.setHeight(parseInt(row), \'cell\', false);\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t.attr(\'src\', src);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tinPlaceEdit: function(td) {\r\n
+\t\t\t\t\tjS.obj.inPlaceEdit().remove();\r\n
+\t\t\t\t\tvar formula = jS.obj.formula();\t\t\t\t\t\r\n
+\t\t\t\t\tvar offset = td.offset();\r\n
+\t\t\t\t\tvar style = td.attr(\'style\');\r\n
+\t\t\t\t\tvar w = td.width();\r\n
+\t\t\t\t\tvar h = td.height();\r\n
+\t\t\t\t\tvar textarea = jQuery(\'<textarea id="\' + jS.id.inPlaceEdit + \'" class="\' + jS.cl.inPlaceEdit + \' \' + jS.cl.uiInPlaceEdit + \'" />\')\r\n
+\t\t\t\t\t\t.css(\'left\', offset.left)\r\n
+\t\t\t\t\t\t.css(\'top\', offset.top)\r\n
+\t\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t\t.height(h)\r\n
+\t\t\t\t\t\t.keydown(jS.evt.inPlaceEditOnKeyDown)\r\n
+\t\t\t\t\t\t.keyup(function() {\r\n
+\t\t\t\t\t\t\tformula.val(textarea.val());\r\n
+\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t.change(function() {\r\n
+\t\t\t\t\t\t\tformula.val(textarea.val());\r\n
+\t\t\t\t\t\t})\r\n
+\t\t\t\t\t\t.appendTo(\'body\')\r\n
+\t\t\t\t\t\t.val(formula.val())\r\n
+\t\t\t\t\t\t.focus()\r\n
+\t\t\t\t\t\t.select();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//Make the textarrea resizeable automatically\r\n
+\t\t\t\t\tif (jQuery.fn.elastic) {\r\n
+\t\t\t\t\t\ttextarea.elastic();\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tinput: {\r\n
+\t\t\t\t\tselect: function() {\r\n
+\t\t\t\t\t\treturn jQuery(\'<select style="width: 100%;" onchange="jQuery.sheet.instance[\' + I + \'].controlFactory.input.setValue(jQuery(this).val(), jQuery(this).parent());" class="clickable" />\');\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tradio: function(v, cell) {\r\n
+\t\t\t\t\t\tvar radio = jQuery(\'<span class="clickable" />\');\r\n
+\t\t\t\t\t\tvar name = I + \'_table\' + cell.tableI + \'_cell_c\' + (cell.col - 1) + \'_r\' + (cell.row - 1) + \'radio\';\r\n
+\t\t\t\t\t\tfor (var i = 0; i < (v.length <= 25 ? v.length : 25); i++) {\r\n
+\t\t\t\t\t\t\tif (v[i]) {\r\n
+\t\t\t\t\t\t\t\tradio.append(\'<input onchange="jQuery.sheet.instance[\' + I + \'].controlFactory.input.setValue(jQuery(this).val(), jQuery(this).parent().parent());" type="radio" value="\' + v[i] + \'" name="\' + name + \'" />\' + v[i] + \'<br />\');\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn radio;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tcheckbox: function(v) {\r\n
+\t\t\t\t\t\treturn jQuery(\'<input onclick="jQuery.sheet.instance[\' + I + \'].controlFactory.input.setValue(jQuery(this).is(\\\':checked\\\') + \\\'\\\', jQuery(this).parent());" type="checkbox" value="\' + v + \'" />\' + v + \'<br />\');\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tsetValue: function(v, p) {\r\n
+\t\t\t\t\t\tp.attr(\'selectedvalue\', v);\r\n
+\t\t\t\t\t\tjS.calc(cE.calcState.i);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tgetValue: function(cell) {\r\n
+\t\t\t\t\t\treturn jQuery(jS.getTd(cell.tableI, cell.row - 1, cell.col - 1)).attr(\'selectedvalue\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tsizeSync: {\r\n
+\t\t\t\r\n
+\t\t\t},\r\n
+\t\t\tevt: {\r\n
+\t\t\t\tkeyDownHandler: {\r\n
+\t\t\t\t\tenterOnInPlaceEdit: function(e) {\r\n
+\t\t\t\t\t\tif (!e.shiftKey) {\r\n
+\t\t\t\t\t\t\treturn jS.evt.cellSetFocusFromKeyCode(e);\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tenter: function(e) {\r\n
+\t\t\t\t\t\tif (!jS.cellLast.isEdit && !e.ctrlKey) {\r\n
+\t\t\t\t\t\t\tjS.cellLast.td.dblclick();\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn this.enterOnInPlaceEdit(e);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\ttab: function(e) {\r\n
+\t\t\t\t\t\treturn jS.evt.cellSetFocusFromKeyCode(e);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tpasteOverCells: function(e) { //used for pasting from other spreadsheets\r\n
+\t\t\t\t\t\tif (e.ctrlKey) {\r\n
+\t\t\t\t\t\t\tvar formula = jS.obj.formula(); //so we don\'t have to keep calling the function and wasting memory\r\n
+\t\t\t\t\t\t\tvar oldVal = formula.val();\r\n
+\t\t\t\t\t\t\tformula.val(\'\');  //we use formula to catch the pasted data\r\n
+\t\t\t\t\t\t\tjQuery(document).one(\'keyup\', function() {\r\n
+\t\t\t\t\t\t\t\tvar loc = jS.getTdLocation(jS.cellLast.td); //save the currrent cell\r\n
+\t\t\t\t\t\t\t\tvar val = formula.val(); //once ctrl+v is hit formula now has the data we need\r\n
+\t\t\t\t\t\t\t\tvar firstValue = \'\';\r\n
+\t\t\t\t\t\t\t\tformula.val(\'\'); \r\n
+\t\t\t\t\t\t\t\tvar tdsBefore = jQuery(\'<div />\');\r\n
+\t\t\t\t\t\t\t\tvar tdsAfter = jQuery(\'<div />\');\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tvar row = val.split(/\\n/g); //break at rows\r\n
+\t\t\t\t\t\t\t\tfor (var i = 0; i < row.length; i++) {\r\n
+\t\t\t\t\t\t\t\t\tvar col = row[i].split(/\\t/g); //break at columns\r\n
+\t\t\t\t\t\t\t\t\tfor (var j = 0; j < col.length; j++) {\r\n
+\t\t\t\t\t\t\t\t\t\tif (col[j]) {\r\n
+\t\t\t\t\t\t\t\t\t\t\tvar td = jQuery(jS.getTd(jS.i, i + loc[0], j + loc[1]));\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t\ttdsBefore.append(td.clone());\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t\tif ((col[j] + \'\').charAt(0) == \'=\') { //we need to know if it\'s a formula here\r\n
+\t\t\t\t\t\t\t\t\t\t\t\ttd.attr(\'formula\', col[j]);\r\n
+\t\t\t\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\t\t\t\ttd\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t.html(col[j])\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t\t.removeAttr(\'formula\'); //we get rid of formula because we don\'t know if it was a formula, to check may take too long\r\n
+\t\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t\ttdsAfter.append(td.clone());\r\n
+\t\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t\tif (i == 0 && j == 0) { //we have to finish the current edit\r\n
+\t\t\t\t\t\t\t\t\t\t\t\tfirstValue = col[j];\r\n
+\t\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tjS.cellUndoable.add(tdsBefore.children());\r\n
+\t\t\t\t\t\t\t\tjS.cellUndoable.add(tdsAfter.children());\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tformula.val(firstValue);\r\n
+\t\t\t\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\t\t\t\tjS.evt.cellEditDone(true);\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tfindCell: function(e) {\r\n
+\t\t\t\t\t\tif (e.ctrlKey) { \r\n
+\t\t\t\t\t\t\tjS.cellFind();\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tredo: function(e) {\r\n
+\t\t\t\t\t\tif (e.ctrlKey && !jS.cellLast.isEdit) { \r\n
+\t\t\t\t\t\t\tjS.cellUndoable.undoOrRedo();\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tundo: function(e) {\r\n
+\t\t\t\t\t\tif (e.ctrlKey && !jS.cellLast.isEdit) {\r\n
+\t\t\t\t\t\t\tjS.cellUndoable.undoOrRedo(true);\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tpageUpDown: function(reverse) {\r\n
+\t\t\t\t\t\tvar pane = jS.obj.pane();\r\n
+\t\t\t\t\t\tvar left = jS.cellLast.td.position().left;\r\n
+\t\t\t\t\t\tvar top = 0;\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (reverse) {\r\n
+\t\t\t\t\t\t\ttop = 0;\r\n
+\t\t\t\t\t\t\tpane.scrollTop(pane.scrollTop() - pane.height());\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\ttop = pane.height() - (s.colMargin * 3);\r\n
+\t\t\t\t\t\t\tpane.scrollTop(pane.scrollTop() + top);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\treturn jS.evt.cellSetFocusFromCoordinates(left, top);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tformulaOnKeyDown: function(e) {\r\n
+\t\t\t\t\t\tswitch (e.keyCode) {\r\n
+\t\t\t\t\t\t\tcase key.ESCAPE: \tjS.evt.cellEditAbandon();\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.TAB: \t\treturn jS.evt.keyDownHandler.tab(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.ENTER: \treturn jS.evt.keyDownHandler.enter(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.LEFT:\r\n
+\t\t\t\t\t\t\tcase key.UP:\r\n
+\t\t\t\t\t\t\tcase key.RIGHT:\r\n
+\t\t\t\t\t\t\tcase key.DOWN:\t\treturn jS.evt.cellSetFocusFromKeyCode(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.PAGE_UP:\treturn jS.evt.keyDownHandler.pageUpDown(true);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.PAGE_DOWN:\treturn jS.evt.keyDownHandler.pageUpDown();\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.V:\t\t\treturn jS.evt.keyDownHandler.pasteOverCells(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.Y:\t\t\treturn jS.evt.keyDownHandler.redo(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.Z:\t\t\treturn jS.evt.keyDownHandler.undo(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.F:\t\t\treturn jS.evt.keyDownHandler.findCell(e);\r\n
+\t\t\t\t\t\t\tcase key.CONTROL: //we need to filter these to keep cell state\r\n
+\t\t\t\t\t\t\tcase key.CAPS_LOCK:\r\n
+\t\t\t\t\t\t\tcase key.SHIFT:\r\n
+\t\t\t\t\t\t\tcase key.ALT:\r\n
+\t\t\t\t\t\t\tcase key.UP:\r\n
+\t\t\t\t\t\t\tcase key.DOWN:\r\n
+\t\t\t\t\t\t\tcase key.LEFT:\r\n
+\t\t\t\t\t\t\tcase key.RIGHT:\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase key.HOME:\r\n
+\t\t\t\t\t\t\tcase key.END:\t\tjS.evt.cellSetFocusFromKeyCode(e);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tdefault: \t\t\tjS.cellLast.isEdit = true;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tinPlaceEditOnKeyDown: function(e) {\r\n
+\t\t\t\t\tswitch (e.keyCode) {\r\n
+\t\t\t\t\t\tcase key.ENTER: \treturn jS.evt.keyDownHandler.enterOnInPlaceEdit(e);\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase key.TAB: \t\treturn jS.evt.keyDownHandler.tab(e);\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase key.ESCAPE:\tjS.evt.cellEditAbandon(); return false;\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tformulaChange: function(e) {\r\n
+\t\t\t\t\tjS.obj.inPlaceEdit().val(jS.obj.formula().val());\r\n
+\t\t\t\t},\r\n
+\t\t\t\tinPlaceEditChange: function(e) {\r\n
+\t\t\t\t\tjS.obj.formula().val(jS.obj.inPlaceEdit().val());\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellEditDone: function(forceCalc) {\r\n
+\t\t\t\t\tswitch (jS.cellLast.isEdit) {\r\n
+\t\t\t\t\t\tcase true:\r\n
+\t\t\t\t\t\t\tjS.obj.inPlaceEdit().remove();\r\n
+\t\t\t\t\t\t\tvar formula = jS.obj.formula();\r\n
+\t\t\t\t\t\t\tformula.unbind(\'keydown\'); //remove any lingering events from inPlaceEdit\r\n
+\t\t\t\t\t\t\tvar td = jS.cellLast.td;\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tswitch(jS.isFormulaEditable(td)) {\r\n
+\t\t\t\t\t\t\t\tcase true:\r\n
+\t\t\t\t\t\t\t\t\t//Lets ensure that the cell being edited is actually active\r\n
+\t\t\t\t\t\t\t\t\tif (td) { \r\n
+\t\t\t\t\t\t\t\t\t\t//first, let\'s make it undoable before we edit it\r\n
+\t\t\t\t\t\t\t\t\t\tjS.cellUndoable.add(td);\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t//This should return either a val from textbox or formula, but if fails it tries once more from formula.\r\n
+\t\t\t\t\t\t\t\t\t\tvar v = jS.manageTextToHtml(formula.val());\r\n
+\t\t\t\t\t\t\t\t\t\tvar prevVal = td.html();\r\n
+\r\n
+\t\t\t\t\t\t\t\t\t\tif (v.charAt(0) == \'=\') {\r\n
+\t\t\t\t\t\t\t\t\t\t\ttd\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t.attr(\'formula\', v)\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t.html(\'\');\r\n
+\t\t\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\t\t\ttd\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t.removeAttr(\'formula\')\r\n
+\t\t\t\t\t\t\t\t\t\t\t\t.html(v);\r\n
+\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\tif (v != prevVal || forceCalc) {\r\n
+\t\t\t\t\t\t\t\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\tjS.attrH.setHeight(jS.cellLast.row, \'cell\');\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t//Save the newest version of that cell\r\n
+\t\t\t\t\t\t\t\t\t\tjS.cellUndoable.add(td);\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\tformula.focus().select();\r\n
+\t\t\t\t\t\t\t\t\t\tjS.cellLast.isEdit = false;\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\t//perform final function call\r\n
+\t\t\t\t\t\t\t\t\t\ts.fnAfterCellEdit({\r\n
+\t\t\t\t\t\t\t\t\t\t\ttd: jS.cellLast.td,\r\n
+\t\t\t\t\t\t\t\t\t\t\trow: jS.cellLast.row,\r\n
+\t\t\t\t\t\t\t\t\t\t\tcol: jS.cellLast.col,\r\n
+\t\t\t\t\t\t\t\t\t\t\tspreadsheetIndex: jS.i,\r\n
+\t\t\t\t\t\t\t\t\t\t\tsheetIndex: I\r\n
+\t\t\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tdefault:\r\n
+\t\t\t\t\t\t\tjS.attrH.setHeight(jS.cellLast.row, \'cell\', false);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellEditAbandon: function(skipCalc) {\r\n
+\t\t\t\t\tjS.obj.inPlaceEdit().remove();\r\n
+\t\t\t\t\tjS.themeRoller.cell.clearActive();\r\n
+\t\t\t\t\tjS.themeRoller.bar.clearActive();\r\n
+\t\t\t\t\tjS.themeRoller.cell.clearHighlighted();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (!skipCalc) {\r\n
+\t\t\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.cellLast.td = jQuery(\'<td />\');\r\n
+\t\t\t\t\tjS.cellLast.row = jS.cellLast.col = -1;\r\n
+\t\t\t\t\tjS.rowLast = jS.colLast = -1;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.labelUpdate(\'\', true);\r\n
+\t\t\t\t\tjS.obj.formula()\r\n
+\t\t\t\t\t\t.val(\'\');\r\n
+\t\t\t\t\treturn false;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellSetFocusFromCoordinates: function(left, top, skipOffset) {\r\n
+\t\t\t\t\tvar pane = jS.obj.pane();\r\n
+\t\t\t\t\tvar paneOffset = (skipOffset ? {left: 0, top: 0} : pane.offset());\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\ttop += paneOffset.top + 2;\r\n
+\t\t\t\t\tleft += paneOffset.left + 2;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//here we double check that the coordinates are inside that of the pane, if so then we can continue\r\n
+\t\t\t\t\tif ((top >= paneOffset.top && top <= paneOffset.top + pane.height()) &&\r\n
+\t\t\t\t\t\t(left >= paneOffset.left && left <= paneOffset.left + pane.width())) {\r\n
+\t\t\t\t\t\tvar td = jQuery(document.elementFromPoint(left - $window.scrollLeft(), top - $window.scrollTop()));\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t//I use this snippet to help me know where the point was positioned\r\n
+\t\t\t\t\t\t/*jQuery(\'<div class="ui-widget-content" style="position: absolute;">TESTING TESTING</div>\')\r\n
+\t\t\t\t\t\t\t.css(\'top\', top + \'px\')\r\n
+\t\t\t\t\t\t\t.css(\'left\', left + \'px\')\r\n
+\t\t\t\t\t\t\t.appendTo(\'body\');\r\n
+\t\t\t\t\t\t*/\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (jS.isTd(td)) {\r\n
+\t\t\t\t\t\t\tjS.themeRoller.cell.clearHighlighted();\r\n
+\t\t\t\t\t\t\tjS.cellEdit(td);\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellSetFocusFromKeyCode: function(e) { //invoces a click on next/prev cell\r\n
+\t\t\t\t\tvar c = jS.cellLast.col; //we don\'t set the cellLast.col here so that we never go into indexes that don\'t exist\r\n
+\t\t\t\t\tvar r = jS.cellLast.row;\r\n
+\t\t\t\t\tvar overrideIsEdit = false;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tswitch (e.keyCode) {\r\n
+\t\t\t\t\t\tcase key.UP: \t\tr--; break;\r\n
+\t\t\t\t\t\tcase key.DOWN: \t\tr++; break;\r\n
+\t\t\t\t\t\tcase key.LEFT: \t\tc--; break;\r\n
+\t\t\t\t\t\tcase key.RIGHT: \tc++; break;\r\n
+\t\t\t\t\t\tcase key.ENTER:\t\tr++;\r\n
+\t\t\t\t\t\t\toverrideIsEdit = true;\r\n
+\t\t\t\t\t\t\tif (s.autoAddCells) {\r\n
+\t\t\t\t\t\t\t\tif (jS.cellLast.row == jS.sheetSize()[0]) {\r\n
+\t\t\t\t\t\t\t\t\tjS.controlFactory.addCells(\':last\', false, null, 1, \'row\');\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase key.TAB:\r\n
+\t\t\t\t\t\t\toverrideIsEdit = true;\r\n
+\t\t\t\t\t\t\tif (e.shiftKey) {\r\n
+\t\t\t\t\t\t\t\tc--;\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\tc++;\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tif (s.autoAddCells) {\r\n
+\t\t\t\t\t\t\t\tif (jS.cellLast.col == jS.sheetSize()[1]) {\r\n
+\t\t\t\t\t\t\t\t\tjS.controlFactory.addCells(\':last\', false, null, 1, \'col\');\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase key.HOME:\t\tc = 0; break;\r\n
+\t\t\t\t\t\tcase key.END:\t\tc = jS.cellLast.td.parent().find(\'td\').length - 1; break;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//we check here and make sure all values are above -1, so that we get a selected cell\r\n
+\t\t\t\t\tc = (c < 0 ? 0 : c);\r\n
+\t\t\t\t\tr = (r < 0 ? 0 : r);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//to get the td could possibly make keystrokes slow, we prevent it here so the user doesn\'t even know we are listening ;)\r\n
+\t\t\t\t\tif (!jS.cellLast.isEdit || overrideIsEdit) {\r\n
+\t\t\t\t\t\t//get the td that we want to go to\r\n
+\t\t\t\t\t\tvar td = jS.getTd(jS.i, r, c);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t\t//if the td exists, lets go to it\r\n
+\t\t\t\t\t\tif (td) {\r\n
+\t\t\t\t\t\t\tjS.themeRoller.cell.clearHighlighted();\r\n
+\t\t\t\t\t\t\tjS.cellEdit(jQuery(td));\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//default, can be overridden above\r\n
+\t\t\t\t\treturn true;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellOnMouseDown: function(e) {\r\n
+\t\t\t\t\tif (e.shiftKey) {\r\n
+\t\t\t\t\t\tjS.getTdRange(e, jS.obj.formula().val());\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tif (jS.isTd([e.target])) {\r\n
+\t\t\t\t\t\t\treturn jS.cellEdit(jQuery(e.target), true);\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\t\t\t\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcellOnDblClick: function(e) {\r\n
+\t\t\t\t\tjS.cellLast.isEdit = jS.isSheetEdit = true;\r\n
+\t\t\t\t\tjS.controlFactory.inPlaceEdit(jS.cellLast.td);\r\n
+\t\t\t\t\tjS.log(\'click, in place edit activated\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\ttabOnMouseDown: function(e) {\r\n
+\t\t\t\t\tvar i = jQuery(e.target).attr(\'i\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (i != \'-1\' && i != jS.i) {\r\n
+\t\t\t\t\t\tjS.setActiveSheet(jQuery(\'#\' + jS.id.tableControl + i), i); jS.calc(i);\r\n
+\t\t\t\t\t} else if (i != \'-1\' && jS.i == i) {\r\n
+\t\t\t\t\t\tjS.sheetTab();\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tjS.addSheet(\'5x10\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn false;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tresizeBar: function(e, o) {\r\n
+\t\t\t\t\t//Resize Column & Row & Prototype functions are private under class jSheet\t\t\r\n
+\t\t\t\t\tvar target = jQuery(e.target);\r\n
+\t\t\t\t\tvar resizeBar = {\r\n
+\t\t\t\t\t\tstart: function(e) {\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tjS.log(\'start resize\');\r\n
+\t\t\t\t\t\t\t//I never had any problems with the numbers not being ints but I used the parse method\r\n
+\t\t\t\t\t\t\t//to ensuev non-breakage\r\n
+\t\t\t\t\t\t\to.offset = target.offset();\r\n
+\t\t\t\t\t\t\to.tdPageXY = [o.offset.left, o.offset.top][o.xyDimension];\r\n
+\t\t\t\t\t\t\to.startXY = [e.pageX, e.pageY][o.xyDimension];\r\n
+\t\t\t\t\t\t\to.i = o.getIndex(target);\r\n
+\t\t\t\t\t\t\to.srcBarSize = o.getSize(target);\r\n
+\t\t\t\t\t\t\to.edgeDelta = o.startXY - (o.tdPageXY + o.srcBarSize);\r\n
+\t\t\t\t\t\t\to.min = 10;\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tif (s.joinedResizing) {\r\n
+\t\t\t\t\t\t\t\to.resizeFn = function(size) {\r\n
+\t\t\t\t\t\t\t\t\to.setDesinationSize(size);\r\n
+\t\t\t\t\t\t\t\t\to.setSize(target, size);\r\n
+\t\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\to.resizeFn = function(size) {\r\n
+\t\t\t\t\t\t\t\t\to.setSize(target, size);\r\n
+\t\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t//We start the drag sequence\r\n
+\t\t\t\t\t\t\tif (Math.abs(o.edgeDelta) <= o.min) {\r\n
+\t\t\t\t\t\t\t\t//some ui enhancements, lets the user know he\'s resizing\r\n
+\t\t\t\t\t\t\t\tjQuery(e.target).parent().css(\'cursor\', o.cursor);\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tjQuery(document)\r\n
+\t\t\t\t\t\t\t\t\t.mousemove(resizeBar.drag)\r\n
+\t\t\t\t\t\t\t\t\t.mouseup(resizeBar.stop);\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\treturn true; //is resizing\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\treturn false; //isn\'t resizing\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\tdrag: function(e) {\r\n
+\t\t\t\t\t\t\tvar newSize = o.min;\r\n
+\r\n
+\t\t\t\t\t\t\tvar v = o.srcBarSize + ([e.pageX, e.pageY][o.xyDimension] - o.startXY);\r\n
+\t\t\t\t\t\t\tif (v > 0) {// A non-zero minimum size saves many headaches.\r\n
+\t\t\t\t\t\t\t\tnewSize = Math.max(v, o.min);\r\n
+\t\t\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\t\t\to.resizeFn(newSize);\r\n
+\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\tstop: function(e) {\r\n
+\t\t\t\t\t\t\to.setDesinationSize(o.getSize(target));\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tjQuery(document)\r\n
+\t\t\t\t\t\t\t\t.unbind(\'mousemove\')\r\n
+\t\t\t\t\t\t\t\t.unbind(\'mouseup\');\r\n
+\r\n
+\t\t\t\t\t\t\tjS.obj.formula()\r\n
+\t\t\t\t\t\t\t\t.focus()\r\n
+\t\t\t\t\t\t\t\t.select();\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\ttarget.parent().css(\'cursor\', \'pointer\');\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tjS.log(\'stop resizing\');\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn resizeBar.start(e);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tscrollBars: function() {\r\n
+\t\t\t\t\tvar o = { //cut down on recursion, grabe them once\r\n
+\t\t\t\t\t\tpane: jS.obj.pane(), \r\n
+\t\t\t\t\t\tbarLeft: jS.obj.barLeftParent(), \r\n
+\t\t\t\t\t\tbarTop: jS.obj.barTopParent()\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.pane().scroll(function() {\r\n
+\t\t\t\t\t\to.barTop.scrollLeft(o.pane.scrollLeft());//2 lines of beautiful jQuery js\r\n
+\t\t\t\t\t\to.barLeft.scrollTop(o.pane.scrollTop());\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t},\r\n
+\t\t\t\tbarMouseDown: {\r\n
+\t\t\t\t\tselect: function(o, e, selectFn, resizeFn) {\r\n
+\t\t\t\t\t\tvar isResizing = jS.evt.resizeBar(e, resizeFn);\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (!isResizing) {\r\n
+\t\t\t\t\t\t\tselectFn(e.target);\r\n
+\t\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t\t.unbind(\'mouseover\')\r\n
+\t\t\t\t\t\t\t\t.mouseover(function(e) {\r\n
+\t\t\t\t\t\t\t\t\tselectFn(e.target);\r\n
+\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tjQuery(document)\r\n
+\t\t\t\t\t\t\t\t.one(\'mouseup\', function() {\r\n
+\t\t\t\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t\t\t\t.unbind(\'mouseover\')\r\n
+\t\t\t\t\t\t\t\t\t\t.unbind(\'mouseup\');\r\n
+\t\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tfirst: 0,\r\n
+\t\t\t\t\tlast: 0,\r\n
+\t\t\t\t\theight: function(o) {\t\t\t\r\n
+\t\t\t\t\t\tvar selectRow = function () {};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\to //let any user resize\r\n
+\t\t\t\t\t\t\t.unbind(\'mousedown\')\r\n
+\t\t\t\t\t\t\t.mousedown(function(e) {\r\n
+\t\t\t\t\t\t\t\tif (!jQuery(e.target).hasClass(jS.cl.barLeft)) {\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.first = jS.evt.barMouseDown.last = jS.rowLast = jS.getBarLeftIndex(e.target);\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.select(o, e, selectRow, jS.rowResizer);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tif (s.editable) { //only let editable select\r\n
+\t\t\t\t\t\t\tselectRow = function(o) {\r\n
+\t\t\t\t\t\t\t\tif (!jQuery(o).attr(\'id\')) {\r\n
+\t\t\t\t\t\t\t\t\tvar i = jS.getBarLeftIndex(o);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tjS.rowLast = i; //keep track of last row for inserting new rows\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.last = i;\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tjS.cellSetActiveBar(\'row\', jS.evt.barMouseDown.first, jS.evt.barMouseDown.last);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\twidth: function(o) {\r\n
+\t\t\t\t\t\tvar selectColumn = function() {};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\to //let any user resize\r\n
+\t\t\t\t\t\t\t.unbind(\'mousedown\')\r\n
+\t\t\t\t\t\t\t.mousedown(function(e) {\r\n
+\t\t\t\t\t\t\t\tif (!jQuery(e.target).hasClass(jS.cl.barTop)) {\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.first = jS.evt.barMouseDown.last = jS.colLast = jS.getBarTopIndex(e.target);\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.select(o, e, selectColumn, jS.columnResizer);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tif (s.editable) { //only let editable select\r\n
+\t\t\t\t\t\t\tselectColumn = function(o) {\r\n
+\t\t\t\t\t\t\t\tif (!jQuery(o).attr(\'id\')) {\r\n
+\t\t\t\t\t\t\t\t\tvar i = jS.getBarTopIndex(o);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tjS.colLast = i; //keep track of last column for inserting new columns\r\n
+\t\t\t\t\t\t\t\t\tjS.evt.barMouseDown.last = i;\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tjS.cellSetActiveBar(\'col\', jS.evt.barMouseDown.first, jS.evt.barMouseDown.last);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tisTd: function(o) {\r\n
+\t\t\t\tif (o[0]) {\r\n
+\t\t\t\t\tif (!isNaN(o[0].cellIndex)) { \r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn false;\r\n
+\t\t\t},\r\n
+\t\t\tisFormulaEditable: function(o) {\r\n
+\t\t\t\tif (s.lockFormulas) {\r\n
+\t\t\t\t\tif(o.attr(\'formula\') !== undefined) {\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn true;\r\n
+\t\t\t},\r\n
+\t\t\ttoggleFullScreen: function() {\r\n
+\t\t\t\tif (jS.obj.fullScreen().is(\':visible\')) { //here we remove full screen\r\n
+\t\t\t\t\ts.parent = origParent;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar w = s.parent.width();\r\n
+\t\t\t\t\tvar h = s.parent.height();\r\n
+\t\t\t\t\ts.width = w;\r\n
+\t\t\t\t\ts.height = h;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.tabContainer().insertAfter(\r\n
+\t\t\t\t\t\ts.parent.append(jS.obj.fullScreen().children())\r\n
+\t\t\t\t\t).removeClass(jS.cl.tabContainerFullScreen);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.fullScreen().remove();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\t} else { //here we make a full screen\r\n
+\t\t\t\t\tvar w = $window.width() - 15;\r\n
+\t\t\t\t\tvar h = $window.height() - 35;\r\n
+\t\t\t\t\ts.width = w;\r\n
+\t\t\t\t\ts.height = h;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.tabContainer().insertAfter(\r\n
+\t\t\t\t\t\tjQuery(\'<div class="\' + jS.cl.fullScreen + \' \' + jS.cl.uiFullScreen + \'" />\')\r\n
+\t\t\t\t\t\t\t.append(s.parent.children())\r\n
+\t\t\t\t\t\t\t.appendTo(\'body\')\r\n
+\t\t\t\t\t).addClass(jS.cl.tabContainerFullScreen);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\ts.parent = jS.obj.fullScreen();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\ttuneTableForSheetUse: function(o) {\r\n
+\t\t\t\to\r\n
+\t\t\t\t\t.addClass(jS.cl.sheet)\r\n
+\t\t\t\t\t.attr(\'id\', jS.id.sheet + jS.i)\r\n
+\t\t\t\t\t.attr(\'border\', \'1px\')\r\n
+\t\t\t\t\t.attr(\'cellpadding\', \'0\')\r\n
+\t\t\t\t\t.attr(\'cellspacing\', \'0\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\to.find(\'td.\' + jS.cl.cellActive).removeClass(jS.cl.cellActive);\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn o;\r\n
+\t\t\t},\r\n
+\t\t\tattrH: {//Attribute Helpers\r\n
+\t\t\t//I created this object so I could see, quickly, which attribute was most stable.\r\n
+\t\t\t//As it turns out, all browsers are different, thus this has evolved to a much uglier beast\r\n
+\t\t\t\twidth: function(o, skipCorrection) {\r\n
+\t\t\t\t\treturn jQuery(o).outerWidth() - (skipCorrection ? 0 : s.boxModelCorrection);\r\n
+\t\t\t\t},\r\n
+\t\t\t\twidthReverse: function(o, skipCorrection) {\r\n
+\t\t\t\t\treturn jQuery(o).outerWidth() + (skipCorrection ? 0 : s.boxModelCorrection);\r\n
+\t\t\t\t},\r\n
+\t\t\t\theight: function(o, skipCorrection) {\r\n
+\t\t\t\t\treturn jQuery(o).outerHeight() - (skipCorrection ? 0 : s.boxModelCorrection);\r\n
+\t\t\t\t},\r\n
+\t\t\t\theightReverse: function(o, skipCorrection) {\r\n
+\t\t\t\t\treturn jQuery(o).outerHeight() + (skipCorrection ? 0 : s.boxModelCorrection);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsyncSheetWidthFromTds: function(o) {\r\n
+\t\t\t\t\tvar w = 0;\r\n
+\t\t\t\t\to = (o ? o : jS.obj.sheet());\r\n
+\t\t\t\t\to.find(\'col\').each(function() {\r\n
+\t\t\t\t\t\tw += jQuery(this).width();\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\to.width(w);\r\n
+\t\t\t\t\treturn w;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsetHeight: function(i, from, skipCorrection, o) {\r\n
+\t\t\t\t\tvar correction = 0;\r\n
+\t\t\t\t\tvar h = 0;\r\n
+\t\t\t\t\tvar fn;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tswitch(from) {\r\n
+\t\t\t\t\t\tcase \'cell\':\r\n
+\t\t\t\t\t\t\to = (o ? o : jS.obj.barLeft().find(\'div\').eq(i));\r\n
+\t\t\t\t\t\t\th = jS.attrH.height(jQuery(jS.getTd(jS.i, i, 0)).parent().andSelf(), skipCorrection);\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase \'bar\':\r\n
+\t\t\t\t\t\t\to = (o ? o : jQuery(jS.getTd(jS.i, i, 0)).parent().andSelf());\r\n
+\t\t\t\t\t\t\th = jS.attrH.heightReverse(jS.obj.barLeft().find(\'div\').eq(i), skipCorrection);\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (h) {\r\n
+\t\t\t\t\t\tjQuery(o)\r\n
+\t\t\t\t\t\t\t.height(h)\r\n
+\t\t\t\t\t\t\t.css(\'height\', h)\r\n
+\t\t\t\t\t\t\t.attr(\'height\', h);\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\treturn o;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tsetTdIds: function(o) {\r\n
+\t\t\t\to = (o ? o : jS.obj.sheet());\r\n
+\t\t\t\to.find(\'tr\').each(function(row) {\r\n
+\t\t\t\t\tjQuery(this).find(\'td\').each(function(col) {\r\n
+\t\t\t\t\t\tjQuery(this).attr(\'id\', jS.getTdId(jS.i, row, col));\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t});\r\n
+\t\t\t},\r\n
+\t\t\tsetControlIds: function() {\r\n
+\t\t\t\tvar resetIds = function(o, id) {\r\n
+\t\t\t\t\to.each(function(i) {\r\n
+\t\t\t\t\t\tjQuery(this).attr(\'id\', id + i);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t};\r\n
+\t\t\t\t\r\n
+\t\t\t\tresetIds(jS.obj.sheetAll().each(function() {\r\n
+\t\t\t\t\tjS.setTdIds(jQuery(this));\r\n
+\t\t\t\t}), jS.id.sheet);\r\n
+\t\t\t\t\r\n
+\t\t\t\tresetIds(jS.obj.barTopAll(), jS.id.barTop);\r\n
+\t\t\t\tresetIds(jS.obj.barTopParentAll(), jS.id.barTopParent);\r\n
+\t\t\t\tresetIds(jS.obj.barLeftAll(), jS.id.barLeft);\r\n
+\t\t\t\tresetIds(jS.obj.barLeftParentAll(), jS.id.barLeftParent);\r\n
+\t\t\t\tresetIds(jS.obj.barCornerAll(), jS.id.barCorner);\r\n
+\t\t\t\tresetIds(jS.obj.barCornerParentAll(), jS.id.barCornerParent);\r\n
+\t\t\t\tresetIds(jS.obj.tableControlAll(), jS.id.tableControl);\r\n
+\t\t\t\tresetIds(jS.obj.paneAll(), jS.id.pane);\r\n
+\t\t\t\tresetIds(jS.obj.tabAll().each(function(j) {\r\n
+\t\t\t\t\tjQuery(this).attr(\'i\', j);\r\n
+\t\t\t\t}), jS.id.tab);\r\n
+\t\t\t},\r\n
+\t\t\tcolumnResizer: {\r\n
+\t\t\t\txyDimension: 0,\r\n
+\t\t\t\tgetIndex: function(o) {\r\n
+\t\t\t\t\treturn jS.getBarTopIndex(o);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tgetSize: function(o) {\r\n
+\t\t\t\t\treturn jS.attrH.width(o, true);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsetSize: function(o, v) {\r\n
+\t\t\t\t\to.width(v);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tsetDesinationSize: function(w) {\r\n
+\t\t\t\t\tjS.sheetSyncSizeToDivs();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'col\').eq(this.i)\r\n
+\t\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t\t.css(\'width\', w)\r\n
+\t\t\t\t\t\t.attr(\'width\', w);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.pane().scroll();\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcursor: \'w-resize\'\r\n
+\t\t\t},\r\n
+\t\t\trowResizer: {\r\n
+\t\t\t\txyDimension: 1,\r\n
+\t\t\t\t\tgetIndex: function(o) {\r\n
+\t\t\t\t\t\treturn jS.getBarLeftIndex(o);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tgetSize: function(o) {\r\n
+\t\t\t\t\t\treturn jS.attrH.height(o, true);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tsetSize: function(o, v) {\r\n
+\t\t\t\t\t\tif (v) {\r\n
+\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t.height(v)\r\n
+\t\t\t\t\t\t\t.css(\'height\', v)\r\n
+\t\t\t\t\t\t\t.attr(\'height\', v);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn jS.attrH.height(o);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tsetDesinationSize: function() {\r\n
+\t\t\t\t\t\t//Set the cell height\r\n
+\t\t\t\t\t\tjS.attrH.setHeight(this.i, \'bar\', true);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t//Reset the bar height if the resized row don\'t match\r\n
+\t\t\t\t\t\tjS.attrH.setHeight(this.i, \'cell\', false);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tjS.obj.pane().scroll();\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tcursor: \'s-resize\'\r\n
+\t\t\t},\r\n
+\t\t\ttoggleHide: {//These are not ready for prime time\r\n
+\t\t\t\trow: function(i) {\r\n
+\t\t\t\t\tif (!i) {//If i is empty, lets get the current row\r\n
+\t\t\t\t\t\ti = jS.obj.cellActive().parent().attr(\'rowIndex\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (i) {//Make sure that i equals something\r\n
+\t\t\t\t\t\tvar o = jS.obj.barLeft().find(\'div\').eq(i);\r\n
+\t\t\t\t\t\tif (o.is(\':visible\')) {//This hides the current row\r\n
+\t\t\t\t\t\t\to.hide();\r\n
+\t\t\t\t\t\t\tjS.obj.sheet().find(\'tr\').eq(i).hide();\r\n
+\t\t\t\t\t\t} else {//This unhides\r\n
+\t\t\t\t\t\t\t//This unhides the currently selected row\r\n
+\t\t\t\t\t\t\to.show();\r\n
+\t\t\t\t\t\t\tjS.obj.sheet().find(\'tr\').eq(i).show();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\talert(\'No row selected.\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\trowAll: function() {\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'tr\').show();\r\n
+\t\t\t\t\tjS.obj.barLeft().find(\'div\').show();\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcolumn: function(i) {\r\n
+\t\t\t\t\tif (!i) {\r\n
+\t\t\t\t\t\ti = jS.obj.cellActive().attr(\'cellIndex\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (i) {\r\n
+\t\t\t\t\t\t//We need to hide both the col and td of the same i\r\n
+\t\t\t\t\t\tvar o = jS.obj.barTop().find(\'div\').eq(i);\r\n
+\t\t\t\t\t\tif (o.is(\':visible\')) {\r\n
+\t\t\t\t\t\t\tjS.obj.sheet().find(\'tbody tr\').each(function() {\r\n
+\t\t\t\t\t\t\t\tjQuery(this).find(\'td\').eq(i).hide();\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\to.hide();\r\n
+\t\t\t\t\t\t\tjS.obj.sheet().find(\'colgroup col\').eq(i).hide();\r\n
+\t\t\t\t\t\t\tjS.toggleHide.columnSizeManage();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\talert(\'Now column selected.\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcolumnAll: function() {\r\n
+\t\t\t\t\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcolumnSizeManage: function() {\r\n
+\t\t\t\t\tvar w = jS.obj.barTop().width();\r\n
+\t\t\t\t\tvar newW = 0;\r\n
+\t\t\t\t\tvar newW = 0;\r\n
+\t\t\t\t\tjS.obj.barTop().find(\'div\').each(function() {\r\n
+\t\t\t\t\t\tvar o = jQuery(this);\r\n
+\t\t\t\t\t\tif (o.is(\':hidden\')) {\r\n
+\t\t\t\t\t\t\tnewW += o.width();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\tjS.obj.barTop().width(w);\r\n
+\t\t\t\t\tjS.obj.sheet().width(w);\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tmerge: function() {\r\n
+\t\t\t\tvar cellsValue = "";\r\n
+\t\t\t\tvar cellValue = "";\r\n
+\t\t\t\tvar cells = jS.obj.cellHighlighted();\r\n
+\t\t\t\tvar formula;\r\n
+\t\t\t\tvar cellFirstLoc = jS.getTdLocation(cells.first());\r\n
+\t\t\t\tvar cellLastLoc = jS.getTdLocation(cells.last());\r\n
+\t\t\t\tvar colI = (cellLastLoc[1] - cellFirstLoc[1]) + 1;\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (cells.length > 1 && cellFirstLoc[0]) {\r\n
+\t\t\t\t\tfor (var i = cellFirstLoc[1]; i <= cellLastLoc[1]; i++) {\r\n
+\t\t\t\t\t\tvar cell = jQuery(jS.getTd(jS.i, cellFirstLoc[0], i)).hide();\r\n
+\t\t\t\t\t\tformula = cell.attr(\'formula\');\r\n
+\t\t\t\t\t\tcellValue = cell.html();\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tcellValue = (cellValue ? cellValue + \' \' : \'\');\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tcellsValue = (formula ? "(" + formula.replace(\'=\', \'\') + ")" : cellValue) + cellsValue;\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (i != cellFirstLoc[1]) {\r\n
+\t\t\t\t\t\t\tcell\r\n
+\t\t\t\t\t\t\t\t.attr(\'formula\', \'\')\r\n
+\t\t\t\t\t\t\t\t.html(\'\')\r\n
+\t\t\t\t\t\t\t\t.hide();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar cell = cells.first()\r\n
+\t\t\t\t\t\t.show()\r\n
+\t\t\t\t\t\t.attr(\'colspan\', colI)\r\n
+\t\t\t\t\t\t.html(cellsValue);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t\t} else if (!cellFirstLoc[0]) {\r\n
+\t\t\t\t\talert(\'Merging is not allowed on the first row.\');\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tunmerge: function() {\r\n
+\t\t\t\tvar cell = jS.obj.cellHighlighted().first();\r\n
+\t\t\t\tvar loc = jS.getTdLocation(cell);\r\n
+\t\t\t\tvar formula = cell.attr(\'formula\');\r\n
+\t\t\t\tvar v = cell.html();\r\n
+\t\t\t\tv = (formula ? formula : v);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar rowI = cell.attr(\'rowspan\');\r\n
+\t\t\t\tvar colI = cell.attr(\'colspan\');\r\n
+\t\t\t\t\r\n
+\t\t\t\t//rowI = parseInt(rowI ? rowI : 1); //we have to have a minimum here;\r\n
+\t\t\t\tcolI = parseInt(colI ? colI : 1);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar td = \'<td />\';\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar tds = \'\';\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (colI) {\r\n
+\t\t\t\t\tfor (var i = 0; i < colI; i++) {\r\n
+\t\t\t\t\t\ttds += td;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfor (var i = loc[1]; i < colI; i++) {\r\n
+\t\t\t\t\tjQuery(jS.getTd(jS.i, loc[0], i)).show();\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tcell.removeAttr(\'colspan\');\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t},\r\n
+\t\t\tfillUpOrDown: function(goUp, skipOffsetForumals) { //default behavior is to go down var goUp changes it\r\n
+\t\t\t\tvar cells = jS.obj.cellHighlighted();\r\n
+\t\t\t\tvar cellActive = jS.obj.cellActive();\r\n
+\t\t\t\t//Make it undoable\r\n
+\t\t\t\tjS.cellUndoable.add(cells);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar startFromActiveCell = cellActive.hasClass(jS.cl.uiCellHighlighted);\r\n
+\t\t\t\tvar locFirst = jS.getTdLocation(cells.first());\r\n
+\t\t\t\tvar locLast = jS.getTdLocation(cells.last());\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar v = jS.obj.formula().val();\r\n
+\t\t\t\tvar fn;\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar formulaOffset = (startFromActiveCell ? 0 : 1);\r\n
+\t\t\t\t\r\n
+\t\t\t\tif ((v + \'\').charAt(0) == \'=\') {\r\n
+\t\t\t\t\tfn = function(o, i) {\r\n
+\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t.attr(\'formula\', (skipOffsetForumals ? v : jS.offsetFormula(v, i + formulaOffset, 0)))\r\n
+\t\t\t\t\t\t\t.html(\'\'); //we subtract one here because cells are 1 based and indexes are 0 based\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tfn = function (o) {\r\n
+\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t.removeAttr(\'formula\')\r\n
+\t\t\t\t\t\t\t.html(v);\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfunction fill(r, c, i) {\r\n
+\t\t\t\t\tvar td = jQuery(jS.getTd(jS.i, r, c));\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//make sure the formula isn\'t locked for this cell\r\n
+\t\t\t\t\tif (jS.isFormulaEditable(td)) {\r\n
+\t\t\t\t\t\tfn(td, i);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar k = 0;\r\n
+\t\t\t\tif (goUp) {\r\n
+\t\t\t\t\tfor (var i = locLast[0]; i >= locFirst[0]; i--) {\r\n
+\t\t\t\t\t\tfor (var j = locLast[1]; j >= locFirst[1]; j--) {\r\n
+\t\t\t\t\t\t\tfill(i, j, k);\r\n
+\t\t\t\t\t\t\tk++;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tfor (var i = locFirst[0]; i <= locLast[0]; i++) {\r\n
+\t\t\t\t\t\tfor (var j = locFirst[1]; j <= locLast[1]; j++) {\r\n
+\t\t\t\t\t\t\tfill(i, j, k);\r\n
+\t\t\t\t\t\t\tk++;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Make it redoable\r\n
+\t\t\t\tjS.cellUndoable.add(cells);\r\n
+\t\t\t},\r\n
+\t\t\toffsetFormulaRange: function(row, col, rowOffset, colOffset, isBefore) {//col = int; offset = int\r\n
+\t\t\t\tvar shiftedRange = {\r\n
+\t\t\t\t\tfirst: [(row ? row : 0), (col ? col : 0)],\r\n
+\t\t\t\t\tlast: jS.sheetSize()\r\n
+\t\t\t\t};\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (!isBefore && rowOffset) { //this shift is from a row\r\n
+\t\t\t\t\tshiftedRange.first[0]++;\r\n
+\t\t\t\t\tshiftedRange.last[0]++;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (!isBefore && colOffset) { //this shift is from a col\r\n
+\t\t\t\t\tshiftedRange.first[1]++;\r\n
+\t\t\t\t\tshiftedRange.last[1]++;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfunction isInFormula(loc) {\r\n
+\t\t\t\t\tif ((loc[0] - 1) >= shiftedRange.first[0] &&\r\n
+\t\t\t\t\t\t(loc[1] - 1) >= shiftedRange.first[1] &&\r\n
+\t\t\t\t\t\t(loc[0] - 1) <= shiftedRange.last[0] &&\r\n
+\t\t\t\t\t\t(loc[1] - 1) <= shiftedRange.last[1]\r\n
+\t\t\t\t\t) {\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfunction isInFormulaRange(startLoc, endLoc) {\r\n
+\t\t\t\t\tif (\r\n
+\t\t\t\t\t\t(\r\n
+\t\t\t\t\t\t\t(startLoc[0] - 1) >= shiftedRange.first[0] &&\r\n
+\t\t\t\t\t\t\t(startLoc[1] - 1) >= shiftedRange.first[1]\r\n
+\t\t\t\t\t\t) && (\r\n
+\t\t\t\t\t\t\t(startLoc[0] - 1) <= shiftedRange.last[0] &&\r\n
+\t\t\t\t\t\t\t(startLoc[1] - 1) <= shiftedRange.last[1]\r\n
+\t\t\t\t\t\t) && (\r\n
+\t\t\t\t\t\t\t(endLoc[0] - 1) >= shiftedRange.first[0] &&\r\n
+\t\t\t\t\t\t\t(endLoc[1] - 1) >= shiftedRange.first[1]\r\n
+\t\t\t\t\t\t) && (\r\n
+\t\t\t\t\t\t\t(endLoc[0] - 1) <= shiftedRange.last[0] &&\r\n
+\t\t\t\t\t\t\t(endLoc[1] - 1) <= shiftedRange.last[1]\r\n
+\t\t\t\t\t\t)\r\n
+\t\t\t\t\t) {\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfunction reparseFormula(loc) {\r\n
+\t\t\t\t\treturn ( //A1\r\n
+\t\t\t\t\t\tcE.columnLabelString(loc[1] + colOffset) + (loc[0] + rowOffset)\r\n
+\t\t\t\t\t);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tfunction reparseFormulaRange(startLoc, endLoc) {\r\n
+\t\t\t\t\treturn ( //A1:B4\r\n
+\t\t\t\t\t\t(cE.columnLabelString(startLoc[1] + colOffset) + (startLoc[0] + rowOffset)) + \':\' + \r\n
+\t\t\t\t\t\t(cE.columnLabelString(endLoc[1] + colOffset) + (endLoc[0] + rowOffset))\r\n
+\t\t\t\t\t);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.cylceCells(function (td) {\r\n
+\t\t\t\t\tvar formula = td.attr(\'formula\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (formula && jS.isFormulaEditable(td)) {\r\n
+\t\t\t\t\t\tformula = formula.replace(cE.regEx.cell, \r\n
+\t\t\t\t\t\t\tfunction(ignored, colStr, rowStr, pos) {\r\n
+\t\t\t\t\t\t\t\tvar charAt = [formula.charAt(pos - 1), formula.charAt(ignored.length + pos)]; //find what is exactly before and after formula\r\n
+\t\t\t\t\t\t\t\tif (!colStr.match(cE.regEx.sheet) &&\r\n
+\t\t\t\t\t\t\t\t\tcharAt[0] != \':\' &&\r\n
+\t\t\t\t\t\t\t\t\tcharAt[1] != \':\'\r\n
+\t\t\t\t\t\t\t\t) { //verify it\'s not a range or an exact location\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tvar colI = cE.columnLabelIndex(colStr);\r\n
+\t\t\t\t\t\t\t\t\tvar rowI = parseInt(rowStr);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tif (isInFormula([rowI, colI])) {\r\n
+\t\t\t\t\t\t\t\t\t\treturn reparseFormula([rowI, colI]);\r\n
+\t\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\t\treturn ignored;\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\treturn ignored;\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tformula = formula.replace(cE.regEx.range, \r\n
+\t\t\t\t\t\t\tfunction(ignored, startColStr, startRowStr, endColStr, endRowStr, pos) {\r\n
+\t\t\t\t\t\t\t\tvar charAt = [formula.charAt(pos - 1), formula.charAt(ignored.length + pos)]; //find what is exactly before and after formula\r\n
+\t\t\t\t\t\t\t\tif (!startColStr.match(cE.regEx.sheet) &&\r\n
+\t\t\t\t\t\t\t\t\tcharAt[0] != \':\'\r\n
+\t\t\t\t\t\t\t\t) {\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tvar startRowI = parseInt(startRowStr);\r\n
+\t\t\t\t\t\t\t\t\tvar startColI = cE.columnLabelIndex(startColStr);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tvar endRowI = parseInt(endRowStr);\r\n
+\t\t\t\t\t\t\t\t\tvar endColI = cE.columnLabelIndex(endColStr);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\tif (isInFormulaRange([startRowI, startColI], [endRowI, endColI])) {\r\n
+\t\t\t\t\t\t\t\t\t\treturn reparseFormulaRange([startRowI, startColI], [endRowI, endColI]);\r\n
+\t\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\t\treturn ignored;\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\treturn ignored;\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\ttd.attr(\'formula\', formula);\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t}, [0, 0], shiftedRange.last);\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t},\r\n
+\t\t\tcylceCells: function(fn, firstLoc, lastLoc) {\r\n
+\t\t\t\tfor (var i = firstLoc[0]; i < lastLoc[0]; i++) {\r\n
+\t\t\t\t\tfor (var j = firstLoc[1]; j < lastLoc[1]; j++) {\r\n
+\t\t\t\t\t\tfn(jQuery(jS.getTd(jS.i, i, j)));\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcycleCellsAndMaintainPoint: function(fn, firstLoc, lastLoc) {\r\n
+\t\t\t\tvar o = [];\r\n
+\t\t\t\tfor (var i = (firstLoc[0] < lastLoc[0] ? firstLoc[0] : lastLoc[0]) ; i <= (firstLoc[0] > lastLoc[0] ? firstLoc[0] : lastLoc[0]); i++) {\r\n
+\t\t\t\t\tfor (var j = (firstLoc[1] < lastLoc[1] ? firstLoc[1] : lastLoc[1]); j <= (firstLoc[1] > lastLoc[1] ? firstLoc[1] : lastLoc[[1]]); j++) {\r\n
+\t\t\t\t\t\to.push(jS.getTd(jS.i, i, j));\r\n
+\t\t\t\t\t\tfn(o[o.length - 1]);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn o;\r\n
+\t\t\t},\r\n
+\t\t\toffsetFormula: function(formula, rowOffset, colOffset, includeRanges) {\t\t\r\n
+\t\t\t\t//Cell References Fixed\r\n
+\t\t\t\tvar charAt = [];\r\n
+\t\t\t\tvar col = \'\';\r\n
+\t\t\t\tvar row = \'\';\r\n
+\t\t\t\tformula = formula.replace(cE.regEx.cell, \r\n
+\t\t\t\t\tfunction(ignored, colStr, rowStr, pos) {\r\n
+\t\t\t\t\t\tcharAt[0] = formula.charAt(pos - 1);\r\n
+\t\t\t\t\t\tcharAt[1] = formula.charAt(ignored.length + pos);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tcharAt[0] = (charAt[0] ? charAt[0] : \'\');\r\n
+\t\t\t\t\t\tcharAt[1] = (charAt[1] ? charAt[1] : \'\');\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (colStr.match(cE.regEx.sheet) || \r\n
+\t\t\t\t\t\t\tcharAt[0] == \':\' || \r\n
+\t\t\t\t\t\t\tcharAt[1] == \':\'\r\n
+\t\t\t\t\t\t) { //verify it\'s not a range or an exact location\r\n
+\t\t\t\t\t\t\treturn ignored;\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\trow = parseInt(rowStr) + rowOffset;\r\n
+\t\t\t\t\t\t\tcol = cE.columnLabelIndex(colStr) + colOffset;\r\n
+\t\t\t\t\t\t\trow = (row > 0 ? row : \'1\'); //table rows are never negative\r\n
+\t\t\t\t\t\t\tcol = (col > 0 ? col : \'1\'); //table cols are never negative\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\treturn cE.columnLabelString(col) + row;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t);\r\n
+\t\t\t\treturn formula;\r\n
+\t\t\t},\r\n
+\t\t\taddTab: function() {\r\n
+\t\t\t\tjQuery(\'<span class="\' + jS.cl.uiTab + \' ui-corner-bottom">\' + \r\n
+\t\t\t\t\t\t\'<a class="\' + jS.cl.tab + \'" id="\' + jS.id.tab + jS.i + \'" i="\' + jS.i + \'">\' + jS.sheetTab(true) + \'</a>\' + \r\n
+\t\t\t\t\t\'</span>\')\r\n
+\t\t\t\t\t\t.insertBefore(\r\n
+\t\t\t\t\t\t\tjS.obj.tabContainer().find(\'span:last\')\r\n
+\t\t\t\t\t\t);\r\n
+\t\t\t},\r\n
+\t\t\tsheetDecorate: function(o) {\t\r\n
+\t\t\t\tjS.formatSheet(o);\r\n
+\t\t\t\tjS.sheetSyncSizeToCols(o);\r\n
+\t\t\t\tjS.sheetDecorateRemove();\r\n
+\t\t\t},\r\n
+\t\t\tformatSheet: function(o) {\r\n
+\t\t\t\tvar tableWidth = 0;\r\n
+\t\t\t\tif (o.find(\'tbody\').length < 1) {\r\n
+\t\t\t\t\to.wrapInner(\'<tbody />\');\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (o.find(\'colgroup\').length < 1 || o.find(\'col\').length < 1) {\r\n
+\t\t\t\t\to.remove(\'colgroup\');\r\n
+\t\t\t\t\tvar colgroup = jQuery(\'<colgroup />\');\r\n
+\t\t\t\t\to.find(\'tr:first\').find(\'td\').each(function() {\r\n
+\t\t\t\t\t\tvar w = s.newColumnWidth;\r\n
+\t\t\t\t\t\tjQuery(\'<col />\')\r\n
+\t\t\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t\t\t.css(\'width\', (w) + \'px\')\r\n
+\t\t\t\t\t\t\t.attr(\'width\', (w) + \'px\')\r\n
+\t\t\t\t\t\t\t.appendTo(colgroup);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\ttableWidth += w;\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\to.find(\'tr\').each(function() {\r\n
+\t\t\t\t\t\tjQuery(this)\r\n
+\t\t\t\t\t\t\t.height(s.colMargin)\r\n
+\t\t\t\t\t\t\t.css(\'height\', s.colMargin + \'px\')\r\n
+\t\t\t\t\t\t\t.attr(\'height\', s.colMargin + \'px\');\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\tcolgroup.prependTo(o);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\to\r\n
+\t\t\t\t\t.removeAttr(\'width\')\r\n
+\t\t\t\t\t.css(\'width\', \'\')\r\n
+\t\t\t\t\t.width(tableWidth);\r\n
+\t\t\t},\r\n
+\t\t\tthemeRoller: {\r\n
+\t\t\t\tstart: function() {\r\n
+\t\t\t\t\t//Style sheet\t\t\t\r\n
+\t\t\t\t\ts.parent.addClass(jS.cl.uiParent);\r\n
+\t\t\t\t\tjS.obj.sheet().addClass(jS.cl.uiSheet);\r\n
+\t\t\t\t\t//Style bars\r\n
+\t\t\t\t\tjS.obj.barLeft().find(\'div\').addClass(jS.cl.uiBar);\r\n
+\t\t\t\t\tjS.obj.barTop().find(\'div\').addClass(jS.cl.uiBar);\r\n
+\t\t\t\t\tjS.obj.barCornerParent().addClass(jS.cl.uiBar);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.obj.controls().addClass(jS.cl.uiControl);\r\n
+\t\t\t\t\tjS.obj.label().addClass(jS.cl.uiControl);\r\n
+\t\t\t\t\tjS.obj.formula().addClass(jS.cl.uiControlTextBox);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcell: {\r\n
+\t\t\t\t\tsetActive: function() {\r\n
+\t\t\t\t\t\tthis.clearActive();\r\n
+\t\t\t\t\t\tthis.setHighlighted(\r\n
+\t\t\t\t\t\t\tjS.cellLast.td\r\n
+\t\t\t\t\t\t\t\t.addClass(jS.cl.cellActive)\r\n
+\t\t\t\t\t\t);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tsetHighlighted: function(td) {\r\n
+\t\t\t\t\t\tjQuery(td)\r\n
+\t\t\t\t\t\t\t.addClass(jS.cl.cellHighlighted + \' \' + jS.cl.uiCellHighlighted);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tclearActive: function() {\r\n
+\t\t\t\t\t\tjS.obj.cellActive()\r\n
+\t\t\t\t\t\t\t.removeClass(jS.cl.cellActive);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tclearHighlighted: function() {\r\n
+\t\t\t\t\t\tjS.obj.cellHighlighted()\r\n
+\t\t\t\t\t\t\t.removeClass(jS.cl.cellHighlighted + \' \' + jS.cl.uiCellHighlighted);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tjS.highlightedLast.rowStart = -1;\r\n
+\t\t\t\t\t\tjS.highlightedLast.colStart = -1;\r\n
+\t\t\t\t\t\tjS.highlightedLast.rowEnd = -1;\r\n
+\t\t\t\t\t\tjS.highlightedLast.colEnd = -1;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tbar: {\r\n
+\t\t\t\t\tstyle: function(o) {\r\n
+\t\t\t\t\t\tjQuery(o).addClass(jS.cl.uiBar);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tsetActive: function(direction, i) {\r\n
+\t\t\t\t\t\t//We don\'t clear here because we can have multi active bars\r\n
+\t\t\t\t\t\tswitch(direction) {\r\n
+\t\t\t\t\t\t\tcase \'top\': jS.obj.barTop().find(\'div\').eq(i).addClass(jS.cl.uiActive);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t\tcase \'left\': jS.obj.barLeft().find(\'div\').eq(i).addClass(jS.cl.uiActive);\r\n
+\t\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tclearActive: function() {\r\n
+\t\t\t\t\t\tjS.obj.barTop().add(jS.obj.barLeft()).find(\'div.\' + jS.cl.uiActive)\r\n
+\t\t\t\t\t\t\t.removeClass(jS.cl.uiActive);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\ttab: {\r\n
+\t\t\t\t\tsetActive: function(o) {\r\n
+\t\t\t\t\t\tthis.clearActive();\r\n
+\t\t\t\t\t\tjS.obj.tab().parent().addClass(jS.cl.uiTabActive);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tclearActive: function () {\r\n
+\t\t\t\t\t\tjS.obj.tabContainer().find(\'span.\' + jS.cl.uiTabActive)\r\n
+\t\t\t\t\t\t\t.removeClass(jS.cl.uiTabActive);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tresize: function() {\r\n
+\t\t\t\t\t// add resizable jquery.ui if available\r\n
+\t\t\t\t\tif (jQuery.ui) {\r\n
+\t\t\t\t\t\t// resizable container div\r\n
+\t\t\t\t\t\tvar o;\r\n
+\t\t\t\t\t\tvar barTop;\r\n
+\t\t\t\t\t\tvar barLeft;\r\n
+\t\t\t\t\t\tvar controlsHeight;\r\n
+\t\t\t\t\t\tvar parent = s.parent;\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tparent.resizable(\'destroy\').resizable({\r\n
+\t\t\t\t\t\t\tminWidth: s.width * 0.5,\r\n
+\t\t\t\t\t\t\tminHeight: s.height * 0.5,\r\n
+\t\t\t\t\t\t\tstart: function() {\r\n
+\t\t\t\t\t\t\t\tjS.obj.ui().hide();\r\n
+\t\t\t\t\t\t\t},\r\n
+\t\t\t\t\t\t\tstop: function() {\r\n
+\t\t\t\t\t\t\t\tjS.obj.ui().show();\r\n
+\t\t\t\t\t\t\t\ts.width = parent.width();\r\n
+\t\t\t\t\t\t\t\ts.height = parent.height();\r\n
+\t\t\t\t\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t// resizable f
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>next</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="3" aka="AAAAAAAAAAM=">
+    <pickle>
+      <global name="Pdata" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string>ormula area - a bit hard to grab the handle but is there!\r\n
+\t\t\t\t\t\tvar formulaResizeParent = jQuery(\'\074span /\076\');\r\n
+\t\t\t\t\t\tjS.obj.formula().wrap(formulaResizeParent).parent().resizable({\r\n
+\t\t\t\t\t\t\tminHeight: jS.obj.formula().height(), \r\n
+\t\t\t\t\t\t\tmaxHeight: 78,\r\n
+\t\t\t\t\t\t\thandles: \'s\',\r\n
+\t\t\t\t\t\t\tresize: function(e, ui) {\r\n
+\t\t\t\t\t\t\t\tjS.obj.formula().height(ui.size.height);\r\n
+\t\t\t\t\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tmanageHtmlToText: function(v) {\r\n
+\t\t\t\tv = jQuery.trim(v);\r\n
+\t\t\t\tif (v.charAt(0) != "=") {\r\n
+\t\t\t\t\tv = v.replace(/\046nbsp;/g, \' \')\r\n
+\t\t\t\t\t\t.replace(/\046gt;/g, \'\076\')\r\n
+\t\t\t\t\t\t.replace(/\046lt;/g, \'\074\')\r\n
+\t\t\t\t\t\t.replace(/\\t/g, \'\')\r\n
+\t\t\t\t\t\t.replace(/\\n/g, \'\')\r\n
+\t\t\t\t\t\t.replace(/\074br\076/g, \'\\r\')\r\n
+\t\t\t\t\t\t.replace(/\074BR\076/g, \'\\n\');\r\n
+\r\n
+\t\t\t\t\t//jS.log("from html to text");\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn v;\r\n
+\t\t\t},\r\n
+\t\t\tmanageTextToHtml: function(v) {\t\r\n
+\t\t\t\tv = jQuery.trim(v);\r\n
+\t\t\t\tif (v.charAt(0) != "=") {\r\n
+\t\t\t\t\tv = v.replace(/\\t/g, \'\046nbsp;\046nbsp;\046nbsp;\046nbsp;\')\r\n
+\t\t\t\t\t\t.replace(/ /g, \'\046nbsp;\')\r\n
+\t\t\t\t\t\t.replace(/\076/g, \'\046gt;\')\r\n
+\t\t\t\t\t\t.replace(/\074/g, \'\046lt;\')\r\n
+\t\t\t\t\t\t.replace(/\\n/g, \'\074br\076\')\r\n
+\t\t\t\t\t\t.replace(/\\r/g, \'\074br\076\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t//jS.log("from text to html");\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn v;\r\n
+\t\t\t},\r\n
+\t\t\tsheetDecorateRemove: function(makeClone) {\r\n
+\t\t\t\tvar o = (makeClone ? jS.obj.sheetAll().clone() : jS.obj.sheetAll());\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Get rid of highlighted cells and active cells\r\n
+\t\t\t\tjQuery(o).find(\'td.\' + jS.cl.cellActive)\r\n
+\t\t\t\t\t.removeClass(jS.cl.cellActive + \' \' + jS.cl.uiCellActive);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\tjQuery(o).find(\'td.\' + jS.cl.cellHighlighted)\r\n
+\t\t\t\t\t.removeClass(jS.cl.cellHighlighted + \' \' + jS.cl.uiCellHighlighted);\r\n
+\t\t\t\t/*\r\n
+\t\t\t\t//IE Bug, match width with css width\r\n
+\t\t\t\tjQuery(o).find(\'col\').each(function(i) {\r\n
+\t\t\t\t\tvar v = jQuery(this).css(\'width\');\r\n
+\t\t\t\t\tv = ((v + \'\').match(\'px\') ? v : v + \'px\');\r\n
+\t\t\t\t\tjQuery(o).find(\'col\').eq(i).attr(\'width\', v);\r\n
+\t\t\t\t});\r\n
+\t\t\t\t*/\r\n
+\t\t\t\treturn o;\r\n
+\t\t\t},\r\n
+\t\t\tlabelUpdate: function(v, setDirect) {\r\n
+\t\t\t\tif (!setDirect) {\r\n
+\t\t\t\t\tjS.obj.label().html(cE.columnLabelString(v[1] + 1) + (v[0] + 1));\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tjS.obj.label().html(v);\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcellEdit: function(td, isDrag) {\r\n
+\t\t\t\t//This finished up the edit of the last cell\r\n
+\t\t\t\tjS.evt.cellEditDone();\r\n
+\t\t\t\tjS.followMe(td);\r\n
+\t\t\t\tvar loc = jS.getTdLocation(td);\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Show where we are to the user\r\n
+\t\t\t\tjS.labelUpdate(loc);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar v = td.attr(\'formula\');\r\n
+\t\t\t\tif (!v) {\r\n
+\t\t\t\t\tv = jS.manageHtmlToText(td.html());\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.obj.formula()\r\n
+\t\t\t\t\t.val(v)\r\n
+\t\t\t\t\t.focus()\r\n
+\t\t\t\t\t.select();\r\n
+\t\t\t\tjS.cellSetActive(td, loc, isDrag);\r\n
+\t\t\t},\r\n
+\t\t\tcellSetActive: function(td, loc, isDrag) {\r\n
+\t\t\t\tif (typeof(loc[1]) != \'undefined\') {\r\n
+\t\t\t\t\tjS.cellLast.td = td; //save the current cell/td\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.cellLast.row = jS.rowLast = loc[0];\r\n
+\t\t\t\t\tjS.cellLast.col = jS.colLast = loc[1];\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.themeRoller.bar.clearActive();\r\n
+\t\t\t\t\tjS.themeRoller.cell.clearHighlighted();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.highlightedLast.td = td;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.themeRoller.cell.setActive(); //themeroll the cell and bars\r\n
+\t\t\t\t\tjS.themeRoller.bar.setActive(\'left\', jS.cellLast.row);\r\n
+\t\t\t\t\tjS.themeRoller.bar.setActive(\'top\', jS.cellLast.col);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar selectModel;\r\n
+\t\t\t\t\tvar clearHighlightedModel;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.highlightedLast.rowStart = loc[0];\r\n
+\t\t\t\t\tjS.highlightedLast.colStart = loc[1];\r\n
+\t\t\t\t\tjS.highlightedLast.rowLast = loc[0];\r\n
+\t\t\t\t\tjS.highlightedLast.colLast = loc[1];\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tswitch (s.cellSelectModel) {\r\n
+\t\t\t\t\t\tcase \'excel\':\r\n
+\t\t\t\t\t\tcase \'gdocs\':\r\n
+\t\t\t\t\t\t\tselectModel = function() {};\r\n
+\t\t\t\t\t\t\tclearHighlightedModel = jS.themeRoller.cell.clearHighlighted;\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tcase \'oo\':\r\n
+\t\t\t\t\t\t\tselectModel = function(target) {\r\n
+\t\t\t\t\t\t\t\tvar td = jQuery(target);\r\n
+\t\t\t\t\t\t\t\tif (jS.isTd(td)) {\r\n
+\t\t\t\t\t\t\t\t\tjS.cellEdit(td);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\tclearHighlightedModel = function() {};\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (isDrag) {\r\n
+\t\t\t\t\t\tjS.obj.pane()\r\n
+\t\t\t\t\t\t\t.mousemove(function(e) {\r\n
+\t\t\t\t\t\t\t\tvar endLoc = jS.getTdLocation([e.target]);\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tif (loc[1] != endLoc[1] || loc[0] != endLoc[0]) { //this prevents this method from firing too much\r\n
+\t\t\t\t\t\t\t\t\t//clear highlighted cells if needed\r\n
+\t\t\t\t\t\t\t\t\tclearHighlightedModel();\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t//set current bars\r\n
+\t\t\t\t\t\t\t\t\tjS.highlightedLast.colEnd = endLoc[1];\r\n
+\t\t\t\t\t\t\t\t\tjS.highlightedLast.rowEnd = endLoc[0];\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t//select active cell if needed\r\n
+\t\t\t\t\t\t\t\t\tselectModel(e.target);\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t//highlight the cells\r\n
+\t\t\t\t\t\t\t\t\tjS.highlightedLast.td = jS.cycleCellsAndMaintainPoint(jS.themeRoller.cell.setHighlighted, loc, endLoc);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tjQuery(document)\r\n
+\t\t\t\t\t\t\t.one(\'mouseup\', function() {\r\n
+\t\r\n
+\t\t\t\t\t\t\t\tjS.obj.pane()\r\n
+\t\t\t\t\t\t\t\t\t.unbind(\'mousemove\')\r\n
+\t\t\t\t\t\t\t\t\t.unbind(\'mouseup\');\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcolLast: 0,\r\n
+\t\t\trowLast: 0,\r\n
+\t\t\tcellLast: {\r\n
+\t\t\t\ttd: jQuery(\'\074td /\076\'), //this is a dud td, so that we don\'t get errors\r\n
+\t\t\t\trow: -1,\r\n
+\t\t\t\tcol: -1,\r\n
+\t\t\t\tisEdit: false\r\n
+\t\t\t},\r\n
+\t\t\thighlightedLast: {\r\n
+\t\t\t\ttd: jQuery(\'\074td /\076\'),\r\n
+\t\t\t\trowStart: -1,\r\n
+\t\t\t\tcolStart: -1,\r\n
+\t\t\t\trowEnd: -1,\r\n
+\t\t\t\tcolEnd: -1\r\n
+\t\t\t},\r\n
+\t\t\tcellStyleToggle: function(setClass, removeClass) {\r\n
+\t\t\t\t//Lets check to remove any style classes\r\n
+\t\t\t\tvar uiCell = jS.obj.cellHighlighted();\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.cellUndoable.add(uiCell);\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (removeClass) {\r\n
+\t\t\t\t\tuiCell.removeClass(removeClass);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t//Now lets add some style\r\n
+\t\t\t\tif (uiCell.hasClass(setClass)) {\r\n
+\t\t\t\t\tuiCell.removeClass(setClass);\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tuiCell.addClass(setClass);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.cellUndoable.add(uiCell);\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.obj.formula()\r\n
+\t\t\t\t\t.focus()\r\n
+\t\t\t\t\t.select();\r\n
+\t\t\t\treturn false;\r\n
+\t\t\t},\r\n
+\t\t\tcontext: {},\r\n
+\t\t\tcalc: function(tableI, fuel) {\r\n
+\t\t\t\tjS.log(\'Calculation Started\');\r\n
+\t\t\t\tif (!s.calcOff) {\r\n
+\t\t\t\t\tcE.calc(new jS.tableCellProvider(tableI), jS.context, fuel);\r\n
+\t\t\t\t\tjS.isSheetEdit = false;\r\n
+\t\t\t\t}\r\n
+\t\t\t\tjS.log(\'Calculation Ended\');\r\n
+\t\t\t},\r\n
+\t\t\trefreshLabelsColumns: function(){\r\n
+\t\t\t\tvar w = 0;\r\n
+\t\t\t\tjS.obj.barTop().find(\'div\').each(function(i) {\r\n
+\t\t\t\t\tjQuery(this).text(cE.columnLabelString(i+1));\r\n
+\t\t\t\t\tw += jQuery(this).width();\r\n
+\t\t\t\t});\r\n
+\t\t\t\treturn w;\r\n
+\t\t\t},\r\n
+\t\t\trefreshLabelsRows: function(){\r\n
+\t\t\t\tjS.obj.barLeft().find(\'div\').each(function(i) {\r\n
+\t\t\t\t\tjQuery(this).text((i + 1));\r\n
+\t\t\t\t});\r\n
+\t\t\t},\r\n
+\t\t\taddSheet: function(size) {\r\n
+\t\t\t\tsize = (size ? size : prompt(jS.newSheetDialog));\r\n
+\t\t\t\tif (size) {\r\n
+\t\t\t\t\tjS.evt.cellEditAbandon();\r\n
+\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\tvar newSheetControl = jS.controlFactory.sheetUI(jS.controlFactory.sheet(size), jS.sheetCount + 1, function() { \r\n
+\t\t\t\t\t\tjS.setActiveSheet(newSheetControl, jS.sheetCount + 1);\r\n
+\t\t\t\t\t}, true);\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tdeleteSheet: function() {\r\n
+\t\t\t\tjS.obj.tableControl().remove();\r\n
+\t\t\t\tjS.obj.tabContainer().children().eq(jS.i).remove();\r\n
+\t\t\t\tjS.i = 0;\r\n
+\t\t\t\tjS.sheetCount--;\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.setControlIds();\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.setActiveSheet(jS.obj.tableControl(), jS.i);\r\n
+\t\t\t},\r\n
+\t\t\tdeleteRow: function() {\r\n
+\t\t\t\tvar v = confirm("Are you sure that you want to delete that row?");\r\n
+\t\t\t\tif (v) {\r\n
+\t\t\t\t\tjS.obj.barLeft().find(\'div\').eq(jS.rowLast).remove();\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'tr\').eq(jS.rowLast).remove();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.evt.cellEditAbandon();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.setTdIds();\r\n
+\t\t\t\t\tjS.refreshLabelsRows();\r\n
+\t\t\t\t\tjS.obj.pane().scroll();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.rowLast = -1;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.offsetFormulaRange(jS.rowLast, 0, -1, 0);\r\n
+\t\t\t\t}\t\t\r\n
+\t\t\t},\r\n
+\t\t\tdeleteColumn: function() {\r\n
+\t\t\t\tvar v = confirm("Are you sure that you want to delete that column?");\r\n
+\t\t\t\tif (v) {\r\n
+\t\t\t\t\tjS.obj.barTop().find(\'div\').eq(jS.colLast).remove();\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'colgroup col\').eq(jS.colLast).remove();\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'tr\').each(function(i) {\r\n
+\t\t\t\t\t\t\tjQuery(this).find(\'td\').eq(jS.colLast).remove();\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.evt.cellEditAbandon();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar w = jS.refreshLabelsColumns();\r\n
+\t\t\t\t\tjS.setTdIds();\r\n
+\t\t\t\t\tjS.obj.sheet().width(w);\r\n
+\t\t\t\t\tjS.obj.pane().scroll();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.colLast = -1;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.offsetFormulaRange(0, jS.colLast, 0, -1);\r\n
+\t\t\t\t}\t\t\r\n
+\t\t\t},\r\n
+\t\t\tsheetTab: function(get) {\r\n
+\t\t\t\tvar sheetTab = \'\';\r\n
+\t\t\t\tif (get) {\r\n
+\t\t\t\t\tsheetTab = jS.obj.sheet().attr(\'title\');\r\n
+\t\t\t\t\tsheetTab = (sheetTab ? sheetTab : \'Spreadsheet \' + (jS.i + 1));\r\n
+\t\t\t\t} else if (s.editable) { //ensure that the sheet is editable, then let them change the sheet\'s name\r\n
+\t\t\t\t\tvar newTitle = prompt("What would you like the sheet\'s title to be?", jS.sheetTab(true));\r\n
+\t\t\t\t\tif (!newTitle) { //The user didn\'t set the new tab name\r\n
+\t\t\t\t\t\tsheetTab = jS.obj.sheet().attr(\'title\');\r\n
+\t\t\t\t\t\tnewTitle = (sheetTab ? sheetTab : \'Spreadsheet\' + (jS.i + 1));\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tjS.setDirty(true);\r\n
+\t\t\t\t\t\tjS.obj.sheet().attr(\'title\', newTitle);\r\n
+\t\t\t\t\t\tjS.obj.tab().html(newTitle);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tsheetTab = newTitle;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn sheetTab;\r\n
+\t\t\t},\r\n
+\t\t\tprint: function(o) {\r\n
+\t\t\t\tvar w = window.open();\r\n
+\t\t\t\tw.document.write("\074html\076\074body\076\074xmp\076" + o + "\\n\074/xmp\076\074/body\076\074/html\076");\r\n
+\t\t\t\tw.document.close();\r\n
+\t\t\t},\r\n
+\t\t\tgetSource: function(pretty) {\r\n
+\t\t\t\tvar sheetClone = jS.sheetDecorateRemove(true);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar s = "";\r\n
+\t\t\t\tif (pretty) {\r\n
+\t\t\t\t\tjQuery(sheetClone).each(function() {\r\n
+\t\t\t\t\t\ts += jS.HTMLtoPrettySource(this);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\ts += jQuery(\'\074div /\076\').html(sheetClone).html();\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn s;\r\n
+\t\t\t},\r\n
+\t\t\tviewSource: function(pretty) {\r\n
+\t\t\t\tvar sheetClone = jS.sheetDecorateRemove(true);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar s = "";\r\n
+\t\t\t\tif (pretty) {\r\n
+\t\t\t\t\tjQuery(sheetClone).each(function() {\r\n
+\t\t\t\t\t\ts += jS.HTMLtoPrettySource(this);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\ts += jQuery(\'\074div /\076\').html(sheetClone).html();\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.print(s);\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn false;\r\n
+\t\t\t},\r\n
+\t\t\tsaveSheet: function() {\r\n
+\t\t\t\tvar v = jS.sheetDecorateRemove(true);\r\n
+\t\t\t\tvar d = jQuery(\'\074div /\076\').html(v).html();\r\n
+\r\n
+\t\t\t\tjQuery.ajax({\r\n
+\t\t\t\t\turl: s.urlSave,\r\n
+\t\t\t\t\ttype: \'POST\',\r\n
+\t\t\t\t\tdata: \'s=\' + d,\r\n
+\t\t\t\t\tdataType: \'html\',\r\n
+\t\t\t\t\tsuccess: function(data) {\r\n
+\t\t\t\t\t\tjS.setDirty(false);\r\n
+\t\t\t\t\t\talert(\'Success! - \' + data);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t});\r\n
+\t\t\t},\r\n
+\t\t\tHTMLtoCompactSource: function(node) {\r\n
+\t\t\t\tvar result = "";\r\n
+\t\t\t\tif (node.nodeType == 1) {\r\n
+\t\t\t\t\t// ELEMENT_NODE\r\n
+\t\t\t\t\tresult += "\074" + node.tagName;\r\n
+\t\t\t\t\thasClass = false;\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar n = node.attributes.length;\r\n
+\t\t\t\t\tfor (var i = 0, hasClass = false; i \074 n; i++) {\r\n
+\t\t\t\t\t\tvar key = node.attributes[i].name;\r\n
+\t\t\t\t\t\tvar val = node.getAttribute(key);\r\n
+\t\t\t\t\t\tif (val) {\r\n
+\t\t\t\t\t\t\tif (key == "contentEditable" \046\046 val == "inherit") {\r\n
+\t\t\t\t\t\t\t\tcontinue;\r\n
+\t\t\t\t\t\t\t\t// IE hack.\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tif (key == "class") {\r\n
+\t\t\t\t\t\t\t\thasClass = true;\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tif (typeof(val) == "string") {\r\n
+\t\t\t\t\t\t\t\tresult += " " + key + \'="\' + val.replace(/"/g, "\'") + \'"\';\r\n
+\t\t\t\t\t\t\t} else if (key == "style" \046\046 val.cssText) {\r\n
+\t\t\t\t\t\t\t\tresult += \' style="\' + val.cssText + \'"\';\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\tif (node.tagName == "COL") {\r\n
+\t\t\t\t\t\t// IE hack, which doesn\'t like \074COL..\076\074/COL\076.\r\n
+\t\t\t\t\t\tresult += \'/\076\';\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tresult += "\076";\r\n
+\t\t\t\t\t\tvar childResult = "";\r\n
+\t\t\t\t\t\tjQuery(node.childNodes).each(function() {\r\n
+\t\t\t\t\t\t\tchildResult += jS.HTMLtoCompactSource(this);\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tresult += childResult;\r\n
+\t\t\t\t\t\tresult += "\074/" + node.tagName + "\076";\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t} else if (node.nodeType == 3) {\r\n
+\t\t\t\t\t// TEXT_NODE\r\n
+\t\t\t\t\tresult += node.data.replace(/^\\s*(.*)\\s*$/g, "$1");\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn result;\r\n
+\t\t\t},\r\n
+\t\t\tHTMLtoPrettySource: function(node, prefix) {\r\n
+\t\t\t\tif (!prefix) {\r\n
+\t\t\t\t\tprefix = "";\r\n
+\t\t\t\t}\r\n
+\t\t\t\tvar result = "";\r\n
+\t\t\t\tif (node.nodeType == 1) {\r\n
+\t\t\t\t\t// ELEMENT_NODE\r\n
+\t\t\t\t\tresult += "\\n" + prefix + "\074" + node.tagName;\r\n
+\t\t\t\t\tvar n = node.attributes.length;\r\n
+\t\t\t\t\tfor (var i = 0; i \074 n; i++) {\r\n
+\t\t\t\t\t\tvar key = node.attributes[i].name;\r\n
+\t\t\t\t\t\tvar val = node.getAttribute(key);\r\n
+\t\t\t\t\t\tif (val) {\r\n
+\t\t\t\t\t\t\tif (key == "contentEditable" \046\046 val == "inherit") {\r\n
+\t\t\t\t\t\t\t\tcontinue; // IE hack.\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tif (typeof(val) == "string") {\r\n
+\t\t\t\t\t\t\t\tresult += " " + key + \'="\' + val.replace(/"/g, "\'") + \'"\';\r\n
+\t\t\t\t\t\t\t} else if (key == "style" \046\046 val.cssText) {\r\n
+\t\t\t\t\t\t\t\tresult += \' style="\' + val.cssText + \'"\';\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (node.childNodes.length \074= 0) {\r\n
+\t\t\t\t\t\tresult += "/\076";\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tresult += "\076";\r\n
+\t\t\t\t\t\tvar childResult = "";\r\n
+\t\t\t\t\t\tvar n = node.childNodes.length;\r\n
+\t\t\t\t\t\tfor (var i = 0; i \074 n; i++) {\r\n
+\t\t\t\t\t\t\tchildResult += jS.HTMLtoPrettySource(node.childNodes[i], prefix + "  ");\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tresult += childResult;\r\n
+\t\t\t\t\t\tif (childResult.indexOf(\'\\n\') \076= 0) {\r\n
+\t\t\t\t\t\t\tresult += "\\n" + prefix;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tresult += "\074/" + node.tagName + "\076";\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t} else if (node.nodeType == 3) {\r\n
+\t\t\t\t\t// TEXT_NODE\r\n
+\t\t\t\t\tresult += node.data.replace(/^\\s*(.*)\\s*$/g, "$1");\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn result;\r\n
+\t\t\t},\r\n
+\t\t\tfollowMe: function(td) {\r\n
+\t\t\t\tvar pane = jS.obj.pane();\r\n
+\t\t\t\tvar panePos = pane.offset();\r\n
+\t\t\t\tvar paneWidth = pane.width();\r\n
+\t\t\t\tvar paneHeight = pane.height();\r\n
+\r\n
+\t\t\t\tvar tdPos = td.offset();\r\n
+\t\t\t\tvar tdWidth = td.width();\r\n
+\t\t\t\tvar tdHeight = td.height();\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar margin = 20;\r\n
+\t\t\t\t\r\n
+\t\t\t\t//jS.log(\'td: [\' + tdPos.left + \', \' + tdPos.top + \']\');\r\n
+\t\t\t\t//jS.log(\'pane: [\' + panePos.left + \', \' + panePos.top + \']\');\r\n
+\t\t\t\t\r\n
+\t\t\t\tif ((tdPos.left + tdWidth + margin) \076 (panePos.left + paneWidth)) { //right\r\n
+\t\t\t\t\tpane.stop().scrollTo(td, {\r\n
+\t\t\t\t\t\taxis: \'x\',\r\n
+\t\t\t\t\t\tduration: 50,\r\n
+\t\t\t\t\t\toffset: - ((paneWidth - tdWidth) - margin)\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t} else if (tdPos.left \074 panePos.left) { //left\r\n
+\t\t\t\t\tpane.stop().scrollTo(td, {\r\n
+\t\t\t\t\t\taxis: \'x\',\r\n
+\t\t\t\t\t\tduration: 50\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tif ((tdPos.top + tdHeight + margin) \076 (panePos.top + paneHeight)) { //bottom\r\n
+\t\t\t\t\tpane.stop().scrollTo(td, {\r\n
+\t\t\t\t\t\taxis: \'y\',\r\n
+\t\t\t\t\t\tduration: 50,\r\n
+\t\t\t\t\t\toffset: - ((paneHeight - tdHeight) - margin)\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t} else if (tdPos.top \074 panePos.top) { //top\r\n
+\t\t\t\t\tpane.stop().scrollTo(td, {\r\n
+\t\t\t\t\t\taxis: \'y\',\r\n
+\t\t\t\t\t\tduration: 50\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcount: {\r\n
+\t\t\t\trows: function() {\r\n
+\t\t\t\t\treturn jS.getBarLeftIndex(jS.obj.barLeft().find(\'div:last\').text());\r\n
+\t\t\t\t},\r\n
+\t\t\t\tcolumns: function() {\r\n
+\t\t\t\t\treturn jS.getBarTopLocatoin(jS.obj.barTop().find(\'div:last\').text());\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tisRowHeightSync: [],\r\n
+\t\t\tsetActiveSheet: function(o, i) {\r\n
+\t\t\t\t\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (o) {\r\n
+\t\t\t\t\to.show().siblings().hide();\r\n
+\t\t\t\t\tjS.i = i;\t\t\t\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tjS.obj.tableControl().siblings().not(\'div\').hide();\r\n
+\t\t\t\t\ti = 0;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.themeRoller.tab.setActive();\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (!jS.isRowHeightSync[i]) { //this makes it only run once, no need to have it run every time a user changes a sheet\r\n
+\t\t\t\t\tjS.isRowHeightSync[i] = true;\r\n
+\t\t\t\t\tjS.obj.sheet().find(\'tr\').each(function(j) {\r\n
+\t\t\t\t\t\tjS.attrH.setHeight(j, \'cell\');\r\n
+\t\t\t\t\t\t/*\r\n
+\t\t\t\t\t\tfixes a wired bug with height in chrome and ie\r\n
+\t\t\t\t\t\tIt seems that at some point during the sheet\'s initializtion the height for each\r\n
+\t\t\t\t\t\trow isn\'t yet clearly defined, this ensures that the heights for barLeft match \r\n
+\t\t\t\t\t\tthat of each row in the currently active sheet when a user uses a non strict doc type.\r\n
+\t\t\t\t\t\t*/\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.sheetSyncSize();\r\n
+\t\t\t\tjS.replaceWithSafeImg(jS.obj.sheet().find(\'img\'));\r\n
+\t\t\t},\r\n
+\t\t\topenSheetURL: function ( url ) {\r\n
+\t\t\t\ts.urlGet = url;\r\n
+\t\t\t\treturn jS.openSheet();\r\n
+\t\t\t},\r\n
+\t\t\topenSheet: function(o) {\r\n
+\t\t\t\tif (!jS.isDirty ? true : confirm("Are you sure you want to open a different sheet?  All unsaved changes will be lost.")) {\r\n
+\t\t\t\t\tjS.controlFactory.header();\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar fnAfter = function(i, l) {\r\n
+\t\t\t\t\t\tif (i == (l - 1)) {\r\n
+\t\t\t\t\t\t\tjS.i = 0;\r\n
+\t\t\t\t\t\t\tjS.setActiveSheet();\r\n
+\t\t\t\t\t\t\tjS.themeRoller.resize();\r\n
+\t\t\t\t\t\t\tfor (var i = 0; i \074= jS.sheetCount; i++) {\r\n
+\t\t\t\t\t\t\t\tjS.calc(i);\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\ts.fnAfter();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (!o) {\r\n
+\t\t\t\t\t\tjQuery(\'\074div /\076\').load(s.urlGet, function() {\r\n
+\t\t\t\t\t\t\tvar sheets = jQuery(this).find(\'table\');\r\n
+\t\t\t\t\t\t\tsheets.each(function(i) {\r\n
+\t\t\t\t\t\t\t\tjS.controlFactory.sheetUI(jQuery(this), i, function() { \r\n
+\t\t\t\t\t\t\t\t\tfnAfter(i, sheets.length);\r\n
+\t\t\t\t\t\t\t\t}, true);\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tvar sheets = jQuery(\'\074div /\076\').html(o).find(\'table\');\r\n
+\t\t\t\t\t\tsheets.show().each(function(i) {\r\n
+\t\t\t\t\t\t\tjS.controlFactory.sheetUI(jQuery(this), i,  function() { \r\n
+\t\t\t\t\t\t\t\tfnAfter(i, sheets.length);\r\n
+\t\t\t\t\t\t\t}, false);\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.setDirty(false);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn true;\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\treturn false;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tnewSheetDialog: "What size would you like to make your spreadsheet? Example: \'5x10\' creates a sheet that is 5 columns by 10 rows.",\r\n
+\t\t\tnewSheet: function() {\r\n
+\t\t\t\tvar size = prompt(jS.newSheetDialog);\r\n
+\t\t\t\tif (size) {\r\n
+\t\t\t\t\tjS.openSheet(jS.controlFactory.sheet(size));\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\timportRow: function(rowArray) {\r\n
+\t\t\t\tjS.controlFactory.addRow(null, null, \':last\');\r\n
+\r\n
+\t\t\t\tvar error = "";\r\n
+\t\t\t\tjS.obj.sheet().find(\'tr:last td\').each(function(i) {\r\n
+\t\t\t\t\tjQuery(this).removeAttr(\'formula\');\r\n
+\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\t//To test this, we need to first make sure it\'s a string, so converting is done by adding an empty character.\r\n
+\t\t\t\t\t\tif ((rowArray[i] + \'\').charAt(0) == "=") {\r\n
+\t\t\t\t\t\t\tjQuery(this).attr(\'formula\', rowArray[i]);\t\t\t\t\t\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\tjQuery(this).html(rowArray[i]);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} catch(e) {\r\n
+\t\t\t\t\t\t//We want to make sure that is something bad happens, we let the user know\r\n
+\t\t\t\t\t\terror += e + \';\\n\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t});\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (error) {//Show them the errors\r\n
+\t\t\t\t\talert(error);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t//Let\'s recalculate the sheet just in case\r\n
+\t\t\t\tjS.setTdIds();\r\n
+\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t},\r\n
+\t\t\timportColumn: function(columnArray) {\r\n
+\t\t\t\tjS.controlFactory.addColumn();\r\n
+\r\n
+\t\t\t\tvar error = "";\r\n
+\t\t\t\tjS.obj.sheet().find(\'tr\').each(function(i) {\r\n
+\t\t\t\t\tvar o = jQuery(this).find(\'td:last\');\r\n
+\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\t//To test this, we need to first make sure it\'s a string, so converting is done by adding an empty character.\r\n
+\t\t\t\t\t\tif ((columnArray[i] + \'\').charAt(0) == "=") {\r\n
+\t\t\t\t\t\t\to.attr(\'formula\', columnArray[i]);\t\t\t\t\t\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\to.html(columnArray[i]);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t} catch(e) {\r\n
+\t\t\t\t\t\t//We want to make sure that is something bad happens, we let the user know\r\n
+\t\t\t\t\t\terror += e + \';\\n\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t});\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (error) {//Show them the errors\r\n
+\t\t\t\t\talert(error);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t//Let\'s recalculate the sheet just in case\r\n
+\t\t\t\tjS.setTdIds();\r\n
+\t\t\t\tjS.calc(jS.i);\r\n
+\t\t\t},\r\n
+\t\t\texportSheet: {\r\n
+\t\t\t\txml: function (skipCData) {\r\n
+\t\t\t\t\tvar sheetClone = jS.sheetDecorateRemove(true);\t\t\t\r\n
+\t\t\t\t\tvar document = "";\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar cdata = [\'\074![CDATA[\',\']]\076\'];\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (skipCData) {\r\n
+\t\t\t\t\t\tcdata = [\'\',\'\'];\r\n
+\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\tjQuery(sheetClone).each(function() {\r\n
+\t\t\t\t\t\tvar row = \'\';\r\n
+\t\t\t\t\t\tvar table = jQuery(this);\r\n
+\t\t\t\t\t\tvar colCount = 0;\r\n
+\t\t\t\t\t\tvar col_widths = \'\';\r\n
+\r\n
+\t\t\t\t\t\ttable.find(\'colgroup\').children().each(function (i) {\r\n
+\t\t\t\t\t\t\tcol_widths += \'\074c\' + i + \'\076\' + (jQuery(this).attr(\'width\') + \'\').replace(\'px\', \'\') + \'\074/c\' + i + \'\076\';\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tvar trs = table.find(\'tr\');\r\n
+\t\t\t\t\t\tvar rowCount = trs.length;\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\ttrs.each(function(i){\r\n
+\t\t\t\t\t\t\tvar col = \'\';\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tvar tr = jQuery(this);\r\n
+\t\t\t\t\t\t\tvar h = tr.attr(\'height\');\r\n
+\t\t\t\t\t\t\tvar height = (h ? h : s.colMargin);\r\n
+\t\t\t\t\t\t\tvar tds = tr.find(\'td\');\r\n
+\t\t\t\t\t\t\tcolCount = tds.length;\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\ttds.each(function(j){\r\n
+\t\t\t\t\t\t\t\tvar td = jQuery(this);\r\n
+\t\t\t\t\t\t\t\tvar colSpan = td.attr(\'colspan\');\r\n
+\t\t\t\t\t\t\t\tcolSpan = (colSpan \076 1 ? colSpan : \'\');\r\n
+\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\tvar formula = td.attr(\'formula\');\r\n
+\t\t\t\t\t\t\t\tvar text = (formula ? formula : td.text());\r\n
+\t\t\t\t\t\t\t\tvar cl = td.attr(\'class\');\r\n
+\t\t\t\t\t\t\t\tvar style = td.attr(\'style\');\r\n
+\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t//Add to current row\r\n
+\t\t\t\t\t\t\t\tcol += \'\074c\' + j +\r\n
+\t\t\t\t\t\t\t\t\t(style ? \' style=\\"\' + style + \'\\"\' : \'\') + \r\n
+\t\t\t\t\t\t\t\t\t(cl ? \' class=\\"\' + cl + \'\\"\' : \'\') + \r\n
+\t\t\t\t\t\t\t\t\t(colSpan ? \' colspan=\\"\' + colSpan + \'\\"\' : \'\') +\r\n
+\t\t\t\t\t\t\t\t\'\076\' + text + \'\074/c\' + j + \'\076\';\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\trow += \'\074r\' + i + \' h=\\"\' + height + \'\\"\076\' + col + \'\074/r\' + i + \'\076\';\r\n
+\t\t\t\t\t\t});\r\n
+\r\n
+\t\t\t\t\t\tdocument += \'\074document title="\' + table.attr(\'title\') + \'"\076\' +\r\n
+\t\t\t\t\t\t\t\t\t\'\074metadata\076\' +\r\n
+\t\t\t\t\t\t\t\t\t\t\'\074columns\076\' + colCount + \'\074/columns\076\' +  //length is 1 based, index is 0 based\r\n
+\t\t\t\t\t\t\t\t\t\t\'\074rows\076\' + rowCount + \'\074/rows\076\' +  //length is 1 based, index is 0 based\r\n
+\t\t\t\t\t\t\t\t\t\t\'\074col_widths\076\' + col_widths + \'\074/col_widths\076\' +\r\n
+\t\t\t\t\t\t\t\t\t\'\074/metadata\076\' +\r\n
+\t\t\t\t\t\t\t\t\t\'\074data\076\' + row + \'\074/data\076\' +\r\n
+\t\t\t\t\t\t\t\t\'\074/document\076\';\r\n
+\t\t\t\t\t});\r\n
+\r\n
+\t\t\t\t\treturn \'\074documents\076\' + document + \'\074/documents\076\';\r\n
+\t\t\t\t},\r\n
+\t\t\t\tjson: function() {\r\n
+\t\t\t\t\tvar sheetClone = jS.sheetDecorateRemove(true);\r\n
+\t\t\t\t\tvar documents = []; //documents\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjQuery(sheetClone).each(function() {\r\n
+\t\t\t\t\t\tvar document = {}; //document\r\n
+\t\t\t\t\t\tdocument[\'metadata\'] = {};\r\n
+\t\t\t\t\t\tdocument[\'data\'] = {};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tvar table = jQuery(this);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tvar trs = table.find(\'tr\');\r\n
+\t\t\t\t\t\tvar rowCount = trs.length;\r\n
+\t\t\t\t\t\tvar colCount = 0;\r\n
+\t\t\t\t\t\tvar col_widths = \'\';\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\ttrs.each(function(i) {\r\n
+\t\t\t\t\t\t\tvar tr = jQuery(this);\r\n
+\t\t\t\t\t\t\tvar tds = tr.find(\'td\');\r\n
+\t\t\t\t\t\t\tcolCount = tds.length;\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tdocument[\'data\'][\'r\' + i] = {};\r\n
+\t\t\t\t\t\t\tdocument[\'data\'][\'r\' + i][\'h\'] = tr.attr(\'height\');\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\ttds.each(function(j) {\r\n
+\t\t\t\t\t\t\t\tvar td = jQuery(this);\r\n
+\t\t\t\t\t\t\t\tvar colSpan = td.attr(\'colspan\');\r\n
+\t\t\t\t\t\t\t\tcolSpan = (colSpan \076 1 ? colSpan : null);\r\n
+\t\t\t\t\t\t\t\tvar formula = td.attr(\'formula\');\r\n
+\r\n
+\t\t\t\t\t\t\t\tdocument[\'data\'][\'r\' + i][\'c\' + j] = {\r\n
+\t\t\t\t\t\t\t\t\t\'value\': (formula ? formula : td.text()),\r\n
+\t\t\t\t\t\t\t\t\t\'style\': td.attr(\'style\'),\r\n
+\t\t\t\t\t\t\t\t\t\'colspan\': colSpan,\r\n
+\t\t\t\t\t\t\t\t\t\'cl\': td.attr(\'class\')\r\n
+\t\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\tdocument[\'metadata\'] = {\r\n
+\t\t\t\t\t\t\t\'columns\': colCount, //length is 1 based, index is 0 based\r\n
+\t\t\t\t\t\t\t\'rows\': rowCount, //length is 1 based, index is 0 based\r\n
+\t\t\t\t\t\t\t\'title\': table.attr(\'title\'),\r\n
+\t\t\t\t\t\t\t\'col_widths\': {}\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\ttable.find(\'colgroup\').children().each(function(i) {\r\n
+\t\t\t\t\t\t\tdocument[\'metadata\'][\'col_widths\'][\'c\' + i] = (jQuery(this).attr(\'width\') + \'\').replace(\'px\', \'\');\r\n
+\t\t\t\t\t\t});\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tdocuments.push(document); //append to documents\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\treturn documents;\r\n
+\t\t\t\t},\r\n
+\t\t\t\thtml: function() {\r\n
+\t\t\t\t\treturn jS.sheetDecorateRemove(true);\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tsheetSyncSizeToDivs: function() {\r\n
+\t\t\t\tvar newSheetWidth = 0;\r\n
+\t\t\t\tjS.obj.barTop().find(\'div\').each(function() {\r\n
+\t\t\t\t\tnewSheetWidth += parseInt(jQuery(this).outerWidth());\r\n
+\t\t\t\t});\r\n
+\t\t\t\tjS.obj.sheet().width(newSheetWidth);\r\n
+\t\t\t},\r\n
+\t\t\tsheetSyncSizeToCols: function(o) {\r\n
+\t\t\t\tvar newSheetWidth = 0;\r\n
+\t\t\t\to.find(\'colgroup col\').each(function() {\r\n
+\t\t\t\t\tnewSheetWidth += jQuery(this).width();\r\n
+\t\t\t\t});\r\n
+\t\t\t\to.width(newSheetWidth);\r\n
+\t\t\t},\r\n
+\t\t\tsheetSyncSize: function() {\r\n
+\t\t\t\tvar h = s.height;\r\n
+\t\t\t\tif (!h) {\r\n
+\t\t\t\t\th = 400; //Height really needs to be set by the parent\r\n
+\t\t\t\t} else if (h \074 200) {\r\n
+\t\t\t\t\th = 200;\r\n
+\t\t\t\t}\r\n
+\t\t\t\ts.parent\r\n
+\t\t\t\t\t.height(h)\r\n
+\t\t\t\t\t.width(s.width);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\tvar w = s.width - jS.attrH.width(jS.obj.barLeftParent()) - (s.boxModelCorrection);\r\n
+\t\t\t\t\r\n
+\t\t\t\th = h - jS.attrH.height(jS.obj.controls()) - jS.attrH.height(jS.obj.barTopParent()) - (s.boxModelCorrection * 2);\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.obj.pane()\r\n
+\t\t\t\t\t.height(h)\r\n
+\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t.parent()\r\n
+\t\t\t\t\t\t.width(w);\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.obj.ui()\r\n
+\t\t\t\t\t.width(w + jS.attrH.width(jS.obj.barLeftParent()));\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\tjS.obj.barLeftParent()\r\n
+\t\t\t\t\t.height(h);\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.obj.barTopParent()\r\n
+\t\t\t\t\t.width(w)\r\n
+\t\t\t\t\t.parent()\r\n
+\t\t\t\t\t\t.width(w);\r\n
+\t\t\t},\r\n
+\t\t\tcellFind: function(v) {\r\n
+\t\t\t\tif(!v) {\r\n
+\t\t\t\t\tv = prompt("What are you looking for in this spreadsheet?");\r\n
+\t\t\t\t}\r\n
+\t\t\t\tif (v) {//We just do a simple uppercase/lowercase search.\r\n
+\t\t\t\t\tvar o = jS.obj.sheet().find(\'td:contains("\' + v + \'")\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (o.length \074 1) {\r\n
+\t\t\t\t\t\to = jS.obj.sheet().find(\'td:contains("\' + v.toLowerCase() + \'")\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (o.length \074 1) {\r\n
+\t\t\t\t\t\to = jS.obj.sheet().find(\'td:contains("\' + v.toUpperCase() + \'")\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\to = o.eq(0);\r\n
+\t\t\t\t\tif (o.length \076 0) {\r\n
+\t\t\t\t\t\tjS.cellEdit(o);\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\talert(\'No results found.\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcellSetActiveBar: function(type, start, end) {\r\n
+\t\t\t\tvar loc = jS.sheetSize();\r\n
+\t\t\t\tvar first = (start \074 end ? start : end);\r\n
+\t\t\t\tvar last = (start \074 end ? end : start);\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar setActive = function(td, rowStart, colStart, rowFollow, colFollow) {\r\n
+\t\t\t\t\tswitch (s.cellSelectModel) {\r\n
+\t\t\t\t\t\tcase \'oo\': //follow cursor behavior\r\n
+\t\t\t\t\t\t\tjS.cellEdit(jQuery(jS.getTd(jS.i, rowFollow, colFollow)));\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\tdefault: //stay at initial cell\r\n
+\t\t\t\t\t\t\tjS.cellEdit(jQuery(jS.getTd(jS.i, rowStart, colStart)));\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tsetActive = function(td) { //save resources\r\n
+\t\t\t\t\t\treturn td;\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn td;\r\n
+\t\t\t\t};\r\n
+\r\n
+\t\t\t\tvar cycleFn;\r\n
+\r\n
+\t\t\t\tvar td = [];\r\n
+\t\t\t\t\r\n
+\t\t\t\tswitch (type) {\r\n
+\t\t\t\t\tcase \'col\':\r\n
+\t\t\t\t\t\tcycleFn = function() {\r\n
+\t\t\t\t\t\t\tfor (var i = 0; i \074= loc[0]; i++) { //rows\r\n
+\t\t\t\t\t\t\t\tfor (var j = first; j \074= last; j++) { //cols\r\n
+\t\t\t\t\t\t\t\t\ttd.push(jS.getTd(jS.i, i, j));\r\n
+\t\t\t\t\t\t\t\t\tjS.themeRoller.cell.setHighlighted(setActive(td[td.length - 1], 0, start, 0, end));\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\tcase \'row\':\r\n
+\t\t\t\t\t\tcycleFn = function() {\r\n
+\t\t\t\t\t\t\tfor (var i = first; i \074= last; i++) { //rows\r\n
+\t\t\t\t\t\t\t\tfor (var j = 0; j \074= loc[1]; j++) { //cols\r\n
+\t\t\t\t\t\t\t\t\ttd.push(jS.getTd(jS.i, i, j));\r\n
+\t\t\t\t\t\t\t\t\tjS.themeRoller.cell.setHighlighted(setActive(td[td.length - 1], start, 0, end, 0));\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\tcase \'all\':\r\n
+\t\t\t\t\t\tcycleFn = function() {\r\n
+\t\t\t\t\t\t\tsetActive = function(td) {\r\n
+\t\t\t\t\t\t\t\tjS.cellEdit(jQuery(td));\r\n
+\t\t\t\t\t\t\t\tsetActive = function() {};\r\n
+\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\tfor (var i = 0; i \074= loc[0]; i++) {\r\n
+\t\t\t\t\t\t\t\tfor (var j = 0; j \074= loc[1]; j++) {\r\n
+\t\t\t\t\t\t\t\t\ttd.push(jS.getTd(jS.i, i, j));\r\n
+\t\t\t\t\t\t\t\t\tsetActive(td[td.length - 1]);\r\n
+\t\t\t\t\t\t\t\t\tjS.themeRoller.cell.setHighlighted(td[td.length - 1]);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tfirst = [0, 0];\r\n
+\t\t\t\t\t\t\tlast = loc;\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tcycleFn();\r\n
+\t\t\t\t\r\n
+\t\t\t\tjS.highlightedLast.td = td;\r\n
+\t\t\t\tjS.highlightedLast.rowStart = first[0];\r\n
+\t\t\t\tjS.highlightedLast.colStart = first[1];\r\n
+\t\t\t\tjS.highlightedLast.rowEnd = last[0];\r\n
+\t\t\t\tjS.highlightedLast.colEnd = last[1];\r\n
+\t\t\t},\r\n
+\t\t\tsheetClearActive: function() {\r\n
+\t\t\t\tjS.obj.formula().val(\'\');\r\n
+\t\t\t\tjS.obj.barSelected().removeClass(jS.cl.barSelected);\r\n
+\t\t\t},\r\n
+\t\t\tgetTdRange: function(e, v, newFn, notSetFormula) {\r\n
+\t\t\t\tjS.cellLast.isEdit = true;\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar range = function(loc) {\r\n
+\t\t\t\t\tif (loc.first[1] \076 loc.last[1] ||\r\n
+\t\t\t\t\t\tloc.first[0] \076 loc.last[0]\r\n
+\t\t\t\t\t) {\r\n
+\t\t\t\t\t\treturn {\r\n
+\t\t\t\t\t\t\tfirst: cE.columnLabelString(loc.last[1] + 1) + (loc.last[0] + 1),\r\n
+\t\t\t\t\t\t\tlast: cE.columnLabelString(loc.first[1] + 1) + (loc.first[0] + 1)\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn {\r\n
+\t\t\t\t\t\t\tfirst: cE.columnLabelString(loc.first[1] + 1) + (loc.first[0] + 1),\r\n
+\t\t\t\t\t\t\tlast: cE.columnLabelString(loc.last[1] + 1) + (loc.last[0] + 1)\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t};\r\n
+\t\t\t\tvar label = function(loc) {\r\n
+\t\t\t\t\tvar rangeLabel = range(loc);\r\n
+\t\t\t\t\tvar v2 = v + \'\';\r\n
+\t\t\t\t\tv2 = (v2.match(/=/) ? v2 : \'=\' + v2); //make sure we can use this value as a formula\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (newFn || v2.charAt(v2.length - 1) != \'(\') { //if a function is being sent, make sure it can be called by wrapping it in ()\r\n
+\t\t\t\t\t\tv2 = v2 + (newFn ? newFn : \'\') + \'(\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar formula;\r\n
+\t\t\t\t\tvar lastChar = \'\';\r\n
+\t\t\t\t\tif (rangeLabel.first != rangeLabel.last) {\r\n
+\t\t\t\t\t\tformula = rangeLabel.first + \':\' + rangeLabel.last;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tformula = rangeLabel.first;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (v2.charAt(v2.length - 1) == \'(\') {\r\n
+\t\t\t\t\t\tlastChar = \')\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\treturn v2 + formula + lastChar;\r\n
+\t\t\t\t};\r\n
+\t\t\t\tvar newVal = \'\';\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (e) { //if from an event, we use mousemove method\r\n
+\t\t\t\t\tvar loc = {\r\n
+\t\t\t\t\t\tfirst: jS.getTdLocation([e.target])\r\n
+\t\t\t\t\t};\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar sheet = jS.obj.sheet().mousemove(function(e) {\r\n
+\t\t\t\t\t\tloc.last = jS.getTdLocation([e.target]);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tnewVal = label(loc);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (!notSetFormula) {\r\n
+\t\t\t\t\t\t\tjS.obj.formula().val(newVal);\r\n
+\t\t\t\t\t\t\tjS.obj.inPlaceEdit().val(newVal);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjQuery(document).one(\'mouseup\', function() {\r\n
+\t\t\t\t\t\tsheet.unbind(\'mousemove\');\r\n
+\t\t\t\t\t\treturn newVal;\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tvar cells = jS.obj.cellHighlighted().not(jS.obj.cellActive());\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (cells.length) {\r\n
+\t\t\t\t\t\tvar loc = { //tr/td column and row index\r\n
+\t\t\t\t\t\t\tfirst: jS.getTdLocation(cells.first()),\r\n
+\t\t\t\t\t\t\tlast: jS.getTdLocation(cells.last())\r\n
+\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tnewVal = label(loc);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (!notSetFormula) {\r\n
+\t\t\t\t\t\t\tjS.obj.formula().val(newVal);\r\n
+\t\t\t\t\t\t\tjS.obj.inPlaceEdit().val(newVal);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\treturn newVal;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn \'\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tgetTdId: function(tableI, row, col) {\r\n
+\t\t\t\treturn I + \'_table\' + tableI + \'_cell_c\' + col + \'_r\' + row;\r\n
+\t\t\t},\r\n
+\t\t\tgetTd: function(tableI, row, col) {\r\n
+\t\t\t\treturn document.getElementById(jS.getTdId(tableI, row, col));\r\n
+\t\t\t},\r\n
+\t\t\tgetTdLocation: function(td) {\r\n
+\t\t\t\tvar col = parseInt(td[0].cellIndex);\r\n
+\t\t\t\tvar row = parseInt(td[0].parentNode.rowIndex);\r\n
+\t\t\t\treturn [row, col];\r\n
+\t\t\t\t// The row and col are 1-based.\r\n
+\t\t\t},\r\n
+\t\t\tgetBarLeftIndex: function(o) {\r\n
+\t\t\t\tvar i = jQuery.trim(jQuery(o).text());\r\n
+\t\t\t\treturn parseInt(i) - 1;\r\n
+\t\t\t},\r\n
+\t\t\tgetBarTopIndex: function(o) {\r\n
+\t\t\t\tvar i = cE.columnLabelIndex(jQuery.trim(jQuery(o).text()));\r\n
+\t\t\t\treturn parseInt(i) - 1;\r\n
+\t\t\t},\r\n
+\t\t\ttableCellProvider: function(tableI) {\r\n
+\t\t\t\tthis.tableBodyId = jS.id.sheet + tableI;\r\n
+\t\t\t\tthis.tableI = tableI;\r\n
+\t\t\t\tthis.cells = {};\r\n
+\t\t\t},\r\n
+\t\t\ttableCell: function(tableI, row, col) {\r\n
+\t\t\t\tthis.tableBodyId = jS.id.sheet + tableI;\r\n
+\t\t\t\tthis.tableI = tableI;\r\n
+\t\t\t\tthis.row = row;\r\n
+\t\t\t\tthis.col = col;\r\n
+\t\t\t\tthis.value = jS.EMPTY_VALUE;\r\n
+\t\t\t\t\r\n
+\t\t\t\t//this.prototype = new cE.cell();\r\n
+\t\t\t},\r\n
+\t\t\tEMPTY_VALUE: {},\r\n
+\t\t\ttime: {\r\n
+\t\t\t\tnow: new Date(),\r\n
+\t\t\t\tlast: new Date(),\r\n
+\t\t\t\tdiff: function() {\r\n
+\t\t\t\t\treturn Math.abs(Math.ceil(this.last.getTime() - this.now.getTime()) / 1000).toFixed(5);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tset: function() {\r\n
+\t\t\t\t\tthis.last = this.now;\r\n
+\t\t\t\t\tthis.now = new Date();\r\n
+\t\t\t\t},\r\n
+\t\t\t\tget: function() {\r\n
+\t\t\t\t\treturn this.now.getHours() + \':\' + this.now.getMinutes() + \':\' + this.now.getSeconds();\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tlog: function(msg) {  //The log prints: {Current Time}, {Seconds from last log};{msg}\r\n
+\t\t\t\tjS.time.set();\r\n
+\t\t\t\tjS.obj.log().prepend(jS.time.get() + \', \' + jS.time.diff() + \'; \' + msg + \'\074br /\076\\n\');\r\n
+\t\t\t},\r\n
+\t\t\treplaceWithSafeImg: function(o) {  //ensures all pictures will load and keep their respective bar the same size.\r\n
+\t\t\t\to.each(function() {\t\t\t\r\n
+\t\t\t\t\tvar src = jQuery(this).attr(\'src\');\r\n
+\t\t\t\t\tjQuery(this).replaceWith(jS.controlFactory.safeImg(src, jS.getTdLocation(jQuery(this).parent())[0]));\r\n
+\t\t\t\t});\r\n
+\t\t\t},\r\n
+\t\t\t\r\n
+\t\t\tisDirty:  false,\r\n
+\t\t\tsetDirty: function(dirty) { jS.isDirty = dirty; },\r\n
+\t\t\tappendToFormula: function(v, o) {\r\n
+\t\t\t\tvar formula = jS.obj.formula();\r\n
+\t\t\t\t\r\n
+\t\t\t\tvar fV = formula.val();\r\n
+\t\t\t\t\r\n
+\t\t\t\tif (fV.charAt(0) != \'=\') {\r\n
+\t\t\t\t\tfV = \'=\' + fV;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\tformula.val(fV + v);\r\n
+\t\t\t},\r\n
+\t\t\tcellUndoable: {\r\n
+\t\t\t\tundoOrRedo: function(undo) {\r\n
+\t\t\t\t\tif (!undo \046\046 this.i \076 0) {\r\n
+\t\t\t\t\t\tthis.i--;\r\n
+\t\t\t\t\t} else if (undo \046\046 this.i \074 this.stack.length) {\r\n
+\t\t\t\t\t\tthis.i++;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tthis.get().clone().each(function() {\r\n
+\t\t\t\t\t\tvar o = jQuery(this);\r\n
+\t\t\t\t\t\tvar id = o.attr(\'undoable\');\r\n
+\t\t\t\t\t\tif (id) {\r\n
+\t\t\t\t\t\t\tjQuery(\'#\' + id).replaceWith(\r\n
+\t\t\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t\t\t.removeAttr(\'undoable\')\r\n
+\t\t\t\t\t\t\t\t\t.attr(\'id\', id)\r\n
+\t\t\t\t\t\t\t);\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\tjS.log(\'Not available.\');\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tjS.themeRoller.cell.clearActive();\r\n
+\t\t\t\t\tjS.themeRoller.bar.clearActive();\r\n
+\t\t\t\t\tjS.themeRoller.cell.clearHighlighted();\r\n
+\t\t\t\t},\r\n
+\t\t\t\tget: function() { //gets the current cell\r\n
+\t\t\t\t\treturn jQuery(this.stack[this.i]);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tadd: function(tds) {\r\n
+\t\t\t\t\tvar oldTds = tds.clone().each(function() {\r\n
+\t\t\t\t\t\tvar o = jQuery(this);\r\n
+\t\t\t\t\t\tvar id = o.attr(\'id\');\r\n
+\t\t\t\t\t\to\r\n
+\t\t\t\t\t\t\t.removeAttr(\'id\') //id can only exist in one location, on the sheet, so here we use the id as the attr \'undoable\'\r\n
+\t\t\t\t\t\t\t.attr(\'undoable\', id)\r\n
+\t\t\t\t\t\t\t.removeClass(jS.cl.cellHighlighted + \' \' + jS.cl.uiCellHighlighted);\r\n
+\t\t\t\t\t});\r\n
+\t\t\t\t\tif (this.stack.length \076 0) {\r\n
+\t\t\t\t\t\tthis.stack.unshift(oldTds);\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tthis.stack = [oldTds];\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tthis.i = -1;\r\n
+\t\t\t\t\tif (this.stack.length \076 20) { //undoable count, we want to be careful of too much memory consumption\r\n
+\t\t\t\t\t\tthis.stack.pop(); //drop the last value\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\ti: 0,\r\n
+\t\t\t\tstack: []\r\n
+\t\t\t},\r\n
+\t\t\tsheetSize: function() {\r\n
+\t\t\t\treturn jS.getTdLocation(jS.obj.sheet().find(\'td:last\'));\r\n
+\t\t\t},\r\n
+\t\t\ttoggleState:  function(newS) {\r\n
+\t\t\t\tif (s.allowToggleState) {\r\n
+\t\t\t\t\ts.editable = !s.editable;\r\n
+\t\t\t\t\tjS.obj.tabContainer().remove();\r\n
+\t\t\t\t\tvar sheets = jS.obj.sheetAll().clone();\r\n
+\t\t\t\t\torigParent.children().remove();\r\n
+\t\t\t\t\tjS.openSheet(sheets);\r\n
+\t\t\t\t}\r\n
+\t\t\t}\r\n
+\t\t};\r\n
+\r\n
+\t\tjS.tableCellProvider.prototype = {\r\n
+\t\t\tgetCell: function(tableI, row, col) {\r\n
+\t\t\t\tif (typeof(col) == "string") {\r\n
+\t\t\t\t\tcol = cE.columnLabelIndex(col);\r\n
+\t\t\t\t}\r\n
+\t\t\t\tvar key = tableI + "," + row + "," + col;\r\n
+\t\t\t\tvar cell = this.cells[key];\r\n
+\t\t\t\tif (!cell) {\r\n
+\t\t\t\t\tvar td = jS.getTd(tableI, row - 1, col - 1);\r\n
+\t\t\t\t\tif (td) {\r\n
+\t\t\t\t\t\tcell = this.cells[key] = new jS.tableCell(tableI, row, col);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn cell;\r\n
+\t\t\t},\r\n
+\t\t\tgetNumberOfColumns: function(row) {\r\n
+\t\t\t\tvar tableBody = document.getElementById(this.tableBodyId);\r\n
+\t\t\t\tif (tableBody) {\r\n
+\t\t\t\t\tvar tr = tableBody.rows[row];\r\n
+\t\t\t\t\tif (tr) {\r\n
+\t\t\t\t\t\treturn tr.cells.length;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn 0;\r\n
+\t\t\t},\r\n
+\t\t\ttoString: function() {\r\n
+\t\t\t\tresult = "";\r\n
+\t\t\t\tjQuery(\'#\' + (this.tableBodyId) + \' tr\').each(function() {\r\n
+\t\t\t\t\tresult += this.innerHTML.replace(/\\n/g, "") + "\\n";\r\n
+\t\t\t\t});\r\n
+\t\t\t\treturn result;\r\n
+\t\t\t}\r\n
+\t\t};\r\n
+\r\n
+\t\tjS.tableCell.prototype = {\r\n
+\t\t\ttd: null,\r\n
+\t\t\tgetTd: function() {\r\n
+\t\t\t\tif (!this.td) { //this attempts to check if the td is cached, then cache it if not, then return it\r\n
+\t\t\t\t\tthis.td = document.getElementById(jS.getTdId(this.tableI, this.row - 1, this.col - 1));\t\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn this.td;\r\n
+\t\t\t},\r\n
+\t\t\tsetValue: function(v, e) {\r\n
+\t\t\t\tthis.error = e;\r\n
+\t\t\t\tthis.value = v;\r\n
+\t\t\t\tjQuery(this.getTd()).html(v ? v: \'\'); //I know this is slower than innerHTML = \'\', but sometimes stability just rules!\r\n
+\t\t\t},\r\n
+\t\t\tgetValue: function() {\r\n
+\t\t\t\tvar v = this.value;\r\n
+\t\t\t\tif (v === jS.EMPTY_VALUE \046\046 !this.getFormula()) {\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tv = jQuery(this.getTd()).text(); //again, stability rules!\r\n
+\r\n
+\t\t\t\t\tv = this.value = (v.length \076 0 ? cE.parseFormulaStatic(v) : null);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn (v === jS.EMPTY_VALUE ? null: v);\r\n
+\t\t\t},\r\n
+\t\t\tgetFormat: function() {\r\n
+\t\t\t\treturn jQuery(this.getTd()).attr("format");\r\n
+\t\t\t},\r\n
+\t\t\tsetFormat: function(v) {\r\n
+\t\t\t\tjQuery(this.getTd()).attr("format", v);\r\n
+\t\t\t},\r\n
+\t\t\tgetFormulaFunc: function() {\r\n
+\t\t\t\treturn this.formulaFunc;\r\n
+\t\t\t},\r\n
+\t\t\tsetFormulaFunc: function(v) {\r\n
+\t\t\t\tthis.formulaFunc = v;\r\n
+\t\t\t},\r\n
+\t\t\tformula: null,\r\n
+\t\t\tgetFormula: function() {\r\n
+\t\t\t\tif (!this.formula) { //this if statement takes line breaks out of formulas so that they calculate better, then they are cached because the formulas to not change, on the cell \r\n
+\t\t\t\t\tvar v = jQuery(this.getTd()).attr(\'formula\'); \r\n
+\t\t\t\t\tthis.formula = (v ? v.replace(/\\n/g, \' \') : v);\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\treturn this.formula;\r\n
+\t\t\t},\r\n
+\t\t\tsetFormula: function(v) {\r\n
+\t\t\t\tif (v \046\046 v.length \076 0) {\r\n
+\t\t\t\t\tjQuery(this.getTd()).attr(\'formula\', v);\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tjQuery(this.getTd()).removeAttr(\'formula\');\r\n
+\t\t\t\t}\r\n
+\t\t\t}\r\n
+\t\t};\r\n
+\r\n
+\t\tvar cE = { //Calculations Engine\r\n
+\t\t\tTEST: {},\r\n
+\t\t\tERROR: "#VALUE!",\r\n
+\t\t\tcFN: {//cFN = compiler functions, usually mathmatical\r\n
+\t\t\t\tsum: \tfunction(x, y) { return x + y; },\r\n
+\t\t\t\tmax: \tfunction(x, y) { return x \076 y ? x: y; },\r\n
+\t\t\t\tmin: \tfunction(x, y) { return x \074 y ? x: y; },\r\n
+\t\t\t\tcount: \tfunction(x, y) { return (y != null) ? x + 1: x; },\r\n
+\t\t\t\tclean: function(v) {\r\n
+\t\t\t\t\tif (typeof(v) == \'string\') {\r\n
+\t\t\t\t\t\tv = v.replace(cE.regEx.amp, \'\046\')\r\n
+\t\t\t\t\t\t\t\t.replace(cE.regEx.nbsp, \' \')\r\n
+\t\t\t\t\t\t\t\t.replace(/\\n/g,\'\')\r\n
+\t\t\t\t\t\t\t\t.replace(/\\r/g,\'\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn v;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tfn: {//fn = standard functions used in cells\r\n
+\t\t\t\tHTML: function(v) {\r\n
+\t\t\t\t\treturn jQuery(v);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tIMG: function(v) {\r\n
+\t\t\t\t\treturn jS.controlFactory.safeImg(v, cE.calcState.row, cE.calcState.col);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tAVERAGE:\tfunction(values) { \r\n
+\t\t\t\t\tvar arr = cE.foldPrepare(values, arguments);\r\n
+\t\t\t\t\treturn cE.fn.SUM(arr) / cE.fn.COUNT(arr); \r\n
+\t\t\t\t},\r\n
+\t\t\t\tAVG: \t\tfunction(values) { \r\n
+\t\t\t\t\treturn cE.fn.AVERAGE(values);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tCOUNT: \t\tfunction(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.count, 0); },\r\n
+\t\t\t\tSUM: \t\tfunction(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.sum, 0, true); },\r\n
+\t\t\t\tMAX: \t\tfunction(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.max, Number.MIN_VALUE, true); },\r\n
+\t\t\t\tMIN: \t\tfunction(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.min, Number.MAX_VALUE, true); },\r\n
+\t\t\t\tABS\t: \t\tfunction(v) { return Math.abs(cE.fn.N(v)); },\r\n
+\t\t\t\tCEILING: \tfunction(v) { return Math.ceil(cE.fn.N(v)); },\r\n
+\t\t\t\tFLOOR: \t\tfunction(v) { return Math.floor(cE.fn.N(v)); },\r\n
+\t\t\t\tINT: \t\tfunction(v) { return Math.floor(cE.fn.N(v)); },\r\n
+\t\t\t\tROUND: \t\tfunction(v, decimals) {\r\n
+\t\t\t\t\treturn cE.fn.FIXED(v, (decimals ? decimals : 0), false);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tRAND: \t\tfunction(v) { return Math.random(); },\r\n
+\t\t\t\tRND: \t\tfunction(v) { return Math.random(); },\r\n
+\t\t\t\tTRUE: \t\tfunction() { return \'TRUE\'; },\r\n
+\t\t\t\tFALSE: \t\tfunction() { return \'FALSE\'; },\r\n
+\t\t\t\tNOW: \t\tfunction() { return new Date ( ); },\r\n
+\t\t\t\tTODAY: \t\tfunction() { return Date( Math.floor( new Date ( ) ) ); },\r\n
+\t\t\t\tDAYSFROM: \tfunction(year, month, day) { \r\n
+\t\t\t\t\treturn Math.floor( (new Date() - new Date (year, (month - 1), day)) / 86400000);\r\n
+\t\t\t\t},\r\n
+\t\t\t\tIF:\t\t\tfunction(v, t, f){\r\n
+\t\t\t\t\tt = cE.cFN.clean(t);\r\n
+\t\t\t\t\tf = cE.cFN.clean(f);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\ttry { v = eval(v); } catch(e) {};\r\n
+\t\t\t\t\ttry { t = eval(t); } catch(e) {};\r\n
+\t\t\t\t\ttry { t = eval(t); } catch(e) {};\r\n
+\r\n
+\t\t\t\t\tif (v == \'true\' || v == true || v \076 0 || v == \'TRUE\') {\r\n
+\t\t\t\t\t\treturn t;\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn f;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tFIXED: \t\tfunction(v, decimals, noCommas) { \r\n
+\t\t\t\t\tif (decimals == null) {\r\n
+\t\t\t\t\t\tdecimals = 2;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tvar x = Math.pow(10, decimals);\r\n
+\t\t\t\t\tvar n = String(Math.round(cE.fn.N(v) * x) / x); \r\n
+\t\t\t\t\tvar p = n.indexOf(\'.\');\r\n
+\t\t\t\t\tif (p \074 0) {\r\n
+\t\t\t\t\t\tp = n.length;\r\n
+\t\t\t\t\t\tn += \'.\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tfor (var i = n.length - p - 1; i \074 decimals; i++) {\r\n
+\t\t\t\t\t\tn += \'0\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (noCommas == true) {// Treats null as false.\r\n
+\t\t\t\t\t\treturn n;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tvar arr\t= n.replace(\'-\', \'\').split(\'.\');\r\n
+\t\t\t\t\tvar result = [];\r\n
+\t\t\t\t\tvar first  = true;\r\n
+\t\t\t\t\twhile (arr[0].length \076 0) { // LHS of decimal point.\r\n
+\t\t\t\t\t\tif (!first) {\r\n
+\t\t\t\t\t\t\tresult.unshift(\',\');\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tresult.unshift(arr[0].slice(-3));\r\n
+\t\t\t\t\t\tarr[0] = arr[0].slice(0, -3);\r\n
+\t\t\t\t\t\tfirst = false;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (decimals \076 0) {\r\n
+\t\t\t\t\t\tresult.push(\'.\');\r\n
+\t\t\t\t\t\tvar first = true;\r\n
+\t\t\t\t\t\twhile (arr[1].length \076 0) { // RHS of decimal point.\r\n
+\t\t\t\t\t\t\tif (!first) {\r\n
+\t\t\t\t\t\t\t\tresult.push(\',\');\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\tresult.push(arr[1].slice(0, 3));\r\n
+\t\t\t\t\t\t\tarr[1] = arr[1].slice(3);\r\n
+\t\t\t\t\t\t\tfirst = false;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (v \074 0) {\r\n
+\t\t\t\t\t\treturn \'-\' + result.join(\'\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn result.join(\'\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\tTRIM:\t\tfunction(v) { \r\n
+\t\t\t\t\tif (typeof(v) == \'string\') {\r\n
+\t\t\t\t\t\tv = jQuery.trim(v);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn v;\r\n
+\t\t\t\t},\r\n
+\t\t\t\tHYPERLINK: function(link, name) {\r\n
+\t\t\t\t\tname = (name ? name : \'LINK\');\r\n
+\t\t\t\t\treturn jQuery(\'\074a href="\' + link + \'" target="_new" class="clickable"\076\' + name + \'\074/a\076\');\r\n
+\t\t\t\t},\r\n
+\t\t\t\tDOLLAR: \tfunction(v, decimals, symbol) { \r\n
+\t\t\t\t\tif (decimals == null) {\r\n
+\t\t\t\t\t\tdecimals = 2;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (symbol == null) {\r\n
+\t\t\t\t\t\tsymbol = \'$\';\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar r = cE.fn.FIXED(v, decimals, false);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tif (v \076= 0) {\r\n
+\t\t\t\t\t\treturn symbol + r; \r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\treturn \'-\' + symbol + r.slice(1);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tVALUE: \t\tfunction(v) { return parseFloat(v); },\r\n
+\t\t\t\tN: \t\t\tfunction(v) { if (v == null) {return 0;}\r\n
+\t\t\t\t\t\t\t\t  if (v instanceof Date) {return v.getTime();}\r\n
+\t\t\t\t\t\t\t\t  if (typeof(v) == \'object\') {v = v.toString();}\r\n
+\t\t\t\t\t\t\t\t  if (typeof(v) == \'string\') {v = parseFloat(v.replace(cE.regEx.n, \'\'));}\r\n
+\t\t\t\t\t\t\t\t  if (isNaN(v))\t\t   {return 0;}\r\n
+\t\t\t\t\t\t\t\t  if (typeof(v) == \'number\') {return v;}\r\n
+\t\t\t\t\t\t\t\t  if (v == true)\t\t\t {return 1;}\r\n
+\t\t\t\t\t\t\t\t  return 0; },\r\n
+\t\t\t\tPI: \t\tfunction() { return Math.PI; },\r\n
+\t\t\t\tPOWER: \t\tfunction(x, y) {\r\n
+\t\t\t\t\treturn Math.pow(x, y);\r\n
+\t\t\t\t},\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Note, form objects are experimental, they don\'t work always as expected\r\n
+\t\t\t\tINPUT: {\r\n
+\t\t\t\t\tSELECT:\tfunction(v, noBlank) {\r\n
+\t\t\t\t\t\tif (s.editable) {\r\n
+\t\t\t\t\t\t\tv = cE.foldPrepare(v, arguments);\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tvar selectObj = jS.controlFactory.input.select();\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tif (!noBlank) {\r\n
+\t\t\t\t\t\t\t\tselectObj.append(\'\074option value=""\076Select a value\074/option\076\');\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tfor (var i = 0; i \074 (v.length \074= 50 ? v.length : 50); i++) {\r\n
+\t\t\t\t\t\t\t\tif (v[i]) {\r\n
+\t\t\t\t\t\t\t\t\tselectObj.append(\'\074option value="\' + v[i] + \'"\076\' + v[i] + \'\074/option\076\');\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tselectObj.val(jS.controlFactory.input.getValue(cE.thisCell));\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\treturn selectObj;\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn jS.controlFactory.input.getValue(cE.thisCell);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tSELECTVAL:\tfunction(v) {\r\n
+\t\t\t\t\t\t//v = cE.foldPrepare(v, arguments);\r\n
+\t\t\t\t\t\treturn (s.editable ? jQuery(v).val() : v);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tRADIO: function(v) {\r\n
+\t\t\t\t\t\tif (s.editable) {\r\n
+\t\t\t\t\t\t\tv = cE.foldPrepare(v, arguments);\r\n
+\t\t\t\t\t\t\tvar o = jS.controlFactory.input.radio(v, cE.thisCell);\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\to.find(\'input[value="\' + jS.controlFactory.input.getValue(cE.thisCell) + \'"]\').attr(\'CHECKED\', \'true\');\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn jS.controlFactory.input.getValue(cE.thisCell);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn o;\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tRADIOVAL: function(v) {\r\n
+\t\t\t\t\t\t//v = cE.foldPrepare(v, arguments);\r\n
+\t\t\t\t\t\treturn (s.editable ? jQuery(v).find(\'input:checked\').val() : v);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tCHECKBOX: function(v) {\r\n
+\t\t\t\t\t\tif (s.editable) {\r\n
+\t\t\t\t\t\t\tv = cE.foldPrepare(v, arguments)[0];\r\n
+\t\t\t\t\t\t\tvar o = jS.controlFactory.input.checkbox(v, cE.thisCell);\r\n
+\t\t\t\t\t\t\tvar checked = jS.controlFactory.input.getValue(cE.thisCell);\r\n
+\t\t\t\t\t\t\tif (checked == \'true\' || checked == true) {\r\n
+\t\t\t\t\t\t\t\to.attr(\'CHECKED\', \'TRUE\');\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\to.removeAttr(\'CHECKED\');\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\treturn o;\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn jS.controlFactory.input.getValue(cE.thisCell);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tCHECKBOXVAL: function(v) {\r\n
+\t\t\t\t\t\treturn (s.editable ? jQuery(cE.foldPrepare(v, arguments)).val() : v);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tISCHECKED:\t\tfunction(v) {\r\n
+\t\t\t\t\t\tvar checked = jQuery(v).is(":checked");\r\n
+\t\t\t\t\t\tif (checked) {\r\n
+\t\t\t\t\t\t\treturn \'TRUE\';\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\treturn \'FALSE\';\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t},\r\n
+\t\t\t\tCHART: {\r\n
+\t\t\t\t\tBAR:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(null, cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tBARH:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'bhg\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tSBAR:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'bvs\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tSBARH:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'bhs\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tLINE:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'lc\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tPIE:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'p\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tPIETHREED:\tfunction(v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(\'p3\', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t},\r\n
+\t\t\t\t\tCUSTOM:\tfunction(type, v, legend, axisLabels, w, h) {\r\n
+\t\t\t\t\t\treturn jS.controlFactory.chart(type, cE.foldPrepare(v, arguments), legend, axisLabels,  w, h, cE.calcState.row - 1);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcalcState: {},\r\n
+\t\t\tcalc: function(cellProvider, context, startFuel) {\r\n
+\t\t\t\t// Returns null if all done with a complete calc() run.\r\n
+\t\t\t\t// Else, returns a non-null continuation function if we ran out of fuel.  \r\n
+\t\t\t\t// The continuation function can then be later invoked with more fuel value.\r\n
+\t\t\t\t// The fuelStart is either null (which forces a complete calc() to the finish) \r\n
+\t\t\t\t// or is an integer \076 0 to slice up long calc() runs.  A fuelStart number\r\n
+\t\t\t\t// is roughly matches the number of cells to visit per calc() run.\r\n
+\t\t\t\tcE.calcState = { \r\n
+\t\t\t\t\tcellProvider:\tcellProvider, \r\n
+\t\t\t\t\tcontext: \t\t(context != null ? context: {}),\r\n
+\t\t\t\t\trow: \t\t\t1, \r\n
+\t\t\t\t\tcol: \t\t\t1,\r\n
+\t\t\t\t\ti:\t\t\t\tcellProvider.tableI,\r\n
+\t\t\t\t\tdone:\t\t\tfalse,\r\n
+\t\t\t\t\tstack:\t\t\t[],\r\n
+\t\t\t\t\tcalcMore: \t\tfunction(moreFuel) {\r\n
+\t\t\t\t\t\t\t\t\t\tcE.calcState.fuel = moreFuel;\r\n
+\t\t\t\t\t\t\t\t\t\treturn cE.calcLoop();\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t};\r\n
+\t\t\t\treturn cE.calcState.calcMore(startFuel);\r\n
+\t\t\t},\r\n
+\t\t\tcell: function() {\r\n
+\t\t\t\tprototype: {// Cells don\'t know their coordinates, to make shifting easier.\r\n
+\t\t\t\t\tgetError = \t\t\tfunction()\t { return this.error; },\r\n
+\t\t\t\t\tgetValue = \t\t\tfunction()\t { return this.value; },\r\n
+\t\t\t\t\tsetValue = \t\t\tfunction(v, e) { this.value = v; this.error = e; },\r\n
+\t\t\t\t\tgetFormula\t = \t\tfunction()  { return this.formula; },\t // Like "=1+2+3" or "\'hello" or "1234.5"\r\n
+\t\t\t\t\tsetFormula\t = \t\tfunction(v) { this.formula = v; },\r\n
+\t\t\t\t\tgetFormulaFunc = \tfunction()  { return this.formulaFunc; },\r\n
+\t\t\t\t\tsetFormulaFunc = \tfunction(v) { this.formulaFunc = v; },\r\n
+\t\t\t\t\ttoString = \t\t\tfunction() { return "Cell:[" + this.getFormula() + ": " + this.getValue() + ": " + this.getError() + "]"; };\r\n
+\t\t\t\t}\r\n
+\t\t\t}, // Prototype setup is later.\r\n
+\t\t\tcolumnLabelIndex: function(str) {\r\n
+\t\t\t\t// Converts A to 1, B to 2, Z to 26, AA to 27.\r\n
+\t\t\t\tvar num = 0;\r\n
+\t\t\t\tfor (var i = 0; i \074 str.length; i++) {\r\n
+\t\t\t\t\tvar digit = str.toUpperCase().charCodeAt(i) - 65 + 1;\t   // 65 == \'A\'.\r\n
+\t\t\t\t\tnum = (num * 26) + digit;\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn num;\r\n
+\t\t\t},\r\n
+\t\t\tparseLocation: function(locStr) { // With input of "A1", "B4", "F20",\r\n
+\t\t\t\tif (locStr != null \046\046\t\t\t\t\t\t\t\t  // will return [1,1], [4,2], [20,6].\r\n
+\t\t\t\t\tlocStr.length \076 0 \046\046\r\n
+\t\t\t\t\tlocStr != "\046nbsp;") {\r\n
+\t\t\t\t\tfor (var firstNum = 0; firstNum \074 locStr.length; firstNum++) {\r\n
+\t\t\t\t\t\tif (locStr.charCodeAt(firstNum) \074= 57) {// 57 == \'9\'\r\n
+\t\t\t\t\t\t\tbreak;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn [ parseInt(locStr.substring(firstNum)),\r\n
+\t\t\t\t\t\t\t cE.columnLabelIndex(locStr.substring(0, firstNum)) ];\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\treturn null;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcolumnLabelString: function(index) {\r\n
+\t\t\t\t// The index is 1 based.  Convert 1 to A, 2 to B, 25 to Y, 26 to Z, 27 to AA, 28 to AB.\r\n
+\t\t\t\t// TODO: Got a bug when index \076 676.  675==YZ.  676==YZ.  677== AAA, which skips ZA series.\r\n
+\t\t\t\t//\t   In the spirit of billg, who needs more than 676 columns anyways?\r\n
+\t\t\t\tvar b = (index - 1).toString(26).toUpperCase();   // Radix is 26.\r\n
+\t\t\t\tvar c = [];\r\n
+\t\t\t\tfor (var i = 0; i \074 b.length; i++) {\r\n
+\t\t\t\t\tvar x = b.charCodeAt(i);\r\n
+\t\t\t\t\tif (i \074= 0 \046\046 b.length \076 1) {\t\t\t\t   // Leftmost digit is special, where 1 is A.\r\n
+\t\t\t\t\t\tx = x - 1;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (x \074= 57) {\t\t\t\t\t\t\t\t  // x \074= \'9\'.\r\n
+\t\t\t\t\t\tc.push(String.fromCharCode(x - 48 + 65)); // x - \'0\' + \'A\'.\r\n
+\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\tc.push(String.fromCharCode(x + 10));\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn c.join("");\r\n
+\t\t\t},\r\n
+\t\t\tregEx: {\r\n
+\t\t\t\tn: \t\t\t\t\t/[\\$,\\s]/g,\r\n
+\t\t\t\tcell: \t\t\t\t/\\$?([a-zA-Z]+)\\$?([0-9]+)/g, //A1\r\n
+\t\t\t\trange: \t\t\t\t/\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g, //A1:B4\r\n
+\t\t\t\tremoteCell:\t\t\t/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g, //SHEET1:A1\r\n
+\t\t\t\tremoteCellRange: \t/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g, //SHEET1:A1:B4\r\n
+\t\t\t\tsheet: \t\t\t\t/SHEET/,\r\n
+\t\t\t\tcellInsensitive: \t\t\t\t/\\$?([a-zA-Z]+)\\$?([0-9]+)/gi, //a1\r\n
+\t\t\t\trangeInsensitive: \t\t\t\t/\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi, //a1:a4\r\n
+\t\t\t\tremoteCellInsensitive:\t\t\t/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi, //sheet1:a1\r\n
+\t\t\t\tremoteCellRangeInsensitive: \t/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi, //sheet1:a1:b4\r\n
+\t\t\t\tsheetInsensitive:\t/SHEET/i,\r\n
+\t\t\t\tamp: \t\t\t\t/\046/g,\r\n
+\t\t\t\tgt: \t\t\t\t/\074/g,\r\n
+\t\t\t\tlt: \t\t\t\t/\076/g,\r\n
+\t\t\t\tnbsp: \t\t\t\t/\046nbsp;/g\r\n
+\t\t\t},\r\n
+\t\t\tstr: {\r\n
+\t\t\t\tamp: \t\'\046amp;\',\r\n
+\t\t\t\tlt: \t\'\046lt;\',\r\n
+\t\t\t\tgt: \t\'\046gt;\',\r\n
+\t\t\t\tnbsp: \t\'\046nbps;\'\r\n
+\t\t\t},\r\n
+\t\t\tparseFormula: function(formula, dependencies, thisTableI) { // Parse formula (without "=" prefix) like "123+SUM(A1:A6)/D5" into JavaScript expression string.\r\n
+\t\t\t\tvar nrows = null;\r\n
+\t\t\t\tvar ncols = null;\r\n
+\t\t\t\tif (cE.calcState.cellProvider != null) {\r\n
+\t\t\t\t\tnrows = cE.calcState.cellProvider.nrows;\r\n
+\t\t\t\t\tncols = cE.calcState.cellProvider.ncols;\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Cell References Range - Other Tables\r\n
+\t\t\t\tformula = formula.replace(cE.regEx.remoteCellRange, \r\n
+\t\t\t\t\tfunction(ignored, TableStr, tableI, startColStr, startRowStr, endColStr, endRowStr) {\r\n
+\t\t\t\t\t\tvar res = [];\r\n
+\t\t\t\t\t\tvar startCol = cE.columnLabelIndex(startColStr);\r\n
+\t\t\t\t\t\tvar startRow = parseInt(startRowStr);\r\n
+\t\t\t\t\t\tvar endCol   = cE.columnLabelIndex(endColStr);\r\n
+\t\t\t\t\t\tvar endRow   = parseInt(endRowStr);\r\n
+\t\t\t\t\t\tif (ncols != null) {\r\n
+\t\t\t\t\t\t\tendCol = Math.min(endCol, ncols);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tif (nrows != null) {\r\n
+\t\t\t\t\t\t\tendRow = Math.min(endRow, nrows);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tfor (var r = startRow; r \074= endRow; r++) {\r\n
+\t\t\t\t\t\t\tfor (var c = startCol; c \074= endCol; c++) {\r\n
+\t\t\t\t\t\t\t\tres.push("SHEET" + (tableI) + ":" + cE.columnLabelString(c) + r);\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn "[" + res.join(",") + "]";\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t);\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Cell References Fixed - Other Tables\r\n
+\t\t\t\tformula = formula.replace(cE.regEx.remoteCell, \r\n
+\t\t\t\t\tfunction(ignored, tableStr, tableI, colStr, rowStr) {\r\n
+\t\t\t\t\t\ttableI = parseInt(tableI) - 1;\r\n
+\t\t\t\t\t\tcolStr = colStr.toUpperCase();\r\n
+\t\t\t\t\t\tif (dependencies != null) {\r\n
+\t\t\t\t\t\t\tdependencies[\'SHEET\' + (tableI) + \':\' + colStr + rowStr] = [parseInt(rowStr), cE.columnLabelIndex(colStr), tableI];\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn "(cE.calcState.cellProvider.getCell((" + (tableI) + "),(" + (rowStr) + "),\\"" + (colStr) + "\\").getValue())";\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t);\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Cell References Range\r\n
+\t\t\t\tformula = formula.replace(cE.regEx.range, \r\n
+\t\t\t\t\tfunction(ignored, startColStr, startRowStr, endColStr, endRowStr) {\r\n
+\t\t\t\t\t\tvar res = [];\r\n
+\t\t\t\t\t\tvar startCol = cE.columnLabelIndex(startColStr);\r\n
+\t\t\t\t\t\tvar startRow = parseInt(startRowStr);\r\n
+\t\t\t\t\t\tvar endCol   = cE.columnLabelIndex(endColStr);\r\n
+\t\t\t\t\t\tvar endRow   = parseInt(endRowStr);\r\n
+\t\t\t\t\t\tif (ncols != null) {\r\n
+\t\t\t\t\t\t\tendCol = Math.min(endCol, ncols);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tif (nrows != null) {\r\n
+\t\t\t\t\t\t\tendRow = Math.min(endRow, nrows);\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tfor (var r = startRow; r \074= endRow; r++) {\r\n
+\t\t\t\t\t\t\tfor (var c = startCol; c \074= endCol; c++) {\r\n
+\t\t\t\t\t\t\t\tres.push(cE.columnLabelString(c) + r);\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn "[" + res.join(",") + "]";\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t);\r\n
+\t\t\t\t\r\n
+\t\t\t\t//Cell References Fixed\r\n
+\t\t\t\tformula = formula.replace(cE.regEx.cell, \r\n
+\t\t\t\t\tfunction(ignored, colStr, rowStr) {\r\n
+\t\t\t\t\t\tcolStr = colStr.toUpperCase();\r\n
+\t\t\t\t\t\tif (dependencies != null) {\r\n
+\t\t\t\t\t\t\tdependencies[\'SHEET\' + thisTableI + \':\' + colStr + rowStr] = [parseInt(rowStr), cE.columnLabelIndex(colStr), thisTableI];\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\treturn "(cE.calcState.cellProvider.getCell((" + thisTableI + "),(" + (rowStr) + "),\\"" + (colStr) + "\\").getValue())";\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t);\r\n
+\t\t\t\treturn formula;\r\n
+\t\t\t},\t\r\n
+\t\t\tparseFormulaStatic: function(formula) { // Parse static formula value like "123.0" or "hello" or "\'hello world" into JavaScript value.\r\n
+\t\t\t\tif (formula == null) {\r\n
+\t\t\t\t\treturn null;\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tvar formulaNum = formula.replace(cE.regEx.n, \'\');\r\n
+\t\t\t\t\tvar value = parseFloat(formulaNum);\r\n
+\t\t\t\t\tif (isNaN(value)) {\r\n
+\t\t\t\t\t\tvalue = parseInt(formulaNum);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\tif (isNaN(value)) {\r\n
+\t\t\t\t\t\tvalue = (formula.charAt(0) == "\\\'" ? formula.substring(1): formula);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn value;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tcalcLoop: function() {\r\n
+\t\t\t\tif (cE.calcState.done == true) {\r\n
+\t\t\t\t\treturn null;\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\twhile (cE.calcState.fuel == null || cE.calcState.fuel \076 0) {\r\n
+\t\t\t\t\t\tif (cE.calcState.stack.length \076 0) {\r\n
+\t\t\t\t\t\t\tvar workFunc = cE.calcState.stack.pop();\r\n
+\t\t\t\t\t\t\tif (workFunc != null) {\r\n
+\t\t\t\t\t\t\t\tworkFunc(cE.calcState);\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t} else if (cE.calcState.cellProvider.formulaCells != null) {\r\n
+\t\t\t\t\t\t\tif (cE.calcState.cellProvider.formulaCells.length \076 0) {\r\n
+\t\t\t\t\t\t\t\tvar loc = cE.calcState.cellProvider.formulaCells.shift();\r\n
+\t\t\t\t\t\t\t\tcE.visitCell(cE.calcState.i, loc[0], loc[1]);\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\tcE.calcState.done = true;\r\n
+\t\t\t\t\t\t\t\treturn null;\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\tif (cE.visitCell(cE.calcState.i, cE.calcState.row, cE.calcState.col) == true) {\r\n
+\t\t\t\t\t\t\t\tcE.calcState.done = true;\r\n
+\t\t\t\t\t\t\t\treturn null;\r\n
+\t\t\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\t\t\tif (cE.calcState.col \076= cE.calcState.cellProvider.getNumberOfColumns(cE.calcState.row - 1)) {\r\n
+\t\t\t\t\t\t\t\tcE.calcState.row++;\r\n
+\t\t\t\t\t\t\t\tcE.calcState.col =  1;\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\tcE.calcState.col++; // Sweep through columns first.\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (cE.calcState.fuel != null) {\r\n
+\t\t\t\t\t\t\tcE.calcState.fuel -= 1;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn cE.calcState.calcMore;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tformula: null,\r\n
+\t\t\tformulaFunc: null,\r\n
+\t\t\tvisitCell: function(tableI, r, c) { // Returns true if done with all cells.\r\n
+\t\t\t\tvar cell = cE.calcState.cellProvider.getCell(tableI, r, c);\r\n
+\t\t\t\tif (cell == null) {\r\n
+\t\t\t\t\treturn true;\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\tvar value = cell.getValue();\r\n
+\t\t\t\t\tif (value == null) {\r\n
+\t\t\t\t\t\tthis.formula = cell.getFormula();\r\n
+\t\t\t\t\t\tif (this.formula) {\r\n
+\t\t\t\t\t\t\tif (this.formula.charAt(0) == \'=\') {\r\n
+\t\t\t\t\t\t\t\tthis.formulaFunc = cell.getFormulaFunc();\r\n
+\t\t\t\t\t\t\t\tif (this.formulaFunc == null ||\r\n
+\t\t\t\t\t\t\t\t\tthis.formulaFunc.formula != this.formula) {\r\n
+\t\t\t\t\t\t\t\t\tthis.formulaFunc = null;\r\n
+\t\t\t\t\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\t\t\t\t\tvar dependencies = {};\r\n
+\t\t\t\t\t\t\t\t\t\tvar body = cE.parseFormula(this.formula.substring(1), dependencies, tableI);\r\n
+\t\t\t\t\t\t\t\t\t\tthis.formulaFunc = function() {\r\n
+\t\t\t\t\t\t\t\t\t\t\twith (cE.fn) {\r\n
+\t\t\t\t\t\t\t\t\t\t\t\treturn eval(body);\r\n
+\t\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t\t};\r\n
+\t\t\t\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\t\t\t\tthis.formulaFunc.formula = this.formula;\r\n
+\t\t\t\t\t\t\t\t\t\tthis.formulaFunc.dependencies = dependencies;\r\n
+\t\t\t\t\t\t\t\t\t\tcell.setFormulaFunc(this.formulaFunc);\r\n
+\t\t\t\t\t\t\t\t\t} catch (e) {\r\n
+\t\t\t\t\t\t\t\t\t\tcell.setValue(cE.ERROR + \': \' + e);\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\tif (this.formulaFunc) {\r\n
+\t\t\t\t\t\t\t\t\tcE.calcState.stack.push(cE.makeFormulaEval(cell, r, c, this.formulaFunc));\r\n
+\r\n
+\t\t\t\t\t\t\t\t\t// Push the cell\'s dependencies, first checking for any cycles. \r\n
+\t\t\t\t\t\t\t\t\tvar dependencies = this.formulaFunc.dependencies;\r\n
+\t\t\t\t\t\t\t\t\tfor (var k in dependencies) {\r\n
+\t\t\t\t\t\t\t\t\t\tif (dependencies[k] instanceof Array \046\046\r\n
+\t\t\t\t\t\t\t\t\t\t\t(cE.checkCycles(dependencies[k][0], dependencies[k][1], dependencies[k][2]) == true) //same cell on same sheet\r\n
+\t\t\t\t\t\t\t\t\t\t) {\r\n
+\t\t\t\t\t\t\t\t\t\t\tcell.setValue(cE.ERROR + \': cycle detected\');\r\n
+\t\t\t\t\t\t\t\t\t\t\tcE.calcState.stack.pop();\r\n
+\t\t\t\t\t\t\t\t\t\t\treturn false;\r\n
+\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\tfor (var k in dependencies) {\r\n
+\t\t\t\t\t\t\t\t\t\tif (dependencies[k] instanceof Array) {\r\n
+\t\t\t\t\t\t\t\t\t\t\tcE.calcState.stack.push(cE.makeCellVisit(dependencies[k][2], dependencies[k][0], dependencies[k][1]));\r\n
+\t\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\tcell.setValue(cE.parseFormulaStatic(this.formula));\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t\treturn false;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tmakeCellVisit: function(tableI, row, col) {\r\n
+\t\t\t\tvar fn = function() { \r\n
+\t\t\t\t\treturn cE.visitCell(tableI, row, col);\r\n
+\t\t\t\t};\r\n
+\t\t\t\tfn.row = row;\r\n
+\t\t\t\tfn.col = col;\r\n
+\t\t\t\treturn fn;\r\n
+\t\t\t},\r\n
+\t\t\tthisCell: null,\r\n
+\t\t\tmakeFormulaEval: function(cell, row, col, formulaFunc) {\r\n
+\t\t\t\tcE.thisCell = cell;\r\n
+\t\t\t\tvar fn = function() {\r\n
+\t\t\t\t\tvar v = "";\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\tv = formulaFunc();\r\n
+\r\n
+\t\t\t\t\t\tswitch(typeof(v)) {\r\n
+\t\t\t\t\t\t\tcase "string":\r\n
+\t\t\t\t\t\t\t\tv = v\r\n
+\t\t\t\t\t\t\t\t\t.replace(cE.regEx.amp, cE.str.amp)\r\n
+\t\t\t\t\t\t\t\t\t.replace(cE.regEx.lt, cE.str.lt)\r\n
+\t\t\t\t\t\t\t\t\t.replace(cE.regEx.gt, cE.str.gt)\r\n
+\t\t\t\t\t\t\t\t\t.replace(cE.regEx.nbsp, cE.str.nbsp);\r\n
+\t\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\t\tcell.setValue(v);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t} catch (e) {\r\n
+\t\t\t\t\t\tcE.makeError(cell, e);\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t};\r\n
+\t\t\t\tfn.row = row;\r\n
+\t\t\t\tfn.col = col;\r\n
+\t\t\t\treturn fn;\r\n
+\t\t\t},\r\n
+\t\t\tmakeError: function(cell, e) {\r\n
+\t\t\t\tvar msg = cE.ERROR + \': \' + msg;\r\n
+\t\t\t\te.message.replace(/\\d+\\.?\\d*, \\d+\\.?\\d*/, function(v, i) {\r\n
+\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\tv = v.split(\', \');\r\n
+\t\t\t\t\t\tmsg = (\'Cell:\' + cE.columnLabelString(parseInt(v[0]) + 1) + (parseInt(v[1])) + \' not found\');\r\n
+\t\t\t\t\t} catch (e) {}\r\n
+\t\t\t\t});\r\n
+\t\t\t\tcell.setValue(msg);\r\n
+\t\t\t},\r\n
+\t\t\tcheckCycles: function(row, col, tableI) {\r\n
+\t\t\t\tfor (var i = 0; i \074 cE.calcState.stack.length; i++) {\r\n
+\t\t\t\t\tvar item = cE.calcState.stack[i];\r\n
+\t\t\t\t\tif (item.row != null \046\046 \r\n
+\t\t\t\t\t\titem.col != null \046\046\r\n
+\t\t\t\t\t\titem.row == row  \046\046\r\n
+\t\t\t\t\t\titem.col == col \046\046\r\n
+\t\t\t\t\t\ttableI == cE.calcState.i\r\n
+\t\t\t\t\t) {\r\n
+\t\t\t\t\t\treturn true;\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn false;\r\n
+\t\t\t},\r\n
+\t\t\tfoldPrepare: function(firstArg, theArguments) { // Computes the best array-like arguments for calling fold().\r\n
+\t\t\t\tif (firstArg != null \046\046\r\n
+\t\t\t\t\tfirstArg instanceof Object \046\046\r\n
+\t\t\t\t\tfirstArg["length"] != null) {\r\n
+\t\t\t\t\treturn firstArg;\r\n
+\t\t\t\t} else {\r\n
+\t\t\t\t\treturn theArguments;\r\n
+\t\t\t\t}\r\n
+\t\t\t},\r\n
+\t\t\tfold: function(arr, funcOfTwoArgs, result, castToN) {\r\n
+\t\t\t\tfor (var i = 0; i \074 arr.length; i++) {\r\n
+\t\t\t\t\tresult = funcOfTwoArgs(result, (castToN == true ? cE.fn.N(arr[i]): arr[i]));\r\n
+\t\t\t\t}\r\n
+\t\t\t\treturn result;\r\n
+\t\t\t}\r\n
+\t\t};\r\n
+\t\t\r\n
+\t\tvar $window = jQuery(window);\r\n
+\t\t\r\n
+\t\t//initialize this instance of sheet\r\n
+\t\tjS.s = s;\r\n
+\t\t\r\n
+\t\ts.fnBefore();\r\n
+\t\t\r\n
+\t\tvar o; var emptyFN = function() {};\r\n
+\t\tif (s.buildSheet) {//override urlGet, this has some effect on how the topbar is sized\r\n
+\t\t\tif (typeof(s.buildSheet) == \'object\') {\r\n
+\t\t\t\to = s.buildSheet;\r\n
+\t\t\t} else if (s.buildSheet == true || s.buildSheet == \'true\') {\r\n
+\t\t\t\to = jQuery(s.parent.html());\r\n
+\t\t\t} else if (s.buildSheet.match(/x/i)) {\r\n
+\t\t\t\to = jS.controlFactory.sheet(s.buildSheet);\r\n
+\t\t\t}\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\t//We need to take the sheet out of the parent in order to get an accurate reading of it\'s height and width\r\n
+\t\t//jQuery(this).html(s.loading);\r\n
+\t\ts.parent.html(\'\');\r\n
+\t\t\r\n
+\t\ts.width = s.parent.width();\r\n
+\t\ts.height = s.parent.height();\r\n
+\t\t\r\n
+\t\t\r\n
+\t\t// Drop functions if they are not needed \046 save time in recursion\r\n
+\t\tif (s.log) {\r\n
+\t\t\ts.parent.after(\'\074textarea id="\' + jS.id.log + \'" class="\' + jS.cl.log + \'" /\076\');\r\n
+\t\t} else {\r\n
+\t\t\tjS.log = emptyFN;\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tif (!s.showErrors) {\r\n
+\t\t\tcE.makeError = emptyFN;\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tif (!jQuery.support.boxModel) {\r\n
+\t\t\ts.boxModelCorrection = 0;\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tif (!jQuery.scrollTo) {\r\n
+\t\t\tjS.followMe = emptyFN;\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tjS.log(\'Startup\');\r\n
+\t\t\r\n
+\t\t$window.resize(function() {\r\n
+\t\t\ts.width = s.parent.width();\r\n
+\t\t\ts.height = s.parent.height();\r\n
+\t\t\tjS.sheetSyncSize();\r\n
+\t\t});\r\n
+\t\t\r\n
+\t\tcE.fn = jQuery.extend(cE.fn, s.calculations);\r\n
+\t\t\r\n
+\t\t//this makes cells and functions case insensitive\r\n
+\t\tif (s.caseInsensitive) {\r\n
+\t\t\tcE.regEx.cell = cE.regEx.cellInsensitive;\r\n
+\t\t\tcE.regEx.range = cE.regEx.rangeInsensitive;\r\n
+\t\t\tcE.regEx.remoteCell = cE.regEx.remoteCellInsensitive;\r\n
+\t\t\tcE.regEx.remoteCellRange = cE.regEx.remoteCellRangeInsensitive;\r\n
+\t\t\tcE.regEx.sheet = cE.regEx.sheetInsensitive;\r\n
+\t\t\t\r\n
+\t\t\t//Make sheet functions upper and lower case compatible\r\n
+\t\t\tfor (var k in cE.fn) {\r\n
+\t\t\t\tvar kLower = k.toLowerCase();\r\n
+\t\t\t\tif (kLower != k) {\r\n
+\t\t\t\t\tcE.fn[kLower] = cE.fn[k];\r\n
+\t\t\t\t}\r\n
+\t\t\t}\r\n
+\t\t}\r\n
+\t\t\r\n
+\t\tjS.openSheet(o);\r\n
+\t\t\r\n
+\t\treturn jS;\r\n
+\t},\r\n
+\tmakeTable : {\r\n
+\t\txml: function (data) { //Will not accept CDATA tags\r\n
+\t\t\tvar tables = jQuery(\'\074div /\076\');\r\n
+\t\t\r\n
+\t\t\tjQuery(data).find(\'document\').each(function(i) { //document\r\n
+\t\t\t\tvar table = jQuery(\'\074table /\076\');\r\n
+\t\t\t\tvar tableWidth = 0;\r\n
+\t\t\t\tvar colgroup = jQuery(\'\074colgroup /\076\').appendTo(table);\r\n
+\t\t\t\tvar tbody = jQuery(\'\074tbody /\076\');\r\n
+\t\t\t\r\n
+\t\t\t\tvar metaData = jQuery(this).find(\'metadata\');\r\n
+\t\t\t\tvar columnCount = metaData.find(\'columns\').text();\r\n
+\t\t\t\tvar rowCount = metaData.find(\'rows\').text();\r\n
+\t\t\t\tvar title = jQuery(this).attr(\'title\');\r\n
+\t\t\t\tvar data = jQuery(this).find(\'data\');\r\n
+\t\t\t\tvar col_widths = metaData.find(\'col_widths\').children();\r\n
+\t\t\t\t\r\n
+\t\t\t\t//go ahead and make the cols for colgroup\r\n
+\t\t\t\tfor (var i = 0; i \074 parseInt(jQuery.trim(columnCount)); i++) {\r\n
+\t\t\t\t\tvar w = parseInt(col_widths.eq(i).text().replace(\'px\', \'\'));\r\n
+\t\t\t\t\tw = (w ? w : 120); //if width doesn\'t exist, grab default\r\n
+\t\t\t\t\ttableWidth += w;\r\n
+\t\t\t\t\tcolgroup.append(\'\074col width="\' + w + \'px" style="width: \' + w + \'px;" /\076\');\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\ttable\r\n
+\t\t\t\t\t.width(tableWidth)\r\n
+\t\t\t\t\t.attr(\'title\', title);\r\n
+\t\t\t\t\r\n
+\t\t\t\tfor (var i = 0; i \074 rowCount; i++) { //rows\r\n
+\t\t\t\t\tvar tds = data.find(\'r\' + i);\r\n
+\t\t\t\t\tvar height = (data.attr(\'h\') + \'\').replace(\'px\', \'\');\r\n
+\t\t\t\t\theight = parseInt(height);\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tvar thisRow = jQuery(\'\074tr height="\' + (height ? height : 18) + \'px" /\076\');\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tfor (var j = 0; j \074 columnCount; j++) { //cols, they need to be counted because we don\'t send them all on export\r\n
+\t\t\t\t\t\tvar newTd = \'\074td /\076\'; //we give td a default empty td\r\n
+\t\t\t\t\t\tvar td = tds.find(\'c\' + j);\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (td) {\r\n
+\t\t\t\t\t\t\tvar text = td.text() + \'\';\r\n
+\t\t\t\t\t\t\tvar cl = td.attr(\'class\');\r\n
+\t\t\t\t\t\t\tvar style = td.attr(\'style\');\r\n
+\t\t\t\t\t\t\tvar colSpan = td.attr(\'colspan\');\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tvar formula = \'\';\r\n
+\t\t\t\t\t\t\tif (text.charAt(0) == \'=\') {\r\n
+\t\t\t\t\t\t\t\tformula = \' formula="\' + text + \'"\';\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t\r\n
+\t\t\t\t\t\t\tnewTd = \'\074td\' + formula + \r\n
+\t\t\t\t\t\t\t\t(style ? \' style=\\"\' + style + \'\\"\' : \'\') + \r\n
+\t\t\t\t\t\t\t\t(cl ? \' class=\\"\' + cl + \'\\"\' : \'\') +\r\n
+\t\t\t\t\t\t\t\t(colSpan ? \' colspan=\\"\' + colSpan + \'\\"\' : \'\') +\r\n
+\t\t\t\t\t\t\t\t(height ? \' height=\\"\' + height + \'px\\"\' : \'\') +\r\n
+\t\t\t\t\t\t\t\'\076\' + text + \'\074/td\076\';\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tthisRow.append(newTd);\r\n
+\t\t\t\t\t}\t\r\n
+\t\t\t\t\ttbody.append(thisRow);\r\n
+\t\t\t\t}\r\n
+\t\t\t\ttable\r\n
+\t\t\t\t\t.append(tbody)\r\n
+\t\t\t\t\t.appendTo(tables);\r\n
+\t\t\t});\r\n
+\t\t\t\r\n
+\t\t\treturn tables.children();\r\n
+\t\t},\r\n
+\t\tjson: function(data, makeEval) {\r\n
+\t\t\tsheet = (makeEval == true ? eval(\'(\' + data + \')\') : data);\r\n
+\t\t\t\r\n
+\t\t\tvar tables = jQuery(\'\074div /\076\');\r\n
+\t\t\t\r\n
+\t\t\tfor (var i = 0; i \074 sheet.length; i++) {\r\n
+\t\t\t\tvar colCount = parseInt(sheet[i].metadata.columns);\r\n
+\t\t\t\tvar rowCount = parseInt(sheet[i].metadata.rows);\r\n
+\t\t\t\ttitle = sheet[i].metadata.title;\r\n
+\t\t\t\ttitle = (title ? title : "Spreadsheet " + i);\r\n
+\t\t\t\r\n
+\t\t\t\tvar table = jQuery("\074table /\076");\r\n
+\t\t\t\tvar tableWidth = 0;\r\n
+\t\t\t\tvar colgroup = jQuery(\'\074colgroup /\076\').appendTo(table);\r\n
+\t\t\t\tvar tbody = jQuery(\'\074tbody /\076\');\r\n
+\t\t\t\t\r\n
+\t\t\t\t//go ahead and make the cols for colgroup\r\n
+\t\t\t\tif (sheet[i][\'metadata\'][\'col_widths\']) {\r\n
+\t\t\t\t\tfor (var x = 0; x \074 colCount; x++) {\r\n
+\t\t\t\t\t\tvar w = 120;\r\n
+\t\t\t\t\t\tif (sheet[i][\'metadata\'][\'col_widths\'][\'c\' + x]) {\r\n
+\t\t\t\t\t\t\tvar newW = parseInt(sheet[i][\'metadata\'][\'col_widths\'][\'c\' + x].replace(\'px\', \'\'));\r\n
+\t\t\t\t\t\t\tw = (newW ? newW : 120); //if width doesn\'t exist, grab default\r\n
+\t\t\t\t\t\t\ttableWidth += w;\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\tcolgroup.append(\'\074col width="\' + w + \'px" style="width: \' + w + \'px;" /\076\');\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\ttable\r\n
+\t\t\t\t\t.attr(\'title\', title)\r\n
+\t\t\t\t\t.width(tableWidth);\r\n
+\t\t\t\t\r\n
+\t\t\t\tfor (var x = 0; x \074 rowCount; x++) { //tr\r\n
+\t\t\t\t\tvar tr = jQuery(\'\074tr /\076\').appendTo(table);\r\n
+\t\t\t\t\ttr.attr(\'height\', (sheet[i][\'data\'][\'r\' + x].h ? sheet[i][\'data\'][\'r\' + x].h : 18));\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\tfor (var y = 0; y \074 colCount; y++) { //td\r\n
+\t\t\t\t\t\tvar cell = sheet[i][\'data\'][\'r\' + x][\'c\' + y];\r\n
+\t\t\t\t\t\tvar cur_val;\r\n
+\t\t\t\t\t\tvar colSpan;\r\n
+\t\t\t\t\t\tvar style;\r\n
+\t\t\t\t\t\tvar cl;\r\n
+\t\t\t\t\t\t\r\n
+\t\t\t\t\t\tif (cell) {\r\n
+\t\t\t\t\t\t\tcur_val = cell.value + \'\';\r\n
+\t\t\t\t\t\t\tcolSpan = cell.colSpan + \'\';\r\n
+\t\t\t\t\t\t\tstyle = cell.style + \'\';\r\n
+\t\t\t\t\t\t\tcl = cell.cl + \'\';\r\n
+\t\t\t\t\t\t}\r\n
+\r\n
+\t\t\t\t\t\tvar cur_td = jQuery(\'\074td\' + \r\n
+\t\t\t\t\t\t\t\t(style ? \' style=\\"\' + style + \'\\"\' : \'\' ) + \r\n
+\t\t\t\t\t\t\t\t(cl ? \' class=\\"\' + cl + \'\\"\' : \'\' ) + \r\n
+\t\t\t\t\t\t\t\t(colSpan ? \' colspan=\\"\' + colSpan + \'\\"\' : \'\' ) + \r\n
+\t\t\t\t\t\t\t\' /\076\');\r\n
+\t\t\t\t\t\ttry {\r\n
+\t\t\t\t\t\t\tif(typeof(cur_val) == "number") {\r\n
+\t\t\t\t\t\t\t\tcur_td.html(cur_val);\r\n
+\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\tif (cur_val.charAt(0) == \'=\') {\r\n
+\t\t\t\t\t\t\t\t\tcur_td.attr("formula", cur_val);\r\n
+\t\t\t\t\t\t\t\t} else {\r\n
+\t\t\t\t\t\t\t\t\tcur_td.html(cur_val);\r\n
+\t\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t\t}\r\n
+\t\t\t\t\t\t} catch (e) {}\r\n
+\t\t\t\t\t\r\n
+\t\t\t\t\t\ttr.append(cur_td);\r\n
+\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t\t\r\n
+\t\t\t\ttables.append(table);\r\n
+\t\t\t}\r\n
+\t\t\treturn tables.children();\r\n
+\t\t},\r\n
+\t\tfromSize: function(size, h, w) {\r\n
+\t\t\tif (!size) {\r\n
+\t\t\t\tsize = "5x10";\r\n
+\t\t\t}\r\n
+\t\t\tsize = size.toLowerCase().split(\'x\');\r\n
+\r\n
+\t\t\tvar columnsCount = parseInt(size[0]);\r\n
+\t\t\tvar rowsCount = parseInt(size[1]);\r\n
+\t\t\t\r\n
+\t\t\t//Create elements before loop to make it faster.\r\n
+\t\t\tvar newSheet = jQuery(\'\074table /\076\');\r\n
+\t\t\tvar standardTd = \'\074td\076\074/td\076\';\r\n
+\t\t\tvar tds = \'\';\r\n
+\t\t\t\r\n
+\t\t\t//Using -- is many times faster than ++\r\n
+\t\t\tfor (var i = columnsCount; i \076= 1; i--) {\r\n
+\t\t\t\ttds += standardTd;\r\n
+\t\t\t}\r\n
+\r\n
+\t\t\tvar standardTr = \'\074tr\' + (h ? \' height="\' + h + \'px" style="height: \' + h + \'px;"\' : \'\') + \'\076\' + tds + \'\074/tr\076\';\r\n
+\t\t\tvar trs = \'\';\r\n
+\t\t\tfor (var i = rowsCount; i \076= 1; i--) {\r\n
+\t\t\t\ttrs += standardTr;\r\n
+\t\t\t}\r\n
+\t\t\t\r\n
+\t\t\tnewSheet.html(\'\074tbody\076\' + trs + \'\074/tbody\076\');\r\n
+\t\t\t\r\n
+\t\t\tif (w) {\r\n
+\t\t\t\tnewSheet.width(columnsCount * w);\r\n
+\t\t\t}\r\n
+\t\t\t\r\n
+\t\t\treturn newSheet;\r\n
+\t\t}\r\n
+\t},\r\n
+\tkillAll: function() {\r\n
+\t\tif (jQuery.sheet) {\r\n
+\t\t\tif (jQuery.sheet.instance) {\r\n
+\t\t\t\tfor (var i = 0; i \074 jQuery.sheet.instance.length; i++) {\r\n
+\t\t\t\t\tif (jQuery.sheet.instance[i]) {\r\n
+\t\t\t\t\t\tif (jQuery.sheet.instance[i].kill) {\r\n
+\t\t\t\t\t\t\tjQuery.sheet.instance[i].kill();\r\n
+\t\t\t\t\t\t}\r\n
+\t\t\t\t\t}\r\n
+\t\t\t\t}\r\n
+\t\t\t}\r\n
+\t\t}\r\n
+\t}\r\n
+};\r\n
+\r\n
+var key = {\r\n
+\tBACKSPACE: \t\t\t8,\r\n
+\tCAPS_LOCK: \t\t\t20,\r\n
+\tCOMMA: \t\t\t\t188,\r\n
+\tCONTROL: \t\t\t17,\r\n
+\tALT:\t\t\t\t18,\r\n
+\tDELETE: \t\t\t46,\r\n
+\tDOWN: \t\t\t\t40,\r\n
+\tEND: \t\t\t\t35,\r\n
+\tENTER: \t\t\t\t13,\r\n
+\tESCAPE: \t\t\t27,\r\n
+\tHOME: \t\t\t\t36,\r\n
+\tINSERT: \t\t\t45,\r\n
+\tLEFT: \t\t\t\t37,\r\n
+\tNUMPAD_ADD: \t\t107,\r\n
+\tNUMPAD_DECIMAL: \t110,\r\n
+\tNUMPAD_DIVIDE: \t\t111,\r\n
+\tNUMPAD_ENTER: \t\t108,\r\n
+\tNUMPAD_MULTIPLY: \t106,\r\n
+\tNUMPAD_SUBTRACT: \t109,\r\n
+\tPAGE_DOWN: \t\t\t34,\r\n
+\tPAGE_UP: \t\t\t33,\r\n
+\tPERIOD: \t\t\t190,\r\n
+\tRIGHT: \t\t\t\t39,\r\n
+\tSHIFT: \t\t\t\t16,\r\n
+\tSPACE: \t\t\t\t32,\r\n
+\tTAB: \t\t\t\t9,\r\n
+\tUP: \t\t\t\t38,\r\n
+\tF:\t\t\t\t\t70,\r\n
+\tV:\t\t\t\t\t86,\r\n
+\tY:\t\t\t\t\t89,\r\n
+\tZ:\t\t\t\t\t90\r\n
+};</string> </value>
+        </item>
+        <item>
+            <key> <string>next</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.min.js.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.min.js.xml
new file mode 100644
index 0000000000..8ecd701a4d
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery.sheet.min.js.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79960941.53</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>jquery.sheet.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/x-javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>77769</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Pdata" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string>/*\r\n
+jQuery.sheet() Spreadsheet with Calculations Plugin\r\n
+Version: 1.1.0\r\n
+http://code.google.com/p/jquerysheet/\r\n
+\t\t\r\n
+Copyright (C) 2010 Robert Plummer\r\n
+Dual licensed under the LGPL v2 and GPL v2 licenses.\r\n
+http://www.gnu.org/licenses/\r\n
+*/\r\n
+jQuery.fn.extend({sheet:function(a){a=jQuery.extend({urlGet:"sheets/enduser.documentation.html",urlSave:"save.html",editable:true,allowToggleState:true,urlMenu:"menu.html",newColumnWidth:120,title:null,inlineMenu:null,buildSheet:false,calcOff:false,log:false,lockFormulas:false,parent:jQuery(this),colMargin:18,fnBefore:function(){},fnAfter:function(){},fnSave:function(){jS.saveSheet()},fnOpen:function(){var c=prompt("Paste your table html here");if(c){jS.openSheet(c)}},fnClose:function(){},fnAfterCellEdit:function(){},joinedResizing:false,boxModelCorrection:2,showErrors:true,calculations:{},cellSelectModel:"excel",autoAddCells:true,caseInsensitive:false},a);var b=a.parent;if(jQuery.sheet.instance){b.sheetInstance=jQuery.sheet.createInstance(a,jQuery.sheet.instance.length,b);jQuery.sheet.instance.push(b.sheetInstance)}else{b.sheetInstance=jQuery.sheet.createInstance(a,0,b);jQuery.sheet.instance=[b.sheetInstance]}return b}});jQuery.sheet={createInstance:function(s,I,origParent){var jS={version:"1.1.0",i:0,I:I,sheetCount:0,s:{},obj:{barCorner:function(){return jQuery("#"+jS.id.barCorner+jS.i)},barCornerAll:function(){return s.parent.find("div."+jS.cl.barCorner)},barCornerParent:function(){return jQuery("#"+jS.id.barCornerParent+jS.i)},barCornerParentAll:function(){return s.parent.find("td."+jS.cl.barCornerParent)},barTop:function(){return jQuery("#"+jS.id.barTop+jS.i)},barTopAll:function(){return s.parent.find("div."+jS.cl.barTop)},barTopParent:function(){return jQuery("#"+jS.id.barTopParent+jS.i)},barTopParentAll:function(){return s.parent.find("div."+jS.cl.barTopParent)},barLeft:function(){return jQuery("#"+jS.id.barLeft+jS.i)},barLeftAll:function(){return s.parent.find("div."+jS.cl.barLeft)},barLeftParent:function(){return jQuery("#"+jS.id.barLeftParent+jS.i)},barLeftParentAll:function(){return s.parent.find("div."+jS.cl.barLeftParent)},cellActive:function(){return jQuery(jS.cellLast.td)},cellHighlighted:function(){return jQuery(jS.highlightedLast.td)},controls:function(){return jQuery("#"+jS.id.controls)},formula:function(){return jQuery("#"+jS.id.formula)},fullScreen:function(){return jQuery("div."+jS.cl.fullScreen)},inPlaceEdit:function(){return jQuery("#"+jS.id.inPlaceEdit)},label:function(){return jQuery("#"+jS.id.label)},log:function(){return jQuery("#"+jS.id.log)},menu:function(){return jQuery("#"+jS.id.menu)},pane:function(){return jQuery("#"+jS.id.pane+jS.i)},paneAll:function(){return s.parent.find("div."+jS.cl.pane)},parent:function(){return s.parent},sheet:function(){return jQuery("#"+jS.id.sheet+jS.i)},sheetAll:function(){return s.parent.find("table."+jS.cl.sheet)},tab:function(){return jQuery("#"+jS.id.tab+jS.i)},tabAll:function(){return this.tabContainer().find("a."+jS.cl.tab)},tabContainer:function(){return jQuery("#"+jS.id.tabContainer)},tableBody:function(){return document.getElementById(jS.id.sheet+jS.i)},tableControl:function(){return jQuery("#"+jS.id.tableControl+jS.i)},tableControlAll:function(){return s.parent.find("table."+jS.cl.tableControl)},ui:function(){return jQuery("#"+jS.id.ui)},uiActive:function(){return s.parent.find("div."+jS.cl.uiActive)}},id:{barCorner:"jSheetBarCorner_"+I+"_",barCornerParent:"jSheetBarCornerParent_"+I+"_",barTop:"jSheetBarTop_"+I+"_",barTopParent:"jSheetBarTopParent_"+I+"_",barLeft:"jSheetBarLeft_"+I+"_",barLeftParent:"jSheetBarLeftParent_"+I+"_",controls:"jSheetControls_"+I,formula:"jSheetControls_formula_"+I,inPlaceEdit:"jSheetInPlaceEdit_"+I,label:"jSheetControls_loc_"+I,log:"jSheetLog_"+I,menu:"jSheetMenu_"+I,pane:"jSheetEditPane_"+I+"_",sheet:"jSheet_"+I+"_",tableControl:"tableControl_"+I+"_",tab:"jSheetTab_"+I,tabContainer:"jSheetTabContainer_"+I+"_",ui:"jSheetUI_"+I},cl:{barCorner:"jSheetBarCorner",barCornerParent:"jSheetBarCornerParent",barLeftTd:"barLeft",barLeft:"jSheetBarLeft",barLeftParent:"jSheetBarLeftParent",barTop:"jSheetBarTop",barTopParent:"jSheetBarTopParent",barTopTd:"barTop",cellActive:"jSheetCellActive",cellHighlighted:"jSheetCellHighighted",controls:"jSheetControls",formula:"jSheetControls_formula",fullScreen:"jSheetFullScreen",inPlaceEdit:"jSheetInPlaceEdit",menu:"jSheetMenu",sheet:"jSheet",sheetPaneTd:"sheetPane",label:"jSheetControls_loc",log:"jSheetLog",pane:"jSheetEditPane",tab:"jSheetTab",tabContainer:"jSheetTabContainer",tabContainerFullScreen:"jSheetFullScreenTabContainer",tableControl:"tableControl",toggle:"cellStyleToggle",ui:"jSheetUI",uiActive:"ui-state-active",uiBar:"ui-widget-header",uiCellActive:"ui-state-active",uiCellHighlighted:"ui-state-highlight",uiControl:"ui-widget-header ui-corner-top",uiControlTextBox:"ui-widget-content",uiFullScreen:"ui-widget-content ui-corner-all",uiInPlaceEdit:"ui-state-active",uiMenu:"ui-state-highlight",uiMenuUl:"ui-widget-header",uiMenuLi:"ui-widget-header",uiMenuHighlighted:"ui-state-highlight",uiPane:"ui-widget-content",uiParent:"ui-widget-content ui-corner-all",uiSheet:"ui-widget-content",uiTab:"ui-widget-header",uiTabActive:"ui-state-highlight"},kill:function(){jS.obj.tabContainer().remove();jS.obj.fullScreen().remove();jS.obj.inPlaceEdit().remove();origParent.removeClass(jS.cl.uiParent).html("");cE=s=jQuery.sheet.instance[I]=jS=origParent.sheetInstance=null;delete cE;delete s;delete jQuery.sheet.instance[I];delete jS;delete origParent.sheetInstance},controlFactory:{addRowMulti:function(qty,isBefore){if(!qty){qty=prompt("How many rows would you like to add?")}if(qty){jS.controlFactory.addCells(null,isBefore,null,qty,"row")}},addColumnMulti:function(qty,isBefore){if(!qty){qty=prompt("How many columns would you like to add?")}if(qty){jS.controlFactory.addCells(null,isBefore,null,qty,"col")}},addCells:function(eq,isBefore,eqO,qty,type){jS.setDirty(true);var sheet=jS.obj.sheet();var sheetWidth=sheet.width();qty=(qty?qty:1);type=(type?type:"col");var cellLastBar=(type=="row"?jS.cellLast.row:jS.cellLast.col);if(!eq){if(cellLastBar==-1){eq=":last"}else{eq=":eq("+cellLastBar+")"}}else{if(!isNaN(eq)){eq=":eq("+(eq-1)+")"}}var o;switch(type){case"row":o={bar:jS.obj.barLeft().find("div"+eq),barParent:jS.obj.barLeft(),cells:function(){return sheet.find("tr"+eq)},col:function(){return""},newBar:\'\074div class="\'+jS.cl.uiBar+\'" style="height: \'+(s.colMargin-s.boxModelCorrection)+\'px;" /\076\',loc:function(){return jS.getTdLocation(o.cells().find("td:last"))},newCells:function(){var j=o.loc()[1];var newCells="";for(var i=0;i\074=j;i++){newCells+="\074td /\076"}return\'\074tr style="height: \'+s.colMargin+\'px;"\076\'+newCells+"\074/tr\076"},newCol:"",reLabel:function(){o.barParent.children().each(function(i){jQuery(this).text(i+1)})},dimensions:function(loc,bar,cell,col){bar.height(cell.height(s.colMargin).outerHeight()-s.boxModelCorrection)},offset:[qty,0]};break;case"col":o={bar:jS.obj.barTop().find("div"+eq),barParent:jS.obj.barTop(),cells:function(){var cellStart=sheet.find("tr:first td"+eq);var cellEnd=sheet.find("td:last");var loc1=jS.getTdLocation(cellStart);var loc2=jS.getTdLocation(cellEnd);var cells=jQuery(jS.getTd(jS.i,loc1[0],loc1[1]));var cell;for(var i=1;i\074=loc2[0];i++){cells.push(jS.getTd(jS.i,i,loc1[1]))}return cells},col:function(){return sheet.find("col"+eq)},newBar:\'\074div class="\'+jS.cl.uiBar+\'"/\076\',newCol:"\074col /\076",loc:function(cells){cells=(cells?cells:o.cells());return jS.getTdLocation(cells.first())},newCells:function(){return"\074td /\076"},reLabel:function(){o.barParent.children().each(function(i){jQuery(this).text(cE.columnLabelString(i+1))})},dimensions:function(loc,bar,cell,col){var w=s.newColumnWidth;col.width(w).css("width",w+"px").attr("width",w+"px");bar.width(w-s.boxModelCorrection);sheet.width(sheetWidth+(w*qty))},offset:[0,qty]};break}jS.cellUndoable.add(jQuery(sheet).add(o.barParent));var cells=o.cells();var loc=o.loc(cells);var col=o.col();var newBar=o.newBar;var newCell=o.newCells();var newCol=o.newCol;var newCols="";var newBars="";var newCells="";for(var i=0;i\074qty;i++){newCols+=newCol;newBars+=newBar;newCells+=newCell}newCols=jQuery(newCols);newBars=jQuery(newBars);newCells=jQuery(newCells);if(isBefore){cells.before(newCells);o.bar.before(newBars);jQuery(col).before(newCols)}else{cells.after(newCells);o.bar.after(newBars);jQuery(col).after(newCols)}jS.setTdIds(sheet);o.dimensions(loc,newBars,newCells,newCols);o.reLabel();jS.obj.pane().scroll();jS.offsetFormulaRange((isBefore?loc[0]-qty:loc[0]),(isBefore?loc[1]-qty:loc[0]),o.offset[0],o.offset[1],isBefore);jS.sheetSyncSize();jS.cellUndoable.add(jQuery(sheet).add(o.barParent))},addRow:function(atRow,isBefore,atRowQ){jS.controlFactory.addCells(atRow,isBefore,atRowQ,1,"row")},addColumn:function(atColumn,isBefore,atColumnQ){jS.controlFactory.addCells(atColumn,isBefore,atColumnQ,1,"col")},barLeft:function(reload,o){jS.obj.barLeft().remove();var barLeft=jQuery(\'\074div border="1px" id="\'+jS.id.barLeft+jS.i+\'" class="\'+jS.cl.barLeft+\'" /\076\');var heightFn;if(reload){heightFn=function(i,objSource,objBar){objBar.height(parseInt(objSource.outerHeight())-s.boxModelCorrection)}}else{heightFn=function(i,objSource,objBar){objBar.height(parseInt(objSource.css("height").replace("px",""))-s.boxModelCorrection)}}o.find("tr").each(function(i){var child=jQuery("\074div\076"+(i+1)+"\074/div\076");jQuery(barLeft).append(child);heightFn(i,jQuery(this),child)});jS.evt.barMouseDown.height(jS.obj.barLeftParent().append(barLeft))},barTop:function(reload,o){jS.obj.barTop().remove();var barTop=jQuery(\'\074div id="\'+jS.id.barTop+jS.i+\'" class="\'+jS.cl.barTop+\'" /\076\');barTop.height(s.colMargin);var parents;var widthFn;if(reload){parents=o.find("tr:first td");widthFn=function(obj){return jS.attrH.width(obj)}}else{parents=o.find("col");widthFn=function(obj){return parseInt(jQuery(obj).css("width").replace("px",""))-s.boxModelCorrection}}parents.each(function(i){var v=cE.columnLabelString(i+1);var w=widthFn(this);var child=jQuery("\074div\076"+v+"\074/div\076").width(w).height(s.colMargin);barTop.append(child)});jS.evt.barMouseDown.width(jS.obj.barTopParent().append(barTop))},header:function(){jS.obj.controls().remove();jS.obj.tabContainer().remove();var header=jQuery(\'\074div id="\'+jS.id.controls+\'" class="\'+jS.cl.controls+\'"\076\074/div\076\');var firstRow=jQuery(\'\074table cellpadding="0" cellspacing="0" border="0"\076\074tr /\076\074/table\076\').prependTo(header);var firstRowTr=jQuery("\074tr /\076");if(s.title){var title;if(jQuery.isFunction(s.title)){title=jS.title(jS)}else{title=s.title}firstRowTr.append(jQuery(\'\074td style="width: auto;text-align: center;" /\076\').html(title))}if(s.inlineMenu\046\046s.editable){var inlineMenu;if(jQuery.isFunction(s.inlineMenu)){inlineMenu=s.inlineMenu(jS)}else{inlineMenu=s.inlineMenu}firstRowTr.append(jQuery(\'\074td style="text-align: center;" /\076\').html(inlineMenu))}if(s.editable){if(jQuery.mbMenu){jQuery("\074div /\076").load(s.urlMenu,function(){var menu=jQuery(\'\074td style="width: 50px; text-align: center;" id="\'+jS.id.menu+\'" class="rootVoices ui-corner-tl \'+jS.cl.menu+\'" /\076\').html(jQuery(this).html().replace(/sheetInstance/g,"jQuery.sheet.instance["+I+"]").replace(/menuInstance/g,I));menu.prependTo(firstRowTr).buildMenu({menuWidth:100,openOnRight:false,containment:s.parent.attr("id"),hasImages:false,fadeInTime:0,fadeOutTime:0,adjustLeft:2,minZindex:"auto",adjustTop:10,opacity:0.95,shadow:false,closeOnMouseOut:true,closeAfter:1000,hoverIntent:0,submenuHoverIntent:0}).hover(function(){jQuery(this).addClass(jS.cl.uiMenu)},function(){jQuery(this).removeClass(jS.cl.uiMenu)})})}var secondRow=jQuery(\'\074table cellpadding="0" cellspacing="0" border="0"\076\074tr\076\074td style="width: 35px; text-align: right;" id="\'+jS.id.label+\'" class="\'+jS.cl.label+\'"\076\074/td\076\074td\076\074textarea id="\'+jS.id.formula+\'" class="\'+jS.cl.formula+\'"\076\074/textarea\076\074/td\076\074/tr\076\074/table\076\').keydown(jS.evt.keyDownHandler.formulaOnKeyDown).keyup(function(){jS.obj.inPlaceEdit().val(jS.obj.formula().val())}).change(function(){jS.obj.inPlaceEdit().val(jS.obj.formula().val())}).appendTo(header)}firstRowTr.appendTo(firstRow);var tabParent=jQuery(\'\074div id="\'+jS.id.tabContainer+\'" class="\'+jS.cl.tabContainer+\'"\076\'+(s.editable?\'\074span class="\'+jS.cl.uiTab+\' ui-corner-bottom" title="Add a spreadsheet" i="-1"\076+\074/span\076\':"\074span /\076")+"\074/div\076").mousedown(jS.evt.tabOnMouseDown);s.parent.html("").append(header).append(\'\074div id="\'+jS.id.ui+\'" class="\'+jS.cl.ui+\'"\076\').after(tabParent)},sheet:function(size){if(!size){size=s.buildSheet}size=size.toLowerCase().split("x");var columnsCount=parseInt(size[0]);var rowsCount=parseInt(size[1]);var newSheet=jQuery(\'\074table  cellpadding="0" cellspacing="0" border="0" border="1px" class="\'+jS.cl.sheet+\'" id="\'+jS.id.sheet+jS.i+\'"\076\074/table\076\');var standardTd="\074td\076 \074/td\076";var tds="";for(var i=columnsCount;i\076=1;i--){tds+=standardTd}var standardTr=\'\074tr height="\'+s.colMargin+\'" style="height: \'+s.colMarg+\';"\076\'+tds+"\074/tr\076";var trs="";for(var i=rowsCount;i\076=1;i--){trs+=standardTr}newSheet.html("\074tbody\076"+trs+"\074/tbody\076");newSheet.width(columnsCount*s.newColumnWidth);return newSheet},sheetUI:function(o,i,fn,reloadBars){if(!i){jS.sheetCount=0;jS.i=0}else{jS.sheetCount++;jS.i=jS.sheetCount;i=jS.i}var objContainer=jS.controlFactory.table().appendTo(jS.obj.ui());var pane=jS.obj.pane().html(o);o=jS.tuneTableForSheetUse(o);jS.sheetDecorate(o);jS.controlFactory.barTop(reloadBars,o);jS.controlFactory.barLeft(reloadBars,o);jS.sheetTab(true);if(s.editable){pane.mousedown(function(e){jS.evt.cellOnMouseDown(e);return false});pane.dblclick(jS.evt.cellOnDblClick)}jS.themeRoller.start(i);jS.setTdIds(o);jS.evt.scrollBars();jS.addTab();if(fn){fn()}jS.log("Sheet Initialized");return objContainer},table:function(){return jQuery(\'\074table cellpadding="0" cellspacing="0" border="0" id="\'+jS.id.tableControl+jS.i+\'" class="\'+jS.cl.tableControl+\'"\076\074tbody\076\074tr\076\074td id="\'+jS.id.barCornerParent+jS.i+\'" class="\'+jS.cl.barCornerParent+\'"\076\074div style="height: \'+s.colMargin+"; width: "+s.colMargin+\';" id="\'+jS.id.barCorner+jS.i+\'" class="\'+jS.cl.barCorner+\'"\'+(s.editable?\' onClick="jQuery.sheet.instance[\'+I+"].cellSetActiveBar(\'all\');\\"":"")+\' title="Select All"\076\046nbsp;\074/div\076\074/td\076\074td class="\'+jS.cl.barTopTd+\'"\076\074div id="\'+jS.id.barTopParent+jS.i+\'" class="\'+jS.cl.barTopParent+\'"\076\074/div\076\074/td\076\074/tr\076\074tr\076\074td class="\'+jS.cl.barLeftTd+\'"\076\074div style="width: \'+s.colMargin+\';" id="\'+jS.id.barLeftParent+jS.i+\'" class="\'+jS.cl.barLeftParent+\'"\076\074/div\076\074/td\076\074td class="\'+jS.cl.sheetPaneTd+\'"\076\074div id="\'+jS.id.pane+jS.i+\'" class="\'+jS.cl.pane+\'"\076\074/div\076\074/td\076\074/tr\076\074/tbody\076\074/table\076\')},chart:function(type,data,legend,axisLabels,w,h,row){if(jGCharts){var api=new jGCharts.Api();function refine(v){var refinedV=new Array();jQuery(v).each(function(i){refinedV[i]=jS.manageHtmlToText(v[i]+"")});return refinedV}var o={};if(type){o.type=type}if(data){data=data.filter(function(v){return(v?v:0)});o.data=data}if(legend){o.legend=refine(legend)}if(axisLabels){o.axis_labels=refine(axisLabels)}if(w||h){o.size=w+"x"+h}return jS.controlFactory.safeImg(api.make(o),row)}else{return jQuery("\074div\076Charts are not enabled\074/div\076")}},safeImg:function(src,row){return jQuery("\074img /\076").hide().load(function(){jQuery(this).fadeIn(function(){jQuery(this).addClass("safeImg");jS.attrH.setHeight(parseInt(row),"cell",false)})}).attr("src",src)},inPlaceEdit:function(td){jS.obj.inPlaceEdit().remove();var formula=jS.obj.formula();var offset=td.offset();var style=td.attr("style");var w=td.width();var h=td.height();var textarea=jQuery(\'\074textarea id="\'+jS.id.inPlaceEdit+\'" class="\'+jS.cl.inPlaceEdit+" "+jS.cl.uiInPlaceEdit+\'" /\076\').css("left",offset.left).css("top",offset.top).width(w).height(h).keydown(jS.evt.inPlaceEditOnKeyDown).keyup(function(){formula.val(textarea.val())}).change(function(){formula.val(textarea.val())}).appendTo("body").val(formula.val()).focus().select();if(jQuery.fn.elastic){textarea.elastic()}},input:{select:function(){return jQuery(\'\074select style="width: 100%;" onchange="jQuery.sheet.instance[\'+I+\'].controlFactory.input.setValue(jQuery(this).val(), jQuery(this).parent());" class="clickable" /\076\')},radio:function(v,cell){var radio=jQuery(\'\074span class="clickable" /\076\');var name=I+"_table"+cell.tableI+"_cell_c"+(cell.col-1)+"_r"+(cell.row-1)+"radio";for(var i=0;i\074(v.length\074=25?v.length:25);i++){if(v[i]){radio.append(\'\074input onchange="jQuery.sheet.instance[\'+I+\'].controlFactory.input.setValue(jQuery(this).val(), jQuery(this).parent().parent());" type="radio" value="\'+v[i]+\'" name="\'+name+\'" /\076\'+v[i]+"\074br /\076")}}return radio},checkbox:function(v){return jQuery(\'\074input onclick="jQuery.sheet.instance[\'+I+"].controlFactory.input.setValue(jQuery(this).is(\':checked\') + \'\', jQuery(this).parent());\\" type=\\"checkbox\\" value=\\""+v+\'" /\076\'+v+"\074br /\076")},setValue:function(v,p){p.attr("selectedvalue",v);jS.calc(cE.calcState.i)},getValue:function(cell){return jQuery(jS.getTd(cell.tableI,cell.row-1,cell.col-1)).attr("selectedvalue")}}},sizeSync:{},evt:{keyDownHandler:{enterOnInPlaceEdit:function(e){if(!e.shiftKey){return jS.evt.cellSetFocusFromKeyCode(e)}else{return true}},enter:function(e){if(!jS.cellLast.isEdit\046\046!e.ctrlKey){jS.cellLast.td.dblclick();return false}else{return this.enterOnInPlaceEdit(e)}},tab:function(e){return jS.evt.cellSetFocusFromKeyCode(e)},pasteOverCells:function(e){if(e.ctrlKey){var formula=jS.obj.formula();var oldVal=formula.val();formula.val("");jQuery(document).one("keyup",function(){var loc=jS.getTdLocation(jS.cellLast.td);var val=formula.val();var firstValue="";formula.val("");var tdsBefore=jQuery("\074div /\076");var tdsAfter=jQuery("\074div /\076");var row=val.split(/\\n/g);for(var i=0;i\074row.length;i++){var col=row[i].split(/\\t/g);for(var j=0;j\074col.length;j++){if(col[j]){var td=jQuery(jS.getTd(jS.i,i+loc[0],j+loc[1]));tdsBefore.append(td.clone());if((col[j]+"").charAt(0)=="="){td.attr("formula",col[j])}else{td.html(col[j]).removeAttr("formula")}tdsAfter.append(td.clone());if(i==0\046\046j==0){firstValue=col[j]}}}}jS.cellUndoable.add(tdsBefore.children());jS.cellUndoable.add(tdsAfter.children());formula.val(firstValue);jS.setDirty(true);jS.evt.cellEditDone(true)})}return true},findCell:function(e){if(e.ctrlKey){jS.cellFind();return false}return true},redo:function(e){if(e.ctrlKey\046\046!jS.cellLast.isEdit){jS.cellUndoable.undoOrRedo();return false}return true},undo:function(e){if(e.ctrlKey\046\046!jS.cellLast.isEdit){jS.cellUndoable.undoOrRedo(true);return false}return true},pageUpDown:function(reverse){var pane=jS.obj.pane();var left=jS.cellLast.td.position().left;var top=0;if(reverse){top=0;pane.scrollTop(pane.scrollTop()-pane.height())}else{top=pane.height()-(s.colMargin*3);pane.scrollTop(pane.scrollTop()+top)}return jS.evt.cellSetFocusFromCoordinates(left,top)},formulaOnKeyDown:function(e){switch(e.keyCode){case key.ESCAPE:jS.evt.cellEditAbandon();break;case key.TAB:return jS.evt.keyDownHandler.tab(e);break;case key.ENTER:return jS.evt.keyDownHandler.enter(e);break;case key.LEFT:case key.UP:case key.RIGHT:case key.DOWN:return jS.evt.cellSetFocusFromKeyCode(e);break;case key.PAGE_UP:return jS.evt.keyDownHandler.pageUpDown(true);break;case key.PAGE_DOWN:return jS.evt.keyDownHandler.pageUpDown();break;case key.V:return jS.evt.keyDownHandler.pasteOverCells(e);break;case key.Y:return jS.evt.keyDownHandler.redo(e);break;case key.Z:return jS.evt.keyDownHandler.undo(e);break;case key.F:return jS.evt.keyDownHandler.findCell(e);case key.CONTROL:case key.CAPS_LOCK:case key.SHIFT:case key.ALT:case key.UP:case key.DOWN:case key.LEFT:case key.RIGHT:break;case key.HOME:case key.END:jS.evt.cellSetFocusFromKeyCode(e);break;default:jS.cellLast.isEdit=true}}},inPlaceEditOnKeyDown:function(e){switch(e.keyCode){case key.ENTER:return jS.evt.keyDownHandler.enterOnInPlaceEdit(e);break;case key.TAB:return jS.evt.keyDownHandler.tab(e);break;case key.ESCAPE:jS.evt.cellEditAbandon();return false;break}},formulaChange:function(e){jS.obj.inPlaceEdit().val(jS.obj.formula().val())},inPlaceEditChange:function(e){jS.obj.formula().val(jS.obj.inPlaceEdit().val())},cellEditDone:function(forceCalc){switch(jS.cellLast.isEdit){case true:jS.obj.inPlaceEdit().remove();var formula=jS.obj.formula();formula.unbind("keydown");var td=jS.cellLast.td;switch(jS.isFormulaEditable(td)){case true:if(td){jS.cellUndoable.add(td);var v=jS.manageTextToHtml(formula.val());var prevVal=td.html();if(v.charAt(0)=="="){td.attr("formula",v).html("")}else{td.removeAttr("formula").html(v)}if(v!=prevVal||forceCalc){jS.calc(jS.i)}jS.attrH.setHeight(jS.cellLast.row,"cell");jS.cellUndoable.add(td);formula.focus().select();jS.cellLast.isEdit=false;jS.setDirty(true);s.fnAfterCellEdit({td:jS.cellLast.td,row:jS.cellLast.row,col:jS.cellLast.col,spreadsheetIndex:jS.i,sheetIndex:I})}}break;default:jS.attrH.setHeight(jS.cellLast.row,"cell",false)}},cellEditAbandon:function(skipCalc){jS.obj.inPlaceEdit().remove();jS.themeRoller.cell.clearActive();jS.themeRoller.bar.clearActive();jS.themeRoller.cell.clearHighlighted();if(!skipCalc){jS.calc(jS.i)}jS.cellLast.td=jQuery("\074td /\076");jS.cellLast.row=jS.cellLast.col=-1;jS.rowLast=jS.colLast=-1;jS.labelUpdate("",true);jS.obj.formula().val("");return false},cellSetFocusFromCoordinates:function(left,top,skipOffset){var pane=jS.obj.pane();var paneOffset=(skipOffset?{left:0,top:0}:pane.offset());top+=paneOffset.top+2;left+=paneOffset.left+2;if((top\076=paneOffset.top\046\046top\074=paneOffset.top+pane.height())\046\046(left\076=paneOffset.left\046\046left\074=paneOffset.left+pane.width())){var td=jQuery(document.elementFromPoint(left-$window.scrollLeft(),top-$window.scrollTop()));if(jS.isTd(td)){jS.themeRoller.cell.clearHighlighted();jS.cellEdit(td);return false}else{return true}}else{return false}},cellSetFocusFromKeyCode:function(e){var c=jS.cellLast.col;var r=jS.cellLast.row;var overrideIsEdit=false;switch(e.keyCode){case key.UP:r--;break;case key.DOWN:r++;break;case key.LEFT:c--;break;case key.RIGHT:c++;break;case key.ENTER:r++;overrideIsEdit=true;if(s.autoAddCells){if(jS.cellLast.row==jS.sheetSize()[0]){jS.controlFactory.addCells(":last",false,null,1,"row")}}break;case key.TAB:overrideIsEdit=true;if(e.shiftKey){c--}else{c++}if(s.autoAddCells){if(jS.cellLast.col==jS.sheetSize()[1]){jS.controlFactory.addCells(":last",false,null,1,"col")}}break;case key.HOME:c=0;break;case key.END:c=jS.cellLast.td.parent().find("td").length-1;break}c=(c\0740?0:c);r=(r\0740?0:r);if(!jS.cellLast.isEdit||overrideIsEdit){var td=jS.getTd(jS.i,r,c);if(td){jS.themeRoller.cell.clearHighlighted();jS.cellEdit(jQuery(td));return false}}return true},cellOnMouseDown:function(e){if(e.shiftKey){jS.getTdRange(e,jS.obj.formula().val());return false}else{if(jS.isTd([e.target])){return jS.cellEdit(jQuery(e.target),true)}else{return true}}},cellOnDblClick:function(e){jS.cellLast.isEdit=jS.isSheetEdit=true;jS.controlFactory.inPlaceEdit(jS.cellLast.td);jS.log("click, in place edit activated")},tabOnMouseDown:function(e){var i=jQuery(e.target).attr("i");if(i!="-1"\046\046i!=jS.i){jS.setActiveSheet(jQuery("#"+jS.id.tableControl+i),i);jS.calc(i)}else{if(i!="-1"\046\046jS.i==i){jS.sheetTab()}else{jS.addSheet("5x10")}}return false},resizeBar:function(e,o){var target=jQuery(e.target);var resizeBar={start:function(e){jS.log("start resize");o.offset=target.offset();o.tdPageXY=[o.offset.left,o.offset.top][o.xyDimension];o.startXY=[e.pageX,e.pageY][o.xyDimension];o.i=o.getIndex(target);o.srcBarSize=o.getSize(target);o.edgeDelta=o.startXY-(o.tdPageXY+o.srcBarSize);o.min=10;if(s.joinedResizing){o.resizeFn=function(size){o.setDesinationSize(size);o.setSize(target,size)}}else{o.resizeFn=function(size){o.setSize(target,size)}}if(Math.abs(o.edgeDelta)\074=o.min){jQuery(e.target).parent().css("cursor",o.cursor);jQuery(document).mousemove(resizeBar.drag).mouseup(resizeBar.stop);return true}else{return false}},drag:function(e){var newSize=o.min;var v=o.srcBarSize+([e.pageX,e.pageY][o.xyDimension]-o.startXY);if(v\0760){newSize=Math.max(v,o.min)}o.resizeFn(newSize);return false},stop:function(e){o.setDesinationSize(o.getSize(target));jQuery(document).unbind("mousemove").unbind("mouseup");jS.obj.formula().focus().select();target.parent().css("cursor","pointer");jS.log("stop resizing")}};return resizeBar.start(e)},scrollBars:function(){var o={pane:jS.obj.pane(),barLeft:jS.obj.barLeftParent(),barTop:jS.obj.barTopParent()};jS.obj.pane().scroll(function(){o.barTop.scrollLeft(o.pane.scrollLeft());o.barLeft.scrollTop(o.pane.scrollTop())})},barMouseDown:{select:function(o,e,selectFn,resizeFn){var isResizing=jS.evt.resizeBar(e,resizeFn);if(!isResizing){selectFn(e.target);o.unbind("mouseover").mouseover(function(e){selectFn(e.target)});jQuery(document).one("mouseup",function(){o.unbind("mouseover").unbind("mouseup")})}return false},first:0,last:0,height:function(o){var selectRow=function(){};o.unbind("mousedown").mousedown(function(e){if(!jQuery(e.target).hasClass(jS.cl.barLeft)){jS.evt.barMouseDown.first=jS.evt.barMouseDown.last=jS.rowLast=jS.getBarLeftIndex(e.target);jS.evt.barMouseDown.select(o,e,selectRow,jS.rowResizer)}return false});if(s.editable){selectRow=function(o){if(!jQuery(o).attr("id")){var i=jS.getBarLeftIndex(o);jS.rowLast=i;jS.evt.barMouseDown.last=i;jS.cellSetActiveBar("row",jS.evt.barMouseDown.first,jS.evt.barMouseDown.last)}}}},width:function(o){var selectColumn=function(){};o.unbind("mousedown").mousedown(function(e){if(!jQuery(e.target).hasClass(jS.cl.barTop)){jS.evt.barMouseDown.first=jS.evt.barMouseDown.last=jS.colLast=jS.getBarTopIndex(e.target);jS.evt.barMouseDown.select(o,e,selectColumn,jS.columnResizer)}return false});if(s.editable){selectColumn=function(o){if(!jQuery(o).attr("id")){var i=jS.getBarTopIndex(o);jS.colLast=i;jS.evt.barMouseDown.last=i;jS.cellSetActiveBar("col",jS.evt.barMouseDown.first,jS.evt.barMouseDown.last)}}}}}},isTd:function(o){if(o[0]){if(!isNaN(o[0].cellIndex)){return true}}return false},isFormulaEditable:function(o){if(s.lockFormulas){if(o.attr("formula")!==undefined){return false}}return true},toggleFullScreen:function(){if(jS.obj.fullScreen().is(":visible")){s.parent=origParent;var w=s.parent.width();var h=s.parent.height();s.width=w;s.height=h;jS.obj.tabContainer().insertAfter(s.parent.append(jS.obj.fullScreen().children())).removeClass(jS.cl.tabContainerFullScreen);jS.obj.fullScreen().remove();jS.sheetSyncSize()}else{var w=$window.width()-15;var h=$window.height()-35;s.width=w;s.height=h;jS.obj.tabContainer().insertAfter(jQuery(\'\074div class="\'+jS.cl.fullScreen+" "+jS.cl.uiFullScreen+\'" /\076\').append(s.parent.children()).appendTo("body")).addClass(jS.cl.tabContainerFullScreen);s.parent=jS.obj.fullScreen();jS.sheetSyncSize()}},tuneTableForSheetUse:function(o){o.addClass(jS.cl.sheet).attr("id",jS.id.sheet+jS.i).attr("border","1px").attr("cellpadding","0").attr("cellspacing","0");o.find("td."+jS.cl.cellActive).removeClass(jS.cl.cellActive);return o},attrH:{width:function(o,skipCorrection){return jQuery(o).outerWidth()-(skipCorrection?0:s.boxModelCorrection)},widthReverse:function(o,skipCorrection){return jQuery(o).outerWidth()+(skipCorrection?0:s.boxModelCorrection)},height:function(o,skipCorrection){return jQuery(o).outerHeight()-(skipCorrection?0:s.boxModelCorrection)},heightReverse:function(o,skipCorrection){return jQuery(o).outerHeight()+(skipCorrection?0:s.boxModelCorrection)},syncSheetWidthFromTds:function(o){var w=0;o=(o?o:jS.obj.sheet());o.find("col").each(function(){w+=jQuery(this).width()});o.width(w);return w},setHeight:function(i,from,skipCorrection,o){var correction=0;var h=0;var fn;switch(from){case"cell":o=(o?o:jS.obj.barLeft().find("div").eq(i));h=jS.attrH.height(jQuery(jS.getTd(jS.i,i,0)).parent().andSelf(),skipCorrection);break;case"bar":o=(o?o:jQuery(jS.getTd(jS.i,i,0)).parent().andSelf());h=jS.attrH.heightReverse(jS.obj.barLeft().find("div").eq(i),skipCorrection);break}if(h){jQuery(o).height(h).css("height",h).attr("height",h)}return o}},setTdIds:function(o){o=(o?o:jS.obj.sheet());o.find("tr").each(function(row){jQuery(this).find("td").each(function(col){jQuery(this).attr("id",jS.getTdId(jS.i,row,col))})})},setControlIds:function(){var resetIds=function(o,id){o.each(function(i){jQuery(this).attr("id",id+i)})};resetIds(jS.obj.sheetAll().each(function(){jS.setTdIds(jQuery(this))}),jS.id.sheet);resetIds(jS.obj.barTopAll(),jS.id.barTop);resetIds(jS.obj.barTopParentAll(),jS.id.barTopParent);resetIds(jS.obj.barLeftAll(),jS.id.barLeft);resetIds(jS.obj.barLeftParentAll(),jS.id.barLeftParent);resetIds(jS.obj.barCornerAll(),jS.id.barCorner);resetIds(jS.obj.barCornerParentAll(),jS.id.barCornerParent);resetIds(jS.obj.tableControlAll(),jS.id.tableControl);resetIds(jS.obj.paneAll(),jS.id.pane);resetIds(jS.obj.tabAll().each(function(j){jQuery(this).attr("i",j)}),jS.id.tab)},columnResizer:{xyDimension:0,getIndex:function(o){return jS.getBarTopIndex(o)},getSize:function(o){return jS.attrH.width(o,true)},setSize:function(o,v){o.width(v)},setDesinationSize:function(w){jS.sheetSyncSizeToDivs();jS.obj.sheet().find("col").eq(this.i).width(w).css("width",w).attr("width",w);jS.obj.pane().scroll()},cursor:"w-resize"},rowResizer:{xyDimension:1,getIndex:function(o){return jS.getBarLeftIndex(o)},getSize:function(o){return jS.attrH.height(o,true)},setSize:function(o,v){if(v){o.height(v).css("height",v).attr("height",v)}return jS.attrH.height(o)},setDesinationSize:function(){jS.attrH.setHeight(this.i,"bar",true);jS.attrH.setHeight(this.i,"cell",false);jS.obj.pane().scroll()},cursor:"s-resize"},toggleHide:{row:function(i){if(!i){i=jS.obj.cellActive().parent().attr("rowIndex")}if(i){var o=jS.obj.barLeft().find("div").eq(i);if(o.is(":visible")){o.hide();jS.obj.sheet().find("tr").eq(i).hide()}else{o.show();jS.obj.sheet().find("tr").eq(i).show()}}else{alert("No row selected.")}},rowAll:function(){jS.obj.sheet().find("tr").show();jS.obj.barLeft().find("div").show()},column:function(i){if(!i){i=jS.obj.cellActive().attr("cellIndex")}if(i){var o=jS.obj.barTop().find("div").eq(i);if(o.is(":visible")){jS.obj.sheet().find("tbody tr").each(function(){jQuery(this).find("td").eq(i).hide()});o.hide();jS.obj.sheet().find("colgroup col").eq(i).hide();jS.toggleHide.columnSizeManage()}}else{alert("Now column selected.")}},columnAll:function(){},columnSizeManage:function(){var w=jS.obj.barTop().width();var newW=0;var newW=0;jS.obj.barTop().find("div").each(function(){var o=jQuery(this);if(o.is(":hidden")){newW+=o.width()}});jS.obj.barTop().width(w);jS.obj.sheet().width(w)}},merge:function(){var cellsValue="";var cellValue="";var cells=jS.obj.cellHighlighted();var formula;var cellFirstLoc=jS.getTdLocation(cells.first());var cellLastLoc=jS.getTdLocation(cells.last());var colI=(cellLastLoc[1]-cellFirstLoc[1])+1;if(cells.length\0761\046\046cellFirstLoc[0]){for(var i=cellFirstLoc[1];i\074=cellLastLoc[1];i++){var cell=jQuery(jS.getTd(jS.i,cellFirstLoc[0],i)).hide();formula=cell.attr("formula");cellValue=cell.html();cellValue=(cellValue?cellValue+" ":"");cellsValue=(formula?"("+formula.replace("=","")+")":cellValue)+cellsValue;if(i!=cellFirstLoc[1]){cell.attr("formula","").html("").hide()}}var cell=cells.first().show().attr("colspan",colI).html(cellsValue);jS.setDirty(true);jS.calc(jS.i)}else{if(!cellFirstLoc[0]){alert("Merging is not allowed on the first row.")}}},unmerge:function(){var cell=jS.obj.cellHighlighted().first();var loc=jS.getTdLocation(cell);var formula=cell.attr("formula");var v=cell.html();v=(formula?formula:v);var rowI=cell.attr("rowspan");var colI=cell.attr("colspan");colI=parseInt(colI?colI:1);var td="\074td /\076";var tds="";if(colI){for(var i=0;i\074colI;i++){tds+=td}}for(var i=loc[1];i\074colI;i++){jQuery(jS.getTd(jS.i,loc[0],i)).show()}cell.removeAttr("colspan");jS.setDirty(true);jS.calc(jS.i)},fillUpOrDown:function(goUp,skipOffsetForumals){var cells=jS.obj.cellHighlighted();var cellActive=jS.obj.cellActive();jS.cellUndoable.add(cells);var startFromActiveCell=cellActive.hasClass(jS.cl.uiCellHighlighted);var locFirst=jS.getTdLocation(cells.first());var locLast=jS.getTdLocation(cells.last());var v=jS.obj.formula().val();var fn;var formulaOffset=(startFromActiveCell?0:1);if((v+"").charAt(0)=="="){fn=function(o,i){o.attr("formula",(skipOffsetForumals?v:jS.offsetFormula(v,i+formulaOffset,0))).html("")}}else{fn=function(o){o.removeAttr("formula").html(v)}}function fill(r,c,i){var td=jQuery(jS.getTd(jS.i,r,c));if(jS.isFormulaEditable(td)){fn(td,i)}}var k=0;if(goUp){for(var i=locLast[0];i\076=locFirst[0];i--){for(var j=locLast[1];j\076=locFirst[1];j--){fill(i,j,k);k++}}}else{for(var i=locFirst[0];i\074=locLast[0];i++){for(var j=locFirst[1];j\074=locLast[1];j++){fill(i,j,k);k++}}}jS.setDirty(true);jS.calc(jS.i);jS.cellUndoable.add(cells)},offsetFormulaRange:function(row,col,rowOffset,colOffset,isBefore){var shiftedRange={first:[(row?row:0),(col?col:0)],last:jS.sheetSize()};if(!isBefore\046\046rowOffset){shiftedRange.first[0]++;shiftedRange.last[0]++}if(!isBefore\046\046colOffset){shiftedRange.first[1]++;shiftedRange.last[1]++}function isInFormula(loc){if((loc[0]-1)\076=shiftedRange.first[0]\046\046(loc[1]-1)\076=shiftedRange.first[1]\046\046(loc[0]-1)\074=shiftedRange.last[0]\046\046(loc[1]-1)\074=shiftedRange.last[1]){return true}else{return false}}function isInFormulaRange(startLoc,endLoc){if(((startLoc[0]-1)\076=shiftedRange.first[0]\046\046(startLoc[1]-1)\076=shiftedRange.first[1])\046\046((startLoc[0]-1)\074=shiftedRange.last[0]\046\046(startLoc[1]-1)\074=shiftedRange.last[1])\046\046((endLoc[0]-1)\076=shiftedRange.first[0]\046\046(endLoc[1]-1)\076=shiftedRange.first[1])\046\046((endLoc[0]-1)\074=shiftedRange.last[0]\046\046(endLoc[1]-1)\074=shiftedRange.last[1])){return true}else{return false}}function reparseFormula(loc){return(cE.columnLabelString(loc[1]+colOffset)+(loc[0]+rowOffset))}function reparseFormulaRange(startLoc,endLoc){return((cE.columnLabelString(startLoc[1]+colOffset)+(startLoc[0]+rowOffset))+":"+(cE.columnLabelString(endLoc[1]+colOffset)+(endLoc[0]+rowOffset)))}jS.cylceCells(function(td){var formula=td.attr("formula");if(formula\046\046jS.isFormulaEditable(td)){formula=formula.replace(cE.regEx.cell,function(ignored,colStr,rowStr,pos){var charAt=[formula.charAt(pos-1),formula.charAt(ignored.length+pos)];if(!colStr.match(cE.regEx.sheet)\046\046charAt[0]!=":"\046\046charAt[1]!=":"){var colI=cE.columnLabelIndex(colStr);var rowI=parseInt(rowStr);if(isInFormula([rowI,colI])){return reparseFormula([rowI,colI])}else{return ignored}}else{return ignored}});formula=formula.replace(cE.regEx.range,function(ignored,startColStr,startRowStr,endColStr,endRowStr,pos){var charAt=[formula.charAt(pos-1),formula.charAt(ignored.length+pos)];if(!startColStr.match(cE.regEx.sheet)\046\046charAt[0]!=":"){var startRowI=parseInt(startRowStr);var startColI=cE.columnLabelIndex(startColStr);var endRowI=parseInt(endRowStr);var endColI=cE.columnLabelIndex(endColStr);if(isInFormulaRange([startRowI,startColI],[endRowI,endColI])){return reparseFormulaRange([startRowI,startColI],[endRowI,endColI])}else{return ignored}}else{return ignored}});td.attr("formula",formula)}},[0,0],shiftedRange.last);jS.calc(jS.i)},cylceCells:function(fn,firstLoc,lastLoc){for(var i=firstLoc[0];i\074lastLoc[0];i++){for(var j=firstLoc[1];j\074lastLoc[1];j++){fn(jQuery(jS.getTd(jS.i,i,j)))}}},cycleCellsAndMaintainPoint:function(fn,firstLoc,lastLoc){var o=[];for(var i=(firstLoc[0]\074lastLoc[0]?firstLoc[0]:lastLoc[0]);i\074=(firstLoc[0]\076lastLoc[0]?firstLoc[0]:lastLoc[0]);i++){for(var j=(firstLoc[1]\074lastLoc[1]?firstLoc[1]:lastLoc[1]);j\074=(firstLoc[1]\076lastLoc[1]?firstLoc[1]:lastLoc[[1]]);j++){o.push(jS.getTd(jS.i,i,j));fn(o[o.length-1])}}return o},offsetFormula:function(formula,rowOffset,colOffset,includeRanges){var charAt=[];var col="";var row="";formula=formula.replace(cE.regEx.cell,function(ignored,colStr,rowStr,pos){charAt[0]=formula.charAt(pos-1);charAt[1]=formula.charAt(ignored.length+pos);charAt[0]=(charAt[0]?charAt[0]:"");charAt[1]=(charAt[1]?charAt[1]:"");if(colStr.match(cE.regEx.sheet)||charAt[0]==":"||charAt[1]==":"){return ignored}else{row=parseInt(rowStr)+rowOffset;col=cE.columnLabelIndex(colStr)+colOffset;row=(row\0760?row:"1");col=(col\0760?col:"1");return cE.columnLabelString(col)+row}});return formula},addTab:function(){jQuery(\'\074span class="\'+jS.cl.uiTab+\' ui-corner-bottom"\076\074a class="\'+jS.cl.tab+\'" id="\'+jS.id.tab+jS.i+\'" i="\'+jS.i+\'"\076\'+jS.sheetTab(true)+"\074/a\076\074/span\076").insertBefore(jS.obj.tabContainer().find("span:last"))},sheetDecorate:function(o){jS.formatSheet(o);jS.sheetSyncSizeToCols(o);jS.sheetDecorateRemove()},formatSheet:function(o){var tableWidth=0;if(o.find("tbody").length\0741){o.wrapInner("\074tbody /\076")}if(o.find("colgroup").length\0741||o.find("col").length\0741){o.remove("colgroup");var colgroup=jQuery("\074colgroup /\076");o.find("tr:first").find("td").each(function(){var w=s.newColumnWidth;jQuery("\074col /\076").width(w).css("width",(w)+"px").attr("width",(w)+"px").appendTo(colgroup);tableWidth+=w});o.find("tr").each(function(){jQuery(this).height(s.colMargin).css("height",s.colMargin+"px").attr("height",s.colMargin+"px")});colgroup.prependTo(o)}o.removeAttr("width").css("width","").width(tableWidth)},themeRoller:{start:function(){s.parent.addClass(jS.cl.uiParent);jS.obj.sheet().addClass(jS.cl.uiSheet);jS.obj.barLeft().find("div").addClass(jS.cl.uiBar);jS.obj.barTop().find("div").addClass(jS.cl.uiBar);jS.obj.barCornerParent().addClass(jS.cl.uiBar);jS.obj.controls().addClass(jS.cl.uiControl);jS.obj.label().addClass(jS.cl.uiControl);jS.obj.formula().addClass(jS.cl.uiControlTextBox)},cell:{setActive:function(){this.clearActive();this.setHighlighted(jS.cellLast.td.addClass(jS.cl.cellActive))},setHighlighted:function(td){jQuery(td).addClass(jS.cl.cellHighlighted+" "+jS.cl.uiCellHighlighted)},clearActive:function(){jS.obj.cellActive().removeClass(jS.cl.cellActive)},clearHighlighted:function(){jS.obj.cellHighlighted().removeClass(jS.cl.cellHighlighted+" "+jS.cl.uiCellHighlighted);jS.highlightedLast.rowStart=-1;jS.highlightedLast.colStart=-1;jS.highlightedLast.rowEnd=-1;jS.highlightedLast.colEnd=-1}},bar:{style:function(o){jQuery(o).addClass(jS.cl.uiBar)},setActive:function(direction,i){switch(direction){case"top":jS.obj.barTop().find("div").eq(i).addClass(jS.cl.uiActive);break;case"left":jS.obj.barLeft().find("div").eq(i).addClass(jS.cl.uiActive);break}},clearActive:function(){jS.obj.barTop().add(jS.obj.barLeft()).find("div."+jS.cl.uiActive).removeClass(jS.cl.uiActive)}},tab:{setActive:function(o){this.clearActive();jS.obj.tab().parent().addClass(jS.cl.uiTabActive)},clearActive:function(){jS.obj.tabContainer().find("span."+jS.cl.uiTabActive).removeClass(jS.cl.uiTabActive)}},resize:function(){if(jQuery.ui){var o;var barTop;var barLeft;var controlsHeight;var parent=s.parent;parent.resizable("destroy").resizable({minWidth:s.width*0.5,minHeight:s.height*0.5,start:function(){jS.obj.ui().hide()},stop:function(){jS.obj.ui().show();s.width=parent.width();s.height=parent.height();jS.sheetSyncSize()}});var formulaResizeParent=jQuery("\074span /\076");jS.obj.formula().wrap(formulaResizeParent).parent().resizable({minHeight:jS.obj.formula().height(),maxHeight:78,handles:"s",resize:function(e,ui){jS.obj.formula().height(ui.size.height);jS.sheetSyncSize()}})}}},manageHtmlToText:function(v){v=jQuery.trim(v);if(v.charAt(0)!="="){v=v.replace(/\046nbsp;/g," ").replace(/\046gt;/g,"\076").replace(/\046lt;/g,"\074").replace(/\\t/g,"").replace(/\\n/g,"").replace(/\074br\076/g,"\\r").replace(/\074BR\076/g,"\\n")}return v},manageTextToHtml:function(v){v=jQuery.trim(v);if(v.charAt(0)!="="){v=v.replace(/\\t/g,"\046nbsp;\046nbsp;\046nbsp;\046nbsp;").replace(/ /g,"\046nbsp;").replace(/\076/g,"\046gt;").replace(/\074/g,"\046lt;").replace(/\\n/g,"\074br\076").replace(/\\r/g,"\074br\076")}return v},sheetDecorateRemove:function(makeClone){var o=(makeClone?jS.obj.sheetAll().clone():jS.obj.sheetAll());jQuery(o).find("td."+jS.cl.cellActive).removeClass(jS.cl.cellActive+" "+jS.cl.uiCellActive);jQuery(o).find("td."+jS.cl.cellHighlighted).removeClass(jS.cl.cellHighlighted+" "+jS.cl.uiCellHighlighted);return o},labelUpdate:function(v,setDirect){if(!setDirect){jS.obj.label().html(cE.columnLabelString(v[1]+1)+(v[0]+1))}else{jS.obj.label().html(v)}},cellEdit:function(td,isDrag){jS.evt.cellEditDone();jS.followMe(td);var loc=jS.getTdLocation(td);jS.labelUpdate(loc);var v=td.attr("formula");if(!v){v=jS.manageHtmlToText(td.html())}jS.obj.formula().val(v).focus().select();jS.cellSetActive(td,loc,isDrag)},cellSetActive:function(td,loc,isDrag){if(typeof(loc[1])!="undefined"){jS.cellLast.td=td;jS.cellLast.row=jS.rowLast=loc[0];jS.cellLast.col=jS.colLast=loc[1];jS.themeRoller.bar.clearActive();jS.themeRoller.cell.clearHighlighted();jS.highlightedLast.td=td;jS.themeRoller.cell.setActive();jS.themeRoller.bar.setActive("left",jS.cellLast.row);jS.themeRoller.bar.setActive("top",jS.cellLast.col);var selectModel;var clearHighlightedModel;jS.highlightedLast.rowStart=loc[0];jS.highlightedLast.colStart=loc[1];jS.highlightedLast.rowLast=loc[0];jS.highlightedLast.colLast=loc[1];switch(s.cellSelectModel){case"excel":case"gdocs":selectModel=function(){};clearHighlightedModel=jS.themeRoller.cell.clearHighlighted;break;case"oo":selectModel=function(target){var td=jQuery(target);if(jS.isTd(td)){jS.cellEdit(td)}};clearHighlightedModel=function(){};break}if(isDrag){jS.obj.pane().mousemove(function(e){var endLoc=jS.getTdLocation([e.target]);if(loc[1]!=endLoc[1]||loc[0]!=endLoc[0]){clearHighlightedModel();jS.highlightedLast.colEnd=endLoc[1];jS.highlightedLast.rowEnd=endLoc[0];selectModel(e.target);jS.highlightedLast.td=jS.cycleCellsAndMaintainPoint(jS.themeRoller.cell.setHighlighted,loc,endLoc)}});jQuery(document).one("mouseup",function(){jS.obj.pane().unbind("mousemove").unbind("mouseup")})}}},colLast:0,rowLast:0,cellLast:{td:jQuery("\074td /\076"),row:-1,col:-1,isEdit:false},highlightedLast:{td:jQuery("\074td /\076"),rowStart:-1,colStart:-1,rowEnd:-1,colEnd:-1},cellStyleToggle:function(setClass,removeClass){var uiCell=jS.obj.cellHighlighted();jS.cellUndoable.add(uiCell);if(removeClass){uiCell.removeClass(removeClass)}if(uiCell.hasClass(setClass)){uiCell.removeClass(setClass)}else{uiCell.addClass(setClass)}jS.cellUndoable.add(uiCell);jS.obj.formula().focus().select();return false},context:{},calc:function(tableI,fuel){jS.log("Calculation Started");if(!s.calcOff){cE.calc(new jS.tableCellProvider(tableI),jS.context,fuel);jS.isSheetEdit=false}jS.log("Calculation Ended")},refreshLabelsColumns:function(){var w=0;jS.obj.barTop().find("div").each(function(i){jQuery(this).text(cE.columnLabelString(i+1));w+=jQuery(this).width()});return w},refreshLabelsRows:function(){jS.obj.barLeft().find("div").each(function(i){jQuery(this).text((i+1))})},addSheet:function(size){size=(size?size:prompt(jS.newSheetDialog));if(size){jS.evt.cellEditAbandon();jS.setDirty(true);var newSheetControl=jS.controlFactory.sheetUI(jS.controlFactory.sheet(size),jS.sheetCount+1,function(){jS.setActiveSheet(newSheetControl,jS.sheetCount+1)},true)}},deleteSheet:function(){jS.obj.tableControl().remove();jS.obj.tabContainer().children().eq(jS.i).remove();jS.i=0;jS.sheetCount--;jS.setControlIds();jS.setActiveSheet(jS.obj.tableControl(),jS.i)},deleteRow:function(){var v=confirm("Are you sure that you want to delete that row?");if(v){jS.obj.barLeft().find("div").eq(jS.rowLast).remove();jS.obj.sheet().find("tr").eq(jS.rowLast).remove();jS.evt.cellEditAbandon();jS.setTdIds();jS.refreshLabelsRows();jS.obj.pane().scroll();jS.rowLast=-1;jS.offsetFormulaRange(jS.rowLast,0,-1,0)}},deleteColumn:function(){var v=confirm("Are you sure that you want to delete that column?");if(v){jS.obj.barTop().find("div").eq(jS.colLast).remove();jS.obj.sheet().find("colgroup col").eq(jS.colLast).remove();jS.obj.sheet().find("tr").each(function(i){jQuery(this).find("td").eq(jS.colLast).remove()});jS.evt.cellEditAbandon();var w=jS.refreshLabelsColumns();jS.setTdIds();jS.obj.sheet().width(w);jS.obj.pane().scroll();jS.colLast=-1;jS.offsetFormulaRange(0,jS.colLast,0,-1)}},sheetTab:function(get){var sheetTab="";if(get){sheetTab=jS.obj.sheet().attr("title");sheetTab=(sheetTab?sheetTab:"Spreadsheet "+(jS.i+1))}else{if(s.editable){var newTitle=prompt("What would you like the sheet\'s title to be?",jS.sheetTab(true));if(!newTitle){sheetTab=jS.obj.sheet().attr("title");newTitle=(sheetTab?sheetTab:"Spreadsheet"+(jS.i+1))}else{jS.setDirty(true);jS.obj.sheet().attr("title",newTitle);jS.obj.tab().html(newTitle);sheetTab=newTitle}}}return sheetTab},print:function(o){var w=window.open();w.document.write("\074html\076\074body\076\074xmp\076"+o+"\\n\074/xmp\076\074/body\076\074/html\076");w.document.close()},viewSource:function(pretty){var sheetClone=jS.sheetDecorateRemove(true);var s="";if(pretty){jQuery(sheetClone).each(function(){s+=jS.HTMLtoPrettySource(this)})}else{s+=jQuery("\074div /\076").html(sheetClone).html()}jS.print(s);return false},saveSheet:function(){var v=jS.sheetDecorateRemove(true);var d=jQuery("\074div /\076").html(v).html();jQuery.ajax({url:s.urlSave,type:"POST",data:"s="+d,dataType:"html",success:function(data){jS.setDirty(false);alert("Success! - "+data)}})},HTMLtoCompactSource:function(node){var result="";if(node.nodeType==1){result+="\074"+node.tagName;hasClass=false;var n=node.attributes.length;for(var i=0,hasClass=false;i\074n;i++){var key=node.attributes[i].name;var val=node.getAttribute(key);if(val){if(key=="contentEditable"\046\046val=="inherit"){continue}if(key=="class"){hasClass=true}if(typeof(val)=="string"){result+=" "+key+\'="\'+val.replace(/"/g,"\'")+\'"\'}else{if(key=="style"\046\046val.cssText){result+=\' style="\'+val.cssText+\'"\'}}}}if(node.tagName=="COL"){result+="/\076"}else{result+="\076";var childResult="";jQuery(node.childNodes).each(function(){childResult+=jS.HTMLtoCompactSource(this)});result+=childResult;result+="\074/"+node.tagName+"\076"}}else{if(node.nodeType==3){result+=node.data.replace(/^\\s*(.*)\\s*$/g,"$1")}}return result},HTMLtoPrettySource:function(node,prefix){if(!prefix){prefix=""}var result="";if(node.nodeType==1){result+="\\n"+prefix+"\074"+node.tagName;var n=node.attributes.length;for(var i=0;i\074n;i++){var key=node.attributes[i].name;var val=node.getAttribute(key);if(val){if(key=="contentEditable"\046\046val=="inherit"){continue}if(typeof(val)=="string"){result+=" "+key+\'="\'+val.replace(/"/g,"\'")+\'"\'}else{if(key=="style"\046\046val.cssText){result+=\' style="\'+val.cssText+\'"\'}}}}if(node.childNodes.length\074=0){result+="/\076"}else{result+="\076";var childResult="";var n=node.childNodes.length;for(var i=0;i\074n;i++){childResult+=jS.HTMLtoPrettySource(node.childNodes[i],prefix+"  ")}result+=childResult;if(childResult.indexOf("\\n")\076=0){result+="\\n"+prefix}result+="\074/"+node.tagName+"\076"}}else{if(node.nodeType==3){result+=node.data.replace(/^\\s*(.*)\\s*$/g,"$1")}}return result},followMe:function(td){var pane=jS.obj.pane();var panePos=pane.offset();var paneWidth=pane.width();var paneHeight=pane.height();var tdPos=td.offset();var tdWidth=td.width();var tdHeight=td.height();var margin=20;if((tdPos.left+tdWidth+margin)\076(panePos.left+paneWidth)){pane.stop().scrollTo(td,{axis:"x",duration:50,offset:-((paneWidth-tdWidth)-margin)})}else{if(tdPos.left\074panePos.left){pane.stop().scrollTo(td,{axis:"x",duration:50})}}if((tdPos.top+tdHeight+margin)\076(panePos.top+paneHeight)){pane.stop().scrollTo(td,{axis:"y",duration:50,offset:-((paneHeight-tdHeight)-margin)})}else{if(tdPos.top\074panePos.top){pane.stop().scrollTo(td,{axis:"y",duration:50})}}},count:{rows:function(){return jS.getBarLeftIndex(jS.obj.barLeft().find("div:last").text())},columns:function(){return jS.getBarTopLocatoin(jS.obj.barTop().find("div:last").text())}},isRowHeightSync:[],setActiveSheet:function(o,i){if(o){o.show().siblings().hide();jS.i=i}else{jS.obj.tableControl().siblings().not("div").hide();i=0}jS.themeRoller.tab.setActive();if(!jS.isRowHeightSync[i]){jS.isRowHeightSync[i]=true;jS.obj.sheet().find("tr").each(function(j){jS.attrH.setHeight(j,"cell")})}jS.sheetSyncSize();jS.replaceWithSafeImg(jS.obj.sheet().find("img"))},openSheetURL:function(url){s.urlGet=url;return jS.openSheet()},openSheet:function(o){if(!jS.isDirty?true:confirm("Are you sure you want to open a different sheet?  All unsaved changes will be lost.")){jS.controlFactory.header();var fnAfter=function(i,l){if(i==(l-1)){jS.i=0;jS.setActiveSheet();jS.themeRoller.resize();for(var i=0;i\074=jS.sheetCount;i++){jS.calc(i)}s.fnAfter()}};if(!o){jQuery("\074div /\076").load(s.urlGet,function(){var sheets=jQuery(this).find("table");sheets.each(function(i){jS.controlFactory.sheetUI(jQuery(this),i,function(){fnAfter(i,sheets.length)},true)})})}else{var sheets=jQuery("\074div /\076").html(o).find("table");sheets.show().each(function(i){jS.controlFactory.sheetUI(jQuery(this),i,function(){fnAfter(i,sheets.length)},false)})}jS.setDirty(false);return true}else{return false}},newSheetDialog:"What size would you like to make your spreadsheet? Example: \'5x10\' creates a sheet that is 5 columns by 10 rows.",newSheet:function(){var size=prompt(jS.newSheetDialog);if(size){jS.openSheet(jS.controlFactory.sheet(size))}},importRow:function(rowArray){jS.controlFactory.addRow(null,null,":last");var error="";jS.obj.sheet().find("tr:last td").each(function(i){jQuery(this).removeAttr("formula");try{if((rowArray[i]+"").charAt(0)=="="){jQuery(this).attr("formula",rowArray[i])}else{jQuery(this).html(rowArray[i])}}catch(e){error+=e+";\\n"}});if(error){alert(error)}jS.setTdIds();jS.calc(jS.i)},importColumn:function(columnArray){jS.controlFactory.addColumn();var error="";jS.obj.sheet().find("tr").each(function(i){var o=jQuery(this).find("td:last");try{if((columnArray[i]+"").charAt(0)=="="){o.attr("formula",columnArray[i])}else{o.html(columnArray[i])}}catch(e){error+=e+";\\n"}});if(error){alert(error)}jS.setTdIds();jS.calc(jS.i)},exportSheet:{xml:function(skipCData){var sheetClone=jS.sheetDecorateRemove(true);var document="";var cdata=["\074![CDATA[","]]\076"];if(skipCData){cdata=["",""]}jQuery(sheetClone).each(function(){var row="";var table=jQuery(this);var colCount=0;var col_widths="";table.find("colgroup").children().each(function(i){col_widths+="\074c"+i+"\076"+(jQuery(this).attr("width")+"").replace("px","")+"\074/c"+i+"\076"});var trs=table.find("tr");var rowCount=trs.length;trs.each(function(i){var col="";var tr=jQuery(this);var h=tr.attr("height");var height=(h?h:s.colMargin);var tds=tr.find("td");colCount=tds.length;tds.each(function(j){var td=jQuery(this);var colSpan=td.attr("colspan");colSpan=(colSpan\0761?colSpan:"");var formula=td.attr("formula");var text=(formula?formula:td.text());var cl=td.attr("class");var style=td.attr("style");col+="\074c"+j+(style?\' style="\'+style+\'"\':"")+(cl?\' class="\'+cl+\'"\':"")+(colSpan?\' colspan="\'+colSpan+\'"\':"")+"\076"+text+"\074/c"+j+"\076"});row+="\074r"+i+\' h="\'+height+\'"\076\'+col+"\074/r"+i+"\076"});document+=\'\074document title="\'+table.attr("title")+\'"\076\074metadata\076\074columns\076\'+colCount+"\074/columns\076\074rows\076"+rowCount+"\074/rows\076\074col_widths\076"+col_widths+"\074/col_widths\076\074/metadata\076\074data\076"+row+"\074/data\076\074/document\076"});return"\074documents\076"+document+"\074/documents\076"},json:function(){var sheetClone=jS.sheetDecorateRemove(true);var documents=[];jQuery(sheetClone).each(function(){var document={};document.metadata={};document.data={};var table=jQuery(this);var trs=table.find("tr");var rowCount=trs.length;var colCount=0;var col_widths="";trs.each(function(i){var tr=jQuery(this);var tds=tr.find("td");colCount=tds.length;document.data["r"+i]={};document.data["r"+i]["h"]=tr.attr("height");tds.each(function(j){var td=jQuery(this);var colSpan=td.attr("colspan");colSpan=(colSpan\0761?colSpan:null);var formula=td.attr("formula");document.data["r"+i]["c"+j]={value:(formula?formula:td.text()),style:td.attr("style"),colspan:colSpan,cl:td.attr("class")}})});document.metadata={columns:colCount,rows:rowCount,title:table.attr("title"),col_widths:{}};table.find("colgroup").children().each(function(i){document.metadata["col_widths"]["c"+i]=(jQuery(this).attr("width")+"").replace("px","")});documents.push(document)});return documents},html:function(){return jS.sheetDecorateRemove(true)}},sheetSyncSizeToDivs:function(){var newSheetWidth=0;jS.obj.barTop().find("div").each(function(){newSheetWidth+=parseInt(jQuery(this).outerWidth())});jS.obj.sheet().width(newSheetWidth)},sheetSyncSizeToCols:function(o){var newSheetWidth=0;o.find("colgroup col").each(function(){newSheetWidth+=jQuery(this).width()});o.width(newSheetWidth)},sheetSyncSize:function(){var h=s.height;if(!h){h=400}else{if(h\074200){h=200}}s.parent.height(h).width(s.width);var w=s.width-jS.attrH.width(jS.obj.barLeftParent())-(s.boxModelCorrection);h=h-jS.attrH.height(jS.obj.controls())-jS.attrH.height(jS.obj.barTopParent())-(s.boxModelCorrection*2);jS.obj.pane().height(h).width(w).parent().width(w);jS.obj.ui().width(w+jS.attrH.width(jS.obj.barLeftParent()));jS.obj.barLeftParent().height(h);jS.obj.barTopParent().width(w).parent().width(w)},cellFind:function(v){if(!v){v=prompt("What are you looking for in this spreadsheet?")}if(v){var o=jS.obj.sheet().find(\'td:contains("\'+v+\'")\');if(o.length\0741){o=jS.obj.sheet().find(\'td:contains("\'+v.toLowerCase()+\'")\')}if(o.length\0741){o=jS.obj.sheet().find(\'td:contains("\'+v.toUpperCase()+\'")\')}o=o.eq(0);if(o.length\0760){jS.cellEdit(o)}else{alert("No results found.")}}},cellSetActiveBar:function(type,start,end){var loc=jS.sheetSize();var first=(start\074end?start:end);var last=(start\074end?end:start);var setActive=function(td,rowStart,colStart,rowFollow,colFollow){switch(s.cellSelectModel){case"oo":jS.cellEdit(jQuery(jS.getTd(jS.i,rowFollow,colFollow)));break;default:jS.cellEdit(jQuery(jS.getTd(jS.i,rowStart,colStart)));break}setActive=function(td){return td};return td};var cycleFn;var td=[];switch(type){case"col":cycleFn=function(){for(var i=0;i\074=loc[0];i++){for(var j=first;j\074=last;j++){td.push(jS.getTd(jS.i,i,j));jS.themeRoller.cell.setHighlighted(setActive(td[td.length-1],0,start,0,end))}}};break;case"row":cycleFn=function(){for(var i=first;i\074=last;i++){for(var j=0;j\074=loc[1];j++){td.push(jS.getTd(jS.i,i,j));jS.themeRoller.cell.setHighlighted(setActive(td[td.length-1],start,0,end,0))}}};break;case"all":cycleFn=function(){setActive=function(td){jS.cellEdit(jQuery(td));setActive=function(){}};for(var i=0;i\074=loc[0];i++){for(var j=0;j\074=loc[1];j++){td.push(jS.getTd(jS.i,i,j));setActive(td[td.length-1]);jS.themeRoller.cell.setHighlighted(td[td.length-1])}}first=[0,0];last=loc};break}cycleFn();jS.highlightedLast.td=td;jS.highlightedLast.rowStart=first[0];jS.highlightedLast.colStart=first[1];jS.highlightedLast.rowEnd=last[0];jS.highlightedLast.colEnd=last[1]},sheetClearActive:function(){jS.obj.formula().val("");jS.obj.barSelected().removeClass(jS.cl.barSelected)},getTdRange:function(e,v,newFn,notSetFormula){jS.cellLast.isEdit=true;var range=function(loc){if(loc.first[1]\076loc.last[1]||loc.first[0]\076loc.last[0]){return{first:cE.columnLabelString(loc.last[1]+1)+(loc.last[0]+1),last:cE.columnLabelString(loc.first[1]+1)+(loc.first[0]+1)}}else{return{first:cE.columnLabelString(loc.first[1]+1)+(loc.first[0]+1),last:cE.columnLabelString(loc.last[1]+1)+(loc.last[0]+1)}}};var label=function(loc){var rangeLabel=range(loc);var v2=v+"";v2=(v2.match(/=/)?v2:"="+v2);if(newFn||v2.charAt(v2.length-1)!="("){v2=v2+(newFn?newFn:"")+"("}var formula;var lastChar="";if(rangeLabel.first!=rangeLabel.last){formula=rangeLabel.first+":"+rangeLabel.last}else{formula=rangeLabel.first}if(v2.charAt(v2.length-1)=="("){lastChar=")"}return v2+formula+lastChar};var newVal="";if(e){var loc={first:jS.getTdLocation([e.target])};var sheet=jS.obj.sheet().mousemove(function(e){loc.last=jS.getTdLocation([e.target]);newVal=label(loc);if(!notSetFormula){jS.obj.formula().val(newVal);jS.obj.inPlaceEdit().val(newVal)}});jQuery(document).one("mouseup",function(){sheet.unbind("mousemove");return newVal})}else{var cells=jS.obj.cellHighlighted().not(jS.obj.cellActive());if(cells.length){var loc={first:jS.getTdLocation(cells.first()),last:jS.getTdLocation(cells.last())};newVal=label(loc);if(!notSetFormula){jS.obj.formula().val(newVal);jS.obj.inPlaceEdit().val(newVal)}return newVal}else{return""}}},getTdId:function(tableI,row,col){return I+"_table"+tableI+"_cell_c"+col+"_r"+row},getTd:function(tableI,row,col){return document.getElementById(jS.getTdId(tableI,row,col))},getTdLocation:function(td){var col=parseInt(td[0].cellIndex);var row=parseInt(td[0].parentNode.rowIndex);return[row,col]},getBarLeftIndex:function(o){var i=jQuery.trim(jQuery(o).text());return parseInt(i)-1},getBarTopIndex:function(o){var i=cE.columnLabelIndex(jQuery.trim(jQuery(o).text()));return parseInt(i)-1},tableCellProvider:function(tableI){this.tableBodyId=jS.id.sheet+tableI;this.tableI=tableI;this.cells={}},tableCell:function(tableI,row,col){this.tableBodyId=jS.id.sheet+tableI;this.tableI=tableI;this.row=row;this.col=col;this.value=jS.EMPTY_VALUE},EMPTY_VALUE:{},time:{now:new Date(),last:new Date(),diff:function(){return Math.abs(Math.ceil(this.last.getTime()-this.now.getTime())/1000).toFixed(5)},set:function(){this.last=this.now;this.now=new Date()},get:function(){return this.now.getHours()+":"+this.now.getMinutes()+":"+this.now.getSeconds()}},log:function(msg){jS.time.set();jS.obj.log().prepend(jS.time.get()+", "+jS.time.diff()+"; "+msg+"\074br /\076\\n")},replaceWithSafeImg:function(o){o.each(function(){var src=jQuery(this).attr("src");jQuery(this).replaceWith(jS.controlFactory.safeImg(src,jS.getTdLocation(jQuery(this).parent())[0]))})},isDirty:false,setDirty:function(dirty){jS.isDirty=dirty},appendToFormula:function(v,o){var formula=jS.obj.formula();var fV=formula.val();if(fV.charAt(0)!="="){fV="="+fV}formula.val(fV+v)},cellUndoable:{undoOrRedo:function(undo){if(!undo\046\046this.i\0760){this.i--}else{if(undo\046\046this.i\074this.stack.length){this.i++}}this.get().clone().each(function(){var o=jQuery(this);var id=o.attr("undoable");if(id){jQuery("#"+id).replaceWith(o.removeAttr("undoable").attr("id",id))}else{jS.log("Not available.")}});jS.themeRoller.cell.clearActive();jS.themeRoller.bar.clearActive();jS.themeRoller.cell.clearHighlighted()},get:function(){return jQuery(this.stack[this.i])},add:function(tds){var oldTds=tds.clone().each(function(){var o=jQuery(this);var id=o.attr("id");o.removeAttr("id").attr("undoable",id).removeClass(jS.cl.cellHighlighted+" "+jS.cl.uiCellHighlighted)});if(this.stack.length\0760){this.stack.unshift(oldTds)}else{this.stack=[oldTds]}this.i=-1;if(this.stack.length\07620){this.stack.pop()}},i:0,stack:[]},sheetSize:function(){return jS.getTdLocation(jS.obj.sheet().find("td:last"))},toggleState:function(newS){if(s.allowToggleState){s.editable=!s.editable;jS.obj.tabContainer().remove();var sheets=jS.obj.sheetAll().clone();origParent.children().remove();jS.openSheet(sheets)}}};jS.tableCellProvider.prototype={getCell:function(tableI,row,col){if(typeof(col)=="string"){col=cE.columnLabelIndex(col)}var key=tableI+","+row+","+col;var cell=this.cells[key];if(!cell){var td=jS.getTd(tableI,row-1,col-1);if(td){cell=this.cells[key]=new jS.tableCell(tableI,row,col)}}return cell},getNumberOfColumns:function(row){var tableBody=document.getElementById(this.tableBodyId);if(tableBody){var tr=tableBody.rows[row];if(tr){return tr.cells.length}}return 0},toString:function(){result="";jQuery("#"+(this.tableBodyId)+" tr").each(function(){result+=this.innerHTML.replace(/\\n/g,"")+"\\n"});return result}};jS.tableCell.prototype={td:null,getTd:function(){if(!this.td){this.td=document.getElementById(jS.getTdId(this.tableI,this.row-1,this.col-1))}return this.td},setValue:function(v,e){this.error=e;this.value=v;jQuery(this.getTd()).html(v?v:"")},getValue:function(){var v=this.value;if(v===jS.EMPTY_VALUE\046\046!this.getFormula()){v=jQuery(this.getTd()).text();v=this.value=(v.length\0760?cE.parseFormulaStatic(v):null)}return(v===jS.EMPTY_VALUE?null:v)},getFormat:function(){return jQuery(this.getTd()).attr("format")},setFormat:function(v){jQuery(this.getTd()).attr("format",v)},getFormulaFunc:function(){return this.formulaFunc},setFormulaFunc:function(v){this.formulaFunc=v},formula:null,getFormula:function(){if(!this.formula){var v=jQuery(this.getTd()).attr("formula");this.formula=(v?v.replace(/\\n/g," "):v)}return this.formula},setFormula:function(v){if(v\046\046v.length\0760){jQuery(this.getTd()).attr("formula",v)}else{jQuery(this.getTd()).removeAttr("formula")}}};var cE={TEST:{},ERROR:"#VALUE!",cFN:{sum:function(x,y){return x+y},max:function(x,y){return x\076y?x:y},min:function(x,y){return x\074y?x:y},count:function(x,y){return(y!=null)?x+1:x},clean:function(v){if(typeof(v)=="string"){v=v.replace(cE.regEx.amp,"\046").replace(cE.regEx.nbsp," ").replace(/\\n/g,"").replace(/\\r/g,"")}return v}},fn:{HTML:function(v){return jQuery(v)},IMG:function(v){return jS.controlFactory.safeImg(v,cE.calcState.row,cE.calcState.col)},AVERAGE:function(values){var arr=cE.foldPrepare(values,arguments);return cE.fn.SUM(arr)/cE.fn.COUNT(arr)},AVG:function(values){return cE.fn.AVERAGE(values)},COUNT:function(values){return cE.fold(cE.foldPrepare(values,arguments),cE.cFN.count,0)},SUM:function(values){return cE.fold(cE.foldPrepare(values,arguments),cE.cFN.sum,0,true)},MAX:function(values){return cE.fold(cE.foldPrepare(values,arguments),cE.cFN.max,Number.MIN_VALUE,true)},MIN:function(values){return cE.fold(cE.foldPrepare(values,arguments),cE.cFN.min,Number.MAX_VALUE,true)},ABS:function(v){return Math.abs(cE.fn.N(v))},CEILING:function(v){return Math.ceil(cE.fn.N(v))},FLOOR:function(v){return Math.floor(cE.fn.N(v))},INT:function(v){return Math.floor(cE.fn.N(v))},ROUND:function(v,decimals){return cE.fn.FIXED(v,(decimals?decimals:0),false)},RAND:function(v){return Math.random()},RND:function(v){return Math.random()},TRUE:function(){return"TRUE"},FALSE:function(){return"FALSE"},NOW:function(){return new Date()},TODAY:function(){return Date(Math.floor(new Date()))},DAYSFROM:function(year,month,day){return Math.floor((new Date()-new Date(year,(month-1),day))/86400000)},IF:function(v,t,f){t=cE.cFN.clean(t);f=cE.cFN.clean(f);try{v=eval(v)}catch(e){}try{t=eval(t)}catch(e){}try{t=eval(t)}catch(e){}if(v=="true"||v==true||v\0760||v=="TRUE"){return t}else{return f}},FIXED:function(v,decimals,noCommas){if(decimals==null){decimals=2}var x=Math.pow(10,decimals);var n=String(Math.round(cE.fn.N(v)*x)/x);var p=n.indexOf(".");if(p\0740){p=n.length;n+="."}for(var i=n.length-p-1;i\074decimals;i++){n+="0"}if(noCommas==true){return n}var arr=n.replace("-","").split(".");var result=[];var first=true;while(arr[0].length\0760){if(!first){result.unshift(",")}result.unshift(arr[0].slice(-3));arr[0]=arr[0].slice(0,-3);first=false}if(decimals\0760){result.push(".");var first=true;while(arr[1].length\0760){if(!first){result.push(",")}result.push(arr[1].slice(0,3));arr[1]=arr[1].slice(3);first=false}}if(v\0740){return"-"+result.join("")}return result.join("")},TRIM:function(v){if(typeof(v)=="string"){v=jQuery.trim(v)}return v},HYPERLINK:function(link,name){name=(name?name:"LINK");return jQuery(\'\074a href="\'+link+\'" target="_new" class="clickable"\076\'+name+"\074/a\076")},DOLLAR:function(v,decimals,symbol){if(decimals==null){decimals=2}if(symbol==null){symbol="$"}var r=cE.fn.FIXED(v,decimals,false);if(v\076=0){return symbol+r}else{return"-"+symbol+r.slice(1)}},VALUE:function(v){return parseFloat(v)},N:function(v){if(v==null){return 0}if(v instanceof Date){return v.getTime()}if(typeof(v)=="object"){v=v.toString()}if(typeof(v)=="string"){v=parseFloat(v.replace(cE.regEx.n,""))}if(isNaN(v)){return 0}if(typeof(v)=="number"){return v}if(v==true){return 1}return 0},PI:function(){return Math.PI},POWER:function(x,y){return Math.pow(x,y)},INPUT:{SELECT:function(v,noBlank){if(s.editable){v=cE.foldPrepare(v,arguments);var selectObj=jS.controlFactory.input.select();if(!noBlank){selectObj.append(\'\074option value=""\076Select a value\074/option\076\')}for(var i=0;i\074(v.length\074=50?v.length:50);i++){if(v[i]){selectObj.append(\'\074option value="\'+v[i]+\'"\076\'+v[i]+"\074/option\076")}}selectObj.val(jS.controlFactory.input.getValue(cE.thisCell));return selectObj}else{return jS.controlFactory.input.getValue(cE.thisCell)}},SELECTVAL:function(v){return(s.editable?jQuery(v).val():v)},RADIO:function(v){if(s.editable){v=cE.foldPrepare(v,arguments);var o=jS.controlFactory.input.radio(v,cE.thisCell);o.find(\'input[value="\'+jS.controlFactory.input.getValue(cE.thisCell)+\'"]\').attr("CHECKED","true")}else{return jS.controlFactory.input.getValue(cE.thisCell)}return o},RADIOVAL:function(v){return(s.editable?jQuery(v).find("input:checked").val():v)},CHECKBOX:function(v){if(s.editable){v=cE.foldPrepare(v,arguments)[0];var o=jS.controlFactory.input.checkbox(v,cE.thisCell);var checked=jS.controlFactory.input.getValue(cE.thisCell);if(checked=="true"||checked==true){o.attr("CHECKED","TRUE")}else{o.removeAttr("CHECKED")}return o}else{return jS.controlFactory.input.getValue(cE.thisCell)}},CHECKBOXVAL:function(v){return(s.editable?jQuery(cE.foldPrepare(v,arguments)).val():v)},ISCHECKED:function(v){var checked=jQuery(v).is(":checked");if(checked){return"TRUE"}else{return"FALSE"}}},CHART:{BAR:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart(null,cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},BARH:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("bhg",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},SBAR:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("bvs",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},SBARH:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("bhs",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},LINE:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("lc",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},PIE:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("p",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},PIETHREED:function(v,legend,axisLabels,w,h){return jS.controlFactory.chart("p3",cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)},CUSTOM:function(type,v,legend,axisLabels,w,h){return jS.controlFactory.chart(type,cE.foldPrepare(v,arguments),legend,axisLabels,w,h,cE.calcState.row-1)}}},calcState:{},calc:function(cellProvider,context,startFuel){cE.calcState={cellProvider:cellProvider,context:(context!=null?context:{}),row:1,col:1,i:cellProvider.tableI,done:false,stack:[],calcMore:function(moreFuel){cE.calcState.fuel=moreFuel;return cE.calcLoop()}};return cE.calcState.calcMore(startFuel)},cell:function(){prototype:{getError=function(){return this.error},getValue=function(){return this.value},setValue=function(v,e){this.value=v;this.error=e},getFormula=function(){return this.formula},setFormula=function(v){this.formula=v},getFormulaFunc=function(){return this.formulaFunc},setFormulaFunc=function(v){this.formulaFunc=v},toString=function(){return"Cell:["+this.getFormula()+": "+this.getValue()+": "+this.getError()+"]"}}},columnLabelIndex:function(str){var num=0;for(var i=0;i\074str.length;i++){var digit=str.toUpperCase().charCodeAt(i)-65+1;num=(num*26)+digit}return num},parseLocation:function(locStr){if(locStr!=null\046\046locStr.length\0760\046\046locStr!="\046nbsp;"){for(var firstNum=0;firstNum\074locStr.length;firstNum++){if(locStr.charCodeAt(firstNum)\074=57){break}}return[parseInt(locStr.substring(firstNum)),cE.columnLabelIndex(locStr.substring(0,firstNum))]}else{return null}},columnLabelString:function(index){var b=(index-1).toString(26).toUpperCase();var c=[];for(var i=0;i\074b.length;i++){var x=b.charCodeAt(i);if(i\074=0\046\046b.length\0761){x=x-1}if(x\074=57){c.push(String.fromCharCode(x-48+65))}else{c.push(String.fromCharCode(x+10))}}return c.join("")},regEx:{n:/[\\$,\\s]/g,cell:/\\$?([a-zA-Z]+)\\$?([0-9]+)/g,range:/\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g,remoteCell:/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g,remoteCellRange:/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/g,sheet:/SHEET/,cellInsensitive:/\\$?([a-zA-Z]+)\\$?([0-9]+)/gi,rangeInsensitive:/\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi,remoteCellInsensitive:/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi,remoteCellRangeInsensitive:/\\$?(SHEET+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+):\\$?([a-zA-Z]+)\\$?([0-9]+)/gi,sheetInsensitive:/SHEET/i,amp:/\046/g,gt:/\074/g,lt:/\076/g,nbsp:/\046nbsp;/g},str:{amp:"\046amp;",lt:"\046lt;",gt:"\046gt;",nbsp:"\046nbps;"},parseFormula:function(formula,dependencies,thisTableI){var nrows=null;var ncols=null;if(cE.calcState.cellProvider!=null){nrows=cE.calcState.cellProvider.nrows;ncols=cE.calcState.cellProvider.ncols}formula=formula.replace(cE.regEx.remoteCellRange,function(ignored,TableStr,tableI,startColStr,startRowStr,endColStr,endRowStr){var res=[];var startCol=cE.columnLabelIndex(startColStr);var startRow=parseInt(startRowStr);var endCol=cE.columnLabelIndex(endColStr);var endRow=parseInt(endRowStr);if(ncols!=null){endCol=Math.min(endCol,ncols)}if(nrows!=null){endRow=Math.min(endRow,nrows)}for(var r=startRow;r\074=endRow;r++){for(var c=startCol;c\074=endCol;c++){res.push("SHEET"+(tableI)+":"+cE.columnLabelString(c)+r)}}return"["+res.join(",")+"]"});formula=formula.replace(cE.regEx.remoteCell,function(ignored,tableStr,tableI,colStr,rowStr){tableI=parseInt(tableI)-1;colStr=colStr.toUpperCase();if(dependencies!=null){dependencies["SHEET"+(tableI)+":"+colStr+rowStr]=[parseInt(rowStr),cE.columnLabelIndex(colStr),tableI]}return"(cE.calcState.cellProvider.getCell(("+(tableI)+"),("+(rowStr)+\'),"\'+(colStr)+\'").getValue())\'});formula=formula.replace(cE.regEx.range,function(ignored,startColStr,startRowStr,endColStr,endRowStr){var res=[];var startCol=cE.columnLabelIndex(startColStr);var startRow=parseInt(startRowStr);var endCol=cE.columnLabelIndex(endColStr);var endRow=parseInt(endRowStr);if(ncols!=null){endCol=Math.min(endCol,ncols)}if(nrows!=null){endRow=Math.min(endRow,nrows)}for(var r=startRow;r\074=endRow;r++){for(var c=startCol;c\074=endCol;c++){res.push(cE.columnLabelString(c)+r)}}return"["+res.join(",")+"]"});formula=formula.replace(cE.regEx.cell,function(ignored,colStr,rowStr){colStr=colStr.toUpperCase();if(dependencies!=null){dependencies["SHEET"+thisTableI+":"+colStr+rowStr]=[parseInt(rowStr),cE.columnLabelIndex(colStr),thisTableI]}return"(cE.calcState.cellProvider.getCell(("+thisTableI+"),("+(rowStr)+\'),"\'+(colStr)+\'").getValue())\'});return formula},parseFormulaStatic:function(formula){if(formula==null){return null}else{var formulaNum=formula.replace(cE.regEx.n,"");var value=parseFloat(formulaNum);if(isNaN(value)){value=parseInt(formulaNum)}if(isNaN(value)){value=(formula.charAt(0)=="\'"?formula.substring(1):formula)}return value}},calcLoop:function(){if(cE.calcState.done==true){return null}else{while(cE.calcState.fuel==null||cE.calcState.fuel\0760){if(cE.calcState.stack.length\0760){var workFunc=cE.calcState.stack.pop();if(workFunc!=null){workFunc(cE.calcState)}}else{if(cE.calcState.cellProvider.formulaCells!=null){if(cE.calcState.cellProvider.formulaCells.length\0760){var loc=cE.calcState.cellProvider.formulaCells.shift();cE.visitCell(cE.calcState.i,loc[0],loc[1])}else{cE.calcState.done=true;return null}}else{if(cE.visitCell(cE.calcState.i,cE.calcState.row,cE.calcState.col)==true){cE.calcState.done=true;return null}if(cE.calcState.col\076=cE.calcState.cellProvider.getNumberOfColumns(cE.calcState.row-1)){cE.calcState.row++;cE.calcState.col=1}else{cE.calcState.col++}}}if(cE.calcState.fuel!=null){cE.calcState.fuel-=1}}return cE.calcState.calcMore}},formula:null,formulaFunc:null,visitCell:function(tableI,r,c){var cell=cE.calcState.cellProvider.getCell(tableI,r,c);if(cell==null){return true}else{var value=cell.getValue();if(value==null){this.formula=cell.getFormula();if(this.formula){if(this.formula.charAt(0)=="="){this.formulaFunc=cell.getFormulaFunc();if(this.formulaFunc==null||this.formulaFunc.formula!=this.formula){this.formulaFunc=null;try{var dependencies={};var body=cE.parseFormula(this.formula.substring(1),dependencies,tableI);this.formulaFunc=function(){with(cE.fn){return eval(body)}};this.formulaFunc.formula=this.formula;this.formulaFunc.dependencies=dependencies;cell.setFormulaFunc(this.formulaFunc)}catch(e){cell.setValue(cE.ERROR+": "+e)}}if(this.formulaFunc){cE.calcState.stack.push(cE.makeFormulaEval(cell,r,c,this.formulaFunc));var dependencies=this.formulaFunc.dependencies;for(var k in dependencies){if(dependencies[k] instanceof Array\046\046(cE.checkCycles(dependencies[k][0],dependencies[k][1],dependencies[k][2])==true)){cell.setValue(cE.ERROR+": cycle detected");cE.calcState.stack.pop();return false}}for(var k in dependencies){if(dependencies[k] instanceof Array){cE.calcState.stack.push(cE.makeCellVisit(dependencies[k][2],dependencies[k][0],dependencies[k][1]))}}}}else{cell.setValue(cE.parseFormulaStatic(this.formula))}}}return false}},makeCellVisit:function(tableI,row,col){var fn=function(){return cE.visitCell(tableI,row,col)};fn.row=row;fn.col=col;return fn},thisCell:null,makeFormulaEval:function(cell,row,col,formulaFunc){cE.thisCell=cell;var fn=function(){var v="";try{v=formulaFunc();switch(typeof(v)){case"string":v=v.replace(cE.regEx.amp,cE.str.amp).replace(cE.regEx.lt,cE.str.lt).replace(cE.regEx.gt,cE.str.gt).replace(cE.regEx.nbsp,cE.str.nbsp)}cell.setValue(v)}catch(e){cE.makeError(cell,e)}};fn.row=row;fn.col=col;return fn},makeError:function(cell,e){var msg=cE.ERROR+": "+msg;e.message.replace(/\\d+\\.?\\d*, \\d+\\.?\\d*/,function(v,i){try{v=v.split(", ");msg=("Cell:"+cE.columnLabelString(parseInt(v[0])+1)+(parseInt(v[1]))+" not found")}catch(e){}});cell.setValue(msg)},checkCycles:function(row,col,tableI){for(var i=0;i\074cE.calcState.stack.length;i++){var item=cE.calcState.stack[i];if(item.row!=null\046\046item.col!=null\046\046item.row==row\046\046item.col==col\046\046tableI==cE.calcState.i){return true}}return false},foldPrepare:function(firstArg,theArguments){if(firstArg!=null\046\046firstArg instanceof Object\046\046firstArg.length!=null){return firstArg}else{return theArguments}},fold:function(arr,funcOfTwoArgs,result,castToN){for(var i=0;i\074arr.length;i++){result=funcOfTwoArgs(result,(castToN==true?cE.fn.N(arr[i]):arr[i]))}return result}};var $window=jQuery(window);jS.s=s;s.fnBefore();var o;var emptyFN=function(){};if(s.buildSheet){if(typeof(s.buildSheet)=="object"){o=s.buildSheet}else{if(s.buildSheet==true||s.buildSheet=="true"){o=jQuery(s.parent.html())}else{if(s.buildSheet.match(/x/i)){o=jS.controlFactory.sheet(s.buildSheet)}}}}s.parent.html("");s.width=s.parent.width();s.height=s.parent.height();if(s.log){s.parent.after(\'\074textarea id="\'+jS.id.log+\'" class="\'+jS.cl.log+\'" /\076\')}else{jS.log=emptyFN}if(!s.showErrors){cE.makeError=emptyFN}if(!jQuery.support.boxModel){s.boxModelCorrection=0}if(!jQuery.scrollTo){jS.followMe=emptyFN}jS.log("Startup");$window.resize(function(){s.width=s.parent.width();s.height=s.parent.height();jS.sheetSyncSize()});cE.fn=jQuery.extend(cE.fn,s.calculations);if(s.caseInsensitive){cE.regEx.cell=cE.regEx.cellInsensitive;cE.regEx.range=cE.regEx.rangeInsensitive;cE.regEx.remoteCell=cE.regEx.remoteCellInsensitive;cE.regEx.remoteCellRange=cE.regEx.remoteCellRangeInsensitive;cE.regEx.sheet=cE.regEx.sheetInsensitive;for(var k in cE.fn){var kLower=k.toLowerCase();if(kLower!=k){cE.fn[kLower]=cE.fn[k]}}}jS.openSheet(o);return jS},makeTable:{xml:function(b){var a=jQuery("\074div /\076");jQuery(b).find("document").each(function(t){var y=jQuery("\074table /\076");var x=0;var l=jQuery("\074colgroup /\076").appendTo(y);var d=jQuery("\074tbody /\076");var r=jQuery(this).find("metadata");var z=r.find("columns").text();var m=r.find("rows").text();var B=jQuery(this).attr("title");var A=jQuery(this).find("data");var e=r.find("col_widths").children();for(var t=0;t\074parseInt(jQuery.trim(z));t++){var n=parseInt(e.eq(t).text().replace("px",""));n=(n?n:120);x+=n;l.append(\'\074col width="\'+n+\'px" style="width: \'+n+\'px;" /\076\')}y.width(x).attr("title",B);for(var t=0;t\074m;t++){var u=A.find("r"+t);var p=(A.attr("h")+"").replace("px","");p=parseInt(p);var s=jQuery(\'\074tr height="\'+(p?p:18)+\'px" /\076\');for(var q=0;q\074z;q++){var f="\074td /\076";var h=u.find("c"+q);if(h){var o=h.text()+"";var k=h.attr("class");var v=h.attr("style");var g=h.attr("colspan");var c="";if(o.charAt(0)=="="){c=\' formula="\'+o+\'"\'}f="\074td"+c+(v?\' style="\'+v+\'"\':"")+(k?\' class="\'+k+\'"\':"")+(g?\' colspan="\'+g+\'"\':"")+(p?\' height="\'+p+\'px"\':"")+"\076"+o+"\074/td\076"}s.append(f)}d.append(s)}y.append(d).appendTo(a)});return a.children()},json:function(data,makeEval){sheet=(makeEval==true?eval("("+data+")"):data);var tables=jQuery("\074div /\076");for(var i=0;i\074sheet.length;i++){var colCount=parseInt(sheet[i].metadata.columns);var rowCount=parseInt(sheet[i].metadata.rows);title=sheet[i].metadata.title;title=(title?title:"Spreadsheet "+i);var table=jQuery("\074table /\076");var tableWidth=0;var colgroup=jQuery("\074colgroup /\076").appendTo(table);var tbody=jQuery("\074tbody /\076");if(sheet[i]["metadata"]["col_widths"]){for(var x=0;x\074colCount;x++){var w=120;if(sheet[i]["metadata"]["col_widths"]["c"+x]){var newW=parseInt(sheet[i]["metadata"]["col_widths"]["c"+x].replace("px",""));w=(newW?newW:120);tableWidth+=w}colgroup.append(\'\074col width="\'+w+\'px" style="width: \'+w+\'px;" /\076\')}}table.attr("title",title).width(tableWidth);for(var x=0;x\074rowCount;x++){var tr=jQuery("\074tr /\076").appendTo(table);tr.attr("height",(sheet[i]["data"]["r"+x].h?sheet[i]["data"]["r"+x].h:18));for(var y=0;y\074colCount;y++){var cell=sheet[i]["data"]["r"+x]["c"+y];var cur_val;var colSpan;var style;var cl;if(cell){cur_val=cell.value+"";colSpan=cell.colSpan+"";style=cell.style+"";cl=cell.cl+""}var cur_td=jQuery("\074td"+(style?\' style="\'+style+\'"\':"")+(cl?\' class="\'+cl+\'"\':"")+(colSpan?\' colspan="\'+colSpan+\'"\':"")+" /\076");try{if(typeof(cur_val)=="number"){cur_td.html(cur_val)}else{if(cur_val.charAt(0)=="="){cur_td.attr("formula",cur_val)}else{cur_td.html(cur_val)}}}catch(e){}tr.append(cur_td)}}tables.append(table)}return tables.children()},fromSize:function(m,e,k){if(!m){m="5x10"}m=m.toLowerCase().split("x");var b=parseInt(m[0]);var f=parseInt(m[1]);var l=jQuery("\074table /\076");var a="\074td\076\074/td\076";var d="";for(var c=b;c\076=1;c--){d+=a}var j="\074tr"+(e?\' height="\'+e+\'px" style="height: \'+e+\'px;"\':"")+"\076"+d+"\074/tr\076";var g="";for(var c=f;c\076=1;c--){g+=j}l.html("\074tbody\076"+g+"\074/tbody\076");if(k){l.width(b*k)}return l}},killAll:function(){if(jQuery.sheet){if(jQuery.sheet.instance){for(var a=0;a\074jQuery.sheet.instance.length;a++){if(jQuery.sheet.instance[a]){if(jQuery.sheet.instance[a].kill){jQuery.sheet.instance[a].kill()}}}}}}};var key={BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,ALT:18,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,F:70,V:86,Y:89,Z:90};</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_form_view.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_form_view.xml
new file mode 100644
index 0000000000..65a7633e79
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_form_view.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <unicode encoding="cdata"><![CDATA[
+
+<tal:block tal:replace="nothing">\n
+</tal:block>\n
+<tal:block xmlns:tal="http://xml.zope.org/namespaces/tal"\n
+           xmlns:metal="http://xml.zope.org/namespaces/metal"\n
+           xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
+  <tal:block metal:define-macro="master"\n
+             tal:define="css_list_jquery_template python:[\'jquery.sheet.css\',\n
+                                  \'portal_skins/erp5_jquery/plugin/colorpicker/jquery.colorPicker.css\',\n
+                                  \'portal_skins/erp5_jquery/plugin/colorpicker/menu.css\',\n
+];\n
+                        js_list_jquery_template python:[\'portal_skins/erp5_jquery/core/jquery.js\',\n
+                                                  \'jquery.sheet.js\',\n
+                                                  \'portal_skins/erp5_jquery/plugin/mbmenu/mbMenu.min.js\',\n
+                                                  \'portal_skins/erp5_jquery/ui/jquery-ui.js\',\n
+                                                  \'portal_skins/erp5_jquery/plugin/jqcharts/jgcharts.min.js\',\n
+                                                  \'portal_skins/erp5_jquery/plugin/colorpicker/jquery.colorPicker.min.js\',\n
+                                                  \'http://jqueryui.com/themeroller/themeswitchertool/\',\n
+                                                  \'portal_skins/erp5_jquery/plugin/elastic/jquery.elastic.min.js\',\n
+                                                  \'jquery.sheet.erp5.js\',\n
+];\n
+                         global css_list css_list | python:[];\n
+                         global js_list js_list | python:[];\n
+                         dummy  python:css_list.extend(css_list_jquery_template);\n
+                         dummy  python:js_list.extend(js_list_jquery_template);">\n
+    <tal:block metal:use-macro="here/view_main/macros/master">\n
+      <tal:block metal:fill-slot="main">\n
+        <tal:block metal:use-macro="here/form_render/macros/master" />\n
+      </tal:block>\n
+    </tal:block>\n
+  </tal:block>\n
+</tal:block>\n
+
+
+]]></unicode> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>expand</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>jquery_sheet_form_view</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <unicode></unicode> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image.xml
new file mode 100644
index 0000000000..589c111ef1
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Folder" module="OFS.Folder"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>jquery_sheet_image</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/DV_Tools.jpg.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/DV_Tools.jpg.xml
new file mode 100644
index 0000000000..1b5d490be4
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/DV_Tools.jpg.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962152.76</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>DV_Tools.jpg</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/jpeg</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/7QAcUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAD/2wBDAAIB
+AQIBAQICAQICAgICAwUDAwMDAwYEBAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0M
+DgsMDAv/2wBDAQICAgMCAwUDAwULCAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL
+CwsLCwsLCwsLCwsLCwsLCwv/wAARCACAAIADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAA
+AAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI
+I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq
+c3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW
+19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL
+/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLR
+ChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn
+6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACvOf2o/i9efCH4XSS+C44rnxVrlxFo+gW0
+gys17O2yMuOvlpkyOcHaqMTwK9Gr59S9Pxw/al1LXJQZPDnwuWTR9LBHyXGrTRg3dwvY+TA6QKwy
+M3FwpwVoAwtS/ZV8c6HcRa38Gfjv46t/GEKnzYfEbx6poeqd9k1jtQQ5IA3wFGUZxmrOm/t6an8E
+9Qg0j9vjwhN4AkkcQw+LNNL6h4VvmJ2qTchfMsmY5IS4UADrIa9Ou282UkEg56ipl1cz2EtnrkEN
+/ZXCGKWGZA6SIRgqynggjjBoA7fQfEFh4q0W21Lwve2mpadexia3urWZZoZ0PRkdSVYH1BxVuvlu
+4/Ysh+H+sXOvfsL+K7v4T6xcOZ7jRFj+2eGNUkPJ87TmO2EtwPMtzGwHQGtTSv259W+DV5Fpf7d/
+hCXwI5YRR+KtLZ9Q8L3p+bDNOB5tkSEZts67VHWSgD6QoqpoOv2HirRbXUvC97aalp17GJre6tZl
+mhuEPIZHUlWU9iDirdABRRRQAUUUUAFFFFABRRRQBwf7SXxTn+Enwnvb/wAPxLda9fyR6Zo1sxIF
+zfTsI4VJAOF3MGY9AqsT0rlvhp4Jg+EHw40rw5p0zXT2UZa5uWAD3tzIxknncD+KSV5JDjjLmsfX
+NUHxk/abubsnzPD/AMLFazt/7k+sTx/vm6DmC3kWPuM3Ld1ruPDtqdT1JppuY4TkehagDUj0qK00
+h2vV3TOuST1U9gKp6Hp4ubgG6Q7e2e9bc8HmKPN6enrVIyGCbKHgUAT3Phu2mH7kGFuxQ/0rK1e4
+e2jbSvEtsmoafqKNC4kUPG6kEFWB9Rng10djdJeR9cMP1p01lHPkXa7kI/L3oA+TP+CSMd54e8R/
+Hvwza+ZF4W8N+NhBodqTlLZJLSKWUJ6BpHLYHQmvsuvmTTfgH4//AGVPFfiLWf2UZ9F8V6F4n1ST
+WdV8Ka4/2W4NxKUDvZaioYpkBj5cySIMBU8sdO3+Dn7cngz4peK4/Cvical4D8elRu8MeJoRY38h
+IH/HsxJiu156wO/HUL0oA9kooooAKKKKACiiigAriP2iPiz/AMKX+Eup61aQm71MhbPS7RThr29m
+YRwQrwRlpGUc8da7evnjx7rH/C7P2oFtbf8AfeHvhUu6QAZW51q4j+VffyLdyxU/xXMTDleAC98M
+fAw+Ffw30vw+lwL3UAGn1C7Awb67lYyTzeo3SO5APQbR0FeqeHtHGk6YgmHz43Ee/vWB4T0HzNVN
+xe4d05I6hfQV1F3dbVwDQBXv7jGcmsi5uwpJ61LqF7kkA1mTzbs0AXbHVGgmDA4ro7LUku4wQee9
+cUkuzvVq01RoG+Qn86AOsvbJbyP92xjkHKuvUVwnxh+EPhb44eGG0H9oDwxpfiXTCcp9ohDPC39+
+Jxh4nH99CCPWupsPEQbAmP41o+bFfxYfa4NAHzjZfCL4wfszRi4/ZV8XL8TfCMHJ8G+NLw/breMf
+wWGr4LjAAVY7lZFA/jFdr8Hf2/fBfxF8XxeEfiJDqvw1+IDAD/hG/FMIsri5OQubSbJhvELZCtC7
+E4zgV6Td+HjHJ5mnOVbrwcGuQ+Lnwy8N/GnwnL4f+PXhjTPFOkSHPlXduHeJsY3xn7yOMnDoQw7G
+gD1iivk/Sfgz8U/2bl8/9jvxsPG/ha35/wCEH8b3TzPAg/5Z2Gq8zQ4CqiJOJUHJJru/hT+334V8
+WeJbfwv8aLDVfhX45nbyk0XxMggjvZM7f9CvB+4uwWyFCMHYDOwCgD3WiiigDy79qH9qLRf2b/Cg
++2MdQ8UarE66JosA33OoyhkjBCj7sfmSwoXbC75Y0B3yIrYHwQ+Gc3wr+HFhpWrTLqHiC8aTUNZv
+ByLu+ncyzuCedu9mCg8hFRf4RXmXjTwT4f8AFf8AwUC1vXNCWWVPDdlp8viGSSZpYrvUo0m+w26K
+chBBFczTuq4zJLbsQSikfQfhG9i1HTvtYKtJMx6EHAHYEdfX8aANTS7MafaBOrHlj6mq+pXJQmrJ
+lzWXr85iAK0AULuf5jmqbzVFPd7zURm5zQBN5vvQJcHrUHmg9DzSedj71AF6K6K85q/Z6w8TDBrC
+E3vT0usd6AO3sNbEqgS96vSKlxH+8VXVvUZrg4da8gZzV2DxpL5eIWX8eaANTX/DdsYXuLctbzRj
+cHRiK8t+L3iHwp4s0RfC/wAd9I0zxTpOqnyDb3dushG4bc8jg4P3hg9cV1Pi7xZLb6Y8upTARqm/
+HQV8b/H3413Og6Rqniawtn1DUZZ10vw5p653ahfynZEowCcZOScHAye1AHc/8E7PH1/4Y/br+LHw
+r8B+LZtY+FvhTSrOfS9N1LU/tdzpV7IzF7e1MjGXyEiCfICUTK4wTz911+d99+zb8Nf2c/2bdAtv
+jxp7694xnuvNiv8ATWa38QatrdwxkZdPuInSWOQyFtpSRFRU3koFLD64/Ys8EePPAPwF06z/AGjf
+FMnirxLNLJdM7yJO+lwOcxWJukjj+2GBMRm5aNGlKl2GSSQD5+/ai+Enj79lHxB4g8a/B+yvPGvg
+LxBq02u67YWdv5uvaDcSkGW5hVRuvbX5VzEoM0SoAiyLzFe/Z3/bC0vX7CGW21C01HSNbC3Njewy
+B4ZCwHAcccjBB/8A119ba7rS6fCzMcYFfAP7X37MNroni/WPHH7Ky6fpHiHVJGutb8OzOYdI8SyH
+lpvlB+yXhPPnoNshJ81SxEsYB9k6L49tNVQGKQHPqeRWjeKuoQ/IQfpXwX+zX+1Nca5JJZX0eoW1
+3prLDfWN6uy/0iQ9I7hATlT/AAyrlHXDKxVlY/ZHw31u61y0jZlYqwBBH9KALd/p7QSHaKgS3klP
+CmvMv2mf+CmfwN/ZT8P+J7v4k+Lhrd/4MtTd63pXheym12/0iMcA3sdorixDEEB7poUJBAbIr5K+
+Kv8AwWS+JHj342/syeEfgF4J8P8Aw88IftTmS40DxTr1wNX1qy09AjfaH0yEpbW8jLLGUVrm4A+b
+egwAwB+gM0MkB/eDFRF93WvDP+CcP7Wf/DV3wn+I1hr/AIgPijxD8I/iR4i8B3+rulvHJq8VnfSf
+YrspbRxwjzLOS2y0SKjOkhAHQe3OcE0APEmOtMefb1pjSYNVby5wOtABe6p5Sk5pNFu/tkhdziOI
+bnNYOsXrSOI4eWc4GO9M8beI4fAPhNkmcCTZ5kpoA5D9oH4lzapPDoWhN/pWoNtOD/q07k/QV88e
+EvHXhyb4r6j8SfHzS3Pgb4SyPoXhaxtkWa48Ra864ma2iJxJKgPkocrtZpGZlUFhiftX/H+5+FHw
+pvNcsTcP4s8a3A0Tw7DDF506GQ7WlRP4ioJIBIBbAyN1O/Zp/Z51J7PQJfGUAN7o9p9k0jTFkM0G
+gxNzId5/1t1MxLzTnqSEXCJlgDX07xb8Qbz4yn4m/Fzwuvi6CazMMWm+HRLean8Prctl0gtMZ1JX
+HltNcW4WdnRUSCRQAn6DfsreJtG+IHwvs/EHw+8R2HibSL/cIrqznE0asrFXjbHKOjBlZGwyspVg
+CCK8l8OeE/DnwF+Htx4t+K2sR+H9JspEha/Ks0808jCNILONAZJriR2WKOONWd5HVEV2+WvMf2H/
+AIx2f7W3/BSjx/4w8DadYeDdG8OeH4YZ7HSNYjW78SXc00kRm1+0Q+Xcywx28aQzQ+asDfaIHuHl
+WS3twD63+Jpm+xP5Ockdq+Vv2g/iR4K+Bek2us/tFeLLDwzZapepp+nxTb5rvVbpzhbeztYlaa6m
+bIxHEjufSvtLXNEXUYmDgGviL/gtx8EtM1P9hC/8ZaitimqfBzxHo/xA0aa8U+Sl1YX0TMjleVWS
+GSeIkEY8zJOBQB8k/FD/AIKZ6RrWtfG9v2R/hVcy+Nf2b/Cs/iDxDqfj3zdCaGFAWFtDYxRvcXO8
+7cw3DWu0kk4ZRn51/aU/bE+IXxtP7BeseIviV4y8V6f8ZdX/AOEh+KHw08GwbrLT9Fh1HTf9H/sv
+TYzezQSQSXo23LztKUIX7uK7v4T+Bfhjqf8AwUN+OGhfteaR+0v4k+NnxT0w6748+HXhPSbLw7od
+7peyOUwBhq0lzdwbJI8pHdAvl90fBVPbvhH/AMFiP2Svgl+xPqPj/wDZK+CfxA8F/BzStYTw5qOr
+6F4V062SLUCiOiXPl3vntIVkjImkByXX58kUAeW/s2/8Er/jP4vuf2y/DfgTwb4K+C3wc/ak1W2j
+0ufXmEWqeHdJtbi9aJLbQrLKo7JdqBHNPb+WI/utu+X7L+Dn/BDD4M2Pg74c6f8AtW6pr3x9uPhV
+oy6F4Zh8T+Tb6Vo9qFRTHDp9okccissSBvtJuGbux4x5mv8AwVk8K6J+0B4I+G/iPwR8aW8cfErT
+Itb8J2j6XpqnXrGVJZI5FlGoeQwKwSYO9WOAMZI3bPhf/gvL8KI/AXxO8S2/w/8AjbLpHwVvk03x
+vKmiWJk8OXDztbhJ4ft3mY81JFLKrKNjEkBSQAfdWm+EdG8DeF7bQ/hvo2leH9GsE8u20/TbOO0t
+rZfRIowFUewFZVwjQMdwrwT4D/8ABX/4b/tD/Ev4PeFdI8G/FDRH+PNjf6j4K1XVdMs007VYbK1e
+6uG82C8kaNlSPBRlDBmUEDkj6T1nTtkjDG8fqP8AGgDnbmfb0rM1G8CIST0qbxLOLGAsD8lczNqr
+arOkFqctIcUAavh+NDNNqF+cQ2wOM9zXivxn8Xv4/wDFqaTBL5dvkzXcmfliiXk5/AV33xx+IEHg
+HwkbWJwpRctg8s3YV8sfEPT9f8fy6L8NvABm/wCE2+LczLcPF/rNK0hMGebORtJU7QcjBcHopoAp
+fAvwg/7V3x2u/iRJbltB0MSaL4PRxmOG2U7Z7xcj70rAqGBPyDtk19ceOPHHgr9iDwVban8WZUut
+evLWW90/w+k0cN1eRx7Q9xcySlUtLSIyR+ZPKVRTJGhJd0ik4zxd8ZfDf7E+jWfw1/Zg0608XfE2
+DytFtra2tGvrPQLjyldIWhjdGu73y2WY2yyRbIis1zNZW7G5Pxn8SP2gLrSPHWo33h3W/wDhMviN
+dSxz33iyaWLUdP0S5j3iM2LeWsWpX8W99t15SWFlu8uxgLvczMAdv+0j+0NrXjzxtY6x+0mW1PxJ
+LGX0TwPCJtPtdFtJoyFfUFYLcafavE4BhYJqeohwko0+zea0Xtv+Ca37bEvgD9tnQ/ht8XPD2leI
+PEfxasrw6T4s06E2s+k2mnQrIultZlmit7CNGxCtr5MatkvE8jyTyfGnw/0XXvir4/m8J/AC0/t/
+xEszSaxrGozy3Fho0sh3vNqN0WMl1duWMhhDmaQtukeMP5lfqp/wTk/Ye8N/ssafcatbG48ReOtc
+iWPWPFGpIrX94gO4QRADbbWqtkrbxYQH5m3OWdgD7HIz1r49/wCC+8IH/BHD9oRu/wDwisv/AKNj
+r7Cr5A/4L8f8obf2hP8AsVZf/RsdAH8tr/8ABZn45t+1V8MfjUNY0VfiP8KfD0XhjS9VXTEDahZR
+wywgX65xcuyXEoZ2wTuH91ccV4a/4KK/EXwn8GfjT8PdHbQB4N+PF/DqfiTSn01XgguIbhriKSyB
+P+jFZGXG3PEcYP3RXhNFAH0N4i/4Kg/FvxPF8Am1PVNM+3/s1CJPBGoR2Krd20cU0MsMVxID+/jj
+NvGqqwwF3D+I51bf/grX8W7P4m/HbxRaP4Xjn/aO0qfSfG9gNIT7BfrMpDzRw5xFPlpXEgOVaV2G
+CePmSigD9T/+Ddj9u3x348/bu/Zf+CHjW50u78CfDfU/FGsaAXtB9tsHudB1Zp4lnznyXeZnKY+8
+Ae1f0e2vxAguL6SOdwQpweeVr+Uj/g3gvJtP/wCCwPwnnsI0llig15lRuj/8SHUcjjpxnntX7q+G
+P2wopvGOpWqSTJNp0pW7sJWH2qxGfvr/AM9YT2ce4OGBAAPrv4tanCulSSWsgBK9QeD9a818IfE6
+y8OW11da44SaIfJzkN9Pc+lcH4j+PMWv6MDY3KSrKPl2tw/09D7V5d4p+IqHS5ZLWYb2cQiMn51c
+4wu3rnkfXtQB2PinxzH8Q/Fl7qnjCdLXQNBie/vndgEijQZwx6ZOK8i+CH7RXibxVJ4y8Z+AGTwp
+eeMbWOfUfE9/MbL/AIR3w0rFbSNLgofsEU7kv55WS5uGby7GJ8Pe2fOftbfEPQfBfhTTPh1421y8
+0e01CNdc8Xtp0EN1qtzbA/udPtIZj5TzzuNuZswRqHebKAq3zj8af2qLn4nanouiaNpNxZaRHcyS
+eG/BWjzSX0tzdsoWS7nllIe/vWTCvf3JXYhIXyI3dSAeofEb486Y3gzVNG+HNzPoXgx4JYdb17UF
+GnX3iK08xppInTef7M0p5C0hst7S3GTLfyzzTTqav7P37OPi/wDbCuLdtAXVfBvw8lxnUBG1rrGv
+R+lqpAaygI/5bMBMwP7tYxtlb0n9jj/gmHrfxO1zTvE/7UUdveS27pcad4bgYyaZpTg5WSUkD7Xc
+A4w7AIhH7tAQXb9R/g3+zxaeF7KL9yoKgdqAPL/2Tf2LdC+DPhDT9H8EaPaaRplim2G2t4giLk5J
+PqxJJLHJYkkkk5r6m8LeFY9GtlVFxgVf0nQotOiURqBj2rQAx0oAK+af+CxXwT8U/tH/APBMX4z+
+BvgnpE2v+K/E3h6Sz0zT4pI43u5TIhCBpGVRwD1IHFfS1FAH8cX/ABDffttf9ED8Qf8Ag103/wCS
+qP8AiG+/ba/6IH4h/wDBrpv/AMlV/Y7RQB/HF/xDffttf9ED8Q/+DXTf/kqkP/Bt9+20OvwD8Qf+
+DXTf/kqv7HqKAP5kf+CHP/BEP9qD9lz/AIKjfDPxz+0h8I9X8M+DNFj1hdQ1KfULGWO287Rr63iy
+kU7Od0s0ScKfvc8ZNfen7a/7DN7N44k1/wAGm5sNUtJTPa3lsdk0D+qnGCCOCpyrAkMCCQf10uLR
+Z0IbvXGeOfhLZeJrdxcQo5YdxQB+IEfxF1zQtTl0/wAf2sGl6uWCxspMdjq+TjauT+5mz0jJw2fk
+bOUHoXws8fafb6HrfxE+KzPDoXgK3eRhcJiZ5VB2wsT98huBxuOcHqc/av7Q3/BP7SfHtpcxT6fD
+cRTqUdHiDK4PUEHgg18ufFT/AIJO+Lvi4+jeD9d8W38Pwvgk8/UtIjBS9vGTHkxi7HzGPsd3zqFU
+Kw4KAH5z+DD8R/8AgoN8dtevvhlYLdalq1+ZdU1a5Vjpuir0jhZhgzSRx7QIEwe7mMNuP6sf8E+f
++CUOh/Am0XUL2KbWfEt/Gq6jrd8oa7u8HOwYGIogSSsSAKOuCSWP0d+yl+wf4Z+BnhHTtI8EaNY6
+VpmnRiO3treERxxjrwB3JySepJJPJr6c8PeEbfRrdVhRVwOwoA5v4e/Caz8M2kawwqu0eldzbWaW
+yAIAMVIqhBhaWgAooooA/9k=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>128</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>6230</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>128</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_down.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_down.png.xml
new file mode 100644
index 0000000000..33d5bfa52a
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_down.png.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962222.26</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>arrow_down.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAENSURBVDjLpZM/SwNREMTnxBRpFYmctaKC
+fwrBSCrRLuL3iEW6+EEUG8XvIVjYWNgJdhFjIXamv3s7u/ssrtO7hFy2fcOPmd03SYwR88xi1cPg
+pRdjjDB1mBquju+TMt1CFcDd0V7q4GilAwpnd2A0qCvcHRSdHUBqAYgOyaUGIBQAc4fkNSJIIGgG
+j4ZQx4EEAY3waPUiSC5FhLoOQkbQCJvioPQfnN2ctpuNJugKNUWYsMR/gO71yYPk8tRaboGmoCvS
+1RQ7/c1sq7f+OBUQcjkPGb9+xmOoF6ckCQb9pmj3rz6pKtPB5e5rmq7tmxk+hqO34e1or0yXTGrj
+9sXGs1Ib73efh1WaZN46/wI8JLfHaN24FwAAAABJRU5ErkJggg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>379</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_out.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_out.png.xml
new file mode 100644
index 0000000000..114df6830c
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_out.png.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962222.55</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>arrow_out.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHkSURBVDjL3ZNvT1JhGMafb3G+TQqKECNF
+RIEDcvgXmB5IPNJmTdbC1SQ0S1xzZKXyT41TdpCOMyYtiXS9aW2uD8EbPsHV87RRmyLrdc92vbt/
+1/U8930/ZLYxASbpSwgz9SCin2+CHtJJwYoLgbITvvcOeN7a4S6NgTB45+cmCucvu8JMFOZCZQHp
+r0tYO12Ga9cKwpJz5xvIfH+GR2dxRGp+uSOs8Jxv39GKV+/gYS2OlXoSfNECMnMSRKw+hdS3BLI/
+Mlho3MPUR88lE+++ozlfjWG1kYJUCcNRsMCWM4NM02vf/hTgwsf+1uLpfTw4mcOtQ0G9aCDINiWm
+RiAdiAz+HTC6Nfi3QKx6uckjT3Pi0K1c1QPnzojahtsi3Zr2L/rfDGin5fE3o+pVxeYXRmVw3dA0
+Pddzfwz8Co82LFVERMuTbEyXJjGUMaqBgoBQ0Qfjmq5lWO3n9E/76IK8s4PCYHCytoDZgwhsWXPz
+osGNdYPszY1jTonBnxVgSuuhe6KhyfRDJGsJ3P0gQSqLDG7RBeE6PeF6Wie7X/MI5N2YLonoX+oF
+ce1ZsXicQOJoHs68FdbNznBbAytaREthSHIE2lQPCF8cgT0/jLHtIQbD8sqEbrBuWYM+mqx93ANN
+8hp+AQOPtI0tirA3AAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>594</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png.xml
new file mode 100644
index 0000000000..d309ac9264
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962222.76</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>arrow_refresh.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAACEnZiMpaCQqayYzdi48
+gDVAhjlEiz1Lk0NRkktWl1BRm0lVoU1Xo05jpF1eq1RfrVZoqGBrrGNltFtouV5tvmJ8vXOBwneH
+xICLxoOPyYiVzI2ZzJmk1JskYyDJkc/xAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ
+cwAACvAAAArwAUKsNJgAAAAHdElNRQfWDAcJGxt8FrnTAAAAgElEQVQY03WP2xLDIAhETdMQlDRt
+bCqK2v//zNbLTJ7kaQ8My6LUsAgv/X4ZomNfOp4sKcUo3sxtLDmmKMGznmrD5SQHAGj9rfz0Maxl
+e2qsNkJcBoc3RFib/JyVRdy9seedyAYJpjHn/E8i7PeexBUMbPWtuz1sCQLz5Y8wfvoHKEcHts/s
+/fkAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>356</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_up.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_up.png.xml
new file mode 100644
index 0000000000..06f3ab31da
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/arrow_up.png.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962222.95</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>arrow_up.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEGSURBVDjLpZM/LwRRFMXPspmEaGc1shHR
+aiXsJ5GIRixbCr6SikxIlqgJM5UohIiGdofovHf/PZVmYwZvTntPfjnn3txWCAFNNFE33L/ZKXYv
++1dRgL3r7bu0PbucJp3e4GLjtsrXGq9wkA8SU7tPk87i/MwCzAyP5QNeytcnJl46XMuoNoGKDoVl
+TkQhJpAgmJqcBjnqkqPTXxN8qz9cD6vdHtQMxXOBt49y5XjzLB/3tau6kWewKiwoRu8jZFvn+U++
+GgCBlWFBQY4qr1ANcAQxgQaFjwH4TwYrQ5skYBOYKbzjiASOwCrNd2BBwZ4jAcowGJgkAuAZ2dEJ
+hAUqij//wn/1BesSumImTttSAAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>372</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_1.jpg.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_1.jpg.xml
new file mode 100644
index 0000000000..8d54eb7977
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_1.jpg.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962152.2</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>bgnd_sel_1.jpg</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/jpeg</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b
+AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxsc
+Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAIwAUAwERAAIRAQMRAf/EAFwAAQEBAAAAAAAAAAAAAAAA
+AAAGAwEBAQEBAAAAAAAAAAAAAAAAAAUCBhABAAEFAQEAAAAAAAAAAAAAAAFRElIUFWECEQEBAAMB
+AAAAAAAAAAAAAAAAEwEREhT/2gAMAwEAAhEDEQA/AKvfirrJOeqb8VJFTf8ASRVMdP5yVYIvrwdO
+MiB68HTjIgerCdvU+UTRecmi85NM22wAAAAH/9k=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>35</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>371</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>20</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_2.jpg.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_2.jpg.xml
new file mode 100644
index 0000000000..2702b8c575
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_2.jpg.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962152.38</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>bgnd_sel_2.jpg</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/jpeg</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b
+AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxsc
+Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAIwAUAwERAAIRAQMRAf/EAFAAAQEBAQAAAAAAAAAAAAAA
+AAAEAwgBAQAAAAAAAAAAAAAAAAAAAAAQAQEBAQAAAAAAAAAAAAAAAAATkRIRAQAAAAAAAAAAAAAA
+AAAAAAD/2gAMAwEAAhEDEQA/AOp+wOwOwSWAsBYENgLAWBFUCoFQYaBoGg//2Q==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>35</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>331</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>20</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_3.jpg.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_3.jpg.xml
new file mode 100644
index 0000000000..3f167b9920
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/bgnd_sel_3.jpg.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962152.56</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>bgnd_sel_3.jpg</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/jpeg</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b
+AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxsc
+Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAIwAUAwERAAIRAQMRAf/EAFYAAQADAQAAAAAAAAAAAAAA
+AAAEBQYHAQEBAAAAAAAAAAAAAAAAAAAAARAAAgIDAQAAAAAAAAAAAAAAAFEBFGECEhURAQAAAAAA
+AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AOb9QyKdQwHWrAq7sMBdhgLsMDOejkB6OQHo5AztndlQ
+s7sBZ2YEYAAA/9k=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>35</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>353</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>20</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/disk.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/disk.png.xml
new file mode 100644
index 0000000000..53cfdd7bd6
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/disk.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962223.28</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>disk.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEVhcmwyY6w0ZrM1abU1aro5
+bLw+cLteiclkjMhljcpnjsltltN5mMdzm9l8msh0ndyBnsx7o+GEo859puaKp9KAqumIwGKOq9WV
+sNqatd2fuuGkvuStxeqtxuu2zO670O/C3L/D1e/H2fTJ3PTQ3/bY5fbd6Pjh7Pnl7frq8fvt8vvx
+9vz2+f0xYKYdIMKVAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACvAAAArwAUKs
+NJgAAAAHdElNRQfWDAcJJiM+/EnzAAAAnElEQVQY003P6xKCIBCG4QXRUEMjO2ehpSiy3v/tBeqk
+zz/e+WZnAGCL0IkAgDUNIlozIBqtdj6cEflgLNpOKxX5YC2fB1rWAbBvYUziB1q3spxC1/UD2l63
+bf6kwD4FjxOHO+Lhg5zl3t2Feg1C3AgwtXmL6xTwLz0RCN8SLwtMj3OoFpgcRmDbRZy58CrXG9l+
+9L8PAkopIWT0fn0QF7+cbZK5AAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>429</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/find.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/find.png.xml
new file mode 100644
index 0000000000..ba557ad40e
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/find.png.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962223.49</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>find.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIlSURBVDjLY/j//z8DJZiB6gY09895tGTD
+nv+tE+f+B/EnL1gHZofGpt4iyoCK5r5H63YcBmkAG5BRVPO/b/aK/0CDn+A1ICm75H/X9CX/azun
+/m+bNP+/iaUd2AAHN5//WSV1/wuqWsFiVvauyxWUVHkEhUWZwAYsWLOTo6i23aOpbzbYqYXVbf89
+/MP+u3gF/M8pa/gfm5b3PyKn6X/txGX/S1qmgOW4uXmq2NjZGcEGTJi7mmXKwvUPF63b9T+3vAmM
+qyeu+j9l+a7/fUu2/2qcvuF/be/8/9G5zf/DkwvBLmRmYXnAwMDADDYA6FxWkM3TFm/8n11a/x/k
+55Tc8v/RyTn/1bT0wDaCXAITj0svAOpi+AfErGAD0goqWf1CY35a2Dr99wqM+G9sYftfW9/4v6yC
+8lMRMXEDSRm5rWISUv+B/v4vKi75n5eP/z8jI+M7oAFM8ED0CYo6DAq4XYfP/F+15cD/7hnLQAG2
+AiSnqqmzorJlwv+1Ow6B5UAxwscveBglFtx8gv/kVzSDDQC66H98RuF/PWPzqyA5oM1XQTEAMiA1
+v+J/emH1fw5Orj8oBji6+/6HGQBTpKGt/1NRRZ1RQlr2HSjgYAaAwoKVle0/igHWjm7geAYlIJAC
+UGDqGpn9B/qfX0lV4wrIAFAsweSAYYBqACiBGJhYggMP6Of/QJv/S8sq/AcGohTQv7c5ubj/A+Md
+FH2gGABj2mUmUjEAnjJojQ5aPHUAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>659</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/header_bgnd.jpg.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/header_bgnd.jpg.xml
new file mode 100644
index 0000000000..1ff7c37682
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/header_bgnd.jpg.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962151.02</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>header_bgnd.jpg</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/jpeg</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b
+AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxsc
+Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgANQBnAwERAAIRAQMRAf/EAGEAAQEBAQAAAAAAAAAAAAAA
+AAEAAgQBAQAAAAAAAAAAAAAAAAAAAAAQAAIBAgUEAgIDAAAAAAAAAAABESExQVFhAhJxobEigZHw
+0TJCAxEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A6pragD+VAy1SEAYOcQMpvlGGAG3M
+LuBS1roBagaSULuwMO8YZ6gMeqYGrq1wB2Ay05zVpAsYkDSmWswCEAO/QBduwBZV+ANXhaASW79s
+CdInqwJeQGLVmAMP+U4AahpvsBJJvyBTWgBtkCcJ1AuK+gCkoBbjRXA1ETNQMpztAaLwBUi9QCMQ
+G0ZoAl3X0BTL9aXAeShw6gEy1kApQ4xqASmnHUCxyANrjc0AzggKZh4gVJzAVEZ0uAdaaAGOoDZA
+UbWml1AknNaAW7fx2z9gH+dpa46MDVVUCwWeIFCbgASr0Aty3JJpToBTtj4pmBT2AneYuAbnIGtm
+KdNQBL+zfRgTaaX5YCU8niwJN/oC26gUwpAJWdwFP2UVzAo9gH1hwBV40AyuXwA14+QLbgBLEDSt
+S0fIGXE6xUBUUtM1gDLwzAvGoDt5cnnIFSkAf//Z</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>53</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>657</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>103</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/noparse.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/noparse.png.xml
new file mode 100644
index 0000000000..1554e3c822
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/noparse.png.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962223.7</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>noparse.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A
+/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAtFJREFUOMut00toVGcAxfH/d+884kzmJjFR
+0wkmkwwRAhatUasUQbtqUzGIBJKgCd1Uu9Aq7two3UihGB8o1IWgBSlqGmxLa9GitqggJhNrajJq
+TGIzk4yPTJLJzJe5j++6i6C40rM8ix+cxYF3jHi96OqIRU/5va2urdryplVuuwoXNQ7qTHtq9OyX
+3zcNvhW4dDi2ZWVOHjux0PdBZbQMw6cDMCVtHvYNs6O3f+xG0fydLUeaO98A/ujo2bLeEqf9tcEg
+3hxdBBiQDo5yiYg8LYlB8Aax7snsxVyqveXHrzsBNIBdh3tqVqVfHPVXeYKiqgj3mcume/dZXqxR
+XyxoutODa/nxRCKI8nRw2ePeoxvbTtXMAXHB1gOLS8KKDOrWIzTdg/AZNGjPaLASaIVFeAPFyGt/
+Y6dG+G5jY3hc+bbOAabjbKuvLuNkQSn55BD26DB6YQjMBUAYX6GBjHcz86iP4+sbWVNfgzDNba8A
+aVaUhDyMTkv2R5YwmxyEXBbUE7CGIJ9nZjjOtxs2k5jMURb04zqy4hWQN3GVi+1CKDeF7iqw8jDy
+FDJZkBJdCIzJCWzTwhWA4zAHgJN4kZ2lVpjsjfehzzNgNgsfLoMVy0HmKAiVsvvaz1Sb06SmMwih
+EgA6QMXa1hIj/XzDnslhNNuLr7AUKzCJ9uAO9HTjGB78dhBl5fno4W3OP/eSyJhHkgN/XtcB9kdW
+/d8cf9BkhBeEfHXVZGPdTPXG2B39lF+0RdRfPIeSGYo+Xo0tJYuv/JoMyIk9l1P9aR3gt38vpVfW
+fT4SGUh+gT3hs3NjHPqsmRnLQQmN/1Z/wtrYZezpKeRAIns1MH/7N70Xbs5NAOiK/9VfV70u7r9/
+d92+NY2huqWVLI0uJFpVih4o4AfC1Pz+09g/xqKvtsfOd771TE0NB6ND80KtuKoNNVuOqxBCjANn
+KmfGz3Ze6RjkfeYlY0g699CYV+QAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>830</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/page_link.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/page_link.png.xml
new file mode 100644
index 0000000000..29343d3e20
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/page_link.png.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962223.94</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>page_link.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAhxQTFRFAAAA
+QkNFQUVIQ0ZIRkZGSUtQS0xNTExMR01YTU1NUVFRM1+iPWCUOWGeMGW6MWW5M2m8YmRnYmRoZWVl
+ZGZoZ2dnOHG/aGtvaWttamttZ2xwV3CBV3KGTnSPO3bEU3SbPHjBcXFxQnm/c3NzQHzEcXd7RX7C
+QoDFQoDGeHh4eXl5RYLFRYLGRoLEUIOnRoPGR4TGSYXESYjGSojGS4jFf4CAS4nFS4nGTInGSoy7
+goKCTYvIT4vHT4zIT4zJT43Ig4WGhYaHhoiLh4mNiIuPioyNjI2NZJLbi46RZZTbkZGRipKdkpKS
+kpOUjpSal5eXnp6efbDhfbLipK66ra2trq6uhLbirq+vsLCwvb29wcHBwsLCxMTEmNH4u8rdws3W
+s9Lxzs7OtdTzuNb0ztPTutb1u9b1tNj2u9j2xNfuvNn2vdr2wdv4wtz42dnaw935xN35xd/5xt/6
+x9/6x+D6yOD5yOD6yOD73d3dyeH7z+D1yuH6zOH7yeL7y+L70eH5zOP7zeP7zeP8zuP7z+P8yeX6
+z+T80OT70eT8zeb80+X90ub80+b81+by1Ob81Ob90+f91ef91uf91uf+1+f+1uj+1+j+2Oj+3+n0
+6Ojo3+v14+336e/15vD36PH47vD06vH46vL66/L47PL37PL47PP57fP47fT47fT57fT67vT47/T5
+7/T68PT48PT58fX58vb68/f7+Pv9+Pv/5xIqeAAAAAF0Uk5TAEDm2GYAAAAJcEhZcwAACxMAAAsT
+AQCanBgAAAAHdElNRQfYCBUOBAAL/DCAAAABCklEQVQY02NgYLC2BQJ7OxszOQYwMFy8avmyZcuW
+LO4N8gQLmGwoqawtL8xJ3pwe6A4SsFjf1NxYV5qbuqmzNUwJKGC+vqW9ram6IGvG4o1z1EAC63r6
+JnQ0luWmJSWs1QUKGK+eMmlif3dNcW52xhp9oIDRiunTp03u6qgpyc9dqQMUMFg6ddqkSRO72huK
+ixZqAAW0F02uCnYNcIrLdA5wkwcKqM+r9/aaWRHl4ZdXEePFzsCgMtdSNUWGTdhHS5jNMUaZgUFh
+tqxDSixzZGJ0CNP8GCsGBrFZelIp0owsXFwsjKYxogwMAgviRXzDQ/0VNf1DI1w4gaby8XNzCElI
+8vCKSwiyMgAAYZ1Pq2kRnzoAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>941</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette.png.xml
new file mode 100644
index 0000000000..2450230e4d
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette.png.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962224.13</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>palette.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALqSURBVDjLjVPbS9NRHN9T/0BWFBQUVIQK
+XigCpVIyygcDJUrnZdNEc5hlmZc0TdSF0bxszs3LvM3pXE6Xa3NL0TJTl7pcTY1Ec5rX/WxqCrHh
+p7NBPaRGD5+Xw/lczud8vzQAtJ0wWhLp+4kbUThSFGrQFwTrB59dE+ryA/3+vreNOMaPOmLkMeUT
+4mTMaoph1klh7pPApOLAUH4LPTn+X7qzLwXsKDDGj0wy8hibM+oCrI9pYTWGA0ZnWEd8sWZQYvXD
+C5g0XAzyo6BJP5f/R2C89OYeErlquiUPP9vogNgF1iYfbH10B0zxRMQFC4oszMsz8F3XBOqdBKqU
+s7a2B6fdHAIkMnu6le1w3WrwBLrjHSKWrhhYh72w2kVHjTIIae3eKFJexkp/I0YlKWhJdKsgZIan
+oTjMtlHPxSY9BD/YgbA2eGPteRjmWzOJazrmZKl4rL4AQT8TD4nIfPMjzKgKIUtwNtJIyxXftISc
+lICN3GxYfHyw3FEEy1ALLIPNsOhkWGzLw5umCHCUflBLr2O29i4WXgnQwDpB0YY5NyapASmoxlxQ
+rGAsFrAIWQ6D6Da0GecxXBaLFfLmuHI+TgrkCBCIYKqIwVKHEHWxxzZp758GbTrc9AqYu4WYb8kk
+RcnsLcPejzL5DKi3dfAQSEFX9RKRZkzxQklKIaqjD4PW9+QqVy+IxmdpOkwvOaB6xVjpa8QQOSMt
+Y4DHAPW6GuLSVFwprUJxSQYWlRyMS9JQGXlw3PELZDB8OzN9c0hkdXua1/pYfTKonloHkeoWYVac
+hCkuHZNFwZhrTMeCmov2rIsoY+wL2TaJJLKr4r6HzUyIpso4R9yp4mB8LWFgScPHtJyNjhx/CCOc
+CnccZTua77jKRkiJy51lmKlJxJK2lJBLoOMxiet+myDcKWXXXbBDGn/KTcI6brO7TUgzMcBl4Pk9
+d3tkhSB8r+s/l+k36mKOJpKW10VRh/TlzAOFJLLnTvd2Ffhf/AKfTM1hskDhXAAAAABJRU5ErkJg
+gg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>856</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette_bg.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette_bg.png.xml
new file mode 100644
index 0000000000..46c371e3ad
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/palette_bg.png.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962222.06</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>palette_bg.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAgFQTFRFEkhT
+YkIiS040LVRVdEseI19mI19ngFAVWlg2I2x2NGlmNGpphVotSGhkOm1nInaDInaGmF8W8EFBUG1n
+mGAcP3NxfGhGkWVCcXBbW3ZtKoKQc3JepGoldnNagnBVhHBTinBCgnFVp3FArHMxfXxlr3Mx9lta
+r3Q4s3Y1tHc2tHc3goJronxVJ5itJ5iuMpippX5YuXw+7WtZun0/SZefuIBETpievIRK9nVvapuW
+kpV9pJd5zY9d0JBc9IdSyZNgyZRgypRh9YWC3pFZzJZj35JZ35Nb6Y9rzZhl35Rc4JVgzppoerg8
+e7g8gbdA0ptpW7bFjrRFkbRI0Z5u0p5ut6lX4pxn4p1qobRTwqpf46Fy16V35KJx3KR31qZ42KZ6
+5KR1/6Qs2al83Kl//qcz+6c85qh8+6pB5qt57aiF9aWT8qxd561+4a6HmMhh565856594a+G569/
+4bCH57B/6LGA6bOG+bNb4rWO4raO6bSO47aQ47eP6LeT4rmT5LmS5bqT6rmV6rmW6rqX6LuY8b9b
+67yR8L9n6ryZ67yZ672a7MCZ7MCe7cCe/8Bt7cGg7cOi7cSj7cWk7cam7sam7Mem+8477seo7sio
+7cmp7Mqp78qq+9FC78qr8Mqr/tMx8Myt/9Ur/9Us8M2u8M2v8M+x+9Ve8dCy8tK089e6/+Jt2Ukr
+hgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH
+2QwFEB4LVH6/UwAAAPJJREFUGNNjYLACAW05Ax15FSCDgcFKT09PQDy2ftbUSn8lKT0rkACvTc3K
+ZQvnrFhe5yIKEpAsLE9Mn79qUWnB7MlaEgxWwsUrU/oS26e1RvgEzYgTY5C2zVKzS80uyc/wy/PN
+qRZhsG2wcBJqW7JgXllkYGhMCzuD5sxMI/fFIcbeUyz1zMI6gAJLlnYXzTXU05yoH6Dr2SnCoKiZ
+VDFpuoeGQ7+1iVVVvAKDFTMjj3r0hP7eBDfntFpTWbBL2VR7wj1dvZpyzfnALtXTYwnuimpudBTk
+0oMKsMrkJtsrc/DrwQT0uEXYmThBDJB3UQADAP19Sp2HmoO5AAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>903</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png.xml
new file mode 100644
index 0000000000..0337ebf6b0
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962224.56</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_col_add.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAHVQTFRFoaGhoqOioaKhra6unp6ee3x7qampoqOj0dHRpaSlrq6tlZaW
+oqKjoKCgnJycjo6Om5qaqKionp+eoKCho6Ojs7Ozubi5hoWFiYmJpaWms7S0k5OTcXFyfX1+pKSj
++P//2dnZoqKiQX0VVtpjYeVu9/f3////OlAsCgAAACd0Uk5T////////////////////////////
+//////////////////////8Ag1aX2QAAAH5JREFUeNpczIkOgjAQBNAFb0HxFlFod9vu/3+iUwPY
+dJKmydvJkKqI6D+kWzHyuO/Xr2HDZamEu8Hz3rsQAgFMzAScNwDaAdwv1toIC9ydHxsF4Ix/Bozq
+LoUr4JbCEsDYmkdPAEob79hIoc2hj8B1wXS4HKvmufoAsnwFGABMMSClqzq+uQAAAABJRU5ErkJg
+gg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>400</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png.xml
new file mode 100644
index 0000000000..632b8ae63b
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962224.37</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_col_add_multi.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAJ9QTFRFTrVEoaGhVLtKoqOioaKhiq5vt/DBnLSLRpMos7S0o6OjoKCh
+oKCgd45lfX1+c4xicophbIRbnJycpKSjcXFynp+epaWmnp6epaSlqKiooqOjl+mhqamp5ejora6u
+ne+oe3x7b4deoqKjaoJYubi5rq6ts7Oz0dHR9/r62dnZrsadvPXFSaI0+P//oqKiTqc5VtpjYeVu
+QX0V9/f3////iqyQQgAAADV0Uk5T////////////////////////////////////////////////
+/////////////////////wB8tdAKAAAAo0lEQVR42lzM1xKCMBQE0FAE7L0X7IYQ0v//29ygyIw7
+k5ezm0ucM8a4NsS9TGXuz8dhNd+JOHYEfYWntVbW2gBQ+TQgfgspG3BdgOIJV6ooCg8n9FyWUnIs
+IsDW2k5SIvxz1G0A9SJjzPYBPRQKoAlldg0QuKU4zwg5pukQEPiF1mG+p5RO/OILIb6waQu6vjHy
+IK6RCAbL2fhyOy8Af3kLMADF7SlpRy/i2wAAAABJRU5ErkJggg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>493</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png.xml
new file mode 100644
index 0000000000..887487c531
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962224.77</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_col_delete.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAH5QTFRF+P//oaGhoqOioaKhra6us7Ozs7S0qKio0dHRoqKjlZaWm5qa
+k5OThoWFfX1+pKSjiYmJpaSloKCgpaWmnp+eqamprq6toKChoqOjnJyccXFyv7++jo6Oo6Oje3x7
+np6eubi5xcbFzMvMoqKi2dnZfRIS8VBQ/Ftb9/f3////QDGEpQAAACp0Uk5T////////////////
+//////////////////////////////////////8AMqjwXAAAAHlJREFUeNpczNcOwyAQRFGwE8dp
+dlzS47oY2P//wQwp0or7hA6jVRylOJ+n57i+nJvyRmnKavnmnLPeew1QoT9QvABwZoyxn/AIsMKH
+db9FAthIwFGuJFwBnYQBQPLoHqDl4hAWEk4xFAFom5Cu2/vudewfgKi3AAMAOJIixLoIKk8AAAAA
+SUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>407</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png.xml
new file mode 100644
index 0000000000..c35d7b127a
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962224.97</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_get_range.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAJBQTFRF2tFhoaGhoqOioaKhrq6tqKio2s9Zs7OzfX1+jo6OqampzMvM
+v7++lZaWk5OT0dHRubi5hoWFnJycm5qao6OjcXFyysrKoKChpaWmxcbFra6u2tBeoKCgoqKjwsPC
+paSliYmJnp6e2s9Xs7S0u7u7oqOjpKSje3x7np+e2tBcoqKi5dpf2s9V2tra9/f3////l5uOFQAA
+ADB0Uk5T//////////////////////////////////////////////////////////////8AYqXQ
+eAAAAIFJREFUeNpczusOgjAMBeANBFQQ8cpVQfC2wsr7v50dAdPspL++9DQVoxUx7sM8SoLVNnu/
+wHUJrqjxP5LgrsUwR2kgeGLZ98M0PhroUCygJih4xSHw+IY5WqNaoMWU4MwrDwLgf5wIJIfYbGiW
+xq6sDcDNAVl9j7vN4XMhsPITYACtiieNLNNtvwAAAABJRU5ErkJggg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>439</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png.xml
new file mode 100644
index 0000000000..0e9a81c657
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962225.52</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_row_add.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAHVQTFRFoaGhoqOioaKhra6unp6ee3x7qampoqOj0dHRpaSlrq6tlZaW
+oqKjoKCgnJycjo6Om5qaqKionp+eoKCho6Ojs7Ozubi5hoWFiYmJpaWms7S0k5OTcXFyfX1+pKSj
++P//2dnZoqKiQX0VVtpjYeVu9/f3////OlAsCgAAACd0Uk5T////////////////////////////
+//////////////////////8Ag1aX2QAAAH5JREFUeNpczYsOgjAMBdCCiIqKgg/wAbOd6/9/orcE
+4rKbtFlOm45URUT/Id2Kk/utKh/jhvNcCXOHCiF8UARwlgU43QDoE+CXGKww91/EWgZo5vfUcFR3
+MVwA1xgKAPsoZwDNP07tZRsx9CkMBnzImI5tvT916zcgyU+AAQBMwSClZ47ymgAAAABJRU5ErkJg
+gg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>400</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png.xml
new file mode 100644
index 0000000000..e013819d6e
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962225.31</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_row_add_multi.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAJ9QTFRFTrVEoaGhVLtKoqOioaKhiq5vt/DBnLSLRpMos7S0o6OjoKCh
+oKCgd45lfX1+c4xicophbIRbnJycpKSjcXFynp+epaWmnp6epaSlqKiooqOjl+mhqamp5ejora6u
+ne+oe3x7b4deoqKjaoJYubi5rq6ts7Oz0dHR9/r62dnZrsadvPXFSaI0+P//oqKiTqc5VtpjYeVu
+QX0V9/f3////iqyQQgAAADV0Uk5T////////////////////////////////////////////////
+/////////////////////wB8tdAKAAAAoklEQVR42lzO5w7CMAwEYHdB2XvvHdo0qZO8/7NxAUol
+TvKf7yzL5JwxxtUh9zCFud5v2/lkreLYEfoCY619YgJA4VOB+m0kSQWuBShlQ5Y+Hvbopc61lswc
+AVbMupEjHnDULQHvjTQMuQNooygBTIeQFwDlj0mZEm2IeoDg80ImdkKIod/4QtYUWTaqwVqA7XtQ
+50gF3dl4cLocp4C/vAQYAJadKWkwmmDCAAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>492</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png.xml
new file mode 100644
index 0000000000..7a5ee8d5a3
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962227.28</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>sheet_row_delete.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAH5QTFRF+P//oaGhoqOioaKhra6us7Ozs7S0qKio0dHRoqKjlZaWm5qa
+k5OThoWFfX1+pKSjiYmJpaSloKCgpaWmnp+eqamprq6toKChoqOjnJyccXFyv7++jo6Oo6Oje3x7
+np6eubi5xcbFzMvM2dnZoqKifRIS8VBQ/Ftb9/f3////eaUqRAAAACp0Uk5T////////////////
+//////////////////////////////////////8AMqjwXAAAAHlJREFUeNpczesOgjAMhuENRBRB
+ERUQUDyUbb3/G/QbQtLsTdYfT5pOcZDi3efdv5L6djm1FMespn/OuS+eBijfChRuAHhrRB421lpj
+lxEBUgk4ymcJDeAhYQSQPHoA6OXHeeR+Q0IZwtED7SPS1fWeDcWzAwT9BBgAO5oiyPK1HIIAAAAA
+SUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>407</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/table_delete.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/table_delete.png.xml
new file mode 100644
index 0000000000..8382a2ec8e
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/table_delete.png.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962227.46</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>table_delete.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAImSURBVDjLpZNPSFVBFMZ/9859+C9J9PmP
+wpeUi8qyIB5JLQqEoqAQIUqCFiFB4aJWrsIgW0TLyHYRBFJgYBiUKUkmPYwio02kuZBMny8JzT95
+Z860uI93n62MBoaPc4b5zne+meNYa/mf5QE8GPp51VpajJXNIoIR0CIYIxixaCNZ22C0xYi87Thb
+E/cAxNrWpnhh9F8qtz8c251RYESiAD1f76NFo43GF41v/BCNzpy11Xfg+yYniyDwoXnH+XVVX1zR
++NqEHhgjAHS9Tq6L4MS+YlazCXSaAODMwTIeDc9w6kB5JtedmKFpfxin5lfWKvCNINbiKeh+k0Qp
+l8eJJI4LbvpSz0gSrCXiwfZN+az6f7VgAU85NMZL6RmZ5WS8bI2C7Hhsah6tZa0CK+C50PtuFqUC
+hCAH8Oz2TXIS95DpcZxoJXVFx4H6NIEWrLVEFBzdW0r/aIqGuvBbDN69RclkLzXNLeRU72T5Yx+F
+QwO8aIi0BiZKIEe5Dv2jKYAMug74LzvZdu4SueOD8Oo6+RuLqI7FeP/ZXg4ItA48cOHwriiDn1Ic
+qg0VDPyYJLeiGo5dCWegvRIlzpbQA2uprdrA97lltpbnMTH9KzMLlFSw9OEpBU8u8nt5miVgYV5h
+FFPpV7DD17q+7Fk1UuBrg68NRgu+EbTR1Jc3UpB4Tqw4D09FWJjVTMy41iJ3nPWO8/DpqrbFuakL
+yjgxo+w3C51H+vSNP9H7LzNBaB8uAAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>660</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_center.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_center.png.xml
new file mode 100644
index 0000000000..a80c14a117
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_center.png.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962227.65</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_align_center.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJ1BMVEUZAAAZGRkgICApKSkzMzM6
+OjpCQkJKSkpSUlJaWlpmZmZ0dHQPDw8ERgSHAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJ
+cEhZcwAACvAAAArwAUKsNJgAAAAHdElNRQfWDAcJHh8GDImPAAAANklEQVQI12NgwAN271o1s6MM
+RWjVzPY0FIGVM9pTXYxRhMpTXYxQBMpSnI0Ez6AIOSuhCUABAP74DUvxE5kxAAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>228</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_left.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_left.png.xml
new file mode 100644
index 0000000000..c2c901e518
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_left.png.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962227.84</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_align_left.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVElP//x/AH
+DH+D4S8w/sWwl5GBgfE/MSYU/Ifphej8xbCLEaaAOBNS/yPbjIC3iHZD5P9faHqvk+gGbzQTYD76
+TLQbbP//hOqE6f5AvBsIRhYAysRMHy5Vf6kAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>209</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_right.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_right.png.xml
new file mode 100644
index 0000000000..f89375812e
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_align_right.png.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962228.03</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_align_right.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVElP//x/AH
+DH+D4S8w/sWwl5GBgfE/MSZAQNL/31CdMHiGaBNS/yPbjIC3SHSD+3+EXoh5z4k2wfs/qt2/ofAz
+iW7Q+v8brhsSrn+IMYFgZAEAE0hMH/VkcbsAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>209</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_bold.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_bold.png.xml
new file mode 100644
index 0000000000..41676b15a2
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_bold.png.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962228.23</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_bold.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJ1BMVEURAAAZGRkfHx8pKSkzMzM8
+PDxBQUFKSkpTU1NZWVlmZmZzc3MQEBBLjRZbAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJ
+cEhZcwAACvAAAArwAUKsNJgAAAAHdElNRQfWDAcJETFdQpiPAAAAQklEQVQI12NgwAd2b1g1Aczg
+WsDZDmUwlIEZnBPYSyCMhjQHMIOjgCUYzGBPYDCFMBwYlMEMNgcGGzDDxUjmAF4bAXTECuxCk3HU
+AAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>240</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_italic.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_italic.png.xml
new file mode 100644
index 0000000000..71e7f936e7
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_italic.png.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962228.42</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_italic.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIVBMVEUAAAAfHx8oKCgzMzM8PDxB
+QUFKSkpSUlJZWVlmZmYZGRkgnA7oAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAA
+CvAAAArwAUKsNJgAAAAHdElNRQfWDAcJGAo9i8riAAAALklEQVQI12NgwAs4Z7ZDWR0wIZgAexmU
+wZYAZbA6QBmhBlCGM0yTEYxWXIDfQgCVxgVOu7p6XAAAAABJRU5ErkJggg==</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>214</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png.xml
new file mode 100644
index 0000000000..696e10ff36
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962228.6</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_strikethrough.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACfSURBVCjPY/jPgB8yUFNBiWDBzOy01PKE
+mZG7sSrIe5dVDqIjygP/Y1GQm5b2P7kDwvbAZkK6S8L/6P8hM32N/zPYu2C1InJ36P/A/x7/bc+Y
+oSooLy3/D4Px/23+SyC5G8kEf0EIbZSmfdfov9wZDCvc0uzLYWyZ/2J3MRTYppn/14eaIvKOvxxD
+gUma7ju1M/LlkmnC5bwdNIoL7BAAWzr8P9A5d4gAAAAASUVORK5CYII=</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>269</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_underline.png.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_underline.png.xml
new file mode 100644
index 0000000000..2e86fde00a
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/jquery_sheet_image/text_underline.png.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Image" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>_EtagSupport__etag</string> </key>
+            <value> <string>ts79962228.78</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>text_underline.png</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>image/png</string> </value>
+        </item>
+        <item>
+            <key> <string>data</string> </key>
+            <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
+U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACjSURBVCjPY/jPgB8yEKmgPKH8ffn/0n4I
+L3F99P+QAjQTyveX/IexIwWCz2NYUbw/7z/CYK/9GApy92cgKXDEVJC+PxFJgQWmgoT9kUgK9DEV
+ROwPRFKghqnAv9/7v2MAhK3iINePocBNwf69xXlDhf8Myg4y58UUsISkmYL+fI39ivul+0UMSA/q
+/wza/1X+y/0X/y/0n+c/+3/m/6SbgAsCAM8i/W7eee6fAAAAAElFTkSuQmCC</string> </value>
+        </item>
+        <item>
+            <key> <string>height</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>size</string> </key>
+            <value> <int>273</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>width</string> </key>
+            <value> <int>16</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/menu.html.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/menu.html.xml
new file mode 100644
index 0000000000..3559813224
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/menu.html.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <unicode encoding="cdata"><![CDATA[
+
+<span class="rootVoice" menu="menu_menuInstance" style="width: 15px;">MENU</span>\r\n
+\r\n
+<div id="menu_menuInstance" class="menu">\r\n
+\t<a menu="menuFile_menuInstance">File</a>\r\n
+\t<a menu="menuView_menuInstance">View</a>\r\n
+\t<a menu="menuEdit_menuInstance">Edit</a>\r\n
+\t<a menu="menuStyle_menuInstance">Style</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuFile_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.newSheet(); return false;" title="Creates a new spreadsheet.">New</a>\r\n
+\t<a onclick="sheetInstance.s.fnOpen(); return false;" title="Open a new spreadsheet.">Open</a>\r\n
+\t<a onclick="sheetInstance.s.fnSave(); return false;" title="Save the current spreadsheet.">Save</a>\r\n
+\t<a onclick="sheetInstance.s.fnClose(); return false;" title="Close the current spreadsheet without saving.">Close</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuView_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.viewSource(true); return false;" title="Shows the HTML that makes up the current spreadsheet.">Pretty Source</a>\r\n
+\t<a onclick="sheetInstance.viewSource(false); return false;" title="Shows the compact HTML that makes up the current spreadsheet.">Compact Source</a>\r\n
+\t<a onclick="sheetInstance.print(sheetInstance.HTMLtoPrettySource(jQuery(sheetInstance.exportSheet.xml(true))[0])); return false;">As XML</a>\r\n
+\t<a onclick="sheetInstance.print(JSON.stringify(sheetInstance.exportSheet.json())); return false;">As JSON</a>\r\n
+\t<a menu="menuViewFunctionReference_menuInstance">Function Reference</a>\r\n
+\t<a onclick="sheetInstance.toggleFullScreen();">Toggle Full Screen View</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuViewFunctionReference_menuInstance" class="menu">\r\n
+\t<a>Usage Example: =SUM(SUM(A1:B1) + SUM(D7))</a>\r\n
+\t<a>=(TRUE(N(A1)) || FALSE(N(B1)))</a>\r\n
+\t<a title="Returns the absolute value of a number">ABS()</a>\r\n
+\t<a title="Returns a rounded number">AVG(), AVERAGE()</a>\r\n
+\t<a title="Returns a number rounded up based on a multiple of significance">CEILING()</a>\r\n
+\t<a title="Counts the number of cells that contain a value">COUNT()</a>\r\n
+\t<a title="Counts full days from a specific date - format(YYYY,MM,DD)">DAYSFROM()</a>\r\n
+\t<a title="Converts a number to text, using a currency format - options(number, decimals, symbol)">DOLLAR()</a>\r\n
+\t<a title="Returns a logical value of FALSE">FALSE()</a>\r\n
+\t<a title="Returns a text representation of a number rounded to a specified number of decimal places - options(number, decimals, useCommas)">FIXED()</a>\r\n
+\t<a title="Returns a number rounded down based on a multiple of significance">FLOOR()</a>\r\n
+\t<a title="Creates and executes a javascript function. example: FN(alert(\'Hello World\')), this will execute when sheet compiles.">FN()</a>\r\n
+\t<a title="Returns the integer portion of a number">INT()</a>\r\n
+\t<a title="Returns the largest value from the numbers provided">MAX()</a>\r\n
+\t<a title="Returns the smallest value from the numbers provided">MIN()</a>\r\n
+\t<a title="Converts a value to a number">N()</a>\r\n
+\t<a title="Gets full date of today">NOW()</a>\r\n
+\t<a title="Returns the mathematical constant called pi, which is 3.14159265358979">PI()</a>\r\n
+\t<a title="Returns the result of a number raised to a given power">POWER(x, y)</a>\r\n
+\t<a title="Returns a random number that is greater than or equal to 0 and less than 1">RAND(), RND()</a>\r\n
+\t<a title="Returns a number rounded to a specified number of digits">ROUND()</a>\r\n
+\t<a title="Returns all of the values in each of the specified cells and added together">SUM()</a>\r\n
+\t<a title="Gets full date of today">TODAY()</a>\r\n
+\t<a title="Returns a logical value of TRUE">TRUE()</a>\r\n
+\t<a title="Converts a text value that represents a number to a number">VALUE()</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuEdit_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.merge(); return false;">Merge</a>\r\n
+\t<a onclick="sheetInstance.unmerge(); return false;">Un-Merge</a>\r\n
+\t<a menu="menuEditColumn_menuInstance">Column</a>\r\n
+\t<a menu="menuEditRow_menuInstance">Row</a>\r\n
+\t<a menu="menuEditSheet_menuInstance">Sheet</a>\r\n
+\t<a onclick="sheetInstance.cellFind(); return false;">Find</a>\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val()); return false;">Get Cell Range</a>\r\n
+\t<a menu="menuEditGetCellRangeAndWrap_menuInstance">Get Cell Range And Wrap With Function</a>\r\n
+\t<a onclick="sheetInstance.cellUndoable.undoOrRedo(true); return false;">Undo</a>\r\n
+\t<a onclick="sheetInstance.cellUndoable.undoOrRedo(); return false;">Redo</a>\r\n
+\t<a onclick="sheetInstance.toggleState(); return false;">Toggle State</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuEditColumn_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.controlFactory.addColumn(null, null, \':last\'); return false;" title="Adds an additional column to the right of the spreadsheet.">Add Column</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addColumnMulti(); return false;" title="Adds an additional columns to the right of the spreadsheet.">Add Multi-Columns</a>\r\n
+\t<a onclick="sheetInstance.deleteColumn(); return false;" title="Deletes the current column thats highlighted.">Delete Column</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addColumn(null, true); return false;" title="Inserts an additional column after currently selected column.">Insert Column Before</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addColumn(); return false;" title="Inserts an additional column after currently selected column.">Insert Column After</a>\r\n
+\t<a onclick="sheetInstance.fillUpOrDown(); return false;" title="Fill down current cell value.">Fill Down</a>\r\n
+\t<a onclick="sheetInstance.fillUpOrDown(true); return false;" title="Fill up current cell value.">Fill Up</a>\r\n
+\t<!--<a onclick="sheetInstance.toggleHide.columnAll();" title="Unhides all the hidden columns.">Show All</a>\r\n
+\t<a onclick="sheetInstance.toggleHide.column();" title="Hides or shows the currently selected column.">Toggle Hide Column</a>-->\r\n
+</div>\r\n
+<div id="menuEditRow_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.controlFactory.addRow(null, null, \':last\'); return false;" title="Adds an additional row to bottom of the spreadsheet.">Add Row</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addRowMulti(); return false;" title="Adds an additional rows to bottom of the spreadsheet.">Add Multi-Rows</a>\r\n
+\t<a onclick="sheetInstance.deleteRow(); return false;" title="Delets the current row thats highlighted.">Delete Row</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addRow(null, true); return false;" title="Inserts an additional row after currently selected row.">Insert Row Before</a>\r\n
+\t<a onclick="sheetInstance.controlFactory.addRow(); return false;" title="Inserts an additional row after currently selected row.">Insert Row After</a>\r\n
+\t<!--<a onclick="sheetInstance.toggleHide.rowAll();" title="Unhides all the hidden rows.">Show All</a>\r\n
+\t<a onclick="sheetInstance.toggleHide.row();" title="Hides or shows the currently selected row.">Toggle Hide Row</a>-->\r\n
+</div>\r\n
+<div id="menuEditSheet_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.addSheet(); return false;" title="Add new spreadsheet.">Add Spreadsheet</a>\r\n
+\t<a onclick="sheetInstance.deleteSheet(); return false;" title="Delete the current spreadsheet.">Delete Spreadsheet</a>\r\n
+\t<a onclick="sheetInstance.calc(sheetInstance.obj.tableBody()); return false;" title="Recompiles the current sheet">Refresh Calculations</a>\r\n
+\t<a onclick="sheetInstance.sheetTitle(); return false;" title="Change the title of the sheet.">Title</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuEditGetCellRangeAndWrap_menuInstance" class="menu">\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val(), \'SUM\'); return false;" title="Wrap with SUM">SUM()</a>\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val(), \'CEILING\'); return false;" title="Wrap with CEILING">CEILING()</a>\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val(), \'COUNT\'); return false;" title="Wrap with COUNT">COUNT()</a>\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val(), \'MAX\'); return false;" title="Wrap with MAX">MAX()</a>\r\n
+\t<a onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val(), \'MIN\'); return false;" title="Wrap with MIN">MIN()</a>\r\n
+</div>\r\n
+\r\n
+<div id="menuStyle_menuInstance" class="menu">\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleBold\'); return false;">Bold</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleItalics\'); return false;">Italics</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleUnderline\', \'styleLineThrough\'); return false;">Underline</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleLineThrough\', \'styleUnderline\'); return false;">Strikethrough</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleLeft\', \'styleCenter styleRight\'); return false;">Left</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleCenter\', \'styleLeft styleRight\'); return false;">Center</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleRight\', \'styleLeft styleCenter\'); return false;">Right</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleUpper\', \'styleCapital styleLower\'); return false;">Uppercase</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleCapital\', \'styleUpper styleLower\'); return false;">Capitalize</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleLower\', \'styleCapital styleUpper\'); return false;">Lowercase</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleTop\', \'styleMiddle styleBottom\'); return false;">Top</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleMiddle\', \'styleTop styleBottom\'); return false;">Middle</a>\r\n
+\t<a class="cellStyleToggle" onclick="sheetInstance.cellStyleToggle(\'styleBottom\', \'styleTop styleMiddle\'); return false;">Bottom</a>\r\n
+</div>
+
+]]></unicode> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>menu.html</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/save.html.xml b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/save.html.xml
new file mode 100644
index 0000000000..18ee1d23c4
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/SkinTemplateItem/portal_skins/erp5_jquery_sheet_editor/save.html.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <unicode>Sheet Saved to Database.  This is only an example.</unicode> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>save.html</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_jquery_sheet_editor/bt/change_log b/bt5/erp5_jquery_sheet_editor/bt/change_log
new file mode 100644
index 0000000000..fa526eab7a
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/change_log
@@ -0,0 +1,2 @@
+2010-11-08 gabriel
+* The initial commit
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/copyright_list b/bt5/erp5_jquery_sheet_editor/bt/copyright_list
new file mode 100644
index 0000000000..47af9544bf
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/copyright_list
@@ -0,0 +1 @@
+2010 (c) Nexedi SA
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/dependency_list b/bt5/erp5_jquery_sheet_editor/bt/dependency_list
new file mode 100644
index 0000000000..961df1ab80
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/dependency_list
@@ -0,0 +1,2 @@
+erp5_web
+erp5_jquery
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/description b/bt5/erp5_jquery_sheet_editor/bt/description
new file mode 100644
index 0000000000..a0e19bca63
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/description
@@ -0,0 +1 @@
+This  Business Template contains a Spreadsheet editor
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/license b/bt5/erp5_jquery_sheet_editor/bt/license
new file mode 100644
index 0000000000..3a3e12bcad
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/license
@@ -0,0 +1 @@
+GPL
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/maintainer_list b/bt5/erp5_jquery_sheet_editor/bt/maintainer_list
new file mode 100644
index 0000000000..38363f7303
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/maintainer_list
@@ -0,0 +1 @@
+gabriel
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/revision b/bt5/erp5_jquery_sheet_editor/bt/revision
new file mode 100644
index 0000000000..bf0d87ab1b
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/revision
@@ -0,0 +1 @@
+4
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/template_format_version b/bt5/erp5_jquery_sheet_editor/bt/template_format_version
new file mode 100644
index 0000000000..56a6051ca2
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/template_format_version
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/template_path_list b/bt5/erp5_jquery_sheet_editor/bt/template_path_list
new file mode 100644
index 0000000000..9d4c439ee7
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/template_path_list
@@ -0,0 +1,2 @@
+portal_skins/erp5_web/WebTable_viewEditor
+portal_skins/erp5_web/WebTable_viewEditor/**
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/template_skin_id_list b/bt5/erp5_jquery_sheet_editor/bt/template_skin_id_list
new file mode 100644
index 0000000000..c359d271f8
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/template_skin_id_list
@@ -0,0 +1 @@
+erp5_jquery_sheet_editor
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/title b/bt5/erp5_jquery_sheet_editor/bt/title
new file mode 100644
index 0000000000..c359d271f8
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/title
@@ -0,0 +1 @@
+erp5_jquery_sheet_editor
\ No newline at end of file
diff --git a/bt5/erp5_jquery_sheet_editor/bt/version b/bt5/erp5_jquery_sheet_editor/bt/version
new file mode 100644
index 0000000000..48360de846
--- /dev/null
+++ b/bt5/erp5_jquery_sheet_editor/bt/version
@@ -0,0 +1 @@
+5.4.7
\ No newline at end of file
-- 
2.30.9