sync
authorAlan Knowles <alan@akbkhome.com>
Wed, 28 Jul 2010 05:05:10 +0000 (13:05 +0800)
committerAlan Knowles <alan@akbkhome.com>
Wed, 28 Jul 2010 05:05:10 +0000 (13:05 +0800)
181 files changed:
docs/files.html
docs/json/roodata.json
docs/symbols/Array.html
docs/symbols/Date.html
docs/symbols/Function.html
docs/symbols/Number.html
docs/symbols/Roo.Ajax.html
docs/symbols/Roo.BasicDialog.html
docs/symbols/Roo.BasicLayoutRegion.html
docs/symbols/Roo.BorderLayout.html
docs/symbols/Roo.BoxComponent.html
docs/symbols/Roo.Button.html
docs/symbols/Roo.ColorPalette.html
docs/symbols/Roo.Component.html
docs/symbols/Roo.ComponentMgr.html
docs/symbols/Roo.CompositeElement.html
docs/symbols/Roo.CompositeElementLite.html
docs/symbols/Roo.ContentPanel.html
docs/symbols/Roo.DDView.html
docs/symbols/Roo.DatePicker.html
docs/symbols/Roo.DialogManager.html
docs/symbols/Roo.DomHelper.html
docs/symbols/Roo.DomQuery.html
docs/symbols/Roo.Editor.html
docs/symbols/Roo.Element.html
docs/symbols/Roo.EventManager.html
docs/symbols/Roo.EventObject.html
docs/symbols/Roo.Fx.html
docs/symbols/Roo.GridPanel.html
docs/symbols/Roo.JsonView.html
docs/symbols/Roo.KeyMap.html
docs/symbols/Roo.KeyNav.html
docs/symbols/Roo.Layer.html
docs/symbols/Roo.LayoutDialog.html
docs/symbols/Roo.LayoutManager.html
docs/symbols/Roo.LayoutRegion.html
docs/symbols/Roo.LoadMask.html
docs/symbols/Roo.Login.html
docs/symbols/Roo.MasterTemplate.html
docs/symbols/Roo.MessageBox.html
docs/symbols/Roo.NestedLayoutPanel.html
docs/symbols/Roo.PagingToolbar.html
docs/symbols/Roo.QuickTips.html
docs/symbols/Roo.ReaderLayout.html
docs/symbols/Roo.Resizable.html
docs/symbols/Roo.Shadow.html
docs/symbols/Roo.SplitBar.AbsoluteLayoutAdapter.html
docs/symbols/Roo.SplitBar.BasicLayoutAdapter.html
docs/symbols/Roo.SplitBar.html
docs/symbols/Roo.SplitButton.html
docs/symbols/Roo.SplitLayoutRegion.html
docs/symbols/Roo.TabPanel.html
docs/symbols/Roo.TabPanelItem.html
docs/symbols/Roo.Template.html
docs/symbols/Roo.Toolbar.Button.html
docs/symbols/Roo.Toolbar.Fill.html
docs/symbols/Roo.Toolbar.Item.html
docs/symbols/Roo.Toolbar.Separator.html
docs/symbols/Roo.Toolbar.Spacer.html
docs/symbols/Roo.Toolbar.SplitButton.html
docs/symbols/Roo.Toolbar.TextItem.html
docs/symbols/Roo.Toolbar.html
docs/symbols/Roo.TreePanel.html
docs/symbols/Roo.UpdateManager.BasicRenderer.html
docs/symbols/Roo.UpdateManager.defaults.html
docs/symbols/Roo.UpdateManager.html
docs/symbols/Roo.View.html
docs/symbols/Roo.XComponent.html
docs/symbols/Roo.data.ArrayReader.html
docs/symbols/Roo.data.Connection.html
docs/symbols/Roo.data.DataProxy.html
docs/symbols/Roo.data.DataReader.html
docs/symbols/Roo.data.HttpProxy.html
docs/symbols/Roo.data.JsonReader.html
docs/symbols/Roo.data.JsonStore.html
docs/symbols/Roo.data.MemoryProxy.html
docs/symbols/Roo.data.Node.html
docs/symbols/Roo.data.Record.html
docs/symbols/Roo.data.ScriptTagProxy.html
docs/symbols/Roo.data.SimpleStore.html
docs/symbols/Roo.data.SortTypes.html
docs/symbols/Roo.data.Store.html
docs/symbols/Roo.data.Tree.html
docs/symbols/Roo.data.XmlReader.html
docs/symbols/Roo.data.html
docs/symbols/Roo.dd.DD.html
docs/symbols/Roo.dd.DDProxy.html
docs/symbols/Roo.dd.DDTarget.html
docs/symbols/Roo.dd.DragDrop.html
docs/symbols/Roo.dd.DragDropMgr.html
docs/symbols/Roo.dd.DragSource.html
docs/symbols/Roo.dd.DragZone.html
docs/symbols/Roo.dd.DropTarget.html
docs/symbols/Roo.dd.DropZone.html
docs/symbols/Roo.dd.Registry.html
docs/symbols/Roo.dd.ScrollManager.html
docs/symbols/Roo.dd.StatusProxy.html
docs/symbols/Roo.dd.html
docs/symbols/Roo.form.Action.html
docs/symbols/Roo.form.BasicForm.html
docs/symbols/Roo.form.Checkbox.html
docs/symbols/Roo.form.Column.html
docs/symbols/Roo.form.ComboBox.html
docs/symbols/Roo.form.DateField.html
docs/symbols/Roo.form.FCKeditor.html
docs/symbols/Roo.form.Field.html
docs/symbols/Roo.form.FieldSet.html
docs/symbols/Roo.form.Form.html
docs/symbols/Roo.form.GridField.html
docs/symbols/Roo.form.Hidden.html
docs/symbols/Roo.form.HtmlEditor.ToolbarContext.html
docs/symbols/Roo.form.HtmlEditor.ToolbarStandard.html
docs/symbols/Roo.form.HtmlEditor.html
docs/symbols/Roo.form.Layout.html
docs/symbols/Roo.form.NumberField.html
docs/symbols/Roo.form.Radio.html
docs/symbols/Roo.form.Row.html
docs/symbols/Roo.form.TextArea.html
docs/symbols/Roo.form.TextField.html
docs/symbols/Roo.form.TriggerField.html
docs/symbols/Roo.form.VTypes.html
docs/symbols/Roo.form.html
docs/symbols/Roo.grid.AbstractGridView.html
docs/symbols/Roo.grid.AbstractSelectionModel.html
docs/symbols/Roo.grid.CellSelectionModel.html
docs/symbols/Roo.grid.ColumnModel.html
docs/symbols/Roo.grid.EditorGrid.html
docs/symbols/Roo.grid.Grid.html
docs/symbols/Roo.grid.GridEditor.html
docs/symbols/Roo.grid.GridView.html
docs/symbols/Roo.grid.PropertyGrid.html
docs/symbols/Roo.grid.RowSelectionModel.html
docs/symbols/Roo.grid.html
docs/symbols/Roo.html
docs/symbols/Roo.menu.Adapter.html
docs/symbols/Roo.menu.BaseItem.html
docs/symbols/Roo.menu.CheckItem.html
docs/symbols/Roo.menu.ColorItem.html
docs/symbols/Roo.menu.ColorMenu.html
docs/symbols/Roo.menu.DateItem.html
docs/symbols/Roo.menu.DateMenu.html
docs/symbols/Roo.menu.Item.html
docs/symbols/Roo.menu.Menu.html
docs/symbols/Roo.menu.MenuMgr.html
docs/symbols/Roo.menu.Separator.html
docs/symbols/Roo.menu.TextItem.html
docs/symbols/Roo.menu.html
docs/symbols/Roo.state.CookieProvider.html
docs/symbols/Roo.state.Manager.html
docs/symbols/Roo.state.Provider.html
docs/symbols/Roo.state.html
docs/symbols/Roo.tree.AsyncTreeNode.html
docs/symbols/Roo.tree.ColumnTree.html
docs/symbols/Roo.tree.DefaultSelectionModel.html
docs/symbols/Roo.tree.MultiSelectionModel.html
docs/symbols/Roo.tree.TreeEditor.html
docs/symbols/Roo.tree.TreeFilter.html
docs/symbols/Roo.tree.TreeLoader.html
docs/symbols/Roo.tree.TreeNode.html
docs/symbols/Roo.tree.TreeNodeUI.html
docs/symbols/Roo.tree.TreePanel.html
docs/symbols/Roo.tree.TreeSorter.html
docs/symbols/Roo.tree.html
docs/symbols/Roo.util.CSS.html
docs/symbols/Roo.util.ClickRepeater.html
docs/symbols/Roo.util.DelayedTask.html
docs/symbols/Roo.util.Format.html
docs/symbols/Roo.util.JSON.html
docs/symbols/Roo.util.MixedCollection.html
docs/symbols/Roo.util.Observable.html
docs/symbols/Roo.util.TextMetrics.Instance.html
docs/symbols/Roo.util.TextMetrics.html
docs/symbols/Roo.util.html
docs/symbols/String.html
docs/symbols/_global_.html
docs/symbols/src/Roo_Template.js.html
docs/symbols/this.html
roojs-all.js
roojs-core-debug.js
roojs-core.js
roojs-debug.js

index ddb06aa..aaf4fed 100644 (file)
                </div>
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspeciton Doc Generator</a> undefined on Tue Jul 27 2010 11:50:36 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspeciton Doc Generator</a> undefined on Wed Jul 28 2010 13:02:13 GMT+0800 (HKT)
                        Based on 
-                       <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> on Tue Jul 27 2010 11:50:36 GMT+0800 (HKT)
+                       <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> on Wed Jul 28 2010 13:02:13 GMT+0800 (HKT)
                </div>
        </body>
 </html>
\ No newline at end of file
index 9ec56af..2e9b429 100644 (file)
    ]
   },
   "Roo.MasterTemplate": {
-   "props": [],
+   "props": [
+    {
+     "name": "html",
+     "type": "String",
+     "desc": "The HTML fragment or an array of fragments to join(\"\") or multiple arguments to join(\"\")",
+     "memberOf": "Roo.Template"
+    }
+   ],
    "events": []
   },
   "Roo.MessageBox": {
    ]
   },
   "Roo.Template": {
-   "props": [],
+   "props": [
+    {
+     "name": "html",
+     "type": "String",
+     "desc": "The HTML fragment or an array of fragments to join(\"\") or multiple arguments to join(\"\")",
+     "memberOf": ""
+    }
+   ],
    "events": []
   },
   "Roo.Toolbar": {
      "name": "tree",
      "type": "Roo.tree.TreePanel",
      "desc": "The tree TreePanel, with config etc.",
-     "memberOf": "Roo"
+     "memberOf": ""
     },
     {
      "name": "fitToFrame",
index 361ec5c..8050808 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 28f9f50..cf0426a 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e2f9c5e..8cdeffe 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 1bfe727..c0a1b96 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 079c4d1..2faf7f6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 1df4059..a570da6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 47cf373..9d71578 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 7e96174..77fbfbb 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c67db16..b34931e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9b1dbb6..9962fdb 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 48728de..5c078e6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6f09165..8a04907 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8e7f507..f36c879 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 34c83c2..22aa2b1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index bc5a488..1945718 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 769fbbe..5a79190 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c27ea93..7b19da6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e4c732b..87c1ea8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 69aa27a..0cdb36b 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3301014..90b1c17 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index f6e3f7e..ce2e84d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c495756..02edbd5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e5f76ec..f8e211c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 51f623d..13d02e0 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8dbd83a..fb9e871 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 748ef02..c28fe25 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 7c9fc6b..7a378d8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6d04f69..7ae031d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d0f651c..77c0931 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e67cdf8..8c8404b 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 934922d..4fb616c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c071f15..002137d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index db20388..db69bf6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9ff4c56..ca8073f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 80ecd55..8698261 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 29ccbf9..c56ff8f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 905b03d..fee1028 100644 (file)
     <a id="Roo.MasterTemplate-configs"></a>
                
     
+     
     
-     <table cellspacing="0" class="member-table">
-      <caption class="Empty">Config Options - Has None</caption>
-     </table>
-    
+       
+      <table cellspacing="0" class="member-table">   
+      <caption>Config Options (Usually are also Properties)</caption>
     
-     
-               
+       
+        <tr>
+            <th class="sig-header" colspan="2">Options</th>
+           
+            <th class="msource-header">Defined By</th>
+        </tr>
+       
+       
+       
+       
+       
+               <tr class="config-row expandable config-row-alt0">
+                  <td class="micon"><a class="exi" href="#expand">&nbsp;</a></td>
+                   <td class="sig">
+
+                       <a id="Roo.Template-cfg-html" name=".html"></a>
+                       <div class="fixedFont">
+                               <b  class="itemname">html</b> : <a href="./String.html#constructor" roo:cls="String.html#constructor">String</a>
+                               
+                               
+                       </div>
+                 
+                       <div class="mdesc">
+                           <div class="short">The HTML fragment or an array of fragments to join("") or multiple arguments to join("")</div> 
+                       </div>
+                       
+                       <div class="mdesc">
+                           <div class="long">The HTML fragment or an array of fragments to join("") or multiple arguments to join("")</div> 
+                       </div>
+                       
+                       
+
+                   </td>
+                   <td class="msource">
+                       
+                       <a href="./Roo.Template.html#constructor" roo:cls="Roo.Template.html#constructor">Roo.Template</a>
+                               
+                   </td>
+               </tr>
+        
+        
+    </table>
+               
   
   
   
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9afb70b..6bceed6 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 2f3ef9c..5931931 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 39f5185..d3248b4 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3869f4c..932dab5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 49dea41..1478588 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 30fd25d..8de7a5d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index efe5bb0..465cc01 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index a7a44f0..c20f6e5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 93fa26a..17ba888 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index da9ab0c..9236337 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d343b64..8efad71 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index cd4120f..d6d0bde 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e94cfcb..f7fe6e1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 71990bf..7b96775 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8bd1dd9..c7b2de4 100644 (file)
@@ -76,7 +76,7 @@
     
 <!-- ============================== class summary ========================== -->                       
     <div class="description">
-       Represents an HTML fragment template. Templates can be precompiled for greater performance.<br/>For a list of available format functions, see {<b>link</b> Roo.util.Format}.<br /><br/>Usage:<br/><pre><code><br/>var t = new Roo.Template(<br/>    '&lt;div name="{id}"&gt;',<br/>        '&lt;span class="{cls}"&gt;{name:trim} {value:ellipsis(10)}&lt;/span&gt;',<br/>    '&lt;/div&gt;'<br/>);<br/>t.append('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'});<br/></code></pre><br/>For more information see this blog post with examples: <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">DomHelper - Create Elements using DOM, HTML fragments and Templates</a>.
+       Represents an HTML fragment template. Templates can be precompiled for greater performance.<br/>For a list of available format functions, see {<b>link</b> Roo.util.Format}.<br /><br/>Usage:<br/><pre><code><br/>var t = new Roo.Template({<br/>    html :  '&lt;div name="{id}"&gt;' + <br/>        '&lt;span class="{cls}"&gt;{name:trim} {someval:this.myformat}{value:ellipsis(10)}&lt;/span&gt;' +<br/>        '&lt;/div&gt;',<br/>    myformat: function (value, allValues) {<br/>        return 'XX' + value;<br/>    }<br/>});<br/>t.append('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'});<br/></code></pre><br/>For more information see this blog post with examples: <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">DomHelper - Create Elements using DOM, HTML fragments and Templates</a>.
     </div>
 
        
     <a id="Roo.Template-configs"></a>
                
     
+     
     
-     <table cellspacing="0" class="member-table">
-      <caption class="Empty">Config Options - Has None</caption>
-     </table>
-    
+       
+      <table cellspacing="0" class="member-table">   
+      <caption>Config Options (Usually are also Properties)</caption>
     
-     
-               
+       
+        <tr>
+            <th class="sig-header" colspan="2">Options</th>
+           
+            <th class="msource-header">Defined By</th>
+        </tr>
+       
+       
+       
+       
+       
+               <tr class="config-row expandable config-row-alt0 notInherited">
+                  <td class="micon"><a class="exi" href="#expand">&nbsp;</a></td>
+                   <td class="sig">
+
+                       <a id="Roo.Template-cfg-html" name=".html"></a>
+                       <div class="fixedFont">
+                               <b  class="itemname">html</b> : <a href="./String.html#constructor" roo:cls="String.html#constructor">String</a>
+                               
+                               
+                       </div>
+                 
+                       <div class="mdesc">
+                           <div class="short">The HTML fragment or an array of fragments to join("") or multiple arguments to join("")</div> 
+                       </div>
+                       
+                       <div class="mdesc">
+                           <div class="long">The HTML fragment or an array of fragments to join("") or multiple arguments to join("")</div> 
+                       </div>
+                       
+                       
+
+                   </td>
+                   <td class="msource">
+                       
+                       Roo.Template
+                               
+                   </td>
+               </tr>
+        
+        
+    </table>
+               
   
   
   
                <div class="fixedFont">
                        <span class="attributes">new <B>Roo.</B></span><b class="itemname">Template</b>
                                
-                                (<a href="./String.html#constructor" roo:cls="String.html#constructor">String</a>/Array <B><i>html</i></B>) 
+                                (<a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object">Object</a> <B><i>cfg</i></B>) 
                        
                                
                        
                                <dt class="heading">Parameters:</dt>
                                
                                        <dt>
-                                               <span class="fixedFont"><a href="./String.html#constructor" roo:cls="String.html#constructor">String</a>/Array</span>  <b>html</b>
+                                               <span class="fixedFont"><a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object">Object</a></span>  <b>cfg</b>
                                                
                                        </dt>
-                                       <dd>The HTML fragment or an array of fragments to join("") or multiple arguments to join("")</dd>
+                                       <dd>- Configuration object.</dd>
                                
                                </dl>
                        
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 397dce5..83cb4ae 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e35ed3c..4831ad4 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6bcd00f..cf67713 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8c1ecea..af2dd89 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3f47ed4..5aea04f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index b8497d3..10a1d21 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index f1abaeb..d4310fe 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0288098..909aa18 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index bf1e737..17c5669 100644 (file)
                </tr>
         
        
-               <tr class="config-row expandable config-row-alt1">
+               <tr class="config-row expandable config-row-alt1 notInherited">
                   <td class="micon"><a class="exi" href="#expand">&nbsp;</a></td>
                    <td class="sig">
 
-                       <a id="Roo-cfg-tree" name=".tree"></a>
+                       <a id="Roo.TreePanel-cfg-tree" name=".tree"></a>
                        <div class="fixedFont">
                                <b  class="itemname">tree</b> : <a href="./Roo.tree.TreePanel.html#constructor" roo:cls="Roo.tree.TreePanel.html#constructor">Roo.tree.TreePanel</a>
                                
                    </td>
                    <td class="msource">
                        
-                       <a href="./Roo.html#constructor" roo:cls="Roo.html#constructor">Roo</a>
+                       Roo.TreePanel
                                
                    </td>
                </tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3c99487..e14f251 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 214d69e..4315494 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0fe686e..7232fb1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 26d9d33..563bf2c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 76fd3f1..7010855 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 1eb8be3..fd84e3c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 116638f..064b616 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 51fd45a..688a737 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e48ba57..3fec475 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d299c17..ffa91fd 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 52092ef..23a3ae3 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index f527aeb..282a2c5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c50272e..72275b7 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index a7d6b77..663449c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index dbd2a6a..c78f331 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8dea99d..b64f187 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index eb9aa2b..46622bc 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 322be3f..ceb31b0 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 5acd1ff..c9afaa9 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 5b5fcec..5839c80 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index ef19e02..7478837 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 61a1d9c..366726d 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">data</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 91a82b4..e9cb363 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 7110344..483ef13 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 52483b2..061b413 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index c9c418a..a482629 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index afa3a98..d61d9c1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 73edcd1..b231310 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 38f807a..60d3ff0 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8fce7cd..f03b4ad 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index aea573b..2b51ca7 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index a8af9ac..7a30d8f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index f1145ea..8413405 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d901733..4a01603 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 850e3dd..f867233 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">dd</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:33 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:10 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6cdf336..a3f8b24 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 13a575d..2b59417 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 70dcacb..a14956b 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index fed5cc4..87d46ba 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 513d134..d4a7d24 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3b17c3b..0926e88 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3bb8ace..decb32b 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 16f2a00..44185e3 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 2fde423..db71cc1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 36946bf..5a2e7a8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9fe8590..9f5a839 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index eef2d59..f2a01a0 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 91b3b20..8b371e5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6acf5cf..5b2eb5c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e37f972..2d2fbce 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index fba2486..98d63da 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index b01ad5f..0059532 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 494795e..8bd4079 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index a1ccaea..3c240ad 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index fa6c519..c9c2dcb 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 428ec4d..8ec8c3d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e5e04e2..4bc0f16 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 5a90258..420e7e3 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8ee6a88..00b858b 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">form</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index dd142f9..dc919aa 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">AbstractGridView</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 79ce3ac..9c617a9 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 12886e1..fc6886d 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9b80d5a..7803377 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8a925bb..e5af02f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index bbf01b5..9ff0915 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 193e58d..b0abfb8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 5e51749..c76cff0 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0a79877..36746bb 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d219d14..bc9c2c5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index b02df67..c544d84 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">grid</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:34 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:11 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 05212e3..1f9b542 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:32 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:09 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index cfb75e4..924240c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index bbac9b9..043a552 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e1db0b2..0041566 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 575fd2c..2e53546 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index cc9f91e..db3c9f8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 1daa98d..69e176c 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9c93d17..2a17227 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 8e5f1a2..ccd0162 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9c2ea4b..ab884f9 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9077bed..1b2c0a1 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 7871060..0d10b52 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index f22bf5a..86aca2e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9060fb3..7185fa0 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">menu</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 6558ec9..4a8199e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 027cdd5..c037da5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 246c88d..5571e0e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d17dcc2..f4816c0 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">state</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0b792f2..e019573 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 70e959b..e75f8fc 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index af1ee04..ed00c90 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 99ab098..57f9ed4 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index addc0fb..7d6cae4 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 3e22d5b..658929e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9176eb5..347c7d8 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0fccb10..602709f 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 65eb632..743eb85 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9b455ce..b96c5ac 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d53ec7b..901f9d3 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 750619a..c1a3ade 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">tree</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 2d25563..675aa07 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 99c62c4..8767352 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index d78dcf2..e85ae10 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 4b1dc78..a0a5e3a 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 4995616..9dfdbff 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 34212d9..e72212e 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 66438b5..c5cfb02 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 95b75a8..e2b3182 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">Instance</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 9ab0ef1..ce530b5 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index e5fd482..30b65b1 100644 (file)
@@ -56,7 +56,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">util</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:35 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 5ed9d33..c14a448 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:36 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index ba72141..923ec8a 100644 (file)
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:36 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 2ecddd4..68eaf06 100644 (file)
 * For a list of available format functions, see {@link Roo.util.Format}.&lt;br /&gt;
 * Usage:
 &lt;pre&gt;&lt;code&gt;
-var t = new Roo.Template(
-    '&amp;lt;div name=&quot;{id}&quot;&amp;gt;',
-        '&amp;lt;span class=&quot;{cls}&quot;&amp;gt;{name:trim} {value:ellipsis(10)}&amp;lt;/span&amp;gt;',
-    '&amp;lt;/div&amp;gt;'
-);
+var t = new Roo.Template({
+    html :  '&amp;lt;div name=&quot;{id}&quot;&amp;gt;' + 
+        '&amp;lt;span class=&quot;{cls}&quot;&amp;gt;{name:trim} {someval:this.myformat}{value:ellipsis(10)}&amp;lt;/span&amp;gt;' +
+        '&amp;lt;/div&amp;gt;',
+    myformat: function (value, allValues) {
+        return 'XX' + value;
+    }
+});
 t.append('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'});
 &lt;/code&gt;&lt;/pre&gt;
 * For more information see this blog post with examples: &lt;a href=&quot;http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/&quot;&gt;DomHelper - Create Elements using DOM, HTML fragments and Templates&lt;/a&gt;. 
 * @constructor
-* @param {String/Array} html The HTML fragment or an array of fragments to join(&quot;&quot;) or multiple arguments to join(&quot;&quot;)
+* @param {Object} cfg - Configuration object.
 */
-</span><span class="jsdoc-var">Roo.Template </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">){
-    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
+</span><span class="jsdoc-var">Roo.Template </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">){
+    </span><span class="jsdoc-comment">// BC!
+    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
+        </span><span class="jsdoc-var">cfg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cfg.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
     }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments.length </span><span class="jsdoc-syntax">&gt; 1){
-        </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.prototype.join.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-var">cfg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.prototype.join.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
+    }
+    
+    
+    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'object'</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">)
+    } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
+        </span><span class="jsdoc-comment">// bc
+        </span><span class="jsdoc-var">this.html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">;
     }
-    </span><span class="jsdoc-comment">/**@private*/
-    </span><span class="jsdoc-var">this.html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
+    
     
 };
 </span><span class="jsdoc-var">Roo.Template.prototype </span><span class="jsdoc-syntax">= {
+    
+    </span><span class="jsdoc-comment">/**
+     * @cfg {String} html  The HTML fragment or an array of fragments to join(&quot;&quot;) or multiple arguments to join(&quot;&quot;)
+     */
+    </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">/**
      * Returns an HTML fragment of this template with the specified values applied.
      * @param {Object} values The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})
index 224d7d8..e6fd7ee 100644 (file)
@@ -54,7 +54,7 @@
        
         <tr><td class="label">Defined In:</td><td class="hd-info">
                        
-                                       <a href="./src/Roo_ContentPanel.js.html">Roo/ContentPanel.js</a>.
+                                       <a href="./src/Roo_Template.js.html">Roo/Template.js</a>.
                        
        </td></tr>
         <tr><td class="label">Class:</td><td class="hd-info">this</td></tr>
 <!-- ============================== footer ================================= -->
                <div class="fineprint" style="clear:both">
                        
-                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Tue Jul 27 2010 11:50:36 GMT+0800 (HKT)
+                       Documentation generated by <a href="http://www.akbkhome.com" target="_blankt">Introspection Doc Generator</a>  on Wed Jul 28 2010 13:02:12 GMT+0800 (HKT)
                        Based on 
                        <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a>  
                </div>
index 0dddabd..5b76f11 100644 (file)
-window["undefined"]=window["undefined"];var Roo={};Roo.apply=function(o,c,A){if(A){Roo.apply(o,A);}if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}return o;};(function(){var B=0;var ua=navigator.userAgent.toLowerCase();var C=document.compatMode=="CSS1Compat",D=ua.indexOf("opera")>-1,E=(/webkit|khtml/).test(ua),F=ua.indexOf("msie")>-1,G=ua.indexOf("msie 7")>-1,H=!E&&ua.indexOf("gecko")>-1,I=F&&!C,J=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),K=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),L=(ua.indexOf("linux")!=-1),M=window.location.href.toLowerCase().indexOf("https")===0;if(F&&!G){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Roo.apply(Roo,{isStrict:C,isSecure:M,isReady:false,debug:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/localhost/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}return o;},addBehaviors:function(o){if(!Roo.isReady){Roo.onReady(function(){Roo.addBehaviors(o);});return;}var N={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!N[s]){N[s]=Roo.select(s);}
-N[s].on(parts[1],o[b]);}}
-N=null;},id:function(el,O){O=O||"roo-gen";el=Roo.getDom(el);var id=O+(++B);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,P){if(typeof sp=='object'){P=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Roo.override(sb,o);};sbp.override=io;Roo.override(sb,P);return sb;};}(),override:function(P,Q){if(Q){var p=P.prototype;for(var method in Q){p[method]=Q[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},factory:function(c,ns){if(!c.xtype||(!ns&&!c.xns)||(c.xns===false)){return c;}
-ns=c.xns?c.xns:ns;if(c.constructor==ns[c.xtype]){return c;}if(ns[c.xtype]){if(Roo.debug)Roo.log("Roo.Factory("+c.xtype+")");var ret=new ns[c.xtype](c);ret.xns=false;return ret;}
-c.xns=false;return c;},log:function(s){if((typeof(console)=='undefined')||(typeof(console.log)=='undefined')){return;}
-console.log(s);},urlEncode:function(o){if(!o){return "";}var R=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=='undefined'){R.push(k,"=&");}else if(type!="function"&&type!="object"){R.push(k,"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){if(ov.length){for(var i=0,len=ov.length;i<len;i++){R.push(k,"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}else {R.push(k,"=&");}}}
-R.pop();return R.join("");},urlDecode:function(S,T){if(!S||!S.length){return {};}var U={};var V=S.split('&');var W,X,Y;for(var i=0,len=V.length;i<len;i++){W=V[i].split('=');X=decodeURIComponent(W[0]);Y=decodeURIComponent(W[1]);if(T!==true){if(typeof U[X]=="undefined"){U[X]=Y;}else if(typeof U[X]=="string"){U[X]=[U[X]];U[X].push(Y);}else {U[X].push(Y);}}else {U[X]=Y;}}return U;},each:function(Z,fn,f){if(typeof Z.length=="undefined"||typeof Z=="string"){Z=[Z];}for(var i=0,len=Z.length;i<len;i++){if(fn.call(f||Z[i],Z[i],i,Z)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else {r.push(a);}}return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,g,h,n){if(typeof cb=="function"){if(n){cb.defer(n,g,h||[]);}else {cb.apply(g,h||[]);}}},getDom:function(el){if(!el){return null;}return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Roo.ComponentMgr.get(id);},num:function(v,q){if(typeof v!='number'){return q;}return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;}if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,u){return v===null||v===undefined||(!u?v==='':false);},isOpera:D,isSafari:E,isIE:F,isIE7:G,isGecko:H,isBorderBox:I,isWindows:J,isLinux:L,isMac:K,useShims:((F&&!G)||(H&&K))});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux");
-(function(){if(Roo.isIE){function A(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",A);}
-window.attachEvent("onunload",A);}})();Roo.apply(Function.prototype,{createCallback:function(){var B=arguments;var C=this;return function(){return C.apply(window,B);};},createDelegate:function(D,E,F){var G=this;return function(){var H=E||arguments;if(F===true){H=Array.prototype.slice.call(arguments,0);H=H.concat(E);}else if(typeof F=="number"){H=Array.prototype.slice.call(arguments,0);var applyArgs=[F,0].concat(E);Array.prototype.splice.apply(H,applyArgs);}return G.apply(D||window,H);};},defer:function(H,I,J,K){var fn=this.createDelegate(I,J,K);if(H){return setTimeout(fn,H);}
-fn();return 0;},createSequence:function(L,M){if(typeof L!="function"){return this;}var N=this;return function(){var O=N.apply(this||window,arguments);L.apply(M||this||window,arguments);return O;};},createInterceptor:function(O,P){if(typeof O!="function"){return this;}var Q=this;return function(){O.target=this;O.method=Q;if(O.apply(P||this||window,arguments)===false){return;}return Q.apply(this||window,arguments);};}});
-Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(B,C,ch){var D=new String(B);if(ch===null||ch===undefined||ch===''){ch=" ";}while(D.length<C){D=ch+D;}return D;},format:function(E){var F=Array.prototype.slice.call(arguments,1);return E.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(F[i]);});}});String.prototype.toggle=function(G,H){return this==G?H:G;};
-Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
-Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(B){var C=this.length>>>0;if(typeof B!="function")throw new TypeError();var D=new Array(C);var E=arguments[1];for(var i=0;i<C;i++){if(i in this)D[i]=B.call(E,this[i],i,this);}return D;}});
-Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(B){if(Date.formatFunctions[B]==null){Date.createNewFormat(B);}var C=Date.formatFunctions[B];return this[C]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(D){var E="format"+Date.formatFunctions.count++;Date.formatFunctions[D]=E;var F="Date.prototype."+E+" = function(){return ";var G=false;var ch='';for(var i=0;i<D.length;++i){ch=D.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+="'"+String.escape(ch)+"' + ";}else {F+=Date.getFormatCode(ch);}}eval(F.substring(0,F.length-3)+";}");};Date.getFormatCode=function(H){switch(H){case "d":return "String.leftPad(this.getDate(), 2, '0') + ";case "D":return "Date.dayNames[this.getDay()].substring(0, 3) + ";case "j":return "this.getDate() + ";case "l":return "Date.dayNames[this.getDay()] + ";case "S":return "this.getSuffix() + ";case "w":return "this.getDay() + ";case "z":return "this.getDayOfYear() + ";case "W":return "this.getWeekOfYear() + ";case "F":return "Date.monthNames[this.getMonth()] + ";case "m":return "String.leftPad(this.getMonth() + 1, 2, '0') + ";case "M":return "Date.monthNames[this.getMonth()].substring(0, 3) + ";case "n":return "(this.getMonth() + 1) + ";case "t":return "this.getDaysInMonth() + ";case "L":return "(this.isLeapYear() ? 1 : 0) + ";case "Y":return "this.getFullYear() + ";case "y":return "('' + this.getFullYear()).substring(2, 4) + ";case "a":return "(this.getHours() < 12 ? 'am' : 'pm') + ";case "A":return "(this.getHours() < 12 ? 'AM' : 'PM') + ";case "g":return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";case "G":return "this.getHours() + ";case "h":return "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";case "H":return "String.leftPad(this.getHours(), 2, '0') + ";case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";default:return "'"+String.escape(H)+"' + ";}};Date.parseDate=function(I,J){if(Date.parseFunctions[J]==null){Date.createParser(J);}var K=Date.parseFunctions[J];return Date[K](I);};Date.createParser=function(L){var M="parse"+Date.parseFunctions.count++;var N=Date.parseRegexes.length;var O=1;Date.parseFunctions[L]=M;var P="Date."+M+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"var results = input.match(Date.parseRegexes["+N+"]);\n"+"if (results && results.length > 0) {";var Q="";var R=false;var ch='';for(var i=0;i<L.length;++i){ch=L.charAt(i);if(!R&&ch=="\\"){R=true;}else if(R){R=false;Q+=String.escape(ch);}else {var obj=Date.formatCodeToRegex(ch,O);O+=obj.g;Q+=obj.s;if(obj.g&&obj.c){P+=obj.c;}}}
-P+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m);}\n"+"else if (y >= 0)\n"+"{v = new Date(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";Date.parseRegexes[N]=new RegExp("^"+Q+"$");eval(P);};Date.formatCodeToRegex=function(S,T){switch(S){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+T+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+T+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+T+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+T+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = parseInt(results["+T+"], 10) - 1;\n",s:"(\\d{2})"};case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+T+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+T+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case "a":return {g:1,c:"if (results["+T+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+T+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case "g":case "G":return {g:1,c:"h = parseInt(results["+T+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "O":return {g:1,c:["o = results[",T,"];\n","var sn = o.substring(0,1);\n","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n","var mn = o.substring(3,5) % 60;\n","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n","    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"].join(""),s:"([+\-]\\d{4})"};case "T":return {g:0,c:null,s:"[A-Z]{1,4}"};case "Z":return {g:1,c:"z = results["+T+"];\n"+"z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"};default:return {g:0,c:null,s:String.escape(S)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/,"$1");};Date.prototype.getGMTOffset=function(){return (this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")+String.leftPad(this.getTimezoneOffset()%60,2,"0");};Date.prototype.getDayOfYear=function(){var U=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){U+=Date.daysInMonth[i];}return U+this.getDate()-1;};Date.prototype.getWeekOfYear=function(){var V=this.getDayOfYear()+(4-this.getDay());var W=new Date(this.getFullYear(),0,1);var X=(7-W.getDay()+4);return String.leftPad(((V-X)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var Y=this.getFullYear();return ((Y&3)==0&&(Y%100||(Y%400==0&&Y)));};Date.prototype.getFirstDayOfMonth=function(){var Z=(this.getDay()-(this.getDate()-1))%7;return (Z<0)?(Z+7):Z;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return (a<0)?(a+7):a;};Date.prototype.getFirstDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),1);};Date.prototype.getLastDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return "st";case 2:case 22:return "nd";case 3:case 23:return "rd";default:return "th";}};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.clearTime=function(b){if(b){return this.clone().clearTime();}
-this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};if(Roo.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(c){if(c<=-1){var n=Math.ceil(-c);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else {return Date.brokenSetMonth.apply(this,arguments);}};}
-Date.MILLI="ms";Date.SECOND="s";Date.MINUTE="mi";Date.HOUR="h";Date.DAY="d";Date.MONTH="mo";Date.YEAR="y";Date.prototype.add=function(e,f){var d=this.clone();if(!e||f===0)return d;switch(e.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+f);break;case Date.SECOND:d.setSeconds(this.getSeconds()+f);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+f);break;case Date.HOUR:d.setHours(this.getHours()+f);break;case Date.DAY:d.setDate(this.getDate()+f);break;case Date.MONTH:var a=this.getDate();if(a>28){a=Math.min(a,this.getFirstDateOfMonth().add('mo',f).getLastDateOfMonth().getDate());}
-d.setDate(a);d.setMonth(this.getMonth()+f);break;case Date.YEAR:d.setFullYear(this.getFullYear()+f);break;}return d;};
-Roo.lib.Dom={getViewWidth:function(A){return A?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(B){return B?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var C=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(C,this.getViewportHeight());},getDocumentWidth:function(){var D=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(D,this.getViewportWidth());},getViewportHeight:function(){var E=self.innerHeight;var F=document.compatMode;if((F||Roo.isIE)&&!Roo.isOpera){E=(F=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}return E;},getViewportWidth:function(){var G=self.innerWidth;var H=document.compatMode;if(H||Roo.isIE){G=(H=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}return G;},isAncestor:function(p,c){p=Roo.getDom(p);c=Roo.getDom(c);if(!p||!c){return false;}if(p.contains&&!Roo.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return !!(p.compareDocumentPosition(c)&16);}else {var parent=c.parentNode;while(parent){if(parent==p){return true;}else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
-parent=parent.parentNode;}return false;}},getRegion:function(el){return Roo.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,I,bd=document.body;el=Roo.getDom(el);var J=Roo.lib.AnimBase.fly;if(el.getBoundingClientRect){b=el.getBoundingClientRect();I=J(document).getScroll();return [b.left+I.left,b.top+I.top];}var x=0,y=0;p=el;var K=J(el).getStyle("position")=="absolute";while(p){x+=p.offsetLeft;y+=p.offsetTop;if(!K&&J(p).getStyle("position")=="absolute"){K=true;}if(Roo.isGecko){pe=J(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}if(Roo.isSafari&&K){x-=bd.offsetLeft;y-=bd.offsetTop;}if(Roo.isGecko&&!K){var dbd=J(bd);x+=parseInt(dbd.getStyle("borderLeftWidth"),10)||0;y+=parseInt(dbd.getStyle("borderTopWidth"),10)||0;}
-p=el.parentNode;while(p&&p!=bd){if(!Roo.isOpera||(p.tagName!='TR'&&J(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}return [x,y];},setXY:function(el,xy){el=Roo.fly(el,'_setXY');el.position();var L=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=L.left+"px";}if(xy[1]!==false){el.dom.style.top=L.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};
-Roo.lib.Event=function(){var A=false;var B=[];var C=[];var D=0;var E=[];var F=0;var G=null;return {POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var self=this;var callback=function(){self._tryPreloadAttach();};this._interval=setInterval(callback,this.POLL_INTERVAL);}},onAvailable:function(h,k,m,n){E.push({id:h,fn:k,obj:m,override:n,checkReady:false});D=this.POLL_RETRYS;this.startInterval();},addListener:function(el,o,fn){el=Roo.getDom(el);if(!el||!fn){return false;}if("unload"==o){C[C.length]=[el,o,fn];return true;}var p=function(e){return fn(Roo.lib.Event.getEvent(e));};var li=[el,o,fn,p];var q=B.length;B[q]=li;this.doAdd(el,o,p,false);return true;},removeListener:function(el,r,fn){var i,s;el=Roo.getDom(el);if(!fn){return this.purgeElement(el,false,r);}if("unload"==r){for(i=0,s=C.length;i<s;i++){var li=C[i];if(li&&li[0]==el&&li[1]==r&&li[2]==fn){C.splice(i,1);return true;}}return false;}var u=null;var v=arguments[3];if("undefined"==typeof v){v=this._getCacheIndex(el,r,fn);}if(v>=0){u=B[v];}if(!el||!u){return false;}
-this.doRemove(el,r,u[this.WFN],false);delete B[v][this.WFN];delete B[v][this.FN];B.splice(v,1);return true;},getTarget:function(ev,w){ev=ev.browserEvent||ev;var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(z){if(Roo.isSafari&&z&&3==z.nodeType){return z.parentNode;}else {return z;}},getPageX:function(ev){ev=ev.browserEvent||ev;var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(Roo.isIE){x+=this.getScroll()[1];}}return x;},getPageY:function(ev){ev=ev.browserEvent||ev;var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(Roo.isIE){y+=this.getScroll()[0];}}return y;},getXY:function(ev){ev=ev.browserEvent||ev;return [this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}return this.resolveTextNode(t);},getTime:function(ev){ev=ev.browserEvent||ev;if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}}return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){ev=ev.browserEvent||ev;if(ev.stopPropagation){ev.stopPropagation();}else {ev.cancelBubble=true;}},preventDefault:function(ev){ev=ev.browserEvent||ev;if(ev.preventDefault){ev.preventDefault();}else {ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}
-c=c.caller;}}return ev;},getCharCode:function(ev){ev=ev.browserEvent||ev;return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,AA,fn){for(var i=0,s=B.length;i<s;++i){var li=B[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==AA){return i;}}return -1;},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){A=true;var EU=Roo.lib.Event;if(Roo.isIE){EU.doRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}
-this.locked=true;var AB=!A;if(!AB){AB=(D>0);}var AC=[];for(var i=0,s=E.length;i<s;++i){var item=E[i];if(item){var el=this.getEl(item.id);if(el){if(!item.checkReady||A||el.nextSibling||(document&&document.body)){var scope=el;if(item.override){if(item.override===true){scope=item.obj;}else {scope=item.override;}}
-item.fn.call(scope,item.obj);E[i]=null;}}else {AC.push(item);}}}
-D=(AC.length===0)?0:D-1;if(AB){this.startInterval();}else {clearInterval(this._interval);this._interval=null;}
-this.locked=false;return true;},purgeElement:function(el,AD,AE){var AF=this.getListeners(el,AE);if(AF){for(var i=0,s=AF.length;i<s;++i){var l=AF[i];this.removeListener(el,l.type,l.fn);}}if(AD&&el&&el.childNodes){for(i=0,s=el.childNodes.length;i<s;++i){this.purgeElement(el.childNodes[i],AD,AE);}}},getListeners:function(el,AG){var AH=[],AI;if(!AG){AI=[B,C];}else if(AG=="unload"){AI=[C];}else {AI=[B];}for(var j=0;j<AI.length;++j){var searchList=AI[j];if(searchList&&searchList.length>0){for(var i=0,s=searchList.length;i<s;++i){var l=searchList[i];if(l&&l[this.EL]===el&&(!AG||AG===l[this.TYPE])){AH.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}return (AH.length)?AH:null;},_unload:function(e){var EU=Roo.lib.Event,i,j,l,AJ,AK;for(i=0,AJ=C.length;i<AJ;++i){l=C[i];if(l){var scope=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){scope=l[EU.OBJ];}else {scope=l[EU.ADJ_SCOPE];}}
-l[EU.FN].call(scope,EU.getEvent(e),l[EU.OBJ]);C[i]=null;l=null;scope=null;}}
-C=null;if(B&&B.length>0){j=B.length;while(j){AK=j-1;l=B[AK];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],AK);}
-j=j-1;}
-l=null;EU.clearCache();}
-EU.doRemove(window,"unload",EU._unload);},getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return [dd.scrollTop,dd.scrollLeft];}else if(db){return [db.scrollTop,db.scrollLeft];}else {return [0,0];}},doAdd:function(){if(window.addEventListener){return function(el,AL,fn,AM){el.addEventListener(AL,fn,(AM));};}else if(window.attachEvent){return function(el,AL,fn,AM){el.attachEvent("on"+AL,fn);};}else {return function(){};}}(),doRemove:function(){if(window.removeEventListener){return function(el,AL,fn,AM){el.removeEventListener(AL,fn,(AM));};}else if(window.detachEvent){return function(el,AL,fn){el.detachEvent("on"+AL,fn);};}else {return function(){};}}()};}();(function(){var E=Roo.lib.Event;E.on=E.addListener;E.un=E.removeListener;if(document&&document.body){E._load();}else {E.doAdd(window,"load",E._load);}
-E.doAdd(window,"unload",E._unload);E._tryPreloadAttach();})();
-(function(){Roo.lib.Ajax={request:function(A,B,cb,C,D){if(D){var hs=D.headers;if(hs){for(var h in hs){if(hs.hasOwnProperty(h)){this.initHeader(h,hs[h],false);}}}if(D.xmlData){this.initHeader('Content-Type','text/xml',false);A='POST';C=D.xmlData;}}return this.asyncRequest(A,B,cb,C);},serializeForm:function(E){if(typeof E=='string'){E=(document.getElementById(E)||document.forms[E]);}var el,F,G,H,I='',J=false;for(var i=0;i<E.elements.length;i++){el=E.elements[i];H=E.elements[i].disabled;F=E.elements[i].name;G=E.elements[i].value;if(!H&&F){switch(el.type){case 'select-one':case 'select-multiple':for(var j=0;j<el.options.length;j++){if(el.options[j].selected){if(Roo.isIE){I+=encodeURIComponent(F)+'='+encodeURIComponent(el.options[j].attributes['value'].specified?el.options[j].value:el.options[j].text)+'&';}else {I+=encodeURIComponent(F)+'='+encodeURIComponent(el.options[j].hasAttribute('value')?el.options[j].value:el.options[j].text)+'&';}}}break;case 'radio':case 'checkbox':if(el.checked){I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';}break;case 'file':case undefined:case 'reset':case 'button':break;case 'submit':if(J==false){I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';J=true;}break;default:I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';break;}}}
-I=I.substr(0,I.length-1);return I;},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:'application/x-www-form-urlencoded',useDefaultXhrHeader:true,defaultXhrHeader:'XMLHttpRequest',hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(id){this.activeX.unshift(id);},setDefaultPostHeader:function(b){this.useDefaultHeader=b;},setDefaultXhrHeader:function(b){this.useDefaultXhrHeader=b;},setPollingInterval:function(i){if(typeof i=='number'&&isFinite(i)){this.pollInterval=i;}},createXhrObject:function(K){var L,M;try{M=new XMLHttpRequest();L={conn:M,tId:K};}catch(e){for(var i=0;i<this.activeX.length;++i){try{http=new ActiveXObject(this.activeX[i]);obj={conn:http,tId:transactionId};break;}catch(e){}}}finally{return L;}},getConnectionObject:function(){var o;var N=this.transactionId;try{o=this.createXhrObject(N);if(o){this.transactionId++;}}catch(e){}finally{return o;}},asyncRequest:function(O,P,Q,R){var o=this.getConnectionObject();if(!o){return null;}else {o.conn.open(O,P,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders['X-Requested-With']){this.initHeader('X-Requested-With',this.defaultXhrHeader,true);}}if(R&&this.useDefaultHeader){this.initHeader('Content-Type',this.defaultPostHeader);}if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(o);}
-this.handleReadyState(o,Q);o.conn.send(R||null);return o;}},handleReadyState:function(o,S){var T=this;if(S&&S.timeout){this.timeout[o.tId]=window.setTimeout(function(){T.abort(o,S,true);},S.timeout);}
-this.poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(T.poll[o.tId]);delete T.poll[o.tId];if(S&&S.timeout){window.clearTimeout(T.timeout[o.tId]);delete T.timeout[o.tId];}
-T.handleTransactionResponse(o,S);}},this.pollInterval);},handleTransactionResponse:function(o,U,V){if(!U){this.releaseObject(o);return;}var W,X;try{if(o.conn.status!==undefined&&o.conn.status!=0){W=o.conn.status;}else {W=13030;}}catch(e){httpStatus=13030;}if(W>=200&&W<300){X=this.createResponseObject(o,U.argument);if(U.success){if(!U.scope){U.success(X);}else {U.success.apply(U.scope,[X]);}}}else {switch(W){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:X=this.createExceptionObject(o.tId,U.argument,(V?V:false));if(U.failure){if(!U.scope){U.failure(X);}else {U.failure.apply(U.scope,[X]);}}break;default:X=this.createResponseObject(o,U.argument);if(U.failure){if(!U.scope){U.failure(X);}else {U.failure.apply(U.scope,[X]);}}}}
-this.releaseObject(o);X=null;},createResponseObject:function(o,Y){var Z={};var a={};try{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){a[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}catch(e){}
-Z.tId=o.tId;Z.status=o.conn.status;Z.statusText=o.conn.statusText;Z.getResponseHeader=a;Z.getAllResponseHeaders=headerStr;Z.responseText=o.conn.responseText;Z.responseXML=o.conn.responseXML;if(typeof Y!==undefined){Z.argument=Y;}return Z;},createExceptionObject:function(c,d,f){var g=0;var k='communication failure';var l=-1;var m='transaction aborted';var n={};n.tId=c;if(f){n.status=l;n.statusText=m;}else {n.status=g;n.statusText=k;}if(d){n.argument=d;}return n;},initHeader:function(p,q,r){var s=(r)?this.defaultHeaders:this.headers;if(s[p]===undefined){s[p]=q;}else {s[p]=q+","+s[p];}if(r){this.hasDefaultHeaders=true;}else {this.hasHeaders=true;}},setHeader:function(o){if(this.hasDefaultHeaders){for(var prop in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.defaultHeaders[prop]);}}}if(this.hasHeaders){for(var prop in this.headers){if(this.headers.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.headers[prop]);}}
-this.headers={};this.hasHeaders=false;}},resetDefaultHeaders:function(){delete this.defaultHeaders;this.defaultHeaders={};this.hasDefaultHeaders=false;},abort:function(o,t,u){if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this.poll[o.tId]);delete this.poll[o.tId];if(u){delete this.timeout[o.tId];}
-this.handleTransactionResponse(o,t,true);return true;}else {return false;}},isCallInProgress:function(o){if(o&&o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}else {return false;}},releaseObject:function(o){o.conn=null;o=null;},activeX:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP']};})();
-Roo.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Roo.lib.Region.prototype={contains:function(A){return (A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);},getArea:function(){return ((this.bottom-this.top)*(this.right-this.left));},intersect:function(B){var t=Math.max(this.top,B.top);var r=Math.min(this.right,B.right);var b=Math.min(this.bottom,B.bottom);var l=Math.max(this.left,B.left);if(b>=t&&r>=l){return new Roo.lib.Region(t,r,b,l);}else {return null;}},union:function(C){var t=Math.min(this.top,C.top);var r=Math.max(this.right,C.right);var b=Math.max(this.bottom,C.bottom);var l=Math.min(this.left,C.left);return new Roo.lib.Region(t,r,b,l);},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Roo.lib.Region.getRegion=function(el){var p=Roo.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Roo.lib.Region(t,r,b,l);};
-Roo.lib.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Roo.lib.Point.prototype=new Roo.lib.Region();
-(function(){Roo.lib.Anim={scroll:function(el,A,B,C,cb,D){this.run(el,A,B,C,cb,D,Roo.lib.Scroll);},motion:function(el,E,F,G,cb,H){this.run(el,E,F,G,cb,H,Roo.lib.Motion);},color:function(el,I,J,K,cb,L){this.run(el,I,J,K,cb,L,Roo.lib.ColorAnim);},run:function(el,M,N,O,cb,P,Q){Q=Q||Roo.lib.AnimBase;if(typeof O=="string"){O=Roo.lib.Easing[O];}var R=new Q(el,M,N,O);R.animateX(function(){Roo.callback(cb,P);});return R;}};})();
-(function(){var A;function B(el){if(!A){A=new Roo.Element.Flyweight();}
-A.dom=el;return A;}
-Roo.lib.AnimBase=function(el,C,D,E){if(el){this.init(el,C,D,E);}};Roo.lib.AnimBase.fly=B;Roo.lib.AnimBase.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return ("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,D,E){return this.method(this.currentFrame,D,E-D,this.totalFrames);},setAttribute:function(F,G,H){if(this.patterns.noNegatives.test(F)){G=(G>0)?G:0;}
-Roo.fly(this.getEl(),'_anim').setStyle(F,G+H);},getAttribute:function(I){var el=this.getEl();var J=B(el).getStyle(I);if(J!=='auto'&&!this.patterns.offsetUnit.test(J)){return parseFloat(J);}var a=this.patterns.offsetAttribute.exec(I)||[];var K=!!(a[3]);var L=!!(a[2]);if(L||(B(el).getStyle('position')=='absolute'&&K)){J=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else {J=0;}return J;},getDefaultUnit:function(M){if(this.patterns.defaultUnit.test(M)){return 'px';}return '';},animateX:function(N,O){var f=function(){this.onComplete.removeListener(f);if(typeof N=="function"){N.call(O||this,this);}};this.onComplete.addListener(f,this);this.animate();},setRuntimeAttribute:function(P){var Q;var R;var S=this.attributes;this.runtimeAttributes[P]={};var T=function(U){return (typeof U!=='undefined');};if(!T(S[P]['to'])&&!T(S[P]['by'])){return false;}
-Q=(T(S[P]['from']))?S[P]['from']:this.getAttribute(P);if(T(S[P]['to'])){R=S[P]['to'];}else if(T(S[P]['by'])){if(Q.constructor==Array){R=[];for(var i=0,len=Q.length;i<len;++i){R[i]=Q[i]+S[P]['by'][i];}}else {R=Q+S[P]['by'];}}
-this.runtimeAttributes[P].start=Q;this.runtimeAttributes[P].end=R;this.runtimeAttributes[P].unit=(T(S[P].unit))?S[P]['unit']:this.getDefaultUnit(P);},init:function(el,U,V,W){var X=false;var Y=null;var Z=0;el=Roo.getDom(el);this.attributes=U||{};this.duration=V||1;this.method=W||Roo.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Roo.lib.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return X;};this.getStartTime=function(){return Y;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}
-this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Roo.lib.AnimMgr.fps*this.duration):this.duration;Roo.lib.AnimMgr.registerElement(this);};this.stop=function(e){if(e){this.currentFrame=this.totalFrames;this._onTween.fire();}
-Roo.lib.AnimMgr.stop(this);};var b=function(){this.onStart.fire();this.runtimeAttributes={};for(var P in this.attributes){this.setRuntimeAttribute(P);}
-X=true;Z=0;Y=new Date();};var c=function(){var e={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};e.toString=function(){return ('duration: '+e.duration+', currentFrame: '+e.currentFrame);};this.onTween.fire(e);var g=this.runtimeAttributes;for(var P in g){this.setAttribute(P,this.doMethod(P,g[P].start,g[P].end),g[P].unit);}
-Z+=1;};var d=function(){var e=(new Date()-Y)/1000;var g={duration:e,frames:Z,fps:Z/e};g.toString=function(){return ('duration: '+g.duration+', frames: '+g.frames+', fps: '+g.fps);};X=false;Z=0;this.onComplete.fire(g);};this._onStart=new Roo.util.Event(this);this.onStart=new Roo.util.Event(this);this.onTween=new Roo.util.Event(this);this._onTween=new Roo.util.Event(this);this.onComplete=new Roo.util.Event(this);this._onComplete=new Roo.util.Event(this);this._onStart.addListener(b);this._onTween.addListener(c);this._onComplete.addListener(d);}};})();
-Roo.lib.AnimMgr=new function(){var A=null;var B=[];var C=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;C+=1;F._onStart.fire();this.start();};this.unRegister=function(F,G){F._onComplete.fire();G=G||D(F);if(G!=-1){B.splice(G,1);}
-C-=1;if(C<=0){this.stop();}};this.start=function(){if(A===null){A=setInterval(this.run,this.delay);}};this.stop=function(F){if(!F){clearInterval(A);for(var i=0,len=B.length;i<len;++i){if(B[0].isAnimated()){this.unRegister(B[0],0);}}
-B=[];A=null;C=0;}else {this.unRegister(F);}};this.run=function(){for(var i=0,len=B.length;i<len;++i){var tween=B[i];if(!tween||!tween.isAnimated()){continue;}if(tween.currentFrame<tween.totalFrames||tween.totalFrames===null){tween.currentFrame+=1;if(tween.useSeconds){E(tween);}
-tween._onTween.fire();}else {Roo.lib.AnimMgr.stop(tween,i);}}};var D=function(F){for(var i=0,len=B.length;i<len;++i){if(B[i]==F){return i;}}return -1;};var E=function(F){var G=F.totalFrames;var H=F.currentFrame;var I=(F.currentFrame*F.duration*1000/F.totalFrames);var J=(new Date()-F.getStartTime());var K=0;if(J<F.duration*1000){K=Math.round((J/I-1)*F.currentFrame);}else {K=G-(H+1);}if(K>0&&isFinite(K)){if(F.currentFrame+K>=G){K=G-(H+1);}
-F.currentFrame+=K;}};};
-Roo.lib.Bezier=new function(){this.getPosition=function(A,t){var n=A.length;var B=[];for(var i=0;i<n;++i){B[i]=[A[i][0],A[i][1]];}for(var j=1;j<n;++j){for(i=0;i<n-j;++i){B[i][0]=(1-t)*B[i][0]+t*B[parseInt(i+1,10)][0];B[i][1]=(1-t)*B[i][1]+t*B[parseInt(i+1,10)][1];}}return [B[0][0],B[0][1]];};};
-(function(){Roo.lib.ColorAnim=function(el,D,E,F){Roo.lib.ColorAnim.superclass.constructor.call(this,el,D,E,F);};Roo.extend(Roo.lib.ColorAnim,Roo.lib.AnimBase);var A=Roo.lib.AnimBase.fly;var Y=Roo.lib;var B=Y.ColorAnim.superclass;var C=Y.ColorAnim.prototype;C.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("ColorAnim "+id);};C.patterns.color=/color$/i;C.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;C.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;C.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;C.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;C.parseColor=function(s){if(s.length==3){return s;}var c=this.patterns.hex.exec(s);if(c&&c.length==4){return [parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];}
-c=this.patterns.rgb.exec(s);if(c&&c.length==4){return [parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];}
-c=this.patterns.hex3.exec(s);if(c&&c.length==4){return [parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];}return null;};C.getAttribute=function(D){var el=this.getEl();if(this.patterns.color.test(D)){var val=A(el).getStyle(D);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=A(parent).getStyle(D);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=A(parent).getStyle(D);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else {val=B.getAttribute.call(this,D);}return val;};C.getAttribute=function(D){var el=this.getEl();if(this.patterns.color.test(D)){var val=A(el).getStyle(D);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=A(parent).getStyle(D);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=A(parent).getStyle(D);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else {val=B.getAttribute.call(this,D);}return val;};C.doMethod=function(D,E,F){var G;if(this.patterns.color.test(D)){G=[];for(var i=0,len=E.length;i<len;++i){G[i]=B.doMethod.call(this,D,E[i],F[i]);}
-G='rgb('+Math.floor(G[0])+','+Math.floor(G[1])+','+Math.floor(G[2])+')';}else {G=B.doMethod.call(this,D,E,F);}return G;};C.setRuntimeAttribute=function(D){B.setRuntimeAttribute.call(this,D);if(this.patterns.color.test(D)){var attributes=this.attributes;var start=this.parseColor(this.runtimeAttributes[D].start);var end=this.parseColor(this.runtimeAttributes[D].end);if(typeof attributes[D]['to']==='undefined'&&typeof attributes[D]['by']!=='undefined'){end=this.parseColor(attributes[D].by);for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+end[i];}}
-this.runtimeAttributes[D].start=start;this.runtimeAttributes[D].end=end;}};})();
-Roo.lib.Easing={easeNone:function(t,b,c,d){return c*t/d+b;},easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return -c*(t/=d)*(t-2)+b;},easeBoth:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t+b;}return -c/2*((--t)*(t-2)-1)+b;},easeInStrong:function(t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutStrong:function(t,b,c,d){return -c*((t=t/d-1)*t*t*t-1)+b;},easeBothStrong:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t*t*t+b;}return -c/2*((t-=2)*t*t*t-2)+b;},elasticIn:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d)==1){return b+c;}if(!p){p=d*.3;}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}return -(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasticOut:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d)==1){return b+c;}if(!p){p=d*.3;}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasticBoth:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d/2)==2){return b+c;}if(!p){p=d*(.3*1.5);}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}if(t<1){return -.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backIn:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}return c*(t/=d)*t*((s+1)*t-s)+b;},backOut:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backBoth:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;}return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},bounceIn:function(t,b,c,d){return c-Roo.lib.Easing.bounceOut(d-t,0,c,d)+b;},bounceOut:function(t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return Roo.lib.Easing.bounceIn(t*2,0,c,d)*.5+b;}return Roo.lib.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};
-(function(){Roo.lib.Motion=function(el,E,F,G){if(el){Roo.lib.Motion.superclass.constructor.call(this,el,E,F,G);}};Roo.extend(Roo.lib.Motion,Roo.lib.ColorAnim);var Y=Roo.lib;var A=Y.Motion.superclass;var B=Y.Motion.prototype;B.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Motion "+id);};B.patterns.points=/^points$/i;B.setAttribute=function(E,F,G){if(this.patterns.points.test(E)){G=G||'px';A.setAttribute.call(this,'left',F[0],G);A.setAttribute.call(this,'top',F[1],G);}else {A.setAttribute.call(this,E,F,G);}};B.getAttribute=function(E){if(this.patterns.points.test(E)){var val=[A.getAttribute.call(this,'left'),A.getAttribute.call(this,'top')];}else {val=A.getAttribute.call(this,E);}return val;};B.doMethod=function(E,F,G){var H=null;if(this.patterns.points.test(E)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;H=Y.Bezier.getPosition(this.runtimeAttributes[E],t);}else {H=A.doMethod.call(this,E,F,G);}return H;};B.setRuntimeAttribute=function(E){if(this.patterns.points.test(E)){var el=this.getEl();var attributes=this.attributes;var start;var control=attributes['points']['control']||[];var end;var i,len;if(control.length>0&&!(control[0] instanceof Array)){control=[control];}else {var tmp=[];for(i=0,len=control.length;i<len;++i){tmp[i]=control[i];}
-control=tmp;}
-Roo.fly(el).position();if(D(attributes['points']['from'])){Roo.lib.Dom.setXY(el,attributes['points']['from']);}else {Roo.lib.Dom.setXY(el,Roo.lib.Dom.getXY(el));}
-start=this.getAttribute('points');if(D(attributes['points']['to'])){end=C.call(this,attributes['points']['to'],start);var pageXY=Roo.lib.Dom.getXY(this.getEl());for(i=0,len=control.length;i<len;++i){control[i]=C.call(this,control[i],start);}}else if(D(attributes['points']['by'])){end=[start[0]+attributes['points']['by'][0],start[1]+attributes['points']['by'][1]];for(i=0,len=control.length;i<len;++i){control[i]=[start[0]+control[i][0],start[1]+control[i][1]];}}
-this.runtimeAttributes[E]=[start];if(control.length>0){this.runtimeAttributes[E]=this.runtimeAttributes[E].concat(control);}
-this.runtimeAttributes[E][this.runtimeAttributes[E].length]=end;}else {A.setRuntimeAttribute.call(this,E);}};var C=function(E,F){var G=Roo.lib.Dom.getXY(this.getEl());E=[E[0]-G[0]+F[0],E[1]-G[1]+F[1]];return E;};var D=function(E){return (typeof E!=='undefined');};})();
-(function(){Roo.lib.Scroll=function(el,C,D,E){if(el){Roo.lib.Scroll.superclass.constructor.call(this,el,C,D,E);}};Roo.extend(Roo.lib.Scroll,Roo.lib.ColorAnim);var Y=Roo.lib;var A=Y.Scroll.superclass;var B=Y.Scroll.prototype;B.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else {F=A.doMethod.call(this,C,D,E);}return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else {D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];}else {A.setAttribute.call(this,C,D,E);}};})();
-Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}
-b+="<"+o.tag;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||typeof o[attr]=="function")continue;if(attr=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var key in s){if(typeof s[key]!="function"){b+=key+":"+s[key]+";";}}
-b+='"';}}else {if(attr=="cls"){b+=' class="'+o["cls"]+'"';}else if(attr=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else {b+=" "+attr+'="'+o[attr]+'"';}}}if(B.test(o.tag)){b+="/>";}else {b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,len=cn.length;i<len;i++){b+=E(cn[i],b);}}else {b+=E(cn,b);}}if(o.html){b+=o.html;}
-b+="</"+o.tag+">";}return b;};var F=function(o,M){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");}
-ns=D[o.ns];}if(typeof(o)=='string'){return M.appendChild(document.createTextNode(o));}
-o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var N=el.setAttribute?true:false;for(var attr in o){if(attr=="tag"||attr=="ns"||attr=="xmlns"||attr=="children"||attr=="cn"||attr=="html"||attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"&&Roo.isIE){el.className=o["cls"];}else {if(N)el.setAttribute(attr=="cls"?'class':attr,o[attr]);else el[attr]=o[attr];}}
-Roo.DomHelper.applyStyles(el,o.style);var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,len=cn.length;i<len;i++){F(cn[i],el);}}else {F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(M){M.appendChild(el);}return el;};var G=function(M,s,h,e){A.innerHTML=[s,h,e].join('');var i=-1,el=A;while(++i<M){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(M,N,el,O){if(!A){A=document.createElement('div');}var P;var Q=null;if(M=='td'){if(N=='afterbegin'||N=='beforeend'){return;}if(N=='beforebegin'){Q=el;el=el.parentNode;}else {Q=el.nextSibling;el=el.parentNode;}
-P=G(4,J,O,K);}else if(M=='tr'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(3,H,O,I);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(3,H,O,I);}else {if(N=='afterbegin'){Q=el.firstChild;}
-P=G(4,J,O,K);}}else if(M=='tbody'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(2,ts,O,te);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(2,ts,O,te);}else {if(N=='afterbegin'){Q=el.firstChild;}
-P=G(3,H,O,I);}}else {if(N=='beforebegin'||N=='afterend'){return;}if(N=='afterbegin'){Q=el.firstChild;}
-P=G(2,ts,O,te);}
-el.insertBefore(P,Q);return P;};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,c){if(c){el=Roo.fly(el);if(typeof c=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var matches;while((matches=re.exec(c))!=null){el.setStyle(matches[1],matches[2]);}}else if(typeof c=="object"){for(var style in c){el.setStyle(style,c[style]);}}else if(typeof c=="function"){Roo.DomHelper.applyStyles(el,c.call());}}},insertHtml:function(d,el,e){d=d.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;if(rs=L(el.tagName.toLowerCase(),d,el,e)){return rs;}}switch(d){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',e);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',e);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',e);return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',e);return el.nextSibling;}throw 'Illegal insertion point -> "'+d+'"';}var f=el.ownerDocument.createRange();var g;switch(d){case "beforebegin":f.setStartBefore(el);g=f.createContextualFragment(e);el.parentNode.insertBefore(g,el);return el.previousSibling;case "afterbegin":if(el.firstChild){f.setStartBefore(el.firstChild);g=f.createContextualFragment(e);el.insertBefore(g,el.firstChild);return el.firstChild;}else {el.innerHTML=e;return el.firstChild;}case "beforeend":if(el.lastChild){f.setStartAfter(el.lastChild);g=f.createContextualFragment(e);el.appendChild(g);return el.lastChild;}else {el.innerHTML=e;return el.lastChild;}case "afterend":f.setStartAfter(el);g=f.createContextualFragment(e);el.parentNode.insertBefore(g,el.nextSibling);return el.nextSibling;}throw 'Illegal insertion point -> "'+d+'"';},insertBefore:function(el,o,h){return this.doInsert(el,o,h,"beforeBegin");},insertAfter:function(el,o,j){return this.doInsert(el,o,j,"afterEnd","nextSibling");},insertFirst:function(el,o,k){return this.doInsert(el,o,k,"afterBegin");},doInsert:function(el,o,l,m,n){el=Roo.getDom(el);var p;if(this.useDom||o.ns){p=F(o,null);el.parentNode.insertBefore(p,n?el[n]:el);}else {var e=E(o);p=this.insertHtml(m,el,e);}return l?Roo.get(p,true):p;},append:function(el,o,q){el=Roo.getDom(el);var r;if(this.useDom||o.ns){r=F(o,null);el.appendChild(r);}else {var e=E(o);r=this.insertHtml("beforeEnd",el,e);}return q?Roo.get(r,true):r;},overwrite:function(el,o,t){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}
-F(o,el);}else {el.innerHTML=E(o);}return t?Roo.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var u=E(o);return new Roo.Template(u);}};}();
-Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}
-this.html=A;};Roo.Template.prototype={applyTemplate:function(values){try{if(this.compiled){return this.compiled(values);}var useF=this.disableFormats!==true;var fm=Roo.util.Format,tpl=this;var fn=function(m,E,F,G){if(F&&useF){if(F.substr(0,5)=="this."){return tpl.call(F.substr(5),values[E],values);}else {if(G){var re=/^\s*['"](.*)["']\s*$/;G=G.split(',');for(var i=0,len=G.length;i<len;i++){G[i]=G[i].replace(re,"$1");}
-G=[values[E]].concat(G);}else {G=[values[E]];}return fm[F].apply(fm,G);}}else {return values[E]!==undefined?values[E]:"";}};return this.html.replace(this.re,fn);}catch(e){Roo.log(e);throw e;}},set:function(B,C){this.html=B;this.compiled=null;if(C){this.compile();}return this;},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Roo.util.Format;var D=this.disableFormats!==true;var E=Roo.isGecko?"+":",";var fn=function(m,G,H,I){if(H&&D){I=I?','+I:"";if(H.substr(0,5)!="this."){H="fm."+H+'(';}else {H='this.call("'+H.substr(5)+'", ';I=", values";}}else {I='';H="(values['"+G+"'] == undefined ? '' : ";}return "'"+E+H+"values['"+G+"']"+I+")"+E+"'";};var F;if(Roo.isGecko){F="this.compiled = function(values){ return '"+this.html.replace(/\\/g,'\\\\').replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};";}else {F=["this.compiled = function(values){ return ['"];F.push(this.html.replace(/\\/g,'\\\\').replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn));F.push("'].join('');};");F=F.join('');}eval(F);return this;},call:function(G,H,I){return this[G](H,I);},insertFirst:function(el,J,K){return this.doInsert('afterBegin',el,J,K);},insertBefore:function(el,L,M){return this.doInsert('beforeBegin',el,L,M);},insertAfter:function(el,N,O){return this.doInsert('afterEnd',el,N,O);},append:function(el,P,Q){return this.doInsert('beforeEnd',el,P,Q);},doInsert:function(R,el,S,T){el=Roo.getDom(el);var U=Roo.DomHelper.insertHtml(R,el,this.applyTemplate(S));return T?Roo.get(U,true):U;},overwrite:function(el,V,W){el=Roo.getDom(el);el.innerHTML=this.applyTemplate(V);return W?Roo.get(el.firstChild,true):el.firstChild;}};Roo.Template.prototype.apply=Roo.Template.prototype.applyTemplate;Roo.DomHelper.Template=Roo.Template;Roo.Template.from=function(el){el=Roo.getDom(el);return new Roo.Template(el.value||el.innerHTML);};
-Roo.DomQuery=function(){var A={},simpleCache={},valueCache={};var B=/\S/;var C=/^\s+|\s+$/g;var D=/\{(\d+)\}/g;var E=/^(\s?[\/>+~]\s?|\s|$)/;var F=/^(#)?([\w-\*]+)/;var G=/(\d*)n\+?(\d*)/,H=/\D/;function I(p,T){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==T){return n;}}
-n=n.nextSibling;}return null;};function J(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function K(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function L(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!B.test(n.nodeValue)){d.removeChild(n);}else {n.nodeIndex=++ni;}
-n=nx;}return this;};function byClassName(c,a,v){if(!v){return c;}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((' '+ci.className+' ').indexOf(v)!=-1){r[++ri]=ci;}}return r;};function attrValue(n,T){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}if(!n){return null;}if(T=="for"){return n.htmlFor;}if(T=="class"||T=="className"){return n.className;}return n.getAttribute(T)||n[T];};function getNodes(ns,T,U){var V=[],ri=-1,cs;if(!ns){return V;}
-U=U||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}if(!T){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(U);for(var j=0,ci;ci=cs[j];j++){V[++ri]=ci;}}}else if(T=="/"||T==">"){var utag=U.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.children||ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==U||U=='*'){V[++ri]=cj;}}}}else if(T=="+"){var utag=U.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(n&&(n.nodeName==utag||n.nodeName==U||U=='*')){V[++ri]=n;}}}else if(T=="~"){for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&(n.nodeType!=1||(U=='*'||n.tagName.toLowerCase()!=U)));if(n){V[++ri]=n;}}}return V;};function M(a,b){if(b.slice){return a.concat(b);}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}return a;}function byTag(cs,T){if(cs.tagName||cs==document){cs=[cs];}if(!T){return cs;}var r=[],ri=-1;T=T.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==T){r[++ri]=ci;}}return r;};function N(cs,T,id){if(cs.tagName||cs==document){cs=[cs];}if(!id){return cs;}var r=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[++ri]=ci;return r;}}return r;};function byAttribute(cs,T,U,op,V){var r=[],ri=-1,st=V=="{";var f=Roo.DomQuery.operators[op];for(var i=0,ci;ci=cs[i];i++){var a;if(st){a=Roo.DomQuery.getStyle(ci,T);}else if(T=="class"||T=="className"){a=ci.className;}else if(T=="for"){a=ci.htmlFor;}else if(T=="href"){a=ci.getAttribute("href",2);}else {a=ci.getAttribute(T);}if((f&&f(a,U))||(!f&&a)){r[++ri]=ci;}}return r;};function byPseudo(cs,T,U){return Roo.DomQuery.pseudos[T](cs,U);};var O=window.ActiveXObject?true:false;var batch=30803;var P=30803;function Q(cs){var d=++P;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}return r;}function nodup(cs){if(!cs){return [];}var T=cs.length,c,i,r=cs,cj,ri=-1;if(!T||typeof cs.nodeType!="undefined"||T==1){return cs;}if(O&&typeof cs[0].selectSingleNode!="undefined"){return Q(cs);}var d=++P;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else {r=[];for(var j=0;j<i;j++){r[++ri]=cs[j];}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj;}}return r;}}return r;}function R(c1,c2){var d=++P;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}return r;}function S(c1,c2){var T=c1.length;if(!T){return c2;}if(O&&c1[0].selectSingleNode){return R(c1,c2);}var d=++P;for(var i=0;i<T;i++){c1[i]._qdiff=d;}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}return r;}function quickId(ns,T,U,id){if(ns==U){var d=U.ownerDocument||U;return d.getElementById(id);}
-ns=getNodes(ns,T,"*");return N(ns,null,id);}return {getStyle:function(el,AA){return Roo.fly(el).getStyle(AA);},compile:function(AB,AC){AC=AC||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];var q=AB,mode,lq;var tk=Roo.DomQuery.matchers;var AD=tk.length;var mm;var AE=q.match(E);if(AE&&AE[1]){fn[fn.length]='mode="'+AE[1].replace(C,"")+'";';q=q.replace(AE[1],"");}while(AB.substr(0,1)=="/"){AB=AB.substr(1);}while(q&&lq!=q){lq=q;var tm=q.match(F);if(AC=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");';}else {fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}else if(q.substr(0,1)!='@'){fn[fn.length]='n = getNodes(n, mode, "*");';}}else {if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");';}else {fn[fn.length]='n = byTag(n, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}}while(!(mm=q.match(E))){var matched=false;for(var j=0;j<AD;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(D,function(x,i){return m[i];});q=q.replace(m[0],"");matched=true;break;}}if(!matched){throw 'Error parsing selector, parsing failed at "'+q+'"';}}if(mm[1]){fn[fn.length]='mode="'+mm[1].replace(C,"")+'";';q=q.replace(mm[1],"");}}
-fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(AF,AG,AH){if(!AG||AG==document){AG=document;}if(typeof AG=="string"){AG=document.getElementById(AG);}var AI=AF.split(",");var AJ=[];for(var i=0,len=AI.length;i<len;i++){var p=AI[i].replace(C,"");if(!A[p]){A[p]=Roo.DomQuery.compile(p);if(!A[p]){throw p+" is not a valid selector";}}var z=A[p](AG);if(z&&z!=document){AJ=AJ.concat(z);}}if(AI.length>1){return nodup(AJ);}return AJ;},selectNode:function(AK,AL){return Roo.DomQuery.select(AK,AL)[0];},selectValue:function(AM,AN,AO){AM=AM.replace(C,"");if(!valueCache[AM]){valueCache[AM]=Roo.DomQuery.compile(AM,"select");}var n=valueCache[AM](AN);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return ((v===null||v===undefined||v==='')?AO:v);},selectNumber:function(AP,AQ,AR){var v=Roo.DomQuery.selectValue(AP,AQ,AR||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}var AS=(el instanceof Array);var AT=Roo.DomQuery.filter(AS?el:[el],ss);return AS?(AT.length==el.length):(AT.length>0);},filter:function(AU,ss,AV){ss=ss.replace(C,"");if(!simpleCache[ss]){simpleCache[ss]=Roo.DomQuery.compile(ss,"simple");}var AW=simpleCache[ss](AU);return AV?S(AW,AU):AW;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return (a%v)==0;},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+'-');},"~=":function(a,v){return a&&(' '+a+' ').indexOf(' '+v+' ')!=-1;}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}}return r;},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}}return r;},"nth-child":function(c,a){var r=[],ri=-1;var m=G.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!H.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j;}}
-pn._batch=batch;}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n;}}else if((n.nodeIndex+l)%f==0){r[++ri]=n;}}return r;},"only-child":function(c){var r=[],ri=-1;;for(var i=0,ci;ci=c[i];i++){if(!K(ci)&&!J(ci)){r[++ri]=ci;}}return r;},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}}if(empty){r[++ri]=ci;}}return r;},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||'').indexOf(v)!=-1){r[++ri]=ci;}}return r;},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci;}}return r;},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci;}}return r;},"not":function(c,ss){return Roo.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Roo.DomQuery.select;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci;}}return r;},"next":function(c,ss){var is=Roo.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=J(ci);if(n&&is(n,ss)){r[++ri]=ci;}}return r;},"prev":function(c,ss){var is=Roo.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=K(ci);if(n&&is(n,ss)){r[++ri]=ci;}}return r;}}};}();Roo.query=Roo.DomQuery.select;
-Roo.util.Observable=function(A){A=A||{};this.addEvents(A.events||{});if(A.events){delete A.events;}
-Roo.apply(this,A);if(this.listeners){this.on(this.listeners);delete this.listeners;}};Roo.util.Observable.prototype={fireEvent:function(){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}else {return true;}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(B,fn,C,o){if(typeof B=="object"){o=B;for(var e in o){if(this.filterOptRe.test(e)){continue;}if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else {this.addListener(e,o[e].fn,o[e].scope,o[e]);}}return;}
-o=(!o||typeof o=="boolean")?{}:o;B=B.toLowerCase();var ce=this.events[B]||true;if(typeof ce=="boolean"){ce=new Roo.util.Event(this,B);this.events[B]=ce;}
-ce.addListener(fn,C,o);},removeListener:function(D,fn,E){var ce=this.events[D.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,E);}},purgeListeners:function(){for(var evt in this.events){if(typeof this.events[evt]=="object"){this.events[evt].clearListeners();}}},relayEvents:function(o,F){var G=function(H){return function(){return this.fireEvent.apply(this,Roo.combine(H,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=F.length;i<len;i++){var ename=F[i];if(!this.events[ename]){this.events[ename]=true;};o.on(ename,G(ename),this);}},addEvents:function(o){if(!this.events){this.events={};}
-Roo.applyIf(this.events,o);},hasListener:function(H){var e=this.events[H];return typeof e=="object"&&e.listeners.length>0;}};Roo.util.Observable.prototype.on=Roo.util.Observable.prototype.addListener;Roo.util.Observable.prototype.un=Roo.util.Observable.prototype.removeListener;Roo.util.Observable.capture=function(o,fn,I){o.fireEvent=o.fireEvent.createInterceptor(fn,I);};Roo.util.Observable.releaseCapture=function(o){o.fireEvent=Roo.util.Observable.prototype.fireEvent;};(function(){var J=function(h,o,M){var N=new Roo.util.DelayedTask();return function(){N.delay(o.buffer,h,M,Array.prototype.slice.call(arguments,0));};};var K=function(h,e,fn,M){return function(){e.removeListener(fn,M);return h.apply(M,arguments);};};var L=function(h,o,M){return function(){var N=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(M,N);},o.delay||10);};};Roo.util.Event=function(M,N){this.name=N;this.obj=M;this.listeners=[];};Roo.util.Event.prototype={addListener:function(fn,M,N){var o=N||{};M=M||this.obj;if(!this.isListening(fn,M)){var l={fn:fn,scope:M,options:o};var h=fn;if(o.delay){h=L(h,o,M);}if(o.single){h=K(h,this,fn,M);}if(o.buffer){h=J(h,o,M);}
-l.fireFn=h;if(!this.firing){this.listeners.push(l);}else {this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},findListener:function(fn,O){O=O||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==O){return i;}}return -1;},isListening:function(fn,P){return this.findListener(fn,P)!=-1;},removeListener:function(fn,Q){var R;if((R=this.findListener(fn,Q))!=-1){if(!this.firing){this.listeners.splice(R,1);}else {this.listeners=this.listeners.slice(0);this.listeners.splice(R,1);}return true;}return false;},clearListeners:function(){this.listeners=[];},fire:function(){var ls=this.listeners,S,T=ls.length;if(T>0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i<T;i++){var l=ls[i];if(l.fireFn.apply(l.scope||this.obj||window,arguments)===false){this.firing=false;return false;}}
-this.firing=false;}return true;}};})();
-Roo.EventManager=function(){var A,B,C=false;var F,G,H,I;var E=Roo.lib.Event;var D=Roo.lib.Dom;var J=function(){if(!C){C=true;Roo.isReady=true;if(B){clearInterval(B);}if(Roo.isGecko||Roo.isOpera){document.removeEventListener("DOMContentLoaded",J,false);}if(Roo.isIE){var defer=document.getElementById("ie-deferred-loader");if(defer){defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}}if(A){A.fire();A.clearListeners();}}};var K=function(){A=new Roo.util.Event();if(Roo.isGecko||Roo.isOpera){document.addEventListener("DOMContentLoaded",J,false);}else if(Roo.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){J();}};}else if(Roo.isSafari){B=setInterval(function(){var rs=document.readyState;if(rs=="complete"){J();}},10);}
-E.on(window,"load",J);};var L=function(h,o){var S=new Roo.util.DelayedTask(h);return function(e){e=new Roo.EventObjectImpl(e);S.delay(o.buffer,h,null,[e]);};};var M=function(h,el,S,fn){return function(e){Roo.EventManager.removeListener(el,S,fn);h(e);};};var N=function(h,o){return function(e){e=new Roo.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var O=function(S,T,U,fn,V){var o=(!U||typeof U=="boolean")?{}:U;fn=fn||o.fn;V=V||o.scope;var el=Roo.getDom(S);if(!el){throw "Error listening for \""+T+'\". Element "'+S+'" doesn\'t exist.';}var h=function(e){e=Roo.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else {t=e.target;}if(o.stopEvent===true){e.stopEvent();}if(o.preventDefault===true){e.preventDefault();}if(o.stopPropagation===true){e.stopPropagation();}if(o.normalized===false){e=e.browserEvent;}
-fn.call(V||el,e,t,o);};if(o.delay){h=N(h,o);}if(o.single){h=M(h,el,T,fn);}if(o.buffer){h=L(h,o);}
-fn._handlers=fn._handlers||[];fn._handlers.push([Roo.id(el),T,h]);E.on(el,T,h);if(T=="mousewheel"&&el.addEventListener){el.addEventListener("DOMMouseScroll",h,false);E.on(window,'unload',function(){el.removeEventListener("DOMMouseScroll",h,false);});}if(T=="mousedown"&&el==document){Roo.EventManager.stoppedMouseDownEvent.addListener(h);}return h;};var P=function(el,S,fn){var id=Roo.id(el),T=fn._handlers,hd=fn;if(T){for(var i=0,len=T.length;i<len;i++){var h=T[i];if(h[0]==id&&h[1]==S){hd=h[2];T.splice(i,1);break;}}}
-E.un(el,S,hd);el=Roo.getDom(el);if(S=="mousewheel"&&el.addEventListener){el.removeEventListener("DOMMouseScroll",hd,false);}if(S=="mousedown"&&el==document){Roo.EventManager.stoppedMouseDownEvent.removeListener(hd);}};var Q=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var R={wrap:function(fn,S,T){return function(e){Roo.EventObject.setEvent(e);fn.call(T?S||window:window,Roo.EventObject,S);};},addListener:function(U,V,fn,W,X){if(typeof V=="object"){var o=V;for(var e in o){if(Q.test(e)){continue;}if(typeof o[e]=="function"){O(U,e,o,o[e],o.scope);}else {O(U,e,o[e]);}}return;}return O(U,V,X,fn,W);},removeListener:function(Y,Z,fn){return P(Y,Z,fn);},onDocumentReady:function(fn,a,b){if(C){A.addListener(fn,a,b);A.fire();A.clearListeners();return;}if(!A){K();}
-A.addListener(fn,a,b);},onWindowResize:function(fn,c,d){if(!F){F=new Roo.util.Event();G=new Roo.util.DelayedTask(function(){F.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",function(){if(Roo.isIE){G.delay(50);}else {F.fire(D.getViewWidth(),D.getViewHeight());}});}
-F.addListener(fn,c,d);},onTextResize:function(fn,f,g){if(!H){H=new Roo.util.Event();var textEl=new Roo.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);I=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=I){H.fire(I,I=textEl.dom.offsetHeight);}},this.textResizeInterval);}
-H.addListener(fn,f,g);},removeResizeListener:function(fn,j){if(F){F.removeListener(fn,j);}},fireResize:function(){if(F){F.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};R.on=R.addListener;R.un=R.removeListener;R.stoppedMouseDownEvent=new Roo.util.Event();return R;}();Roo.onReady=Roo.EventManager.onDocumentReady;Roo.onReady(function(){var bd=Roo.get(document.body);if(!bd){return;}var S=[Roo.isIE?"roo-ie":Roo.isGecko?"roo-gecko":Roo.isOpera?"roo-opera":Roo.isSafari?"roo-safari":""];if(Roo.isMac){S.push("roo-mac");}if(Roo.isLinux){S.push("roo-linux");}if(Roo.isBorderBox){S.push('roo-border-box');}if(Roo.isStrict){var p=bd.dom.parentNode;if(p){p.className+=' roo-strict';}}
-bd.addClass(S.join(' '));});Roo.EventObject=function(){var E=Roo.lib.Event;var T={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var U=Roo.isIE?{1:0,4:1,2:2}:(Roo.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Roo.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Roo.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN :13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE :46,F5:116,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}
-this.browserEvent=e;if(e){this.button=e.button?U[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;}
-this.type=e.type;this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=(e.type=='keyup'||e.type=='keydown')?0:e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else {this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Roo.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Roo.isSafari?(T[k]||k):k;return (k>=33&&k<=40)||k==this.RETURN ||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;return (this.type=='keypress'&&this.ctrlKey)||k==9||k==13||k==40||k==27||(k==16)||(k==17)||(k>=18&&k<=20)||(k>=33&&k<=35)||(k>=36&&k<=39)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.type=='mousedown'){Roo.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Roo.isSafari?(T[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);}return null;},getXY:function(){return this.xy;},getTarget:function(V,W,X){return V?Roo.fly(this.target).findParent(V,W,X):this.target;},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);}return null;},getWheelDelta:function(){var e=this.browserEvent;var Y=0;if(e.wheelDelta){Y=e.wheelDelta/120;}else if(e.detail){Y=-e.detail/3;}return Y;},hasModifier:function(){return !!((this.ctrlKey||this.altKey)||this.shiftKey);},within:function(el,Z){var t=this[Z?"getRelatedTarget":"getTarget"]();return t&&Roo.fly(el).contains(t);},getPoint:function(){return new Roo.lib.Point(this.xy[0],this.xy[1]);}};return new Roo.EventObjectImpl();}();
-(function(){var D=Roo.lib.Dom;var E=Roo.lib.Event;var A=Roo.lib.Anim;var B={};var C=/(-[a-z])/gi;var F=function(m,a){return a.charAt(1).toUpperCase();};var G=document.defaultView;Roo.Element=function(J,K){var L=typeof J=="string"?document.getElementById(J):J;if(!L){return null;}var id=L.id;if(K!==true&&id&&Roo.Element.cache[id]){return Roo.Element.cache[id];}
-this.dom=L;this.id=id||Roo.id(L);};var El=Roo.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(J){this.visibilityMode=J;return this;},enableDisplayMode:function(K){this.setVisibilityMode(El.DISPLAY);if(typeof K!="undefined")this.originalDisplay=K;return this;},findParent:function(L,M,N){var p=this.dom,b=document.body,O=0,dq=Roo.DomQuery,P;M=M||50;if(typeof M!="number"){P=Roo.getDom(M);M=10;}while(p&&p.nodeType==1&&O<M&&p!=b&&p!=P){if(dq.is(p,L)){return N?Roo.get(p):p;}
-O++;p=p.parentNode;}return null;},findParentNode:function(Q,R,S){var p=Roo.fly(this.dom.parentNode,'_internal');return p?p.findParent(Q,R,S):null;},up:function(T,U){return this.findParentNode(T,U,true);},is:function(V){return Roo.DomQuery.is(this.dom,V);},animate:function(W,X,Y,Z,c){this.anim(W,{duration:X,callback:Y,easing:Z},c);return this;},anim:function(e,g,h,j,k,cb){h=h||'run';g=g||{};var l=Roo.lib.Anim[h](this.dom,e,(g.duration||j)||.35,(g.easing||k)||'easeOut',function(){Roo.callback(cb,this);Roo.callback(g.callback,g.scope||this,[this,g]);},this);g.anim=l;return l;},preanim:function(a,i){return !a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]});},clean:function(o){if(this.isCleaned&&o!==true){return this;}var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n);}else {n.nodeIndex=++ni;}
-n=nx;}
-this.isCleaned=true;return this;},calcOffsetsTo:function(el){el=Roo.get(el);var d=el.dom;var q=false;if(el.getStyle('position')=='static'){el.position('relative');q=true;}var x=0,y=0;var op=this.dom;while(op&&op!=d&&op.tagName!='HTML'){x+=op.offsetLeft;y+=op.offsetTop;op=op.offsetParent;}if(q){el.position('static');}return [x,y];},scrollIntoView:function(u,v){var c=Roo.getDom(u)||document.body;var el=this.dom;var o=this.calcOffsetsTo(c),l=o[0],t=o[1],b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}if(v!==false){if(l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}}return this;},scrollChildIntoView:function(w,z){Roo.fly(w,'_scrollChildIntoView').scrollIntoView(this,z);},autoHeight:function(AA,AB,AC,AD){var AE=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var AG=parseInt(this.dom.scrollHeight,10);if(!AA){this.setHeight(AG);this.unclip();if(typeof AC=="function"){AC();}}else {this.setHeight(AE);this.setHeight(AG,AA,AB,function(){this.unclip();if(typeof AC=="function")AC();}.createDelegate(this),AD);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;}return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(AF){var AG=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(AF!==true||!AG){return AG;}var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Roo.fly(p,'_isVisible').isVisible()){return false;}
-p=p.parentNode;}return true;},select:function(AH,AI){return El.select(AH,AI,this.dom);},query:function(AJ,AK){return Roo.DomQuery.select(AJ,this.dom);},child:function(AL,AM){var n=Roo.DomQuery.selectNode(AL,this.dom);return AM?n:Roo.get(n);},down:function(AN,AO){var n=Roo.DomQuery.selectNode(" > "+AN,this.dom);return AO?n:Roo.get(n);},initDD:function(AP,AQ,AR){var dd=new Roo.dd.DD(Roo.id(this.dom),AP,AQ);return Roo.apply(dd,AR);},initDDProxy:function(AS,AT,AU){var dd=new Roo.dd.DDProxy(Roo.id(this.dom),AS,AT);return Roo.apply(dd,AU);},initDDTarget:function(AV,AW,AX){var dd=new Roo.dd.DDTarget(Roo.id(this.dom),AV,AW);return Roo.apply(dd,AX);},setVisible:function(AY,AZ){if(!AZ||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(AY);}else {this.fixDisplay();this.dom.style.visibility=AY?"visible":"hidden";}}else {var dom=this.dom;var J=this.visibilityMode;if(AY){this.setOpacity(.01);this.setVisible(true);}
-this.anim({opacity:{to:(AY?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!AY){if(J==El.DISPLAY){dom.style.display="none";}else {dom.style.visibility="hidden";}
-Roo.get(dom).setOpacity(1);}});}return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(Aa){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(Ab){if(typeof Ab=="boolean"){Ab=Ab?this.originalDisplay:"none";}
-this.setStyle("display",Ab);return this;},focus:function(){try{this.dom.focus();}catch(e){}return this;},blur:function(){try{this.dom.blur();}catch(e){}return this;},addClass:function(Ac){if(Ac instanceof Array){for(var i=0,len=Ac.length;i<len;i++){this.addClass(Ac[i]);}}else {if(Ac&&!this.hasClass(Ac)){this.dom.className=this.dom.className+" "+Ac;}}return this;},radioClass:function(Ad){var Ae=this.dom.parentNode.childNodes;for(var i=0;i<Ae.length;i++){var s=Ae[i];if(s.nodeType==1){Roo.get(s).removeClass(Ad);}}
-this.addClass(Ad);return this;},removeClass:function(Af){if(!Af||!this.dom.className){return this;}if(Af instanceof Array){for(var i=0,len=Af.length;i<len;i++){this.removeClass(Af[i]);}}else {if(this.hasClass(Af)){var re=this.classReCache[Af];if(!re){re=new RegExp('(?:^|\\s+)'+Af+'(?:\\s+|$)',"g");this.classReCache[Af]=re;}
-this.dom.className=this.dom.className.replace(re," ");}}return this;},classReCache:{},toggleClass:function(Ag){if(this.hasClass(Ag)){this.removeClass(Ag);}else {this.addClass(Ag);}return this;},hasClass:function(Ah){return Ah&&(' '+this.dom.className+' ').indexOf(' '+Ah+' ')!=-1;},replaceClass:function(Ai,Aj){this.removeClass(Ai);this.addClass(Aj);return this;},getStyles:function(){var a=arguments,Ak=a.length,r={};for(var i=0;i<Ak;i++){r[a[i]]=this.getStyle(a[i]);}return r;},getStyle:function(){return G&&G.getComputedStyle?function(Al){var el=this.dom,v,cs,Am;if(Al=='float'){Al="cssFloat";}if(el.style&&(v=el.style[Al])){return v;}if(cs=G.getComputedStyle(el,"")){if(!(Am=B[Al])){Am=B[Al]=Al.replace(C,F);}return cs[Am];}return null;}:function(Al){var el=this.dom,v,cs,Am;if(Al=='opacity'){if(typeof el.style.filter=='string'){var m=el.style.filter.match(/alpha\(opacity=(.*)\)/i);if(m){var fv=parseFloat(m[1]);if(!isNaN(fv)){return fv?fv/100:0;}}}return 1;}else if(Al=='float'){Al="styleFloat";}if(!(Am=B[Al])){Am=B[Al]=Al.replace(C,F);}if(v=el.style[Am]){return v;}if(cs=el.currentStyle){return cs[Am];}return null;};}(),setStyle:function(Al,Am){if(typeof Al=="string"){if(Al=='float'){this.setStyle(Roo.isIE?'styleFloat':'cssFloat',Am);return this;}var camel;if(!(camel=B[Al])){camel=B[Al]=Al.replace(C,F);}if(camel=='opacity'){this.setOpacity(Am);}else {this.dom.style[camel]=Am;}}else {for(var style in Al){if(typeof Al[style]!="function"){this.setStyle(style,Al[style]);}}}return this;},applyStyles:function(An){Roo.DomHelper.applyStyles(this.dom,An);return this;},getX:function(){return D.getX(this.dom);},getY:function(){return D.getY(this.dom);},getXY:function(){return D.getXY(this.dom);},setX:function(x,Ao){if(!Ao||!A){D.setX(this.dom,x);}else {this.setXY([x,this.getY()],this.preanim(arguments,1));}return this;},setY:function(y,Ap){if(!Ap||!A){D.setY(this.dom,y);}else {this.setXY([this.getX(),y],this.preanim(arguments,1));}return this;},setLeft:function(Aq){this.setStyle("left",this.addUnits(Aq));return this;},setTop:function(Ar){this.setStyle("top",this.addUnits(Ar));return this;},setRight:function(As){this.setStyle("right",this.addUnits(As));return this;},setBottom:function(At){this.setStyle("bottom",this.addUnits(At));return this;},setXY:function(Au,Av){if(!Av||!A){D.setXY(this.dom,Au);}else {this.anim({points:{to:Au}},this.preanim(arguments,1),'motion');}return this;},setLocation:function(x,y,Aw){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,Ax){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(Ay){var h=this.dom.offsetHeight||0;return Ay!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");},getWidth:function(Az){var w=this.dom.offsetWidth||0;return Az!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}return w;},getSize:function(A0){return {width:this.getWidth(A0),height:this.getHeight(A0)};},getViewSize:function(){var d=this.dom,A1=document,aw=0,ah=0;if(d==A1||d==A1.body){return {width:D.getViewWidth(),height:D.getViewHeight()};}else {return {width:d.clientWidth,height:d.clientHeight};}},getValue:function(A2){return A2?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(A3){if(typeof A3=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){A3-=(this.getBorderWidth("lr")+this.getPadding("lr"));}if(A3<0){A3=0;}}return A3;},adjustHeight:function(A4){if(typeof A4=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){A4-=(this.getBorderWidth("tb")+this.getPadding("tb"));}if(A4<0){A4=0;}}return A4;},setWidth:function(A5,A6){A5=this.adjustWidth(A5);if(!A6||!A){this.dom.style.width=this.addUnits(A5);}else {this.anim({width:{to:A5}},this.preanim(arguments,1));}return this;},setHeight:function(A7,A8){A7=this.adjustHeight(A7);if(!A8||!A){this.dom.style.height=this.addUnits(A7);}else {this.anim({height:{to:A7}},this.preanim(arguments,1));}return this;},setSize:function(A9,BA,BB){if(typeof A9=="object"){BA=A9.height;A9=A9.width;}
-A9=this.adjustWidth(A9);BA=this.adjustHeight(BA);if(!BB||!A){this.dom.style.width=this.addUnits(A9);this.dom.style.height=this.addUnits(BA);}else {this.anim({width:{to:A9},height:{to:BA}},this.preanim(arguments,2));}return this;},setBounds:function(x,y,BC,BD,BE){if(!BE||!A){this.setSize(BC,BD);this.setLocation(x,y);}else {BC=this.adjustWidth(BC);BD=this.adjustHeight(BD);this.anim({points:{to:[x,y]},width:{to:BC},height:{to:BD}},this.preanim(arguments,4),'motion');}return this;},setRegion:function(BF,BG){this.setBounds(BF.left,BF.top,BF.right-BF.left,BF.bottom-BF.top,this.preanim(arguments,1));return this;},addListener:function(BH,fn,BI,BJ){Roo.EventManager.on(this.dom,BH,fn,BI||this,BJ);},removeListener:function(BK,fn){Roo.EventManager.removeListener(this.dom,BK,fn);return this;},removeAllListeners:function(){E.purgeElement(this.dom);return this;},relayEvent:function(BL,BM){this.on(BL,function(e){BM.fireEvent(BL,e);});},setOpacity:function(BN,BO){if(!BO||!A){var s=this.dom.style;if(Roo.isIE){s.zoom=1;s.filter=(s.filter||'').replace(/alpha\([^\)]*\)/gi,"")+(BN==1?"":"alpha(opacity="+BN*100+")");}else {s.opacity=BN;}}else {this.anim({opacity:{to:BN}},this.preanim(arguments,1),null,.35,'easeIn');}return this;},getLeft:function(BP){if(!BP){return this.getX();}else {return parseInt(this.getStyle("left"),10)||0;}},getRight:function(BQ){if(!BQ){return this.getX()+this.getWidth();}else {return (this.getLeft(true)+this.getWidth())||0;}},getTop:function(BR){if(!BR){return this.getY();}else {return parseInt(this.getStyle("top"),10)||0;}},getBottom:function(BS){if(!BS){return this.getY()+this.getHeight();}else {return (this.getTop(true)+this.getHeight())||0;}},position:function(BT,BU,x,y){if(!BT){if(this.getStyle('position')=='static'){this.setStyle('position','relative');}}else {this.setStyle("position",BT);}if(BU){this.setStyle("z-index",BU);}if(x!==undefined&&y!==undefined){this.setXY([x,y]);}else if(x!==undefined){this.setX(x);}else if(y!==undefined){this.setY(y);}},clearPositioning:function(BV){BV=BV||'';this.setStyle({"left":BV,"right":BV,"top":BV,"bottom":BV,"z-index":"","position":"static"});return this;},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return {"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")};},getBorderWidth:function(BW){return this.addStyles(BW,El.borders);},getPadding:function(BX){return this.addStyles(BX,El.paddings);},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right="";}if(pc.bottom=="auto"){this.dom.style.bottom="";}return this;},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block");}}},setLeftTop:function(BY,BZ){this.dom.style.left=this.addUnits(BY);this.dom.style.top=this.addUnits(BZ);return this;},move:function(Ba,Bb,Bc){var xy=this.getXY();Ba=Ba.toLowerCase();switch(Ba){case "l":case "left":this.moveTo(xy[0]-Bb,xy[1],this.preanim(arguments,2));break;case "r":case "right":this.moveTo(xy[0]+Bb,xy[1],this.preanim(arguments,2));break;case "t":case "top":case "up":this.moveTo(xy[0],xy[1]-Bb,this.preanim(arguments,2));break;case "b":case "bottom":case "down":this.moveTo(xy[0],xy[1]+Bb,this.preanim(arguments,2));break;}return this;},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden");}return this;},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o);}if(o.x){this.setStyle("overflow-x",o.x);}if(o.y){this.setStyle("overflow-y",o.y);}}return this;},getAnchorXY:function(Bd,Be,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight();}else {w=this.getWidth();h=this.getHeight();}}else {w=s.width;h=s.height;}var x=0,y=0,r=Math.round;switch((Bd||"tl").toLowerCase()){case "c":x=r(w*.5);y=r(h*.5);break;case "t":x=r(w*.5);y=0;break;case "l":x=0;y=r(h*.5);break;case "r":x=w;y=r(h*.5);break;case "b":x=r(w*.5);y=h;break;case "tl":x=0;y=0;break;case "bl":x=0;y=h;break;case "br":x=w;y=h;break;case "tr":x=w;y=0;break;}if(Be===true){return [x,y];}if(vp){var sc=this.getScroll();return [x+sc.left,y+sc.top];}var o=this.getXY();return [x+o[0],y+o[1]];},getAlignToXY:function(el,p,o){el=Roo.get(el);var d=this.dom;if(!el.dom){throw "Element.alignTo with an element that doesn't exist";}var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl";}else if(p=="?"){p="tl-bl?";}else if(p.indexOf("-")==-1){p="tl-"+p;}
-p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw "Element.alignTo with an invalid alignment "+p;}
-p1=m[1];p2=m[2];c=!!m[3];var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var swapY=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var swapX=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var A1=document;var scrollX=(A1.documentElement.scrollLeft||A1.body.scrollLeft||0)+5;var scrollY=(A1.documentElement.scrollTop||A1.body.scrollTop||0)+5;if((x+w)>dw+scrollX){x=swapX?r.left-w:dw+scrollX-w;}if(x<scrollX){x=swapX?r.right:scrollX;}if((y+h)>dh+scrollY){y=swapY?r.top-h:dh+scrollY-h;}if(y<scrollY){y=swapY?r.bottom:scrollY;}}return [x,y];},getConstrainToXY:function(){var os={top:0,left:0,bottom:0,right:0};return function(el,Bf,Bg,Bh){el=Roo.get(el);Bg=Bg?Roo.applyIf(Bg,os):os;var vw,vh,vx=0,vy=0;if(el.dom==document.body||el.dom==document){vw=Roo.lib.Dom.getViewWidth();vh=Roo.lib.Dom.getViewHeight();}else {vw=el.dom.clientWidth;vh=el.dom.clientHeight;if(!Bf){var vxy=el.getXY();vx=vxy[0];vy=vxy[1];}}var s=el.getScroll();vx+=Bg.left+s.left;vy+=Bg.top+s.top;vw-=Bg.right;vh-=Bg.bottom;var vr=vx+vw;var vb=vy+vh;var xy=Bh||(!Bf?this.getXY():[this.getLeft(true),this.getTop(true)]);var x=xy[0],y=xy[1];var w=this.dom.offsetWidth,h=this.dom.offsetHeight;var Bi=false;if((x+w)>vr){x=vr-w;Bi=true;}if((y+h)>vb){y=vb-h;Bi=true;}if(x<vx){x=vx;Bi=true;}if(y<vy){y=vy;Bi=true;}return Bi?[x,y]:false;};}(),adjustForConstraints:function(xy,Bf,Bg){return this.getConstrainToXY(Bf||document,false,Bg,xy)||xy;},alignTo:function(Bh,Bi,Bj,Bk){var xy=this.getAlignToXY(Bh,Bi,Bj);this.setXY(xy,this.preanim(arguments,3));return this;},anchorTo:function(el,Bl,Bm,Bn,Bo,Bp){var Bq=function(){this.alignTo(el,Bl,Bm,Bn);Roo.callback(Bp,this);};Roo.EventManager.onWindowResize(Bq,this);var tm=typeof Bo;if(tm!='undefined'){Roo.EventManager.on(window,'scroll',Bq,this,{buffer:tm=='number'?Bo:50});}
-Bq.call(this);return this;},clearOpacity:function(){if(window.ActiveXObject){if(typeof this.dom.style.filter=='string'&&(/alpha/i).test(this.dom.style.filter)){this.dom.style.filter="";}}else {this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]="";}return this;},hide:function(Br){this.setVisible(false,this.preanim(arguments,0));return this;},show:function(Bs){this.setVisible(true,this.preanim(arguments,0));return this;},addUnits:function(Bt){return Roo.Element.addUnits(Bt,this.defaultUnit);},beginMeasure:function(){var el=this.dom;if(el.offsetWidth||el.offsetHeight){return this;}var Bu=[];var p=this.dom,b=document.body;while((!el.offsetWidth&&!el.offsetHeight)&&p&&p.tagName&&p!=b){var pe=Roo.get(p);if(pe.getStyle('display')=='none'){Bu.push({el:p,visibility:pe.getStyle("visibility")});p.style.visibility="hidden";p.style.display="block";}
-p=p.parentNode;}
-this._measureChanged=Bu;return this;},endMeasure:function(){var Bv=this._measureChanged;if(Bv){for(var i=0,Ak=Bv.length;i<Ak;i++){var r=Bv[i];r.el.style.visibility=r.visibility;r.el.style.display="none";}
-this._measureChanged=null;}return this;},update:function(Bw,Bx,By){if(typeof Bw=="undefined"){Bw="";}if(Bx!==true){this.dom.innerHTML=Bw;if(typeof By=="function"){By();}return this;}var id=Roo.id();var Bz=this.dom;Bw+='<span id="'+id+'"></span>';E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var B0=/\ssrc=([\'\"])(.*?)\1/i;var B1=/\stype=([\'\"])(.*?)\1/i;var B2;while(B2=re.exec(Bw)){var attrs=B2[1];var srcMatch=attrs?attrs.match(B0):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(B1);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2];}
-hd.appendChild(s);}else if(B2[2]&&B2[2].length>0){if(window.execScript){window.execScript(B2[2]);}else {window.eval(B2[2]);}}}var el=document.getElementById(id);if(el){el.parentNode.removeChild(el);}if(typeof By=="function"){By();}});Bz.innerHTML=Bw.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdateManager();um.update.apply(um,arguments);return this;},getUpdateManager:function(){if(!this.updateManager){this.updateManager=new Roo.UpdateManager(this);}return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(B0){this.alignTo(B0||document,'c-c');return this;},isBorderBox:function(){return I[this.dom.tagName.toLowerCase()]||Roo.isBorderBox;},getBox:function(B1,B2){var xy;if(!B2){xy=this.getXY();}else {var BY=parseInt(this.getStyle("left"),10)||0;var BZ=parseInt(this.getStyle("top"),10)||0;xy=[BY,BZ];}var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!B1){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else {var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(B3,B4){return B4&&Roo.isBorderBox?0:(this.getPadding(B3)+this.getBorderWidth(B3));},setBox:function(B5,B6,B7){var w=B5.width,h=B5.height;if((B6&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-this.setBounds(B5.x,B5.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var B8=this.dom;this.addClass("x-repaint");setTimeout(function(){Roo.get(B8).removeClass("x-repaint");},1);return this;},getMargins:function(B9){if(!B9){return {top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else {return this.addStyles(B9,El.margins);}},addStyles:function(CA,CB){var CC=0,v,w;for(var i=0,Ak=CA.length;i<Ak;i++){v=this.getStyle(CB[CA.charAt(i)]);if(v){w=parseInt(v,10);if(w){CC+=w;}}}return CC;},createProxy:function(CD,CE,CF){if(CE){CE=Roo.getDom(CE);}else {CE=document.body;}
-CD=typeof CD=="object"?CD:{tag:"div",cls:CD};var CG=Roo.DomHelper.append(CE,CD,true);if(CF){CG.setBox(this.getBox());}return CG;},mask:function(CH,CI){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}if(!this._mask){this._mask=Roo.DomHelper.append(this.dom,{cls:"roo-el-mask"},true);}
-this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof CH=='string'){if(!this._maskMsg){this._maskMsg=Roo.DomHelper.append(this.dom,{cls:"roo-el-mask-msg",cn:{tag:'div'}},true);}var mm=this._maskMsg;mm.dom.className=CI?"roo-el-mask-msg "+CI:"roo-el-mask-msg";mm.dom.firstChild.innerHTML=CH;mm.setDisplayed(true);mm.center(this);}if(Roo.isIE&&!(Roo.isIE7&&Roo.isStrict)&&this.getStyle('height')=='auto'){this._mask.setHeight(this.getHeight());}return this._mask;},unmask:function(CJ){if(this._mask){if(CJ===true){this._mask.remove();delete this._mask;if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}}else {this._mask.setDisplayed(false);if(this._maskMsg){this._maskMsg.setDisplayed(false);}}}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='no';el.className='roo-shim';if(Roo.isIE&&Roo.isSecure){el.src=Roo.SSL_SECURE_URL;}var CK=Roo.get(this.dom.parentNode.insertBefore(el,this.dom));CK.autoBoxAdjust=false;return CK;},remove:function(){if(this.dom.parentNode){this.dom.parentNode.removeChild(this.dom);}delete El.cache[this.dom.id];},addClassOnOver:function(CL,CM){this.on("mouseover",function(){Roo.fly(this,'_internal').addClass(CL);},this.dom);var CN=function(e){if(CM!==true||!e.within(this,true)){Roo.fly(this,'_internal').removeClass(CL);}};this.on("mouseout",CN,this.dom);return this;},addClassOnFocus:function(CO){this.on("focus",function(){Roo.fly(this,'_internal').addClass(CO);},this.dom);this.on("blur",function(){Roo.fly(this,'_internal').removeClass(CO);},this.dom);return this;},addClassOnClick:function(CP){var CQ=this.dom;this.on("mousedown",function(){Roo.fly(CQ,'_internal').addClass(CP);var d=Roo.get(document);var fn=function(){Roo.fly(CQ,'_internal').removeClass(CP);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(CR,CS){var fn=function(e){e.stopPropagation();if(CS){e.preventDefault();}};if(CR instanceof Array){for(var i=0,Ak=CR.length;i<Ak;i++){this.on(CR[i],fn);}return this;}
-this.on(CR,fn);return this;},fitToParentDelegate:Roo.emptyFn,fitToParent:function(CT,CU){Roo.EventManager.removeResizeListener(this.fitToParentDelegate);this.fitToParentDelegate=Roo.emptyFn;if(CT===true&&!this.dom.parentNode){return;}var p=Roo.get(CU||this.dom.parentNode);this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'),p.getComputedHeight()-p.getFrameWidth('tb'));if(CT===true){this.fitToParentDelegate=this.fitToParent.createDelegate(this,[true,CU]);Roo.EventManager.onWindowResize(this.fitToParentDelegate);}return this;},getNextSibling:function(){var n=this.dom.nextSibling;while(n&&n.nodeType!=1){n=n.nextSibling;}return n;},getPrevSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=1){n=n.previousSibling;}return n;},appendChild:function(el){el=Roo.get(el);el.appendTo(this);return this;},createChild:function(CV,CW,CX){CV=CV||{tag:'div'};if(CW){return Roo.DomHelper.insertBefore(CW,CV,CX!==true);}return Roo.DomHelper[!this.dom.firstChild?'overwrite':'append'](this.dom,CV,CX!==true);},appendTo:function(el){el=Roo.getDom(el);el.appendChild(this.dom);return this;},insertBefore:function(el){el=Roo.getDom(el);el.parentNode.insertBefore(this.dom,el);return this;},insertAfter:function(el){el=Roo.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this;},insertFirst:function(el,CY){el=el||{};if(typeof el=='object'&&!el.nodeType){return this.createChild(el,this.dom.firstChild,CY);}else {el=Roo.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return !CY?Roo.get(el):el;}},insertSibling:function(el,CZ,Ca){CZ=CZ?CZ.toLowerCase():'before';el=el||{};var rt,Cb=CZ=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType){if(CZ=='after'&&!this.dom.nextSibling){rt=Roo.DomHelper.append(this.dom.parentNode,el,!Ca);}else {rt=Roo.DomHelper[CZ=='after'?'insertAfter':'insertBefore'](this.dom,el,!Ca);}}else {rt=this.dom.parentNode.insertBefore(Roo.getDom(el),CZ=='before'?this.dom:this.dom.nextSibling);if(!Ca){rt=Roo.get(rt);}}return rt;},wrap:function(Cc,Cd){if(!Cc){Cc={tag:"div"};}var Ce=Roo.DomHelper.insertBefore(this.dom,Cc,!Cd);Ce.dom?Ce.dom.appendChild(this.dom):Ce.appendChild(this.dom);return Ce;},replace:function(el){el=Roo.get(el);this.insertBefore(el);el.remove();return this;},insertHtml:function(Cf,Cg,Ch){var el=Roo.DomHelper.insertHtml(Cf,this.dom,Cg);return Ch?Roo.get(el):el;},set:function(o,Ci){var el=this.dom;Ci=typeof Ci=='undefined'?(el.setAttribute?true:false):Ci;for(var attr in o){if(attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else {if(Ci)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}if(o.style){Roo.DomHelper.applyStyles(el,o.style);}return this;},addKeyListener:function(Cj,fn,Ck){var Cl;if(typeof Cj!="object"||Cj instanceof Array){Cl={key:Cj,fn:fn,scope:Ck};}else {Cl={key:Cj.key,shift:Cj.shift,ctrl:Cj.ctrl,alt:Cj.alt,fn:fn,scope:Ck};}return new Roo.KeyMap(this,Cl);},addKeyMap:function(Cm){return new Roo.KeyMap(this,Cm);},isScrollable:function(){var Cn=this.dom;return Cn.scrollHeight>Cn.clientHeight||Cn.scrollWidth>Cn.clientWidth;},scrollTo:function(Co,Cp,Cq){var Cr=Co.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!Cq||!A){this.dom[Cr]=Cp;}else {var to=Cr=="scrollLeft"?[Cp,this.dom.scrollTop]:[this.dom.scrollLeft,Cp];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}return this;},scroll:function(Cs,Ct,Cu){if(!this.isScrollable()){return;}var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;Cs=Cs.toLowerCase();var Cv=false;var a=this.preanim(arguments,2);switch(Cs){case "l":case "left":if(w-l>cw){var v=Math.min(l+Ct,w-cw);this.scrollTo("left",v,a);Cv=true;}break;case "r":case "right":if(l>0){var v=Math.max(l-Ct,0);this.scrollTo("left",v,a);Cv=true;}break;case "t":case "top":case "up":if(t>0){var v=Math.max(t-Ct,0);this.scrollTo("top",v,a);Cv=true;}break;case "b":case "bottom":case "down":if(h-t>ch){var v=Math.min(t+Ct,h-ch);this.scrollTo("top",v,a);Cv=true;}break;}return Cv;},translatePoints:function(x,y){if(typeof x=='object'||x instanceof Array){y=x[1];x=x[0];}var p=this.getStyle('position');var o=this.getXY();var l=parseInt(this.getStyle('left'),10);var t=parseInt(this.getStyle('top'),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;}if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;}return {left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,Cw=document;if(d==Cw||d==Cw.body){var l=window.pageXOffset||Cw.documentElement.scrollLeft||Cw.body.scrollLeft||0;var t=window.pageYOffset||Cw.documentElement.scrollTop||Cw.body.scrollTop||0;return {left:l,top:t};}else {return {left:d.scrollLeft,top:d.scrollTop};}},getColor:function(Cx,Cy,Cz){var v=this.getStyle(Cx);if(!v||v=="transparent"||v=="inherit"){return Cy;}var C0=typeof Cz=="undefined"?"#":Cz;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]).toString(16);if(h<16){h="0"+h;}
-C0+=h;}}else {if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);C0+=c+c;}}else if(v.length==7){C0+=v.substr(1);}}}return (C0.length>5?C0.toLowerCase():Cy);},boxWrap:function(C1){C1=C1||'x-box';var el=Roo.get(this.insertHtml('beforeBegin',String.format('<div class="{0}">'+El.boxMarkup+'</div>',C1)));el.child('.'+C1+'-mc').dom.appendChild(this.dom);return el;},getAttributeNS:Roo.isIE?function(ns,C2){var d=this.dom;var C3=typeof d[ns+":"+C2];if(C3!='undefined'&&C3!='unknown'){return d[ns+":"+C2];}return d[C2];}:function(ns,C4){var d=this.dom;return d.getAttributeNS(ns,C4)||d.getAttribute(ns+":"+C4)||d.getAttribute(C4)||d[C4];}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.un=ep.removeListener;ep.autoBoxAdjust=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,J){if(v===""||v=="auto"){return v;}if(v===undefined){return '';}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(J||'px');}return v;};El.boxMarkup='<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var H;El.get=function(el){var ex,J,id;if(!el){return null;}if(typeof el=="string"){if(!(J=document.getElementById(el))){return null;}if(ex=El.cache[el]){ex.dom=J;}else {ex=El.cache[el]=new El(J);}return ex;}else if(el.tagName){if(!(id=el.id)){id=Roo.id(el);}if(ex=El.cache[id]){ex.dom=el;}else {ex=El.cache[id]=new El(el);}return ex;}else if(el instanceof El){if(el!=H){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;}return el;}else if(el.isComposite){return el;}else if(el instanceof Array){return El.select(el);}else if(el==document){if(!H){var f=function(){};f.prototype=El.prototype;H=new f();H.dom=document;}return H;}return null;};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i]){delete El.cache[a[i].id||a[i]];}}};El.garbageCollect=function(){if(!Roo.enableGarbageCollector){clearInterval(El.collectorThread);return;}for(var eid in El.cache){var el=El.cache[eid],d=el.dom;if(!d||!d.parentNode||(!d.offsetParent&&!document.getElementById(eid))){delete El.cache[eid];if(d&&Roo.enableListenerCollection){E.purgeElement(d);}}}}
-El.collectorThreadId=setInterval(El.garbageCollect,30000);El.Flyweight=function(J){this.dom=J;};El.Flyweight.prototype=El.prototype;El._flyweights={};El.fly=function(el,J){J=J||'_global';el=Roo.getDom(el);if(!el){return null;}if(!El._flyweights[J]){El._flyweights[J]=new El.Flyweight();}
-El._flyweights[J].dom=el;return El._flyweights[J];};Roo.get=El.get;Roo.fly=El.fly;var I=Roo.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Roo.isIE||Roo.isGecko){I['button']=1;}
-Roo.EventManager.on(window,'unload',function(){delete El.cache;delete El._flyweights;});})();if(Roo.DomQuery){Roo.Element.selectorFunction=Roo.DomQuery.select;}
-Roo.Element.select=function(J,K,L){var M;if(typeof J=="string"){M=Roo.Element.selectorFunction(J,L);}else if(J.length!==undefined){M=J;}else {throw "Invalid selector";}if(K===true){return new Roo.CompositeElement(M);}else {return new Roo.CompositeElementLite(M);}};Roo.select=Roo.Element.select;
-Roo.enableFx=true;Roo.Fx={slideIn:function(A,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){A=A||"t";this.fixDisplay();var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var B=this.fxWrap(r.pos,o,"hidden");var st=this.dom.style;st.visibility="visible";st.position="absolute";var C=function(){el.fxUnwrap(B,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,pt={to:[b.x,b.y]},bw={to:b.width},bh={to:b.height};switch(A.toLowerCase()){case "t":B.setSize(b.width,0);st.left=st.bottom="0";a={height:bh};break;case "l":B.setSize(0,b.height);st.right=st.top="0";a={width:bw};break;case "r":B.setSize(0,b.height);B.setX(b.right);st.left=st.top="0";a={width:bw,points:pt};break;case "b":B.setSize(b.width,0);B.setY(b.bottom);st.left=st.top="0";a={height:bh,points:pt};break;case "tl":B.setSize(0,0);st.right=st.bottom="0";a={width:bw,height:bh};break;case "bl":B.setSize(0,0);B.setY(b.y+b.height);st.right=st.top="0";a={width:bw,height:bh,points:pt};break;case "br":B.setSize(0,0);B.setXY([b.right,b.bottom]);st.left=st.top="0";a={width:bw,height:bh,points:pt};break;case "tr":B.setSize(0,0);B.setX(b.x+b.width);st.left=st.bottom="0";a={width:bw,height:bh,points:pt};break;}
-this.dom.style.visibility="visible";B.show();arguments.callee.anim=B.fxanim(a,o,'motion',.5,'easeOut',C);});return this;},slideOut:function(B,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){B=B||"t";var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var C=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";C.setSize(b);var D=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.fxUnwrap(C,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,E={to:0};switch(B.toLowerCase()){case "t":st.left=st.bottom="0";a={height:E};break;case "l":st.right=st.top="0";a={width:E};break;case "r":st.left=st.top="0";a={width:E,points:{to:[b.right,b.y]}};break;case "b":st.left=st.top="0";a={height:E,points:{to:[b.x,b.bottom]}};break;case "tl":st.right=st.bottom="0";a={width:E,height:E};break;case "bl":st.right=st.top="0";a={width:E,height:E,points:{to:[b.x,b.bottom]}};break;case "br":st.left=st.top="0";a={width:E,height:E,points:{to:[b.x+b.width,b.bottom]}};break;case "tr":st.left=st.bottom="0";a={width:E,height:E,points:{to:[b.right,b.y]}};break;}
-arguments.callee.anim=C.fxanim(a,o,'motion',.5,"easeOut",D);});return this;},puff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.show();var r=this.getFxRestore();var st=this.dom.style;var C=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var D=this.getWidth();var E=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(D*2)},height:{to:this.adjustHeight(E*2)},points:{by:[-(D*.5),-(E*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",C);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var C=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',C);}).defer(100,this);});});return this;},highlight:function(C,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){C=C||"ffff9c";attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var D=this.getColor(attr);var E=this.dom.style[attr];endColor=(o.endColor||D)||"ffffff";var F=function(){el.dom.style[attr]=E;el.afterFx(o);};var a={};a[attr]={from:C,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',F);});return this;},frame:function(D,E,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){D=D||"#C3DAF9";if(D.length==6){D="#"+D;}
-E=E||1;duration=o.duration||1;this.show();var b=this.getBox();var F=function(){var G=this.createProxy({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+D}});var H=Roo.isBorderBox?2:1;G.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*H))},width:{from:b.width,to:(b.width+(20*H))}},duration,function(){G.remove();});if(--E>0){F.defer((duration/2)*1000,this);}else {el.afterFx(o);}};F.call(this);});return this;},pause:function(F){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},F*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Roo.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else {this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Roo.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}if(h!==undefined){a.height={to:this.adjustHeight(h)};}if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};}if(op!==undefined){a.opacity={to:op};}if(o.xy!==undefined){a.points={to:o.xy};}
-arguments.callee.anim=this.fxanim(a,o,'motion',.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(G,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){G=G||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var H=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};var a={opacity:{to:0},points:{}},pt=a.points;switch(G.toLowerCase()){case "t":pt.by=[0,-h];break;case "l":pt.by=[-w,0];break;case "r":pt.by=[w,0];break;case "b":pt.by=[0,h];break;case "tl":pt.by=[-w,-h];break;case "bl":pt.by=[-w,h];break;case "br":pt.by=[w,h];break;case "tr":pt.by=[w,-h];break;}
-arguments.callee.anim=this.fxanim(a,o,'motion',.5,"easeOut",H);});return this;},syncFx:function(){this.fxDefaults=Roo.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Roo.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}}return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;}return false;}return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];}if(!this.hasFxBlock()){Roo.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else {fn.call(this);}}return this;},fxWrap:function(H,o,I){var J;if(!o.wrap||!(J=Roo.get(o.wrap))){var wrapXY;if(o.fixPosition){wrapXY=this.getXY();}var div=document.createElement("div");div.style.visibility=I;J=Roo.get(this.dom.parentNode.insertBefore(div,this.dom));J.setPositioning(H);if(J.getStyle("position")=="static"){J.position("relative");}
-this.clearPositioning('auto');J.clip();J.dom.appendChild(this.dom);if(wrapXY){J.setXY(wrapXY);}}return J;},fxUnwrap:function(K,L,o){this.clearPositioning();this.setPositioning(L);if(!o.wrap){K.dom.parentNode.insertBefore(this.dom,K.dom);K.remove();}},getFxRestore:function(){var st=this.dom.style;return {pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);}if(o.afterCls){this.addClass(o.afterCls);}if(o.remove===true){this.remove();}
-Roo.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.fxQueue.shift();this.nextFx();}},getFxEl:function(){return Roo.get(this.dom);},fxanim:function(M,N,O,P,Q,cb){O=O||'run';N=N||{};var R=Roo.lib.Anim[O](this.dom,M,(N.duration||P)||.35,(N.easing||Q)||'easeOut',function(){Roo.callback(cb,this);},this);N.anim=R;return R;}};Roo.Fx.resize=Roo.Fx.scale;Roo.apply(Roo.Element.prototype,Roo.Fx);
-Roo.CompositeElement=function(A){this.elements=[];this.addElements(A);};Roo.CompositeElement.prototype={isComposite:true,addElements:function(B){if(!B)return this;if(typeof B=="string"){B=Roo.Element.selectorFunction(B);}var C=this.elements;var D=C.length-1;for(var i=0,len=B.length;i<len;i++){C[++D]=Roo.get(B[i]);}return this;},fill:function(E){this.elements=[];this.add(E);return this;},filter:function(F){var G=[];this.each(function(el){if(el.is(F)){G[G.length]=el.dom;}});this.fill(G);return this;},invoke:function(fn,H){var I=this.elements;for(var i=0,len=I.length;i<len;i++){Roo.Element.prototype[fn].apply(I[i],H);}return this;},add:function(J){if(typeof J=="string"){this.addElements(Roo.Element.selectorFunction(J));}else if(J.length!==undefined){this.addElements(J);}else {this.addElements([J]);}return this;},each:function(fn,K){var L=this.elements;for(var i=0,len=L.length;i<len;i++){if(fn.call(K||L[i],L[i],this,i)===false){break;}}return this;},item:function(M){return this.elements[M]||null;},first:function(){return this.item(0);},last:function(){return this.item(this.elements.length-1);},getCount:function(){return this.elements.length;},contains:function(el){return this.indexOf(el)!==-1;},indexOf:function(el){return this.elements.indexOf(Roo.get(el));},removeElement:function(el,N){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.removeElement(el[i]);}return this;}var O=typeof el=='number'?el:this.indexOf(el);if(O!==-1){if(N){var d=this.elements[O];if(d.dom){d.remove();}else {d.parentNode.removeChild(d);}}
-this.elements.splice(O,1);}return this;},replaceElement:function(el,P,Q){var R=typeof el=='number'?el:this.indexOf(el);if(R!==-1){if(Q){this.elements[R].replaceWith(P);}else {this.elements.splice(R,1,Roo.get(P))}}return this;},clear:function(){this.elements=[];}};(function(){Roo.CompositeElement.createCall=function(S,T){if(!S[T]){S[T]=function(){return this.invoke(T,arguments);};}};for(var fnName in Roo.Element.prototype){if(typeof Roo.Element.prototype[fnName]=="function"){Roo.CompositeElement.createCall(Roo.CompositeElement.prototype,fnName);}};})();
-Roo.CompositeElementLite=function(A){Roo.CompositeElementLite.superclass.constructor.call(this,A);this.el=new Roo.Element.Flyweight();};Roo.extend(Roo.CompositeElementLite,Roo.CompositeElement,{addElements:function(B){if(B){if(B instanceof Array){this.elements=this.elements.concat(B);}else {var yels=this.elements;var index=yels.length-1;for(var i=0,len=B.length;i<len;i++){yels[++index]=B[i];}}}return this;},invoke:function(fn,C){var D=this.elements;var el=this.el;for(var i=0,len=D.length;i<len;i++){el.dom=D[i];Roo.Element.prototype[fn].apply(el,C);}return this;},item:function(E){if(!this.elements[E]){return null;}
-this.el.dom=this.elements[E];return this.el;},addListener:function(F,G,H,I){var J=this.elements;for(var i=0,len=J.length;i<len;i++){Roo.EventManager.on(J[i],F,G,H||J[i],I);}return this;},each:function(fn,K){var L=this.elements;var el=this.el;for(var i=0,len=L.length;i<len;i++){el.dom=L[i];if(fn.call(K||el,el,this,i)===false){break;}}return this;},indexOf:function(el){return this.elements.indexOf(Roo.getDom(el));},replaceElement:function(el,M,N){var O=typeof el=='number'?el:this.indexOf(el);if(O!==-1){M=Roo.getDom(M);if(N){var d=this.elements[O];d.parentNode.insertBefore(M,d);d.parentNode.removeChild(d);}
-this.elements.splice(O,1,M);}return this;}});Roo.CompositeElementLite.prototype.on=Roo.CompositeElementLite.prototype.addListener;
-Roo.data.Connection=function(A){Roo.apply(this,A);this.addEvents({"beforerequest":true,"requestcomplete":true,"requestexception":true});Roo.data.Connection.superclass.constructor.call(this);};Roo.extend(Roo.data.Connection,Roo.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,request:function(o){if(this.fireEvent("beforerequest",this,o)!==false){var p=o.params;if(typeof p=="function"){p=p.call(o.scope||window,o);}if(typeof p=="object"){p=Roo.urlEncode(o.params);}if(this.extraParams){var extras=Roo.urlEncode(this.extraParams);p=p?(p+'&'+extras):extras;}var url=o.url||this.url;if(typeof url=='function'){url=url.call(o.scope||window,o);}if(o.form){var form=Roo.getDom(o.form);url=url||form.action;var enctype=form.getAttribute("enctype");if(o.isUpload||(enctype&&enctype.toLowerCase()=='multipart/form-data')){return this.doFormUpload(o,p,url);}var f=Roo.lib.Ajax.serializeForm(form);p=p?(p+'&'+f):f;}var hs=o.headers;if(this.defaultHeaders){hs=Roo.apply(hs||{},this.defaultHeaders);if(!o.headers){o.headers=hs;}}var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:o},timeout:this.timeout};var method=o.method||this.method||(p?"POST":"GET");if(method=='GET'&&(this.disableCaching&&o.disableCaching!==false)||o.disableCaching===true){url+=(url.indexOf('?')!=-1?'&':'?')+'_dc='+(new Date().getTime());}if(typeof o.autoAbort=='boolean'){if(o.autoAbort){this.abort();}}else if(this.autoAbort!==false){this.abort();}if((method=='GET'&&p)||o.xmlData){url+=(url.indexOf('?')!=-1?'&':'?')+p;p='';}
-this.transId=Roo.lib.Ajax.request(method,url,cb,p,o);return this.transId;}else {Roo.callback(o.callback,o.scope,[o,null,null]);return null;}},isLoading:function(B){if(B){return Roo.lib.Ajax.isCallInProgress(B);}else {return this.transId?true:false;}},abort:function(C){if(C||this.isLoading()){Roo.lib.Ajax.abort(C||this.transId);}},handleResponse:function(D){this.transId=false;var E=D.argument.options;D.argument=E?E.argument:null;this.fireEvent("requestcomplete",this,D,E);Roo.callback(E.success,E.scope,[D,E]);Roo.callback(E.callback,E.scope,[E,true,D]);},handleFailure:function(F,e){this.transId=false;var G=F.argument.options;F.argument=G?G.argument:null;this.fireEvent("requestexception",this,F,G,e);Roo.callback(G.failure,G.scope,[F,G]);Roo.callback(G.callback,G.scope,[G,false,F]);},doFormUpload:function(o,ps,H){var id=Roo.id();var I=document.createElement('iframe');I.id=id;I.name=id;I.className='x-hidden';if(Roo.isIE){I.src=Roo.SSL_SECURE_URL;}
-document.body.appendChild(I);if(Roo.isIE){document.frames[id].name=id;}var J=Roo.getDom(o.form);J.target=id;J.method='POST';J.enctype=J.encoding='multipart/form-data';if(H){J.action=H;}var K,hd;if(ps){K=[];ps=Roo.urlDecode(ps,false);for(var k in ps){if(ps.hasOwnProperty(k)){hd=document.createElement('input');hd.type='hidden';hd.name=k;hd.value=ps[k];J.appendChild(hd);K.push(hd);}}}function cb(){var r={responseText:'',responseXML:null};r.argument=o?o.argument:null;try{var doc;if(Roo.isIE){doc=I.contentWindow.document;}else {doc=(I.contentDocument||window.frames[id].document);}if(doc&&doc.body){r.responseText=doc.body.innerHTML;}if(doc&&doc.XMLDocument){r.responseXML=doc.XMLDocument;}else {r.responseXML=doc;}}catch(e){}
-Roo.EventManager.removeListener(I,'load',cb,this);this.fireEvent("requestcomplete",this,r,o);Roo.callback(o.success,o.scope,[r,o]);Roo.callback(o.callback,o.scope,[o,true,r]);setTimeout(function(){document.body.removeChild(I);},100);}
-Roo.EventManager.on(I,'load',cb,this);J.submit();if(K){for(var i=0,len=K.length;i<len;i++){J.removeChild(K[i]);}}}});Roo.Ajax=new Roo.data.Connection({autoAbort:false,serializeForm:function(L){return Roo.lib.Ajax.serializeForm(L);}});
-Roo.Ajax=new Roo.data.Connection({autoAbort:false,serializeForm:function(A){return Roo.lib.Ajax.serializeForm(A);}});
-Roo.UpdateManager=function(el,A){el=Roo.get(el);if(!A&&el.updateManager){return el.updateManager;}
-this.el=el;this.defaultUrl=null;this.addEvents({"beforeupdate":true,"update":true,"failure":true});var d=Roo.UpdateManager.defaults;this.sslBlankUrl=d.sslBlankUrl;this.disableCaching=d.disableCaching;this.indicatorText=d.indicatorText;this.showLoadIndicator=d.showLoadIndicator;this.timeout=d.timeout;this.loadScripts=d.loadScripts;this.transaction=null;this.autoRefreshProcId=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);this.successDelegate=this.processSuccess.createDelegate(this);this.failureDelegate=this.processFailure.createDelegate(this);if(!this.renderer){this.renderer=new Roo.UpdateManager.BasicRenderer();}
-Roo.UpdateManager.superclass.constructor.call(this);};Roo.extend(Roo.UpdateManager,Roo.util.Observable,{getEl:function(){return this.el;},update:function(B,C,D,E){if(this.fireEvent("beforeupdate",this.el,B,C)!==false){var method=this.method,cfg;if(typeof B=="object"){cfg=B;B=cfg.url;C=C||cfg.params;D=D||cfg.callback;E=E||cfg.discardUrl;if(D&&cfg.scope){D=D.createDelegate(cfg.scope);}if(typeof cfg.method!="undefined"){method=cfg.method;};if(typeof cfg.nocache!="undefined"){this.disableCaching=cfg.nocache;};if(typeof cfg.text!="undefined"){this.indicatorText='<div class="loading-indicator">'+cfg.text+"</div>";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};}
-this.showLoading();if(!E){this.defaultUrl=B;}if(typeof B=="function"){B=B.call(this);}
-method=method||(C?"POST":"GET");if(method=="GET"){B=this.prepareUrl(B);}var o=Roo.apply(cfg||{},{url:B,params:C,success:this.successDelegate,failure:this.failureDelegate,callback:undefined,timeout:(this.timeout*1000),argument:{"url":B,"form":null,"callback":D,"params":C}});this.transaction=Roo.Ajax.request(o);}},formUpdate:function(F,G,H,I){if(this.fireEvent("beforeupdate",this.el,F,G)!==false){if(typeof G=="function"){G=G.call(this);}
-F=Roo.getDom(F);this.transaction=Roo.Ajax.request({form:F,url:G,success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":G,"form":F,"callback":I,"reset":H}});this.showLoading.defer(1,this);}},refresh:function(J){if(this.defaultUrl==null){return;}
-this.update(this.defaultUrl,null,J,true);},startAutoRefresh:function(K,L,M,N,O){if(O){this.update(L||this.defaultUrl,M,N,true);}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);}
-this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[L||this.defaultUrl,M,N,true]),K*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},prepareUrl:function(P){if(this.disableCaching){var append="_dc="+(new Date().getTime());if(P.indexOf("?")!==-1){P+="&"+append;}else {P+="?"+append;}}return P;},processSuccess:function(Q){this.transaction=null;if(Q.argument.form&&Q.argument.reset){try{Q.argument.form.reset();}catch(e){}}if(this.loadScripts){this.renderer.render(this.el,Q,this,this.updateComplete.createDelegate(this,[Q]));}else {this.renderer.render(this.el,Q,this);this.updateComplete(Q);}},updateComplete:function(R){this.fireEvent("update",this.el,R);if(typeof R.argument.callback=="function"){R.argument.callback(this.el,true,R);}},processFailure:function(S){this.transaction=null;this.fireEvent("failure",this.el,S);if(typeof S.argument.callback=="function"){S.argument.callback(this.el,false,S);}},setRenderer:function(T){this.renderer=T;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(U){this.defaultUrl=U;},abort:function(){if(this.transaction){Roo.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Roo.Ajax.isLoading(this.transaction);}return false;}});Roo.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Roo.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>'};Roo.UpdateManager.updateElement=function(el,V,W,X){var um=Roo.get(el,true).getUpdateManager();Roo.apply(um,X);um.update(V,W,X?X.callback:null);};Roo.UpdateManager.update=Roo.UpdateManager.updateElement;Roo.UpdateManager.BasicRenderer=function(){};Roo.UpdateManager.BasicRenderer.prototype={render:function(el,Y,Z,a){el.update(Y.responseText,Z.loadScripts,a);}};
-Roo.util.DelayedTask=function(fn,A,B){var id=null,d,t;var C=function(){var D=new Date().getTime();if(D-t>=d){clearInterval(id);id=null;fn.apply(A,B||[]);}};this.delay=function(D,E,F,G){if(id&&D!=d){this.cancel();}
-d=D;t=new Date().getTime();fn=E||fn;A=F||A;B=G||B;if(!id){id=setInterval(C,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
-Roo.util.TaskRunner=function(A){A=A||10;var B=[],C=[];var id=0;var D=false;var E=function(){D=false;clearInterval(id);id=0;};var F=function(){if(!D){D=true;id=setInterval(H,A);}};var G=function(I){C.push(I);if(I.onStop){I.onStop();}};var H=function(){if(C.length>0){for(var i=0,len=C.length;i<len;i++){B.remove(C[i]);}
-C=[];if(B.length<1){E();return;}}var I=new Date().getTime();for(var i=0,len=B.length;i<len;++i){var t=B[i];var itime=I-t.taskRunTime;if(t.interval<=itime){var rt=t.run.apply(t.scope||t,t.args||[++t.taskRunCount]);t.taskRunTime=I;if(rt===false||t.taskRunCount===t.repeat){G(t);return;}}if(t.duration&&t.duration<=(I-t.taskStartTime)){G(t);}}};this.start=function(I){B.push(I);I.taskStartTime=new Date().getTime();I.taskRunTime=0;I.taskRunCount=0;F();return I;};this.stop=function(I){G(I);return I;};this.stopAll=function(){E();for(var i=0,len=B.length;i<len;i++){if(B[i].onStop){B[i].onStop();}}
-B=[];C=[];};};Roo.TaskMgr=new Roo.util.TaskRunner();
-Roo.util.MixedCollection=function(A,B){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents({"clear":true,"add":true,"replace":true,"remove":true,"sort":true});this.allowFunctions=A===true;if(B){this.getKey=B;}
-Roo.util.MixedCollection.superclass.constructor.call(this);};Roo.extend(Roo.util.MixedCollection,Roo.util.Observable,{allowFunctions:false,add:function(C,o){if(arguments.length==1){o=arguments[0];C=this.getKey(o);}if(typeof C=="undefined"||C===null){this.length++;this.items.push(o);this.keys.push(null);}else {var old=this.map[C];if(old){return this.replace(C,o);}
-this.length++;this.items.push(o);this.map[C]=o;this.keys.push(C);}
-this.fireEvent("add",this.length-1,o,C);return o;},getKey:function(o){return o.id;},replace:function(D,o){if(arguments.length==1){o=arguments[0];D=this.getKey(o);}var E=this.item(D);if(typeof D=="undefined"||D===null||typeof E=="undefined"){return this.add(D,o);}var F=this.indexOfKey(D);this.items[F]=o;this.map[D]=o;this.fireEvent("replace",D,E,o);return o;},addAll:function(G){if(arguments.length>1||G instanceof Array){var args=arguments.length>1?arguments:G;for(var i=0,len=args.length;i<len;i++){this.add(args[i]);}}else {for(var D in G){if(this.allowFunctions||typeof G[D]!="function"){this.add(D,G[D]);}}}},each:function(fn,H){var I=[].concat(this.items);for(var i=0,len=I.length;i<len;i++){if(fn.call(H||I[i],I[i],i,len)===false){break;}}},eachKey:function(fn,J){for(var i=0,len=this.keys.length;i<len;i++){fn.call(J||window,this.keys[i],this.items[i],i,len);}},find:function(fn,K){for(var i=0,len=this.items.length;i<len;i++){if(fn.call(K||window,this.items[i],this.keys[i])){return this.items[i];}}return null;},insert:function(L,M,o){if(arguments.length==2){o=arguments[1];M=this.getKey(o);}if(L>=this.length){return this.add(M,o);}
-this.length++;this.items.splice(L,0,o);if(typeof M!="undefined"&&M!=null){this.map[M]=o;}
-this.keys.splice(L,0,M);this.fireEvent("add",L,o,M);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(N){if(N<this.length&&N>=0){this.length--;var o=this.items[N];this.items.splice(N,1);var M=this.keys[N];if(typeof M!="undefined"){delete this.map[M];}
-this.keys.splice(N,1);this.fireEvent("remove",o,M);}},removeKey:function(O){return this.removeAt(this.indexOfKey(O));},getCount:function(){return this.length;},indexOf:function(o){if(!this.items.indexOf){for(var i=0,len=this.items.length;i<len;i++){if(this.items[i]==o)return i;}return -1;}else {return this.items.indexOf(o);}},indexOfKey:function(P){if(!this.keys.indexOf){for(var i=0,len=this.keys.length;i<len;i++){if(this.keys[i]==P)return i;}return -1;}else {return this.keys.indexOf(P);}},item:function(Q){var R=typeof this.map[Q]!="undefined"?this.map[Q]:this.items[Q];return typeof R!='function'||this.allowFunctions?R:null;},itemAt:function(S){return this.items[S];},key:function(T){return this.map[T];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(U){return typeof this.map[U]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(V,W,fn){var X=String(W).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,Y=this.items;for(var i=0,len=Y.length;i<len;i++){c[c.length]={key:k[i],value:Y[i],index:i};}
-c.sort(function(a,b){var v=fn(a[V],b[V])*X;if(v==0){v=(a.index<b.index?-1:1);}return v;});for(var i=0,len=c.length;i<len;i++){Y[i]=c[i].value;k[i]=c[i].key;}
-this.fireEvent("sort",this);},sort:function(Z,fn){this._sort("value",Z,fn);},keySort:function(a,fn){this._sort("key",a,fn||function(a,b){return String(a).toUpperCase()-String(b).toUpperCase();});},getRange:function(b,d){var e=this.items;if(e.length<1){return [];}
-b=b||0;d=Math.min(typeof d=="undefined"?this.length-1:d,this.length-1);var r=[];if(b<=d){for(var i=b;i<=d;i++){r[r.length]=e[i];}}else {for(var i=b;i>=d;i--){r[r.length]=e[i];}}return r;},filter:function(f,g){if(!g.exec){g=String(g);if(g.length==0){return this.clone();}
-g=new RegExp("^"+Roo.escapeRe(g),"i");}return this.filterBy(function(o){return o&&g.test(o[f]);});},filterBy:function(fn,h){var r=new Roo.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){if(fn.call(h||this,it[i],k[i])){r.add(k[i],it[i]);}}return r;},clone:function(){var r=new Roo.util.MixedCollection();var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){r.add(k[i],it[i]);}
-r.getKey=this.getKey;return r;}});Roo.util.MixedCollection.prototype.get=Roo.util.MixedCollection.prototype.item;
-Roo.util.JSON=new (function(){var useHasOwn={}.hasOwnProperty?true:false;var pad=function(n){return n<10?"0"+n:n;};var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return '"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return "\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}return '"'+s+'"';};var encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(',');}
-a.push(v===null?"null":Roo.util.JSON.encode(v));b=true;}}
-a.push("]");return a.join("");};var encodeDate=function(o){return '"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"';};this.encode=function(o){if(typeof o=="undefined"||o===null){return "null";}else if(o instanceof Array){return encodeArray(o);}else if(o instanceof Date){return encodeDate(o);}else if(typeof o=="string"){return encodeString(o);}else if(typeof o=="number"){return isFinite(o)?String(o):"null";}else if(typeof o=="boolean"){return String(o);}else {var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(',');}
-a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}
-a.push("}");return a.join("");}};this.decode=function(json){return eval("("+json+')');};})();Roo.encode=Roo.util.JSON.encode;Roo.decode=Roo.util.JSON.decode;
-Roo.util.Format=function(){var A=/^\s+|\s+$/g;return {ellipsis:function(R,S){if(R&&R.length>S){return R.substr(0,S-3)+"...";}return R;},undef:function(T){return typeof T!="undefined"?T:"";},htmlEncode:function(U){return !U?U:String(U).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");},htmlDecode:function(V){return !V?V:String(V).replace(/&amp;/g,"&").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"');},trim:function(W){return String(W).replace(A,"");},substr:function(X,Y,Z){return String(X).substr(Y,Z);},lowercase:function(a){return String(a).toLowerCase();},uppercase:function(b){return String(b).toUpperCase();},capitalize:function(c){return !c?c:c.charAt(0).toUpperCase()+c.substr(1).toLowerCase();},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args);}else {return eval(fn).call(window,value);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split('.');var d=ps[0];var e=ps[1]?'.'+ps[1]:'.00';var r=/(\d+)(\d{3})/;while(r.test(d)){d=d.replace(r,'$1'+','+'$2');}return "$"+d+e;},date:function(v,f){if(!v){return "";}if(!(v instanceof Date)){v=new Date(Date.parse(v));}return v.dateFormat(f||"m/d/Y");},dateRenderer:function(g){return function(v){return Roo.util.Format.date(v,g);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return !v?v:String(v).replace(this.stripTagsRE,"");}};}();
-Roo.MasterTemplate=function(){Roo.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var st={};var m,re=this.subTemplateRe;re.lastIndex=0;var A=0;while(m=re.exec(this.html)){var name=m[1],content=m[2];st[A]={name:name,index:A,buffer:[],tpl:new Roo.Template(content)};if(name){st[name]=st[A];}
-st[A].tpl.compile();st[A].tpl.call=this.call.createDelegate(this);A++;}
-this.subCount=A;this.subs=st;};Roo.extend(Roo.MasterTemplate,Roo.Template,{subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(B,C){if(arguments.length==1){C=arguments[0];B=0;}var s=this.subs[B];s.buffer[s.buffer.length]=s.tpl.apply(C);return this;},fill:function(D,E,F){var a=arguments;if(a.length==1||(a.length==2&&typeof a[1]=="boolean")){E=a[0];D=0;F=a[1];}if(F){this.reset();}for(var i=0,len=E.length;i<len;i++){this.add(D,E[i]);}return this;},reset:function(){var s=this.subs;for(var i=0;i<this.subCount;i++){s[i].buffer=[];}return this;},applyTemplate:function(G){var s=this.subs;var H=-1;this.html=this.originalHtml.replace(this.subTemplateRe,function(m,I){return s[++H].buffer.join("");});return Roo.MasterTemplate.superclass.applyTemplate.call(this,G);},apply:function(){return this.applyTemplate.apply(this,arguments);},compile:function(){return this;}});Roo.MasterTemplate.prototype.addAll=Roo.MasterTemplate.prototype.fill;Roo.MasterTemplate.from=function(el,I){el=Roo.getDom(el);return new Roo.MasterTemplate(el.value||el.innerHTML,I||'');};
-Roo.util.CSS=function(){var A=null;var B=document;var C=/(-[a-z])/gi;var D=function(m,a){return a.charAt(1).toUpperCase();};return {createStyleSheet:function(P,id){var ss;var Q=B.getElementsByTagName("head")[0];var R=B.createElement("style");R.setAttribute("type","text/css");if(id){R.setAttribute("id",id);}if(Roo.isIE){Q.appendChild(R);ss=R.styleSheet;ss.cssText=P;}else {try{R.appendChild(B.createTextNode(P));}catch(e){R.cssText=P;}
-Q.appendChild(R);ss=R.styleSheet?R.styleSheet:(R.sheet||B.styleSheets[B.styleSheets.length-1]);}
-this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){var S=B.getElementById(id);if(S){S.parentNode.removeChild(S);}},swapStyleSheet:function(id,T){this.removeStyleSheet(id);var ss=B.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",T);B.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(!R){R={};}try{var ssRules=ss.cssRules||ss.rules;for(var j=ssRules.length-1;j>=0;--j){R[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(U){if(R==null||U){R={};var ds=B.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}return R;},getRule:function(V,W){var rs=this.getRules(W);if(!(V instanceof Array)){return rs[V];}for(var i=0;i<V.length;i++){if(rs[V[i]]){return rs[V[i]];}}return null;},updateRule:function(X,Y,Z){if(!(X instanceof Array)){var rule=this.getRule(X);if(rule){rule.style[Y.replace(C,D)]=Z;return true;}}else {for(var i=0;i<X.length;i++){if(this.updateRule(X[i],Y,Z)){return true;}}}return false;}};}();
-Roo.util.ClickRepeater=function(el,A){this.el=Roo.get(el);this.el.unselectable();Roo.apply(this,A);this.addEvents({"mousedown":true,"click":true,"mouseup":true});this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}if(this.stopDefault){e.stopEvent();}},this);}if(this.handler){this.on("click",this.handler,this.scope||this);}
-Roo.util.ClickRepeater.superclass.constructor.call(this);};Roo.extend(Roo.util.ClickRepeater,Roo.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
-this.mousedownTime=new Date();Roo.get(document).on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.getInterval(),this);},getInterval:function(){if(!this.accelerate){return this.interval;}var B=this.mousedownTime.getElapsed();if(B<500){return 400;}else if(B<1700){return 320;}else if(B<2600){return 250;}else if(B<3500){return 180;}else if(B<4400){return 140;}else if(B<5300){return 80;}else if(B<6200){return 50;}else {return 10;}},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
-this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn);if(this.pressClass){this.el.addClass(this.pressClass);}
-this.click();},handleMouseUp:function(){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn);this.el.un("mouseout",this.handleMouseOut);Roo.get(document).un("mouseup",this.handleMouseUp);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this);}});
-Roo.KeyNav=function(el,A){this.el=Roo.get(el);Roo.apply(this,A);if(!this.disabled){this.disabled=true;this.enable();}};Roo.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",forceKeyDown:false,prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Roo.isSafari&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,B){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(this.forceKeyDown||Roo.isIE||Roo.isAir){this.el.on("keydown",this.relay,this);}else {this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}
-this.disabled=false;}},disable:function(){if(!this.disabled){if(this.forceKeyDown||Roo.isIE||Roo.isAir){this.el.un("keydown",this.relay);}else {this.el.un("keydown",this.prepareEvent);this.el.un("keypress",this.relay);}
-this.disabled=true;}}};
-Roo.KeyMap=function(el,A,B){this.el=Roo.get(el);this.eventName=B||"keydown";this.bindings=[];if(A){this.addBinding(A);}
-this.enable();};Roo.KeyMap.prototype={stopEvent:false,addBinding:function(C){if(C instanceof Array){for(var i=0,len=C.length;i<len;i++){this.addBinding(C[i]);}return;}var D=C.key,E=C.shift,F=C.ctrl,G=C.alt,fn=C.fn,H=C.scope;if(typeof D=="string"){var ks=[];var keyString=D.toUpperCase();for(var j=0,len=keyString.length;j<len;j++){ks.push(keyString.charCodeAt(j));}
-D=ks;}var I=D instanceof Array;var J=function(e){if((!E||e.shiftKey)&&(!F||e.ctrlKey)&&(!G||e.altKey)){var k=e.getKey();if(I){for(var i=0,len=D.length;i<len;i++){if(D[i]==k){if(this.stopEvent){e.stopEvent();}
-fn.call(H||window,k,e);return;}}}else {if(k==D){if(this.stopEvent){e.stopEvent();}
-fn.call(H||window,k,e);}}}};this.bindings.push(J);},on:function(K,fn,L){var M,N,O,P;if(typeof K=="object"&&!(K instanceof Array)){M=K.key;N=K.shift;O=K.ctrl;P=K.alt;}else {M=K;}
-this.addBinding({key:M,shift:N,ctrl:O,alt:P,fn:fn,scope:L})},handleKeyDown:function(e){if(this.enabled){var b=this.bindings;for(var i=0,len=b.length;i<len;i++){b[i].call(this,e);}}},isEnabled:function(){return this.enabled;},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.handleKeyDown,this);this.enabled=true;}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.handleKeyDown,this);this.enabled=false;}}};
-Roo.util.TextMetrics=function(){var A;return {measure:function(el,E,F){if(!A){A=Roo.util.TextMetrics.Instance(el,F);}
-A.bind(el);A.setFixedWidth(F||'auto');return A.getSize(E);},createInstance:function(el,G){return Roo.util.TextMetrics.Instance(el,G);}};}();Roo.util.TextMetrics.Instance=function(B,C){var ml=new Roo.Element(document.createElement('div'));document.body.appendChild(ml.dom);ml.position('absolute');ml.setLeftTop(-1000,-1000);ml.hide();if(C){ml.setWidth(C);}var D={getSize:function(E){ml.update(E);var s=ml.getSize();ml.update('');return s;},bind:function(el){ml.setStyle(Roo.fly(el).getStyles('font-size','font-style','font-weight','font-family','line-height'));},setFixedWidth:function(F){ml.setWidth(F);},getWidth:function(G){ml.dom.style.width='auto';return this.getSize(G).width;},getHeight:function(H){return this.getSize(H).height;}};D.bind(B);return D;};Roo.Element.measureText=Roo.util.TextMetrics.measure;
-Roo.state.Provider=function(){this.addEvents({"statechange":true});this.state={};Roo.state.Provider.superclass.constructor.call(this);};Roo.extend(Roo.state.Provider,Roo.util.Observable,{get:function(A,B){return typeof this.state[A]=="undefined"?B:this.state[A];},clear:function(C){delete this.state[C];this.fireEvent("statechange",this,C,null);},set:function(D,E){this.state[D]=E;this.fireEvent("statechange",this,D,E);},decodeValue:function(F){var re=/^(a|n|d|b|s|o)\:(.*)$/;var G=re.exec(unescape(F));if(!G||!G[1])return;var H=G[1];var v=G[2];switch(H){case "n":return parseFloat(v);case "d":return new Date(Date.parse(v));case "b":return (v=="1");case "a":var all=[];var values=v.split("^");for(var i=0,len=values.length;i<len;i++){all.push(this.decodeValue(values[i]));}return all;case "o":var all={};var values=v.split("^");for(var i=0,len=values.length;i<len;i++){var kv=values[i].split("=");all[kv[0]]=this.decodeValue(kv[1]);}return all;default:return v;}},encodeValue:function(v){var I;if(typeof v=="number"){I="n:"+v;}else if(typeof v=="boolean"){I="b:"+(v?"1":"0");}else if(v instanceof Date){I="d:"+v.toGMTString();}else if(v instanceof Array){var flat="";for(var i=0,len=v.length;i<len;i++){flat+=this.encodeValue(v[i]);if(i!=len-1)flat+="^";}
-I="a:"+flat;}else if(typeof v=="object"){var flat="";for(var key in v){if(typeof v[key]!="function"){flat+=key+"="+this.encodeValue(v[key])+"^";}}
-I="o:"+flat.substring(0,flat.length-1);}else {I="s:"+v;}return escape(I);}});
-Roo.state.Manager=function(){var A=new Roo.state.Provider();return {setProvider:function(H){A=H;},get:function(I,J){return A.get(I,J);},set:function(K,L){A.set(K,L);},clear:function(M){A.clear(M);},getProvider:function(){return A;}};}();
-Roo.state.CookieProvider=function(A){Roo.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Roo.apply(this,A);this.state=this.readCookies();};Roo.extend(Roo.state.CookieProvider,Roo.state.Provider,{set:function(B,C){if(typeof C=="undefined"||C===null){this.clear(B);return;}
-this.setCookie(B,C);Roo.state.CookieProvider.superclass.set.call(this,B,C);},clear:function(D){this.clearCookie(D);Roo.state.CookieProvider.superclass.clear.call(this,D);},readCookies:function(){var E={};var c=document.cookie+";";var re=/\s?(.*?)=(.*?);/g;var F;while((F=re.exec(c))!=null){var D=F[1];var C=F[2];if(D&&D.substring(0,3)=="ys-"){E[D.substr(3)]=this.decodeValue(C);}}return E;},setCookie:function(G,H){document.cookie="ys-"+G+"="+this.encodeValue(H)+((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");},clearCookie:function(I){document.cookie="ys-"+I+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");}});
+
+
+
+
+
+
+
+window["undefined"] = window["undefined"];
+
+
+
+var  Roo = {}; 
+
+
+
+Roo.apply = function(o, c, A){
+    if(A){
+        
+        Roo.apply(o, A);
+    }
+    if(o && c && typeof  c == 'object'){
+        for(var  p  in  c){
+            o[p] = c[p];
+        }
+    }
+    return  o;
+};
+
+
+(function(){
+    var  B = 0;
+    var  ua = navigator.userAgent.toLowerCase();
+
+    var  C = document.compatMode == "CSS1Compat",
+        D = ua.indexOf("opera") > -1,
+        E = (/webkit|khtml/).test(ua),
+        F = ua.indexOf("msie") > -1,
+        G = ua.indexOf("msie 7") > -1,
+        H = !E && ua.indexOf("gecko") > -1,
+        I = F && !C,
+        J = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),
+        K = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),
+        L = (ua.indexOf("linux") != -1),
+        M = window.location.href.toLowerCase().indexOf("https") === 0;
+
+    
+       if(F && !G){
+        try{
+            document.execCommand("BackgroundImageCache", false, true);
+        }catch(e){}
+    }
+
+
+    Roo.apply(Roo, {
+        
+
+        isStrict : C,
+        
+
+        isSecure : M,
+        
+
+        isReady : false,
+        
+
+        
+        debug: false,
+
+        
+
+        enableGarbageCollector : true,
+
+        
+
+        enableListenerCollection:false,
+
+        
+
+        SSL_SECURE_URL : "javascript:false",
+
+        
+
+        BLANK_IMAGE_URL : "http:/"+"/localhost/s.gif",
+
+        emptyFn : function(){},
+
+        
+
+        applyIf : function(o, c){
+            if(o && c){
+                for(var  p  in  c){
+                    if(typeof  o[p] == "undefined"){ o[p] = c[p]; }
+                }
+            }
+            return  o;
+        },
+
+        
+
+        addBehaviors : function(o){
+            if(!Roo.isReady){
+                Roo.onReady(function(){
+                    Roo.addBehaviors(o);
+                });
+                return;
+            }
+            var  N = {}; 
+            for(var  b  in  o){
+                var  parts = b.split('@');
+                if(parts[1]){ 
+                    var  s = parts[0];
+                    if(!N[s]){
+                        N[s] = Roo.select(s);
+                    }
+
+                    N[s].on(parts[1], o[b]);
+                }
+            }
+
+            N = null;
+        },
+
+        
+
+        id : function(el, O){
+            O = O || "roo-gen";
+            el = Roo.getDom(el);
+            var  id = O + (++B);
+            return  el ? (el.id ? el.id : (el.id = id)) : id;
+        },
+         
+       
+        
+
+        extend : function(){
+            
+            var  io = function(o){
+                for(var  m  in  o){
+                    this[m] = o[m];
+                }
+            };
+            return  function(sb, sp, P){
+                if(typeof  sp == 'object'){ 
+                    P = sp;
+                    sp = sb;
+                    sb = function(){sp.apply(this, arguments);};
+                }
+                var  F = function(){}, sbp, spp = sp.prototype;
+                F.prototype = spp;
+                sbp = sb.prototype = new  F();
+                sbp.constructor=sb;
+                sb.superclass=spp;
+                
+                if(spp.constructor == Object.prototype.constructor){
+                    spp.constructor=sp;
+                   
+                }
+
+                
+                sb.override = function(o){
+                    Roo.override(sb, o);
+                };
+                sbp.override = io;
+                Roo.override(sb, P);
+                return  sb;
+            };
+        }(),
+
+        
+
+        override : function(P, Q){
+            if(Q){
+                var  p = P.prototype;
+                for(var  method  in  Q){
+                    p[method] = Q[method];
+                }
+            }
+        },
+        
+
+        namespace : function(){
+            var  a=arguments, o=null, i, j, d, rt;
+            for (i=0; i<a.length; ++i) {
+                d=a[i].split(".");
+                rt = d[0];
+                
+
+                eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
+                for (j=1; j<d.length; ++j) {
+                    o[d[j]]=o[d[j]] || {};
+                    o=o[d[j]];
+                }
+            }
+        },
+        
+
+         
+        factory : function(c, ns)
+        {
+            
+            if (!c.xtype   || (!ns && !c.xns) ||  (c.xns === false)) { 
+                return  c;
+            }
+
+            ns = c.xns ? c.xns : ns; 
+            if (c.constructor == ns[c.xtype]) {
+                return  c;
+            }
+            if (ns[c.xtype]) {
+                if (Roo.debug) Roo.log("Roo.Factory(" + c.xtype + ")");
+                var  ret = new  ns[c.xtype](c);
+                ret.xns = false;
+                return  ret;
+            }
+
+            c.xns = false; 
+            return  c;
+        },
+         
+
+        log : function(s)
+        {
+            if ((typeof(console) == 'undefined') || (typeof(console.log) == 'undefined')) {
+                return; 
+            }
+
+            console.log(s);
+            
+        },
+        
+
+        urlEncode : function(o){
+            if(!o){
+                return  "";
+            }
+            var  R = [];
+            for(var  key  in  o){
+                var  ov = o[key], k = encodeURIComponent(key);
+                var  type = typeof  ov;
+                if(type == 'undefined'){
+                    R.push(k, "=&");
+                }else  if(type != "function" && type != "object"){
+                    R.push(k, "=", encodeURIComponent(ov), "&");
+                }else  if(ov  instanceof  Array){
+                    if (ov.length) {
+                           for(var  i = 0, len = ov.length; i < len; i++) {
+                               R.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&");
+                           }
+                       } else  {
+                           R.push(k, "=&");
+                       }
+                }
+            }
+
+            R.pop();
+            return  R.join("");
+        },
+
+        
+
+        urlDecode : function(S, T){
+            if(!S || !S.length){
+                return  {};
+            }
+            var  U = {};
+            var  V = S.split('&');
+            var  W, X, Y;
+            for(var  i = 0, len = V.length; i < len; i++){
+                W = V[i].split('=');
+                X = decodeURIComponent(W[0]);
+                Y = decodeURIComponent(W[1]);
+                if(T !== true){
+                    if(typeof  U[X] == "undefined"){
+                        U[X] = Y;
+                    }else  if(typeof  U[X] == "string"){
+                        U[X] = [U[X]];
+                        U[X].push(Y);
+                    }else {
+                        U[X].push(Y);
+                    }
+                }else {
+                    U[X] = Y;
+                }
+            }
+            return  U;
+        },
+
+        
+
+        each : function(Z, fn, f){
+            if(typeof  Z.length == "undefined" || typeof  Z == "string"){
+                Z = [Z];
+            }
+            for(var  i = 0, len = Z.length; i < len; i++){
+                if(fn.call(f || Z[i], Z[i], i, Z) === false){ return  i; };
+            }
+        },
+
+        
+        combine : function(){
+            var  as = arguments, l = as.length, r = [];
+            for(var  i = 0; i < l; i++){
+                var  a = as[i];
+                if(a  instanceof  Array){
+                    r = r.concat(a);
+                }else  if(a.length !== undefined && !a.substr){
+                    r = r.concat(Array.prototype.slice.call(a, 0));
+                }else {
+                    r.push(a);
+                }
+            }
+            return  r;
+        },
+
+        
+
+        escapeRe : function(s) {
+            return  s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1");
+        },
+
+        
+        callback : function(cb, g, h, n){
+            if(typeof  cb == "function"){
+                if(n){
+                    cb.defer(n, g, h || []);
+                }else {
+                    cb.apply(g, h || []);
+                }
+            }
+        },
+
+        
+
+        getDom : function(el){
+            if(!el){
+                return  null;
+            }
+            return  el.dom ? el.dom : (typeof  el == 'string' ? document.getElementById(el) : el);
+        },
+
+        
+
+        getCmp : function(id){
+            return  Roo.ComponentMgr.get(id);
+        },
+         
+        num : function(v, q){
+            if(typeof  v != 'number'){
+                return  q;
+            }
+            return  v;
+        },
+
+        destroy : function(){
+            for(var  i = 0, a = arguments, len = a.length; i < len; i++) {
+                var  as = a[i];
+                if(as){
+                    if(as.dom){
+                        as.removeAllListeners();
+                        as.remove();
+                        continue;
+                    }
+                    if(typeof  as.purgeListeners == 'function'){
+                        as.purgeListeners();
+                    }
+                    if(typeof  as.destroy == 'function'){
+                        as.destroy();
+                    }
+                }
+            }
+        },
+
+        
+        
+
+        type : function(o){
+            if(o === undefined || o === null){
+                return  false;
+            }
+            if(o.htmlElement){
+                return  'element';
+            }
+            var  t = typeof  o;
+            if(t == 'object' && o.nodeName) {
+                switch(o.nodeType) {
+                    case  1: return  'element';
+                    case  3: return  (/\S/).test(o.nodeValue) ? 'textnode' : 'whitespace';
+                }
+            }
+            if(t == 'object' || t == 'function') {
+                switch(o.constructor) {
+                    case  Array: return  'array';
+                    case  RegExp: return  'regexp';
+                }
+                if(typeof  o.length == 'number' && typeof  o.item == 'function') {
+                    return  'nodelist';
+                }
+            }
+            return  t;
+        },
+
+        
+
+        isEmpty : function(v, u){
+            return  v === null || v === undefined || (!u ? v === '' : false);
+        },
+        
+        
+
+        isOpera : D,
+        
+
+        isSafari : E,
+        
+
+        isIE : F,
+        
+
+        isIE7 : G,
+        
+
+        isGecko : H,
+        
+
+        isBorderBox : I,
+        
+
+        isWindows : J,
+        
+
+        isLinux : L,
+        
+
+        isMac : K,
+
+        
+
+        useShims : ((F && !G) || (H && K))
+    });
+
+
+})();
+
+Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
+                "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout", "Roo.app", "Roo.ux");
+
+
+
+
+(function() {    
+    
+    if(Roo.isIE) {
+        function  A() {
+            var  p = Function.prototype;
+            delete  p.createSequence;
+            delete  p.defer;
+            delete  p.createDelegate;
+            delete  p.createCallback;
+            delete  p.createInterceptor;
+
+            window.detachEvent("onunload", A);
+        }
+
+        window.attachEvent("onunload", A);
+    }
+})();
+
+
+
+
+Roo.apply(Function.prototype, {
+     
+
+    createCallback : function(
+){
+        
+        var  B = arguments;
+        var  C = this;
+        return  function() {
+            return  C.apply(window, B);
+        };
+    },
+
+    
+
+    createDelegate : function(D, E, F){
+        var  G = this;
+        return  function() {
+            var  H = E || arguments;
+            if(F === true){
+                H = Array.prototype.slice.call(arguments, 0);
+                H = H.concat(E);
+            }else  if(typeof  F == "number"){
+                H = Array.prototype.slice.call(arguments, 0); 
+                var  applyArgs = [F, 0].concat(E); 
+                Array.prototype.splice.apply(H, applyArgs); 
+            }
+            return  G.apply(D || window, H);
+        };
+    },
+
+    
+
+    defer : function(H, I, J, K){
+        var  fn = this.createDelegate(I, J, K);
+        if(H){
+            return  setTimeout(fn, H);
+        }
+
+        fn();
+        return  0;
+    },
+    
+
+    createSequence : function(L, M){
+        if(typeof  L != "function"){
+            return  this;
+        }
+        var  N = this;
+        return  function() {
+            var  O = N.apply(this || window, arguments);
+            L.apply(M || this || window, arguments);
+            return  O;
+        };
+    },
+
+    
+
+    createInterceptor : function(O, P){
+        if(typeof  O != "function"){
+            return  this;
+        }
+        var  Q = this;
+        return  function() {
+            O.target = this;
+            O.method = Q;
+            if(O.apply(P || this || window, arguments) === false){
+                return;
+            }
+            return  Q.apply(this || window, arguments);
+        };
+    }
+});
+
+
+
+
+Roo.applyIf(String, {
+    
+    
+
+    
+    
+
+    escape : function(A) {
+        return  A.replace(/('|\\)/g, "\\$1");
+    },
+
+    
+
+    leftPad : function (B, C, ch) {
+        var  D = new  String(B);
+        if(ch === null || ch === undefined || ch === '') {
+            ch = " ";
+        }
+        while (D.length < C) {
+            D = ch + D;
+        }
+        return  D;
+    },
+
+    
+
+    format : function(E){
+        var  F = Array.prototype.slice.call(arguments, 1);
+        return  E.replace(/\{(\d+)\}/g, function(m, i){
+            return  Roo.util.Format.htmlEncode(F[i]);
+        });
+    }
+});
+
+
+
+String.prototype.toggle = function(G, H){
+    return  this == G ? H : G;
+};
+
+
+
+
+Roo.applyIf(Number.prototype, {
+    
+
+    constrain : function(A, B){
+        return  Math.min(Math.max(this, A), B);
+    }
+});
+
+
+
+Roo.applyIf(Array.prototype, {
+    
+
+    indexOf : function(o){
+       for (var  i = 0, len = this.length; i < len; i++){
+             if(this[i] == o) return  i;
+       }
+          return  -1;
+    },
+
+    
+
+    remove : function(o){
+       var  A = this.indexOf(o);
+       if(A != -1){
+           this.splice(A, 1);
+       }
+    },
+    
+
+    map : function(B )
+    {
+        var  C = this.length >>> 0;
+        if (typeof  B != "function")
+            throw  new  TypeError();
+
+        var  D = new  Array(C);
+        var  E = arguments[1];
+        for (var  i = 0; i < C; i++)
+        {
+            if (i  in  this)
+                D[i] = B.call(E, this[i], i, this);
+        }
+
+        return  D;
+    }
+    
+});
+
+
+
+
+
+
+
+
+
+
+
+
+Date.prototype.getElapsed = function(A) {
+       return  Math.abs((A || new  Date()).getTime()-this.getTime());
+};
+
+
+
+
+Date.parseFunctions = {count:0};
+
+Date.parseRegexes = [];
+
+Date.formatFunctions = {count:0};
+
+
+Date.prototype.dateFormat = function(B) {
+    if (Date.formatFunctions[B] == null) {
+        Date.createNewFormat(B);
+    }
+    var  C = Date.formatFunctions[B];
+    return  this[C]();
+};
+
+
+
+
+Date.prototype.format = Date.prototype.dateFormat;
+
+
+Date.createNewFormat = function(D) {
+    var  E = "format" + Date.formatFunctions.count++;
+    Date.formatFunctions[D] = E;
+    var  F = "Date.prototype." + E + " = function(){return ";
+    var  G = false;
+    var  ch = '';
+    for (var  i = 0; i < D.length; ++i) {
+        ch = D.charAt(i);
+        if (!G && ch == "\\") {
+            G = true;
+        }
+        else  if (G) {
+            G = false;
+            F += "'" + String.escape(ch) + "' + ";
+        }
+        else  {
+            F += Date.getFormatCode(ch);
+        }
+    }
+    
+
+    eval(F.substring(0, F.length - 3) + ";}");
+};
+
+
+Date.getFormatCode = function(H) {
+    switch (H) {
+    case  "d":
+        return  "String.leftPad(this.getDate(), 2, '0') + ";
+    case  "D":
+        return  "Date.dayNames[this.getDay()].substring(0, 3) + ";
+    case  "j":
+        return  "this.getDate() + ";
+    case  "l":
+        return  "Date.dayNames[this.getDay()] + ";
+    case  "S":
+        return  "this.getSuffix() + ";
+    case  "w":
+        return  "this.getDay() + ";
+    case  "z":
+        return  "this.getDayOfYear() + ";
+    case  "W":
+        return  "this.getWeekOfYear() + ";
+    case  "F":
+        return  "Date.monthNames[this.getMonth()] + ";
+    case  "m":
+        return  "String.leftPad(this.getMonth() + 1, 2, '0') + ";
+    case  "M":
+        return  "Date.monthNames[this.getMonth()].substring(0, 3) + ";
+    case  "n":
+        return  "(this.getMonth() + 1) + ";
+    case  "t":
+        return  "this.getDaysInMonth() + ";
+    case  "L":
+        return  "(this.isLeapYear() ? 1 : 0) + ";
+    case  "Y":
+        return  "this.getFullYear() + ";
+    case  "y":
+        return  "('' + this.getFullYear()).substring(2, 4) + ";
+    case  "a":
+        return  "(this.getHours() < 12 ? 'am' : 'pm') + ";
+    case  "A":
+        return  "(this.getHours() < 12 ? 'AM' : 'PM') + ";
+    case  "g":
+        return  "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";
+    case  "G":
+        return  "this.getHours() + ";
+    case  "h":
+        return  "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";
+    case  "H":
+        return  "String.leftPad(this.getHours(), 2, '0') + ";
+    case  "i":
+        return  "String.leftPad(this.getMinutes(), 2, '0') + ";
+    case  "s":
+        return  "String.leftPad(this.getSeconds(), 2, '0') + ";
+    case  "O":
+        return  "this.getGMTOffset() + ";
+    case  "T":
+        return  "this.getTimezone() + ";
+    case  "Z":
+        return  "(this.getTimezoneOffset() * -60) + ";
+    default:
+        return  "'" + String.escape(H) + "' + ";
+    }
+};
+
+
+
+Date.parseDate = function(I, J) {
+    if (Date.parseFunctions[J] == null) {
+        Date.createParser(J);
+    }
+    var  K = Date.parseFunctions[J];
+    return  Date[K](I);
+};
+
+
+Date.createParser = function(L) {
+    var  M = "parse" + Date.parseFunctions.count++;
+    var  N = Date.parseRegexes.length;
+    var  O = 1;
+    Date.parseFunctions[L] = M;
+
+    var  P = "Date." + M + " = function(input){\n"
+        + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"
+        + "var d = new Date();\n"
+        + "y = d.getFullYear();\n"
+        + "m = d.getMonth();\n"
+        + "d = d.getDate();\n"
+        + "var results = input.match(Date.parseRegexes[" + N + "]);\n"
+        + "if (results && results.length > 0) {";
+    var  Q = "";
+
+    var  R = false;
+    var  ch = '';
+    for (var  i = 0; i < L.length; ++i) {
+        ch = L.charAt(i);
+        if (!R && ch == "\\") {
+            R = true;
+        }
+        else  if (R) {
+            R = false;
+            Q += String.escape(ch);
+        }
+        else  {
+            var  obj = Date.formatCodeToRegex(ch, O);
+            O += obj.g;
+            Q += obj.s;
+            if (obj.g && obj.c) {
+                P += obj.c;
+            }
+        }
+    }
+
+
+    P += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
+        + "{v = new Date(y, m, d, h, i, s);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
+        + "{v = new Date(y, m, d, h, i);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
+        + "{v = new Date(y, m, d, h);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0)\n"
+        + "{v = new Date(y, m, d);}\n"
+        + "else if (y >= 0 && m >= 0)\n"
+        + "{v = new Date(y, m);}\n"
+        + "else if (y >= 0)\n"
+        + "{v = new Date(y);}\n"
+        + "}return (v && (z || o))?\n" 
+        + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" 
+        + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" 
+        + ";}";
+
+    Date.parseRegexes[N] = new  RegExp("^" + Q + "$");
+    
+
+    eval(P);
+};
+
+
+Date.formatCodeToRegex = function(S, T) {
+    switch (S) {
+    case  "D":
+        return  {g:0,
+        c:null,
+        s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
+    case  "j":
+        return  {g:1,
+            c:"d = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{1,2})"}; 
+    case  "d":
+        return  {g:1,
+            c:"d = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"}; 
+    case  "l":
+        return  {g:0,
+            c:null,
+            s:"(?:" + Date.dayNames.join("|") + ")"};
+    case  "S":
+        return  {g:0,
+            c:null,
+            s:"(?:st|nd|rd|th)"};
+    case  "w":
+        return  {g:0,
+            c:null,
+            s:"\\d"};
+    case  "z":
+        return  {g:0,
+            c:null,
+            s:"(?:\\d{1,3})"};
+    case  "W":
+        return  {g:0,
+            c:null,
+            s:"(?:\\d{2})"};
+    case  "F":
+        return  {g:1,
+            c:"m = parseInt(Date.monthNumbers[results[" + T + "].substring(0, 3)], 10);\n",
+            s:"(" + Date.monthNames.join("|") + ")"};
+    case  "M":
+        return  {g:1,
+            c:"m = parseInt(Date.monthNumbers[results[" + T + "]], 10);\n",
+            s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
+    case  "n":
+        return  {g:1,
+            c:"m = parseInt(results[" + T + "], 10) - 1;\n",
+            s:"(\\d{1,2})"}; 
+    case  "m":
+        return  {g:1,
+            c:"m = parseInt(results[" + T + "], 10) - 1;\n",
+            s:"(\\d{2})"}; 
+    case  "t":
+        return  {g:0,
+            c:null,
+            s:"\\d{1,2}"};
+    case  "L":
+        return  {g:0,
+            c:null,
+            s:"(?:1|0)"};
+    case  "Y":
+        return  {g:1,
+            c:"y = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{4})"};
+    case  "y":
+        return  {g:1,
+            c:"var ty = parseInt(results[" + T + "], 10);\n"
+                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
+            s:"(\\d{1,2})"};
+    case  "a":
+        return  {g:1,
+            c:"if (results[" + T + "] == 'am') {\n"
+                + "if (h == 12) { h = 0; }\n"
+                + "} else { if (h < 12) { h += 12; }}",
+            s:"(am|pm)"};
+    case  "A":
+        return  {g:1,
+            c:"if (results[" + T + "] == 'AM') {\n"
+                + "if (h == 12) { h = 0; }\n"
+                + "} else { if (h < 12) { h += 12; }}",
+            s:"(AM|PM)"};
+    case  "g":
+    case  "G":
+        return  {g:1,
+            c:"h = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{1,2})"}; 
+    case  "h":
+    case  "H":
+        return  {g:1,
+            c:"h = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"}; 
+    case  "i":
+        return  {g:1,
+            c:"i = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"};
+    case  "s":
+        return  {g:1,
+            c:"s = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"};
+    case  "O":
+        return  {g:1,
+            c:[
+                "o = results[", T, "];\n",
+                "var sn = o.substring(0,1);\n", 
+                "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n", 
+                "var mn = o.substring(3,5) % 60;\n", 
+                "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", 
+                "    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"
+            ].join(""),
+            s:"([+\-]\\d{4})"};
+    case  "T":
+        return  {g:0,
+            c:null,
+            s:"[A-Z]{1,4}"}; 
+    case  "Z":
+        return  {g:1,
+            c:"z = results[" + T + "];\n" 
+                  + "z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",
+            s:"([+\-]?\\d{1,5})"}; 
+    default:
+        return  {g:0,
+            c:null,
+            s:String.escape(S)};
+    }
+};
+
+
+
+Date.prototype.getTimezone = function() {
+    return  this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/, "$1");
+};
+
+
+
+Date.prototype.getGMTOffset = function() {
+    return  (this.getTimezoneOffset() > 0 ? "-" : "+")
+        + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
+        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
+};
+
+
+
+Date.prototype.getDayOfYear = function() {
+    var  U = 0;
+    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+    for (var  i = 0; i < this.getMonth(); ++i) {
+        U += Date.daysInMonth[i];
+    }
+    return  U + this.getDate() - 1;
+};
+
+
+
+Date.prototype.getWeekOfYear = function() {
+    
+    var  V = this.getDayOfYear() + (4 - this.getDay());
+    
+    var  W = new  Date(this.getFullYear(), 0, 1);
+    var  X = (7 - W.getDay() + 4);
+    return  String.leftPad(((V - X) / 7) + 1, 2, "0");
+};
+
+
+
+Date.prototype.isLeapYear = function() {
+    var  Y = this.getFullYear();
+    return  ((Y & 3) == 0 && (Y % 100 || (Y % 400 == 0 && Y)));
+};
+
+
+
+Date.prototype.getFirstDayOfMonth = function() {
+    var  Z = (this.getDay() - (this.getDate() - 1)) % 7;
+    return  (Z < 0) ? (Z + 7) : Z;
+};
+
+
+
+Date.prototype.getLastDayOfMonth = function() {
+    var  a = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
+    return  (a < 0) ? (a + 7) : a;
+};
+
+
+
+
+Date.prototype.getFirstDateOfMonth = function() {
+    return  new  Date(this.getFullYear(), this.getMonth(), 1);
+};
+
+
+
+Date.prototype.getLastDateOfMonth = function() {
+    return  new  Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
+};
+
+
+Date.prototype.getDaysInMonth = function() {
+    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+    return  Date.daysInMonth[this.getMonth()];
+};
+
+
+
+Date.prototype.getSuffix = function() {
+    switch (this.getDate()) {
+        case  1:
+        case  21:
+        case  31:
+            return  "st";
+        case  2:
+        case  22:
+            return  "nd";
+        case  3:
+        case  23:
+            return  "rd";
+        default:
+            return  "th";
+    }
+};
+
+
+Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
+
+
+
+Date.monthNames =
+   ["January",
+    "February",
+    "March",
+    "April",
+    "May",
+    "June",
+    "July",
+    "August",
+    "September",
+    "October",
+    "November",
+    "December"];
+
+
+
+Date.dayNames =
+   ["Sunday",
+    "Monday",
+    "Tuesday",
+    "Wednesday",
+    "Thursday",
+    "Friday",
+    "Saturday"];
+
+
+Date.y2kYear = 50;
+
+Date.monthNumbers = {
+    Jan:0,
+    Feb:1,
+    Mar:2,
+    Apr:3,
+    May:4,
+    Jun:5,
+    Jul:6,
+    Aug:7,
+    Sep:8,
+    Oct:9,
+    Nov:10,
+    Dec:11};
+
+
+
+Date.prototype.clone = function() {
+       return  new  Date(this.getTime());
+};
+
+
+
+Date.prototype.clearTime = function(b){
+    if(b){
+        return  this.clone().clearTime();
+    }
+
+    this.setHours(0);
+    this.setMinutes(0);
+    this.setSeconds(0);
+    this.setMilliseconds(0);
+    return  this;
+};
+
+
+
+if(Roo.isSafari){
+    Date.brokenSetMonth = Date.prototype.setMonth;
+       Date.prototype.setMonth = function(c){
+               if(c <= -1){
+                       var  n = Math.ceil(-c);
+                       var  back_year = Math.ceil(n/12);
+                       var  month = (n % 12) ? 12 - n % 12 : 0 ;
+                       this.setFullYear(this.getFullYear() - back_year);
+                       return  Date.brokenSetMonth.call(this, month);
+               } else  {
+                       return  Date.brokenSetMonth.apply(this, arguments);
+               }
+       };
+}
+
+
+
+
+Date.MILLI = "ms";
+
+
+Date.SECOND = "s";
+
+
+Date.MINUTE = "mi";
+
+
+Date.HOUR = "h";
+
+
+Date.DAY = "d";
+
+
+Date.MONTH = "mo";
+
+
+Date.YEAR = "y";
+
+
+
+Date.prototype.add = function(e, f){
+  var  d = this.clone();
+  if (!e || f === 0) return  d;
+  switch(e.toLowerCase()){
+    case  Date.MILLI:
+      d.setMilliseconds(this.getMilliseconds() + f);
+      break;
+    case  Date.SECOND:
+      d.setSeconds(this.getSeconds() + f);
+      break;
+    case  Date.MINUTE:
+      d.setMinutes(this.getMinutes() + f);
+      break;
+    case  Date.HOUR:
+      d.setHours(this.getHours() + f);
+      break;
+    case  Date.DAY:
+      d.setDate(this.getDate() + f);
+      break;
+    case  Date.MONTH:
+      var  a = this.getDate();
+      if(a > 28){
+          a = Math.min(a, this.getFirstDateOfMonth().add('mo', f).getLastDateOfMonth().getDate());
+      }
+
+      d.setDate(a);
+      d.setMonth(this.getMonth() + f);
+      break;
+    case  Date.YEAR:
+      d.setFullYear(this.getFullYear() + f);
+      break;
+  }
+  return  d;
+};
+
+
+
+Roo.lib.Dom = {
+    getViewWidth : function(A) {
+        return  A ? this.getDocumentWidth() : this.getViewportWidth();
+    },
+
+    getViewHeight : function(B) {
+        return  B ? this.getDocumentHeight() : this.getViewportHeight();
+    },
+
+    getDocumentHeight: function() {
+        var  C = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
+        return  Math.max(C, this.getViewportHeight());
+    },
+
+    getDocumentWidth: function() {
+        var  D = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
+        return  Math.max(D, this.getViewportWidth());
+    },
+
+    getViewportHeight: function() {
+        var  E = self.innerHeight;
+        var  F = document.compatMode;
+
+        if ((F || Roo.isIE) && !Roo.isOpera) {
+            E = (F == "CSS1Compat") ?
+                     document.documentElement.clientHeight :
+                     document.body.clientHeight;
+        }
+
+        return  E;
+    },
+
+    getViewportWidth: function() {
+        var  G = self.innerWidth;
+        var  H = document.compatMode;
+
+        if (H || Roo.isIE) {
+            G = (H == "CSS1Compat") ?
+                    document.documentElement.clientWidth :
+                    document.body.clientWidth;
+        }
+        return  G;
+    },
+
+    isAncestor : function(p, c) {
+        p = Roo.getDom(p);
+        c = Roo.getDom(c);
+        if (!p || !c) {
+            return  false;
+        }
+
+        if (p.contains && !Roo.isSafari) {
+            return  p.contains(c);
+        } else  if (p.compareDocumentPosition) {
+            return  !!(p.compareDocumentPosition(c) & 16);
+        } else  {
+            var  parent = c.parentNode;
+            while (parent) {
+                if (parent == p) {
+                    return  true;
+                }
+                else  if (!parent.tagName || parent.tagName.toUpperCase() == "HTML") {
+                    return  false;
+                }
+
+                parent = parent.parentNode;
+            }
+            return  false;
+        }
+    },
+
+    getRegion : function(el) {
+        return  Roo.lib.Region.getRegion(el);
+    },
+
+    getY : function(el) {
+        return  this.getXY(el)[1];
+    },
+
+    getX : function(el) {
+        return  this.getXY(el)[0];
+    },
+
+    getXY : function(el) {
+        var  p, pe, b, I, bd = document.body;
+        el = Roo.getDom(el);
+        var  J = Roo.lib.AnimBase.fly;
+        if (el.getBoundingClientRect) {
+            b = el.getBoundingClientRect();
+            I = J(document).getScroll();
+            return  [b.left + I.left, b.top + I.top];
+        }
+        var  x = 0, y = 0;
+
+        p = el;
+
+        var  K = J(el).getStyle("position") == "absolute";
+
+        while (p) {
+
+            x += p.offsetLeft;
+            y += p.offsetTop;
+
+            if (!K && J(p).getStyle("position") == "absolute") {
+                K = true;
+            }
+
+            if (Roo.isGecko) {
+                pe = J(p);
+
+                var  bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
+                var  bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
+
+
+                x += bl;
+                y += bt;
+
+
+                if (p != el && pe.getStyle('overflow') != 'visible') {
+                    x += bl;
+                    y += bt;
+                }
+            }
+
+            p = p.offsetParent;
+        }
+
+        if (Roo.isSafari && K) {
+            x -= bd.offsetLeft;
+            y -= bd.offsetTop;
+        }
+
+        if (Roo.isGecko && !K) {
+            var  dbd = J(bd);
+            x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
+            y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
+        }
+
+
+        p = el.parentNode;
+        while (p && p != bd) {
+            if (!Roo.isOpera || (p.tagName != 'TR' && J(p).getStyle("display") != "inline")) {
+                x -= p.scrollLeft;
+                y -= p.scrollTop;
+            }
+
+            p = p.parentNode;
+        }
+        return  [x, y];
+    },
+  
+
+
+    setXY : function(el, xy) {
+        el = Roo.fly(el, '_setXY');
+        el.position();
+        var  L = el.translatePoints(xy);
+        if (xy[0] !== false) {
+            el.dom.style.left = L.left + "px";
+        }
+        if (xy[1] !== false) {
+            el.dom.style.top = L.top + "px";
+        }
+    },
+
+    setX : function(el, x) {
+        this.setXY(el, [x, false]);
+    },
+
+    setY : function(el, y) {
+        this.setXY(el, [false, y]);
+    }
+};
+
+
+
+
+Roo.lib.Event = function() {
+    var  A = false;
+    var  B = [];
+    var  C = [];
+    var  D = 0;
+    var  E = [];
+    var  F = 0;
+    var  G = null;
+
+    return  {
+        POLL_RETRYS: 200,
+        POLL_INTERVAL: 20,
+        EL: 0,
+        TYPE: 1,
+        FN: 2,
+        WFN: 3,
+        OBJ: 3,
+        ADJ_SCOPE: 4,
+        _interval: null,
+
+        startInterval: function() {
+            if (!this._interval) {
+                var  self = this;
+                var  callback = function() {
+                    self._tryPreloadAttach();
+                };
+                this._interval = setInterval(callback, this.POLL_INTERVAL);
+
+            }
+        },
+
+        onAvailable: function(h, k, m, n) {
+            E.push({ id:         h,
+                fn:         k,
+                obj:        m,
+                override:   n,
+                checkReady: false    });
+
+            D = this.POLL_RETRYS;
+            this.startInterval();
+        },
+
+
+        addListener: function(el, o, fn) {
+            el = Roo.getDom(el);
+            if (!el || !fn) {
+                return  false;
+            }
+
+            if ("unload" == o) {
+                C[C.length] =
+                [el, o, fn];
+                return  true;
+            }
+
+            var  p = function(e) {
+                return  fn(Roo.lib.Event.getEvent(e));
+            };
+
+            var  li = [el, o, fn, p];
+
+            var  q = B.length;
+            B[q] = li;
+
+            this.doAdd(el, o, p, false);
+            return  true;
+
+        },
+
+
+        removeListener: function(el, r, fn) {
+            var  i, s;
+
+            el = Roo.getDom(el);
+
+            if(!fn) {
+                return  this.purgeElement(el, false, r);
+            }
+
+
+            if ("unload" == r) {
+
+                for (i = 0,s = C.length; i < s; i++) {
+                    var  li = C[i];
+                    if (li &&
+                        li[0] == el &&
+                        li[1] == r &&
+                        li[2] == fn) {
+                        C.splice(i, 1);
+                        return  true;
+                    }
+                }
+
+                return  false;
+            }
+
+            var  u = null;
+
+
+            var  v = arguments[3];
+
+            if ("undefined" == typeof  v) {
+                v = this._getCacheIndex(el, r, fn);
+            }
+
+            if (v >= 0) {
+                u = B[v];
+            }
+
+            if (!el || !u) {
+                return  false;
+            }
+
+
+            this.doRemove(el, r, u[this.WFN], false);
+
+            delete  B[v][this.WFN];
+            delete  B[v][this.FN];
+            B.splice(v, 1);
+
+            return  true;
+
+        },
+
+
+        getTarget: function(ev, w) {
+            ev = ev.browserEvent || ev;
+            var  t = ev.target || ev.srcElement;
+            return  this.resolveTextNode(t);
+        },
+
+
+        resolveTextNode: function(z) {
+            if (Roo.isSafari && z && 3 == z.nodeType) {
+                return  z.parentNode;
+            } else  {
+                return  z;
+            }
+        },
+
+
+        getPageX: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  x = ev.pageX;
+            if (!x && 0 !== x) {
+                x = ev.clientX || 0;
+
+                if (Roo.isIE) {
+                    x += this.getScroll()[1];
+                }
+            }
+
+            return  x;
+        },
+
+
+        getPageY: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  y = ev.pageY;
+            if (!y && 0 !== y) {
+                y = ev.clientY || 0;
+
+                if (Roo.isIE) {
+                    y += this.getScroll()[0];
+                }
+            }
+
+
+            return  y;
+        },
+
+
+        getXY: function(ev) {
+            ev = ev.browserEvent || ev;
+            return  [this.getPageX(ev), this.getPageY(ev)];
+        },
+
+
+        getRelatedTarget: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  t = ev.relatedTarget;
+            if (!t) {
+                if (ev.type == "mouseout") {
+                    t = ev.toElement;
+                } else  if (ev.type == "mouseover") {
+                    t = ev.fromElement;
+                }
+            }
+
+            return  this.resolveTextNode(t);
+        },
+
+
+        getTime: function(ev) {
+            ev = ev.browserEvent || ev;
+            if (!ev.time) {
+                var  t = new  Date().getTime();
+                try {
+                    ev.time = t;
+                } catch(ex) {
+                    this.lastError = ex;
+                    return  t;
+                }
+            }
+
+            return  ev.time;
+        },
+
+
+        stopEvent: function(ev) {
+            this.stopPropagation(ev);
+            this.preventDefault(ev);
+        },
+
+
+        stopPropagation: function(ev) {
+            ev = ev.browserEvent || ev;
+            if (ev.stopPropagation) {
+                ev.stopPropagation();
+            } else  {
+                ev.cancelBubble = true;
+            }
+        },
+
+
+        preventDefault: function(ev) {
+            ev = ev.browserEvent || ev;
+            if(ev.preventDefault) {
+                ev.preventDefault();
+            } else  {
+                ev.returnValue = false;
+            }
+        },
+
+
+        getEvent: function(e) {
+            var  ev = e || window.event;
+            if (!ev) {
+                var  c = this.getEvent.caller;
+                while (c) {
+                    ev = c.arguments[0];
+                    if (ev && Event == ev.constructor) {
+                        break;
+                    }
+
+                    c = c.caller;
+                }
+            }
+            return  ev;
+        },
+
+
+        getCharCode: function(ev) {
+            ev = ev.browserEvent || ev;
+            return  ev.charCode || ev.keyCode || 0;
+        },
+
+
+        _getCacheIndex: function(el, AA, fn) {
+            for (var  i = 0,s = B.length; i < s; ++i) {
+                var  li = B[i];
+                if (li &&
+                    li[this.FN] == fn &&
+                    li[this.EL] == el &&
+                    li[this.TYPE] == AA) {
+                    return  i;
+                }
+            }
+
+            return  -1;
+        },
+
+
+        elCache: {},
+
+
+        getEl: function(id) {
+            return  document.getElementById(id);
+        },
+
+
+        clearCache: function() {
+        },
+
+
+        _load: function(e) {
+            A = true;
+            var  EU = Roo.lib.Event;
+
+
+            if (Roo.isIE) {
+                EU.doRemove(window, "load", EU._load);
+            }
+        },
+
+
+        _tryPreloadAttach: function() {
+
+            if (this.locked) {
+                return  false;
+            }
+
+
+            this.locked = true;
+
+
+            var  AB = !A;
+            if (!AB) {
+                AB = (D > 0);
+            }
+
+
+            var  AC = [];
+            for (var  i = 0,s = E.length; i < s; ++i) {
+                var  item = E[i];
+                if (item) {
+                    var  el = this.getEl(item.id);
+
+                    if (el) {
+                        if (!item.checkReady ||
+                            A ||
+                            el.nextSibling ||
+                            (document && document.body)) {
+
+                            var  scope = el;
+                            if (item.override) {
+                                if (item.override === true) {
+                                    scope = item.obj;
+                                } else  {
+                                    scope = item.override;
+                                }
+                            }
+
+                            item.fn.call(scope, item.obj);
+                            E[i] = null;
+                        }
+                    } else  {
+                        AC.push(item);
+                    }
+                }
+            }
+
+
+            D = (AC.length === 0) ? 0 : D - 1;
+
+            if (AB) {
+
+                this.startInterval();
+            } else  {
+                clearInterval(this._interval);
+                this._interval = null;
+            }
+
+
+            this.locked = false;
+
+            return  true;
+
+        },
+
+
+        purgeElement: function(el, AD, AE) {
+            var  AF = this.getListeners(el, AE);
+            if (AF) {
+                for (var  i = 0,s = AF.length; i < s; ++i) {
+                    var  l = AF[i];
+                    this.removeListener(el, l.type, l.fn);
+                }
+            }
+
+            if (AD && el && el.childNodes) {
+                for (i = 0,s = el.childNodes.length; i < s; ++i) {
+                    this.purgeElement(el.childNodes[i], AD, AE);
+                }
+            }
+        },
+
+
+        getListeners: function(el, AG) {
+            var  AH = [], AI;
+            if (!AG) {
+                AI = [B, C];
+            } else  if (AG == "unload") {
+                AI = [C];
+            } else  {
+                AI = [B];
+            }
+
+            for (var  j = 0; j < AI.length; ++j) {
+                var  searchList = AI[j];
+                if (searchList && searchList.length > 0) {
+                    for (var  i = 0,s = searchList.length; i < s; ++i) {
+                        var  l = searchList[i];
+                        if (l && l[this.EL] === el &&
+                            (!AG || AG === l[this.TYPE])) {
+                            AH.push({
+                                type:   l[this.TYPE],
+                                fn:     l[this.FN],
+                                obj:    l[this.OBJ],
+                                adjust: l[this.ADJ_SCOPE],
+                                index:  i
+                            });
+                        }
+                    }
+                }
+            }
+
+            return  (AH.length) ? AH : null;
+        },
+
+
+        _unload: function(e) {
+
+            var  EU = Roo.lib.Event, i, j, l, AJ, AK;
+
+            for (i = 0,AJ = C.length; i < AJ; ++i) {
+                l = C[i];
+                if (l) {
+                    var  scope = window;
+                    if (l[EU.ADJ_SCOPE]) {
+                        if (l[EU.ADJ_SCOPE] === true) {
+                            scope = l[EU.OBJ];
+                        } else  {
+                            scope = l[EU.ADJ_SCOPE];
+                        }
+                    }
+
+                    l[EU.FN].call(scope, EU.getEvent(e), l[EU.OBJ]);
+                    C[i] = null;
+                    l = null;
+                    scope = null;
+                }
+            }
+
+
+            C = null;
+
+            if (B && B.length > 0) {
+                j = B.length;
+                while (j) {
+                    AK = j - 1;
+                    l = B[AK];
+                    if (l) {
+                        EU.removeListener(l[EU.EL], l[EU.TYPE],
+                                l[EU.FN], AK);
+                    }
+
+                    j = j - 1;
+                }
+
+                l = null;
+
+                EU.clearCache();
+            }
+
+
+            EU.doRemove(window, "unload", EU._unload);
+
+        },
+
+
+        getScroll: function() {
+            var  dd = document.documentElement, db = document.body;
+            if (dd && (dd.scrollTop || dd.scrollLeft)) {
+                return  [dd.scrollTop, dd.scrollLeft];
+            } else  if (db) {
+                return  [db.scrollTop, db.scrollLeft];
+            } else  {
+                return  [0, 0];
+            }
+        },
+
+
+        doAdd: function () {
+            if (window.addEventListener) {
+                return  function(el, AL, fn, AM) {
+                    el.addEventListener(AL, fn, (AM));
+                };
+            } else  if (window.attachEvent) {
+                return  function(el, AL, fn, AM) {
+                    el.attachEvent("on" + AL, fn);
+                };
+            } else  {
+                return  function() {
+                };
+            }
+        }(),
+
+
+        doRemove: function() {
+            if (window.removeEventListener) {
+                return  function (el, AL, fn, AM) {
+                    el.removeEventListener(AL, fn, (AM));
+                };
+            } else  if (window.detachEvent) {
+                return  function (el, AL, fn) {
+                    el.detachEvent("on" + AL, fn);
+                };
+            } else  {
+                return  function() {
+                };
+            }
+        }()
+    };
+    
+}();
+(function() {     
+   
+    var  E = Roo.lib.Event;
+    E.on = E.addListener;
+    E.un = E.removeListener;
+
+    if (document && document.body) {
+        E._load();
+    } else  {
+        E.doAdd(window, "load", E._load);
+    }
+
+    E.doAdd(window, "unload", E._unload);
+    E._tryPreloadAttach();
+})();
+
+
+
+
+
+(function() {
+    
+    Roo.lib.Ajax = {
+        request : function(A, B, cb, C, D) {
+            if(D){
+                var  hs = D.headers;
+                if(hs){
+                    for(var  h  in  hs){
+                        if(hs.hasOwnProperty(h)){
+                            this.initHeader(h, hs[h], false);
+                        }
+                    }
+                }
+                if(D.xmlData){
+                    this.initHeader('Content-Type', 'text/xml', false);
+                    A = 'POST';
+                    C = D.xmlData;
+                }
+            }
+
+            return  this.asyncRequest(A, B, cb, C);
+        },
+
+        serializeForm : function(E) {
+            if(typeof  E == 'string') {
+                E = (document.getElementById(E) || document.forms[E]);
+            }
+
+            var  el, F, G, H, I = '', J = false;
+            for (var  i = 0; i < E.elements.length; i++) {
+                el = E.elements[i];
+                H = E.elements[i].disabled;
+                F = E.elements[i].name;
+                G = E.elements[i].value;
+
+                if (!H && F){
+                    switch (el.type)
+                            {
+                        case  'select-one':
+                        case  'select-multiple':
+                            for (var  j = 0; j < el.options.length; j++) {
+                                if (el.options[j].selected) {
+                                    if (Roo.isIE) {
+                                        I += encodeURIComponent(F) + '=' + encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text) + '&';
+                                    }
+                                    else  {
+                                        I += encodeURIComponent(F) + '=' + encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text) + '&';
+                                    }
+                                }
+                            }
+                            break;
+                        case  'radio':
+                        case  'checkbox':
+                            if (el.checked) {
+                                I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                            }
+                            break;
+                        case  'file':
+
+                        case  undefined:
+
+                        case  'reset':
+
+                        case  'button':
+
+                            break;
+                        case  'submit':
+                            if(J == false) {
+                                I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                                J = true;
+                            }
+                            break;
+                        default:
+                            I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                            break;
+                    }
+                }
+            }
+
+            I = I.substr(0, I.length - 1);
+            return  I;
+        },
+
+        headers:{},
+
+        hasHeaders:false,
+
+        useDefaultHeader:true,
+
+        defaultPostHeader:'application/x-www-form-urlencoded',
+
+        useDefaultXhrHeader:true,
+
+        defaultXhrHeader:'XMLHttpRequest',
+
+        hasDefaultHeaders:true,
+
+        defaultHeaders:{},
+
+        poll:{},
+
+        timeout:{},
+
+        pollInterval:50,
+
+        transactionId:0,
+
+        setProgId:function(id)
+        {
+            this.activeX.unshift(id);
+        },
+
+        setDefaultPostHeader:function(b)
+        {
+            this.useDefaultHeader = b;
+        },
+
+        setDefaultXhrHeader:function(b)
+        {
+            this.useDefaultXhrHeader = b;
+        },
+
+        setPollingInterval:function(i)
+        {
+            if (typeof  i == 'number' && isFinite(i)) {
+                this.pollInterval = i;
+            }
+        },
+
+        createXhrObject:function(K)
+        {
+            var  L,M;
+            try
+            {
+
+                M = new  XMLHttpRequest();
+
+                L = { conn:M, tId:K };
+            }
+            catch(e)
+            {
+                for (var  i = 0; i < this.activeX.length; ++i) {
+                    try
+                    {
+
+                        http = new  ActiveXObject(this.activeX[i]);
+
+                        obj = { conn:http, tId:transactionId };
+                        break;
+                    }
+                    catch(e) {
+                    }
+                }
+            }
+            finally
+            {
+                return  L;
+            }
+        },
+
+        getConnectionObject:function()
+        {
+            var  o;
+            var  N = this.transactionId;
+
+            try
+            {
+                o = this.createXhrObject(N);
+                if (o) {
+                    this.transactionId++;
+                }
+            }
+            catch(e) {
+            }
+            finally
+            {
+                return  o;
+            }
+        },
+
+        asyncRequest:function(O, P, Q, R)
+        {
+            var  o = this.getConnectionObject();
+
+            if (!o) {
+                return  null;
+            }
+            else  {
+                o.conn.open(O, P, true);
+
+                if (this.useDefaultXhrHeader) {
+                    if (!this.defaultHeaders['X-Requested-With']) {
+                        this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
+                    }
+                }
+
+                if(R && this.useDefaultHeader){
+                    this.initHeader('Content-Type', this.defaultPostHeader);
+                }
+
+                 if (this.hasDefaultHeaders || this.hasHeaders) {
+                    this.setHeader(o);
+                }
+
+
+                this.handleReadyState(o, Q);
+                o.conn.send(R || null);
+
+                return  o;
+            }
+        },
+
+        handleReadyState:function(o, S)
+        {
+            var  T = this;
+
+            if (S && S.timeout) {
+                this.timeout[o.tId] = window.setTimeout(function() {
+                    T.abort(o, S, true);
+                }, S.timeout);
+            }
+
+
+            this.poll[o.tId] = window.setInterval(
+                    function() {
+                        if (o.conn && o.conn.readyState == 4) {
+                            window.clearInterval(T.poll[o.tId]);
+                            delete  T.poll[o.tId];
+
+                            if(S && S.timeout) {
+                                window.clearTimeout(T.timeout[o.tId]);
+                                delete  T.timeout[o.tId];
+                            }
+
+
+                            T.handleTransactionResponse(o, S);
+                        }
+                    }
+                    , this.pollInterval);
+        },
+
+        handleTransactionResponse:function(o, U, V)
+        {
+
+            if (!U) {
+                this.releaseObject(o);
+                return;
+            }
+
+            var  W, X;
+
+            try
+            {
+                if (o.conn.status !== undefined && o.conn.status != 0) {
+                    W = o.conn.status;
+                }
+                else  {
+                    W = 13030;
+                }
+            }
+            catch(e) {
+
+
+                httpStatus = 13030;
+            }
+
+            if (W >= 200 && W < 300) {
+                X = this.createResponseObject(o, U.argument);
+                if (U.success) {
+                    if (!U.scope) {
+                        U.success(X);
+                    }
+                    else  {
+
+
+                        U.success.apply(U.scope, [X]);
+                    }
+                }
+            }
+            else  {
+                switch (W) {
+
+                    case  12002:
+                    case  12029:
+                    case  12030:
+                    case  12031:
+                    case  12152:
+                    case  13030:
+                        X = this.createExceptionObject(o.tId, U.argument, (V ? V : false));
+                        if (U.failure) {
+                            if (!U.scope) {
+                                U.failure(X);
+                            }
+                            else  {
+                                U.failure.apply(U.scope, [X]);
+                            }
+                        }
+                        break;
+                    default:
+                        X = this.createResponseObject(o, U.argument);
+                        if (U.failure) {
+                            if (!U.scope) {
+                                U.failure(X);
+                            }
+                            else  {
+                                U.failure.apply(U.scope, [X]);
+                            }
+                        }
+                }
+            }
+
+
+            this.releaseObject(o);
+            X = null;
+        },
+
+        createResponseObject:function(o, Y)
+        {
+            var  Z = {};
+            var  a = {};
+
+            try
+            {
+                var  headerStr = o.conn.getAllResponseHeaders();
+                var  header = headerStr.split('\n');
+                for (var  i = 0; i < header.length; i++) {
+                    var  delimitPos = header[i].indexOf(':');
+                    if (delimitPos != -1) {
+                        a[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
+                    }
+                }
+            }
+            catch(e) {
+            }
+
+
+            Z.tId = o.tId;
+            Z.status = o.conn.status;
+            Z.statusText = o.conn.statusText;
+            Z.getResponseHeader = a;
+            Z.getAllResponseHeaders = headerStr;
+            Z.responseText = o.conn.responseText;
+            Z.responseXML = o.conn.responseXML;
+
+            if (typeof  Y !== undefined) {
+                Z.argument = Y;
+            }
+
+            return  Z;
+        },
+
+        createExceptionObject:function(c, d, f)
+        {
+            var  g = 0;
+            var  k = 'communication failure';
+            var  l = -1;
+            var  m = 'transaction aborted';
+
+            var  n = {};
+
+            n.tId = c;
+            if (f) {
+                n.status = l;
+                n.statusText = m;
+            }
+            else  {
+                n.status = g;
+                n.statusText = k;
+            }
+
+            if (d) {
+                n.argument = d;
+            }
+
+            return  n;
+        },
+
+        initHeader:function(p, q, r)
+        {
+            var  s = (r) ? this.defaultHeaders : this.headers;
+
+            if (s[p] === undefined) {
+                s[p] = q;
+            }
+            else  {
+
+
+                s[p] = q + "," + s[p];
+            }
+
+            if (r) {
+                this.hasDefaultHeaders = true;
+            }
+            else  {
+                this.hasHeaders = true;
+            }
+        },
+
+
+        setHeader:function(o)
+        {
+            if (this.hasDefaultHeaders) {
+                for (var  prop  in  this.defaultHeaders) {
+                    if (this.defaultHeaders.hasOwnProperty(prop)) {
+                        o.conn.setRequestHeader(prop, this.defaultHeaders[prop]);
+                    }
+                }
+            }
+
+            if (this.hasHeaders) {
+                for (var  prop  in  this.headers) {
+                    if (this.headers.hasOwnProperty(prop)) {
+                        o.conn.setRequestHeader(prop, this.headers[prop]);
+                    }
+                }
+
+                this.headers = {};
+                this.hasHeaders = false;
+            }
+        },
+
+        resetDefaultHeaders:function() {
+            delete  this.defaultHeaders;
+            this.defaultHeaders = {};
+            this.hasDefaultHeaders = false;
+        },
+
+        abort:function(o, t, u)
+        {
+            if(this.isCallInProgress(o)) {
+                o.conn.abort();
+                window.clearInterval(this.poll[o.tId]);
+                delete  this.poll[o.tId];
+                if (u) {
+                    delete  this.timeout[o.tId];
+                }
+
+
+                this.handleTransactionResponse(o, t, true);
+
+                return  true;
+            }
+            else  {
+                return  false;
+            }
+        },
+
+
+        isCallInProgress:function(o)
+        {
+            if (o && o.conn) {
+                return  o.conn.readyState != 4 && o.conn.readyState != 0;
+            }
+            else  {
+
+                return  false;
+            }
+        },
+
+
+        releaseObject:function(o)
+        {
+
+            o.conn = null;
+
+            o = null;
+        },
+
+        activeX:[
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP',
+        'Microsoft.XMLHTTP'
+        ]
+
+
+    };
+})();
+
+
+
+Roo.lib.Region = function(t, r, b, l) {
+    this.top = t;
+    this[1] = t;
+    this.right = r;
+    this.bottom = b;
+    this.left = l;
+    this[0] = l;
+};
+
+
+Roo.lib.Region.prototype = {
+    contains : function(A) {
+        return  ( A.left >= this.left &&
+                 A.right <= this.right &&
+                 A.top >= this.top &&
+                 A.bottom <= this.bottom    );
+
+    },
+
+    getArea : function() {
+        return  ( (this.bottom - this.top) * (this.right - this.left) );
+    },
+
+    intersect : function(B) {
+        var  t = Math.max(this.top, B.top);
+        var  r = Math.min(this.right, B.right);
+        var  b = Math.min(this.bottom, B.bottom);
+        var  l = Math.max(this.left, B.left);
+
+        if (b >= t && r >= l) {
+            return  new  Roo.lib.Region(t, r, b, l);
+        } else  {
+            return  null;
+        }
+    },
+    union : function(C) {
+        var  t = Math.min(this.top, C.top);
+        var  r = Math.max(this.right, C.right);
+        var  b = Math.max(this.bottom, C.bottom);
+        var  l = Math.min(this.left, C.left);
+
+        return  new  Roo.lib.Region(t, r, b, l);
+    },
+
+    adjust : function(t, l, b, r) {
+        this.top += t;
+        this.left += l;
+        this.right += r;
+        this.bottom += b;
+        return  this;
+    }
+};
+
+Roo.lib.Region.getRegion = function(el) {
+    var  p = Roo.lib.Dom.getXY(el);
+
+    var  t = p[1];
+    var  r = p[0] + el.offsetWidth;
+    var  b = p[1] + el.offsetHeight;
+    var  l = p[0];
+
+    return  new  Roo.lib.Region(t, r, b, l);
+};
+
+
+
+
+
+
+Roo.lib.Point = function(x, y) {
+    if (x  instanceof  Array) {
+        y = x[1];
+        x = x[0];
+    }
+
+    this.x = this.right = this.left = this[0] = x;
+    this.y = this.top = this.bottom = this[1] = y;
+};
+
+Roo.lib.Point.prototype = new  Roo.lib.Region();
+
+
+
+(function() {   
+
+    Roo.lib.Anim = {
+        scroll : function(el, A, B, C, cb, D) {
+            this.run(el, A, B, C, cb, D, Roo.lib.Scroll);
+        },
+
+        motion : function(el, E, F, G, cb, H) {
+            this.run(el, E, F, G, cb, H, Roo.lib.Motion);
+        },
+
+        color : function(el, I, J, K, cb, L) {
+            this.run(el, I, J, K, cb, L, Roo.lib.ColorAnim);
+        },
+
+        run : function(el, M, N, O, cb, P, Q) {
+            Q = Q || Roo.lib.AnimBase;
+            if (typeof  O == "string") {
+                O = Roo.lib.Easing[O];
+            }
+            var  R = new  Q(el, M, N, O);
+            R.animateX(function() {
+                Roo.callback(cb, P);
+            });
+            return  R;
+        }
+    };
+})();
+
+
+
+(function() {    
+    var  A;
+    
+    function  B(el) {
+        if (!A) {
+            A = new  Roo.Element.Flyweight();
+        }
+
+        A.dom = el;
+        return  A;
+    }
+
+
+    
+    
+   
+    
+    Roo.lib.AnimBase = function(el, C, D, E) {
+        if (el) {
+            this.init(el, C, D, E);
+        }
+    };
+
+    Roo.lib.AnimBase.fly = B;
+    
+    
+    
+    Roo.lib.AnimBase.prototype = {
+
+        toString: function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Anim " + id);
+        },
+
+        patterns: {
+            noNegatives:        /width|height|opacity|padding/i,
+            offsetAttribute:  /^((width|height)|(top|left))$/,
+            defaultUnit:        /width|height|top$|bottom$|left$|right$/i,
+            offsetUnit:         /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i
+        },
+
+
+        doMethod: function(C, D, E) {
+            return  this.method(this.currentFrame, D, E - D, this.totalFrames);
+        },
+
+
+        setAttribute: function(F, G, H) {
+            if (this.patterns.noNegatives.test(F)) {
+                G = (G > 0) ? G : 0;
+            }
+
+
+            Roo.fly(this.getEl(), '_anim').setStyle(F, G + H);
+        },
+
+
+        getAttribute: function(I) {
+            var  el = this.getEl();
+            var  J = B(el).getStyle(I);
+
+            if (J !== 'auto' && !this.patterns.offsetUnit.test(J)) {
+                return  parseFloat(J);
+            }
+
+            var  a = this.patterns.offsetAttribute.exec(I) || [];
+            var  K = !!( a[3] );
+            var  L = !!( a[2] );
+
+
+            if (L || (B(el).getStyle('position') == 'absolute' && K)) {
+                J = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
+            } else  {
+                J = 0;
+            }
+
+            return  J;
+        },
+
+
+        getDefaultUnit: function(M) {
+            if (this.patterns.defaultUnit.test(M)) {
+                return  'px';
+            }
+
+            return  '';
+        },
+
+        animateX : function(N, O) {
+            var  f = function() {
+                this.onComplete.removeListener(f);
+                if (typeof  N == "function") {
+                    N.call(O || this, this);
+                }
+            };
+            this.onComplete.addListener(f, this);
+            this.animate();
+        },
+
+
+        setRuntimeAttribute: function(P) {
+            var  Q;
+            var  R;
+            var  S = this.attributes;
+
+            this.runtimeAttributes[P] = {};
+
+            var  T = function(U) {
+                return  (typeof  U !== 'undefined');
+            };
+
+            if (!T(S[P]['to']) && !T(S[P]['by'])) {
+                return  false;
+            }
+
+
+            Q = ( T(S[P]['from']) ) ? S[P]['from'] : this.getAttribute(P);
+
+
+            if (T(S[P]['to'])) {
+                R = S[P]['to'];
+            } else  if (T(S[P]['by'])) {
+                if (Q.constructor == Array) {
+                    R = [];
+                    for (var  i = 0, len = Q.length; i < len; ++i) {
+                        R[i] = Q[i] + S[P]['by'][i];
+                    }
+                } else  {
+                    R = Q + S[P]['by'];
+                }
+            }
+
+
+            this.runtimeAttributes[P].start = Q;
+            this.runtimeAttributes[P].end = R;
+
+
+            this.runtimeAttributes[P].unit = ( T(S[P].unit) ) ? S[P]['unit'] : this.getDefaultUnit(P);
+        },
+
+
+        init: function(el, U, V, W) {
+
+            var  X = false;
+
+
+            var  Y = null;
+
+
+            var  Z = 0;
+
+
+            el = Roo.getDom(el);
+
+
+            this.attributes = U || {};
+
+
+            this.duration = V || 1;
+
+
+            this.method = W || Roo.lib.Easing.easeNone;
+
+
+            this.useSeconds = true;
+
+
+            this.currentFrame = 0;
+
+
+            this.totalFrames = Roo.lib.AnimMgr.fps;
+
+
+            this.getEl = function() {
+                return  el;
+            };
+
+
+            this.isAnimated = function() {
+                return  X;
+            };
+
+
+            this.getStartTime = function() {
+                return  Y;
+            };
+
+            this.runtimeAttributes = {};
+
+
+            this.animate = function() {
+                if (this.isAnimated()) {
+                    return  false;
+                }
+
+
+                this.currentFrame = 0;
+
+                this.totalFrames = ( this.useSeconds ) ? Math.ceil(Roo.lib.AnimMgr.fps * this.duration) : this.duration;
+
+                Roo.lib.AnimMgr.registerElement(this);
+            };
+
+
+            this.stop = function(e) {
+                if (e) {
+                    this.currentFrame = this.totalFrames;
+                    this._onTween.fire();
+                }
+
+                Roo.lib.AnimMgr.stop(this);
+            };
+
+            var  b = function() {
+                this.onStart.fire();
+
+                this.runtimeAttributes = {};
+                for (var  P  in  this.attributes) {
+                    this.setRuntimeAttribute(P);
+                }
+
+
+                X = true;
+                Z = 0;
+                Y = new  Date();
+            };
+
+
+            var  c = function() {
+                var  e = {
+                    duration: new  Date() - this.getStartTime(),
+                    currentFrame: this.currentFrame
+                };
+
+                e.toString = function() {
+                    return  (
+                            'duration: ' + e.duration +
+                            ', currentFrame: ' + e.currentFrame
+                            );
+                };
+
+                this.onTween.fire(e);
+
+                var  g = this.runtimeAttributes;
+
+                for (var  P  in  g) {
+                    this.setAttribute(P, this.doMethod(P, g[P].start, g[P].end), g[P].unit);
+                }
+
+
+                Z += 1;
+            };
+
+            var  d = function() {
+                var  e = (new  Date() - Y) / 1000 ;
+
+                var  g = {
+                    duration: e,
+                    frames: Z,
+                    fps: Z / e
+                };
+
+                g.toString = function() {
+                    return  (
+                            'duration: ' + g.duration +
+                            ', frames: ' + g.frames +
+                            ', fps: ' + g.fps
+                            );
+                };
+
+                X = false;
+                Z = 0;
+                this.onComplete.fire(g);
+            };
+
+
+            this._onStart = new  Roo.util.Event(this);
+            this.onStart = new  Roo.util.Event(this);
+            this.onTween = new  Roo.util.Event(this);
+            this._onTween = new  Roo.util.Event(this);
+            this.onComplete = new  Roo.util.Event(this);
+            this._onComplete = new  Roo.util.Event(this);
+            this._onStart.addListener(b);
+            this._onTween.addListener(c);
+            this._onComplete.addListener(d);
+        }
+    };
+})();
+
+
+
+
+Roo.lib.AnimMgr = new  function() {
+
+        var  A = null;
+
+
+        var  B = [];
+
+
+        var  C = 0;
+
+
+        this.fps = 1000;
+
+
+        this.delay = 1;
+
+
+        this.registerElement = function(F) {
+            B[B.length] = F;
+            C += 1;
+            F._onStart.fire();
+            this.start();
+        };
+
+
+        this.unRegister = function(F, G) {
+            F._onComplete.fire();
+            G = G || D(F);
+            if (G != -1) {
+                B.splice(G, 1);
+            }
+
+
+            C -= 1;
+            if (C <= 0) {
+                this.stop();
+            }
+        };
+
+
+        this.start = function() {
+            if (A === null) {
+                A = setInterval(this.run, this.delay);
+            }
+        };
+
+
+        this.stop = function(F) {
+            if (!F) {
+                clearInterval(A);
+
+                for (var  i = 0, len = B.length; i < len; ++i) {
+                    if (B[0].isAnimated()) {
+                        this.unRegister(B[0], 0);
+                    }
+                }
+
+
+                B = [];
+                A = null;
+                C = 0;
+            }
+            else  {
+                this.unRegister(F);
+            }
+        };
+
+
+        this.run = function() {
+            for (var  i = 0, len = B.length; i < len; ++i) {
+                var  tween = B[i];
+                if (!tween || !tween.isAnimated()) {
+                    continue;
+                }
+
+                if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null)
+                {
+                    tween.currentFrame += 1;
+
+                    if (tween.useSeconds) {
+                        E(tween);
+                    }
+
+                    tween._onTween.fire();
+                }
+                else  {
+                    Roo.lib.AnimMgr.stop(tween, i);
+                }
+            }
+        };
+
+        var  D = function(F) {
+            for (var  i = 0, len = B.length; i < len; ++i) {
+                if (B[i] == F) {
+                    return  i;
+                }
+            }
+            return  -1;
+        };
+
+
+        var  E = function(F) {
+            var  G = F.totalFrames;
+            var  H = F.currentFrame;
+            var  I = (F.currentFrame * F.duration * 1000 / F.totalFrames);
+            var  J = (new  Date() - F.getStartTime());
+            var  K = 0;
+
+            if (J < F.duration * 1000) {
+                K = Math.round((J / I - 1) * F.currentFrame);
+            } else  {
+                K = G - (H + 1);
+            }
+            if (K > 0 && isFinite(K)) {
+                if (F.currentFrame + K >= G) {
+                    K = G - (H + 1);
+                }
+
+
+                F.currentFrame += K;
+            }
+        };
+    };
+
+
+Roo.lib.Bezier = new  function() {
+
+        this.getPosition = function(A, t) {
+            var  n = A.length;
+            var  B = [];
+
+            for (var  i = 0; i < n; ++i) {
+                B[i] = [A[i][0], A[i][1]];
+            }
+
+            for (var  j = 1; j < n; ++j) {
+                for (i = 0; i < n - j; ++i) {
+                    B[i][0] = (1 - t) * B[i][0] + t * B[parseInt(i + 1, 10)][0];
+                    B[i][1] = (1 - t) * B[i][1] + t * B[parseInt(i + 1, 10)][1];
+                }
+            }
+
+            return  [ B[0][0], B[0][1] ];
+
+        };
+    };
+
+
+(function() {
+
+    Roo.lib.ColorAnim = function(el, D, E, F) {
+        Roo.lib.ColorAnim.superclass.constructor.call(this, el, D, E, F);
+    };
+
+    Roo.extend(Roo.lib.ColorAnim, Roo.lib.AnimBase);
+
+    var  A = Roo.lib.AnimBase.fly;
+    var  Y = Roo.lib;
+    var  B = Y.ColorAnim.superclass;
+    var  C = Y.ColorAnim.prototype;
+
+    C.toString = function() {
+        var  el = this.getEl();
+        var  id = el.id || el.tagName;
+        return  ("ColorAnim " + id);
+    };
+
+    C.patterns.color = /color$/i;
+    C.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
+    C.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
+    C.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
+    C.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
+
+
+    C.parseColor = function(s) {
+        if (s.length == 3) {
+            return  s;
+        }
+
+        var  c = this.patterns.hex.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1], 16), parseInt(c[2], 16), parseInt(c[3], 16) ];
+        }
+
+
+        c = this.patterns.rgb.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1], 10), parseInt(c[2], 10), parseInt(c[3], 10) ];
+        }
+
+
+        c = this.patterns.hex3.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1] + c[1], 16), parseInt(c[2] + c[2], 16), parseInt(c[3] + c[3], 16) ];
+        }
+
+        return  null;
+    };
+    
+    C.getAttribute = function(D) {
+        var  el = this.getEl();
+        if (this.patterns.color.test(D)) {
+            var  val = A(el).getStyle(D);
+
+            if (this.patterns.transparent.test(val)) {
+                var  parent = el.parentNode;
+                val = A(parent).getStyle(D);
+
+                while (parent && this.patterns.transparent.test(val)) {
+                    parent = parent.parentNode;
+                    val = A(parent).getStyle(D);
+                    if (parent.tagName.toUpperCase() == 'HTML') {
+                        val = '#fff';
+                    }
+                }
+            }
+        } else  {
+            val = B.getAttribute.call(this, D);
+        }
+
+        return  val;
+    };
+    C.getAttribute = function(D) {
+        var  el = this.getEl();
+        if (this.patterns.color.test(D)) {
+            var  val = A(el).getStyle(D);
+
+            if (this.patterns.transparent.test(val)) {
+                var  parent = el.parentNode;
+                val = A(parent).getStyle(D);
+
+                while (parent && this.patterns.transparent.test(val)) {
+                    parent = parent.parentNode;
+                    val = A(parent).getStyle(D);
+                    if (parent.tagName.toUpperCase() == 'HTML') {
+                        val = '#fff';
+                    }
+                }
+            }
+        } else  {
+            val = B.getAttribute.call(this, D);
+        }
+
+        return  val;
+    };
+
+    C.doMethod = function(D, E, F) {
+        var  G;
+
+        if (this.patterns.color.test(D)) {
+            G = [];
+            for (var  i = 0, len = E.length; i < len; ++i) {
+                G[i] = B.doMethod.call(this, D, E[i], F[i]);
+            }
+
+
+            G = 'rgb(' + Math.floor(G[0]) + ',' + Math.floor(G[1]) + ',' + Math.floor(G[2]) + ')';
+        }
+        else  {
+            G = B.doMethod.call(this, D, E, F);
+        }
+
+        return  G;
+    };
+
+    C.setRuntimeAttribute = function(D) {
+        B.setRuntimeAttribute.call(this, D);
+
+        if (this.patterns.color.test(D)) {
+            var  attributes = this.attributes;
+            var  start = this.parseColor(this.runtimeAttributes[D].start);
+            var  end = this.parseColor(this.runtimeAttributes[D].end);
+
+            if (typeof  attributes[D]['to'] === 'undefined' && typeof  attributes[D]['by'] !== 'undefined') {
+                end = this.parseColor(attributes[D].by);
+
+                for (var  i = 0, len = start.length; i < len; ++i) {
+                    end[i] = start[i] + end[i];
+                }
+            }
+
+
+            this.runtimeAttributes[D].start = start;
+            this.runtimeAttributes[D].end = end;
+        }
+    };
+})();
+
+
+
+
+Roo.lib.Easing = {
+
+
+    easeNone: function (t, b, c, d) {
+        return  c * t / d + b;
+    },
+
+
+    easeIn: function (t, b, c, d) {
+        return  c * (t /= d) * t + b;
+    },
+
+
+    easeOut: function (t, b, c, d) {
+        return  -c * (t /= d) * (t - 2) + b;
+    },
+
+
+    easeBoth: function (t, b, c, d) {
+        if ((t /= d / 2) < 1) {
+            return  c / 2 * t * t + b;
+        }
+
+        return  -c / 2 * ((--t) * (t - 2) - 1) + b;
+    },
+
+
+    easeInStrong: function (t, b, c, d) {
+        return  c * (t /= d) * t * t * t + b;
+    },
+
+
+    easeOutStrong: function (t, b, c, d) {
+        return  -c * ((t = t / d - 1) * t * t * t - 1) + b;
+    },
+
+
+    easeBothStrong: function (t, b, c, d) {
+        if ((t /= d / 2) < 1) {
+            return  c / 2 * t * t * t * t + b;
+        }
+
+        return  -c / 2 * ((t -= 2) * t * t * t - 2) + b;
+    },
+
+
+
+    elasticIn: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+        if ((t /= d) == 1) {
+            return  b + c;
+        }
+        if (!p) {
+            p = d * .3;
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        return  -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
+    },
+
+
+    elasticOut: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+        if ((t /= d) == 1) {
+            return  b + c;
+        }
+        if (!p) {
+            p = d * .3;
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        return  a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
+    },
+
+
+    elasticBoth: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+
+        if ((t /= d / 2) == 2) {
+            return  b + c;
+        }
+
+        if (!p) {
+            p = d * (.3 * 1.5);
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        if (t < 1) {
+            return  -.5 * (a * Math.pow(2, 10 * (t -= 1)) *
+                          Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
+        }
+        return  a * Math.pow(2, -10 * (t -= 1)) *
+               Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
+    },
+
+
+
+    backIn: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+        return  c * (t /= d) * t * ((s + 1) * t - s) + b;
+    },
+
+
+    backOut: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+        return  c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
+    },
+
+
+    backBoth: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+
+        if ((t /= d / 2 ) < 1) {
+            return  c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
+        }
+        return  c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
+    },
+
+
+    bounceIn: function (t, b, c, d) {
+        return  c - Roo.lib.Easing.bounceOut(d - t, 0, c, d) + b;
+    },
+
+
+    bounceOut: function (t, b, c, d) {
+        if ((t /= d) < (1 / 2.75)) {
+            return  c * (7.5625 * t * t) + b;
+        } else  if (t < (2 / 2.75)) {
+            return  c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
+        } else  if (t < (2.5 / 2.75)) {
+            return  c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
+        }
+        return  c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
+    },
+
+
+    bounceBoth: function (t, b, c, d) {
+        if (t < d / 2) {
+            return  Roo.lib.Easing.bounceIn(t * 2, 0, c, d) * .5 + b;
+        }
+        return  Roo.lib.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
+    }
+};
+
+
+    (function() {
+        Roo.lib.Motion = function(el, E, F, G) {
+            if (el) {
+                Roo.lib.Motion.superclass.constructor.call(this, el, E, F, G);
+            }
+        };
+
+        Roo.extend(Roo.lib.Motion, Roo.lib.ColorAnim);
+
+
+        var  Y = Roo.lib;
+        var  A = Y.Motion.superclass;
+        var  B = Y.Motion.prototype;
+
+        B.toString = function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Motion " + id);
+        };
+
+        B.patterns.points = /^points$/i;
+
+        B.setAttribute = function(E, F, G) {
+            if (this.patterns.points.test(E)) {
+                G = G || 'px';
+                A.setAttribute.call(this, 'left', F[0], G);
+                A.setAttribute.call(this, 'top', F[1], G);
+            } else  {
+                A.setAttribute.call(this, E, F, G);
+            }
+        };
+
+        B.getAttribute = function(E) {
+            if (this.patterns.points.test(E)) {
+                var  val = [
+                        A.getAttribute.call(this, 'left'),
+                        A.getAttribute.call(this, 'top')
+                        ];
+            } else  {
+                val = A.getAttribute.call(this, E);
+            }
+
+            return  val;
+        };
+
+        B.doMethod = function(E, F, G) {
+            var  H = null;
+
+            if (this.patterns.points.test(E)) {
+                var  t = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
+                H = Y.Bezier.getPosition(this.runtimeAttributes[E], t);
+            } else  {
+                H = A.doMethod.call(this, E, F, G);
+            }
+            return  H;
+        };
+
+        B.setRuntimeAttribute = function(E) {
+            if (this.patterns.points.test(E)) {
+                var  el = this.getEl();
+                var  attributes = this.attributes;
+                var  start;
+                var  control = attributes['points']['control'] || [];
+                var  end;
+                var  i, len;
+
+                if (control.length > 0 && !(control[0]  instanceof  Array)) {
+                    control = [control];
+                } else  {
+                    var  tmp = [];
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        tmp[i] = control[i];
+                    }
+
+                    control = tmp;
+                }
+
+
+                Roo.fly(el).position();
+
+                if (D(attributes['points']['from'])) {
+                    Roo.lib.Dom.setXY(el, attributes['points']['from']);
+                }
+                else  {
+                    Roo.lib.Dom.setXY(el, Roo.lib.Dom.getXY(el));
+                }
+
+
+                start = this.getAttribute('points');
+
+
+                if (D(attributes['points']['to'])) {
+                    end = C.call(this, attributes['points']['to'], start);
+
+                    var  pageXY = Roo.lib.Dom.getXY(this.getEl());
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        control[i] = C.call(this, control[i], start);
+                    }
+
+
+                } else  if (D(attributes['points']['by'])) {
+                    end = [ start[0] + attributes['points']['by'][0], start[1] + attributes['points']['by'][1] ];
+
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        control[i] = [ start[0] + control[i][0], start[1] + control[i][1] ];
+                    }
+                }
+
+
+                this.runtimeAttributes[E] = [start];
+
+                if (control.length > 0) {
+                    this.runtimeAttributes[E] = this.runtimeAttributes[E].concat(control);
+                }
+
+
+                this.runtimeAttributes[E][this.runtimeAttributes[E].length] = end;
+            }
+            else  {
+                A.setRuntimeAttribute.call(this, E);
+            }
+        };
+
+        var  C = function(E, F) {
+            var  G = Roo.lib.Dom.getXY(this.getEl());
+            E = [ E[0] - G[0] + F[0], E[1] - G[1] + F[1] ];
+
+            return  E;
+        };
+
+        var  D = function(E) {
+            return  (typeof  E !== 'undefined');
+        };
+    })();
+
+
+
+    (function() {
+        Roo.lib.Scroll = function(el, C, D, E) {
+            if (el) {
+                Roo.lib.Scroll.superclass.constructor.call(this, el, C, D, E);
+            }
+        };
+
+        Roo.extend(Roo.lib.Scroll, Roo.lib.ColorAnim);
+
+
+        var  Y = Roo.lib;
+        var  A = Y.Scroll.superclass;
+        var  B = Y.Scroll.prototype;
+
+        B.toString = function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Scroll " + id);
+        };
+
+        B.doMethod = function(C, D, E) {
+            var  F = null;
+
+            if (C == 'scroll') {
+                F = [
+                        this.method(this.currentFrame, D[0], E[0] - D[0], this.totalFrames),
+                        this.method(this.currentFrame, D[1], E[1] - D[1], this.totalFrames)
+                        ];
+
+            } else  {
+                F = A.doMethod.call(this, C, D, E);
+            }
+            return  F;
+        };
+
+        B.getAttribute = function(C) {
+            var  D = null;
+            var  el = this.getEl();
+
+            if (C == 'scroll') {
+                D = [ el.scrollLeft, el.scrollTop ];
+            } else  {
+                D = A.getAttribute.call(this, C);
+            }
+
+            return  D;
+        };
+
+        B.setAttribute = function(C, D, E) {
+            var  el = this.getEl();
+
+            if (C == 'scroll') {
+                el.scrollLeft = D[0];
+                el.scrollTop = D[1];
+            } else  {
+                A.setAttribute.call(this, C, D, E);
+            }
+        };
+    })();
+
+
+
+
+
+
+Roo.DomHelper = function(){
+    var  A = null;
+    var  B = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
+    var  C = /^table|tbody|tr|td$/i;
+    var  D = {};
+    
+    
+
+    var  E = function(o){
+        if(typeof  o == 'string'){
+            return  o;
+        }
+        var  b = "";
+        if(!o.tag){
+            o.tag = "div";
+        }
+
+        b += "<" + o.tag;
+        for(var  attr  in  o){
+            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof  o[attr] == "function") continue;
+            if(attr == "style"){
+                var  s = o["style"];
+                if(typeof  s == "function"){
+                    s = s.call();
+                }
+                if(typeof  s == "string"){
+                    b += ' style="' + s + '"';
+                }else  if(typeof  s == "object"){
+                    b += ' style="';
+                    for(var  key  in  s){
+                        if(typeof  s[key] != "function"){
+                            b += key + ":" + s[key] + ";";
+                        }
+                    }
+
+                    b += '"';
+                }
+            }else {
+                if(attr == "cls"){
+                    b += ' class="' + o["cls"] + '"';
+                }else  if(attr == "htmlFor"){
+                    b += ' for="' + o["htmlFor"] + '"';
+                }else {
+                    b += " " + attr + '="' + o[attr] + '"';
+                }
+            }
+        }
+        if(B.test(o.tag)){
+            b += "/>";
+        }else {
+            b += ">";
+            var  cn = o.children || o.cn;
+            if(cn){
+                
+                if((cn  instanceof  Array) || (Roo.isSafari && typeof(cn.join) == "function")){
+                    for(var  i = 0, len = cn.length; i < len; i++) {
+                        b += E(cn[i], b);
+                    }
+                }else {
+                    b += E(cn, b);
+                }
+            }
+            if(o.html){
+                b += o.html;
+            }
+
+            b += "</" + o.tag + ">";
+        }
+        return  b;
+    };
+
+    
+    
+
+    var  F = function(o, M){
+         
+        
+        var  ns = false;
+        if (o.ns && o.ns != 'html') {
+               
+            if (o.xmlns && typeof(D[o.ns]) == 'undefined') {
+                D[o.ns] = o.xmlns;
+                ns = o.xmlns;
+            }
+            if (typeof(D[o.ns]) == 'undefined') {
+                console.log("Trying to create namespace element " + o.ns + ", however no xmlns was sent to builder previously");
+            }
+
+            ns = D[o.ns];
+        }
+        
+        
+        if (typeof(o) == 'string') {
+            return  M.appendChild(document.createTextNode(o));
+        }
+
+        o.tag = o.tag || div;
+        if (o.ns && Roo.isIE) {
+            ns = false;
+            o.tag = o.ns + ':' + o.tag;
+            
+        }
+        var  el = ns ? document.createElementNS( ns, o.tag||'div') :  document.createElement(o.tag||'div');
+        var  N = el.setAttribute ? true : false; 
+        for(var  attr  in  o){
+            
+            if(attr == "tag" || attr == "ns" ||attr == "xmlns" ||attr == "children" || attr == "cn" || attr == "html" || 
+                    attr == "style" || typeof  o[attr] == "function") continue;
+                    
+            if(attr=="cls" && Roo.isIE){
+                el.className = o["cls"];
+            }else {
+                if(N) el.setAttribute(attr=="cls" ? 'class' : attr, o[attr]);
+                else  el[attr] = o[attr];
+            }
+        }
+
+        Roo.DomHelper.applyStyles(el, o.style);
+        var  cn = o.children || o.cn;
+        if(cn){
+            
+             if((cn  instanceof  Array) || (Roo.isSafari && typeof(cn.join) == "function")){
+                for(var  i = 0, len = cn.length; i < len; i++) {
+                    F(cn[i], el);
+                }
+            }else {
+                F(cn, el);
+            }
+        }
+        if(o.html){
+            el.innerHTML = o.html;
+        }
+        if(M){
+           M.appendChild(el);
+        }
+        return  el;
+    };
+
+    var  G = function(M, s, h, e){
+        A.innerHTML = [s, h, e].join('');
+        var  i = -1, el = A;
+        while(++i < M){
+            el = el.firstChild;
+        }
+        return  el;
+    };
+
+    
+    var  ts = '<table>',
+        te = '</table>',
+        H = ts+'<tbody>',
+        I = '</tbody>'+te,
+        J = H + '<tr>',
+        K = '</tr>'+I;
+
+    
+
+    var  L = function(M, N, el, O){
+        if(!A){
+            A = document.createElement('div');
+        }
+        var  P;
+        var  Q = null;
+        if(M == 'td'){
+            if(N == 'afterbegin' || N == 'beforeend'){ 
+                return;
+            }
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+            } else {
+                Q = el.nextSibling;
+                el = el.parentNode;
+            }
+
+            P = G(4, J, O, K);
+        }
+        else  if(M == 'tr'){
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+                P = G(3, H, O, I);
+            } else  if(N == 'afterend'){
+                Q = el.nextSibling;
+                el = el.parentNode;
+                P = G(3, H, O, I);
+            } else { 
+                if(N == 'afterbegin'){
+                    Q = el.firstChild;
+                }
+
+                P = G(4, J, O, K);
+            }
+        } else  if(M == 'tbody'){
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+                P = G(2, ts, O, te);
+            } else  if(N == 'afterend'){
+                Q = el.nextSibling;
+                el = el.parentNode;
+                P = G(2, ts, O, te);
+            } else {
+                if(N == 'afterbegin'){
+                    Q = el.firstChild;
+                }
+
+                P = G(3, H, O, I);
+            }
+        } else { 
+            if(N == 'beforebegin' || N == 'afterend'){ 
+                return;
+            }
+            if(N == 'afterbegin'){
+                Q = el.firstChild;
+            }
+
+            P = G(2, ts, O, te);
+        }
+
+        el.insertBefore(P, Q);
+        return  P;
+    };
+
+    return  {
+    
+
+    useDom : false,
+
+    
+
+    markup : function(o){
+        return  E(o);
+    },
+
+    
+
+    applyStyles : function(el, c){
+        if(c){
+           el = Roo.fly(el);
+           if(typeof  c == "string"){
+               var  re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+               var  matches;
+               while ((matches = re.exec(c)) != null){
+                   el.setStyle(matches[1], matches[2]);
+               }
+           }else  if (typeof  c == "object"){
+               for (var  style  in  c){
+                  el.setStyle(style, c[style]);
+               }
+           }else  if (typeof  c == "function"){
+                Roo.DomHelper.applyStyles(el, c.call());
+           }
+        }
+    },
+
+    
+
+    insertHtml : function(d, el, e){
+        d = d.toLowerCase();
+        if(el.insertAdjacentHTML){
+            if(C.test(el.tagName)){
+                var  rs;
+                if(rs = L(el.tagName.toLowerCase(), d, el, e)){
+                    return  rs;
+                }
+            }
+            switch(d){
+                case  "beforebegin":
+                    el.insertAdjacentHTML('BeforeBegin', e);
+                    return  el.previousSibling;
+                case  "afterbegin":
+                    el.insertAdjacentHTML('AfterBegin', e);
+                    return  el.firstChild;
+                case  "beforeend":
+                    el.insertAdjacentHTML('BeforeEnd', e);
+                    return  el.lastChild;
+                case  "afterend":
+                    el.insertAdjacentHTML('AfterEnd', e);
+                    return  el.nextSibling;
+            }
+            throw  'Illegal insertion point -> "' + d + '"';
+        }
+        var  f = el.ownerDocument.createRange();
+        var  g;
+        switch(d){
+             case  "beforebegin":
+                f.setStartBefore(el);
+                g = f.createContextualFragment(e);
+                el.parentNode.insertBefore(g, el);
+                return  el.previousSibling;
+             case  "afterbegin":
+                if(el.firstChild){
+                    f.setStartBefore(el.firstChild);
+                    g = f.createContextualFragment(e);
+                    el.insertBefore(g, el.firstChild);
+                    return  el.firstChild;
+                }else {
+                    el.innerHTML = e;
+                    return  el.firstChild;
+                }
+            case  "beforeend":
+                if(el.lastChild){
+                    f.setStartAfter(el.lastChild);
+                    g = f.createContextualFragment(e);
+                    el.appendChild(g);
+                    return  el.lastChild;
+                }else {
+                    el.innerHTML = e;
+                    return  el.lastChild;
+                }
+            case  "afterend":
+                f.setStartAfter(el);
+                g = f.createContextualFragment(e);
+                el.parentNode.insertBefore(g, el.nextSibling);
+                return  el.nextSibling;
+            }
+            throw  'Illegal insertion point -> "' + d + '"';
+    },
+
+    
+
+    insertBefore : function(el, o, h){
+        return  this.doInsert(el, o, h, "beforeBegin");
+    },
+
+    
+
+    insertAfter : function(el, o, j){
+        return  this.doInsert(el, o, j, "afterEnd", "nextSibling");
+    },
+
+    
+
+    insertFirst : function(el, o, k){
+        return  this.doInsert(el, o, k, "afterBegin");
+    },
+
+    
+    doInsert : function(el, o, l, m, n){
+        el = Roo.getDom(el);
+        var  p;
+        if(this.useDom || o.ns){
+            p = F(o, null);
+            el.parentNode.insertBefore(p, n ? el[n] : el);
+        }else {
+            var  e = E(o);
+            p = this.insertHtml(m, el, e);
+        }
+        return  l ? Roo.get(p, true) : p;
+    },
+
+    
+
+    append : function(el, o, q){
+        el = Roo.getDom(el);
+        var  r;
+        if(this.useDom || o.ns){
+            r = F(o, null);
+            el.appendChild(r);
+        }else {
+            var  e = E(o);
+            r = this.insertHtml("beforeEnd", el, e);
+        }
+        return  q ? Roo.get(r, true) : r;
+    },
+
+    
+
+    overwrite : function(el, o, t){
+        el = Roo.getDom(el);
+        if (o.ns) {
+          
+            while (el.childNodes.length) {
+                el.removeChild(el.firstChild);
+            }
+
+            F(o, el);
+        } else  {
+            el.innerHTML = E(o);   
+        }
+        
+        return  t ? Roo.get(el.firstChild, true) : el.firstChild;
+    },
+
+    
+
+    createTemplate : function(o){
+        var  u = E(o);
+        return  new  Roo.Template(u);
+    }
+    };
+}();
+
+
+
+
+
+Roo.Template = function(A){
+    
+    if(A  instanceof  Array){
+        A = A.join("");
+    }else  if(arguments.length > 1){
+        A = Array.prototype.join.call(arguments, "");
+    }
+    
+    
+    if (typeof(A) == 'object') {
+        Roo.apply(this,A)
+    } else  {
+        
+        this.html = A;
+    }
+    
+    
+};
+Roo.Template.prototype = {
+    
+    
+
+    html : '',
+    
+
+    applyTemplate : function(values){
+        try {
+            
+            if(this.compiled){
+                return  this.compiled(values);
+            }
+            var  useF = this.disableFormats !== true;
+            var  fm = Roo.util.Format, tpl = this;
+            var  fn = function(m, E, F, G){
+                if(F && useF){
+                    if(F.substr(0, 5) == "this."){
+                        return  tpl.call(F.substr(5), values[E], values);
+                    }else {
+                        if(G){
+                            
+                            
+                            
+                            var  re = /^\s*['"](.*)["']\s*$/;
+                            G = G.split(',');
+                            for(var  i = 0, len = G.length; i < len; i++){
+                                G[i] = G[i].replace(re, "$1");
+                            }
+
+                            G = [values[E]].concat(G);
+                        }else {
+                            G = [values[E]];
+                        }
+                        return  fm[F].apply(fm, G);
+                    }
+                }else {
+                    return  values[E] !== undefined ? values[E] : "";
+                }
+            };
+            return  this.html.replace(this.re, fn);
+        } catch (e) {
+            Roo.log(e);
+            throw  e;
+        }
+         
+    },
+    
+    
+
+    set : function(B, C){
+        this.html = B;
+        this.compiled = null;
+        if(C){
+            this.compile();
+        }
+        return  this;
+    },
+    
+    
+
+    disableFormats : false,
+    
+    
+
+    re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
+    
+    
+
+    compile : function(){
+        var  fm = Roo.util.Format;
+        var  D = this.disableFormats !== true;
+        var  E = Roo.isGecko ? "+" : ",";
+        var  fn = function(m, G, H, I){
+            if(H && D){
+                I = I ? ',' + I : "";
+                if(H.substr(0, 5) != "this."){
+                    H = "fm." + H + '(';
+                }else {
+                    H = 'this.call("'+ H.substr(5) + '", ';
+                    I = ", values";
+                }
+            }else {
+                I= ''; H = "(values['" + G + "'] == undefined ? '' : ";
+            }
+            return  "'"+ E + H + "values['" + G + "']" + I + ")"+E+"'";
+        };
+        var  F;
+        
+        if(Roo.isGecko){
+            F = "this.compiled = function(values){ return '" +
+                   this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
+                    "';};";
+        }else {
+            F = ["this.compiled = function(values){ return ['"];
+            F.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn));
+            F.push("'].join('');};");
+            F = F.join('');
+        }
+        
+
+        eval(F);
+        return  this;
+    },
+    
+    
+    call : function(G, H, I){
+        return  this[G](H, I);
+    },
+    
+    
+
+    insertFirst: function(el, J, K){
+        return  this.doInsert('afterBegin', el, J, K);
+    },
+
+    
+
+    insertBefore: function(el, L, M){
+        return  this.doInsert('beforeBegin', el, L, M);
+    },
+
+    
+
+    insertAfter : function(el, N, O){
+        return  this.doInsert('afterEnd', el, N, O);
+    },
+    
+    
+
+    append : function(el, P, Q){
+        return  this.doInsert('beforeEnd', el, P, Q);
+    },
+
+    doInsert : function(R, el, S, T){
+        el = Roo.getDom(el);
+        var  U = Roo.DomHelper.insertHtml(R, el, this.applyTemplate(S));
+        return  T ? Roo.get(U, true) : U;
+    },
+
+    
+
+    overwrite : function(el, V, W){
+        el = Roo.getDom(el);
+        el.innerHTML = this.applyTemplate(V);
+        return  W ? Roo.get(el.firstChild, true) : el.firstChild;
+    }
+};
+
+
+Roo.Template.prototype.apply = Roo.Template.prototype.applyTemplate;
+
+
+Roo.DomHelper.Template = Roo.Template;
+
+
+
+Roo.Template.from = function(el){
+    el = Roo.getDom(el);
+    return  new  Roo.Template(el.value || el.innerHTML);
+};
+
+
+
+
+
+
+
+Roo.DomQuery = function(){
+    var  A = {}, simpleCache = {}, valueCache = {};
+    var  B = /\S/;
+    var  C = /^\s+|\s+$/g;
+    var  D = /\{(\d+)\}/g;
+    var  E = /^(\s?[\/>+~]\s?|\s|$)/;
+    var  F = /^(#)?([\w-\*]+)/;
+    var  G = /(\d*)n\+?(\d*)/, H = /\D/;
+
+    function  I(p, T){
+        var  i = 0;
+        var  n = p.firstChild;
+        while(n){
+            if(n.nodeType == 1){
+               if(++i == T){
+                   return  n;
+               }
+            }
+
+            n = n.nextSibling;
+        }
+        return  null;
+    };
+
+    function  J(n){
+        while((n = n.nextSibling) && n.nodeType != 1);
+        return  n;
+    };
+
+    function  K(n){
+        while((n = n.previousSibling) && n.nodeType != 1);
+        return  n;
+    };
+
+    function  L(d){
+        var  n = d.firstChild, ni = -1;
+           while(n){
+               var  nx = n.nextSibling;
+               if(n.nodeType == 3 && !B.test(n.nodeValue)){
+                   d.removeChild(n);
+               }else {
+                   n.nodeIndex = ++ni;
+               }
+
+               n = nx;
+           }
+           return  this;
+       };
+
+    function  byClassName(c, a, v){
+        if(!v){
+            return  c;
+        }
+        var  r = [], ri = -1, cn;
+        for(var  i = 0, ci; ci = c[i]; i++){
+            if((' '+ci.className+' ').indexOf(v) != -1){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  attrValue(n, T){
+        if(!n.tagName && typeof  n.length != "undefined"){
+            n = n[0];
+        }
+        if(!n){
+            return  null;
+        }
+        if(T == "for"){
+            return  n.htmlFor;
+        }
+        if(T == "class" || T == "className"){
+            return  n.className;
+        }
+        return  n.getAttribute(T) || n[T];
+
+    };
+
+    function  getNodes(ns, T, U){
+        var  V = [], ri = -1, cs;
+        if(!ns){
+            return  V;
+        }
+
+        U = U || "*";
+        if(typeof  ns.getElementsByTagName != "undefined"){
+            ns = [ns];
+        }
+        if(!T){
+            for(var  i = 0, ni; ni = ns[i]; i++){
+                cs = ni.getElementsByTagName(U);
+                for(var  j = 0, ci; ci = cs[j]; j++){
+                    V[++ri] = ci;
+                }
+            }
+        }else  if(T == "/" || T == ">"){
+            var  utag = U.toUpperCase();
+            for(var  i = 0, ni, cn; ni = ns[i]; i++){
+                cn = ni.children || ni.childNodes;
+                for(var  j = 0, cj; cj = cn[j]; j++){
+                    if(cj.nodeName == utag || cj.nodeName == U  || U == '*'){
+                        V[++ri] = cj;
+                    }
+                }
+            }
+        }else  if(T == "+"){
+            var  utag = U.toUpperCase();
+            for(var  i = 0, n; n = ns[i]; i++){
+                while((n = n.nextSibling) && n.nodeType != 1);
+                if(n && (n.nodeName == utag || n.nodeName == U || U == '*')){
+                    V[++ri] = n;
+                }
+            }
+        }else  if(T == "~"){
+            for(var  i = 0, n; n = ns[i]; i++){
+                while((n = n.nextSibling) && (n.nodeType != 1 || (U == '*' || n.tagName.toLowerCase()!=U)));
+                if(n){
+                    V[++ri] = n;
+                }
+            }
+        }
+        return  V;
+    };
+
+    function  M(a, b){
+        if(b.slice){
+            return  a.concat(b);
+        }
+        for(var  i = 0, l = b.length; i < l; i++){
+            a[a.length] = b[i];
+        }
+        return  a;
+    }
+
+    function  byTag(cs, T){
+        if(cs.tagName || cs == document){
+            cs = [cs];
+        }
+        if(!T){
+            return  cs;
+        }
+        var  r = [], ri = -1;
+        T = T.toLowerCase();
+        for(var  i = 0, ci; ci = cs[i]; i++){
+            if(ci.nodeType == 1 && ci.tagName.toLowerCase()==T){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  N(cs, T, id){
+        if(cs.tagName || cs == document){
+            cs = [cs];
+        }
+        if(!id){
+            return  cs;
+        }
+        var  r = [], ri = -1;
+        for(var  i = 0,ci; ci = cs[i]; i++){
+            if(ci && ci.id == id){
+                r[++ri] = ci;
+                return  r;
+            }
+        }
+        return  r;
+    };
+
+    function  byAttribute(cs, T, U, op, V){
+        var  r = [], ri = -1, st = V=="{";
+        var  f = Roo.DomQuery.operators[op];
+        for(var  i = 0, ci; ci = cs[i]; i++){
+            var  a;
+            if(st){
+                a = Roo.DomQuery.getStyle(ci, T);
+            }
+            else  if(T == "class" || T == "className"){
+                a = ci.className;
+            }else  if(T == "for"){
+                a = ci.htmlFor;
+            }else  if(T == "href"){
+                a = ci.getAttribute("href", 2);
+            }else {
+                a = ci.getAttribute(T);
+            }
+            if((f && f(a, U)) || (!f && a)){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  byPseudo(cs, T, U){
+        return  Roo.DomQuery.pseudos[T](cs, U);
+    };
+
+    
+    
+    
+    var  O = window.ActiveXObject ? true : false;
+
+    
+    
+    
+    
+
+    var  batch = 30803; 
+
+    var  P = 30803;
+
+    function  Q(cs){
+        var  d = ++P;
+        cs[0].setAttribute("_nodup", d);
+        var  r = [cs[0]];
+        for(var  i = 1, len = cs.length; i < len; i++){
+            var  c = cs[i];
+            if(!c.getAttribute("_nodup") != d){
+                c.setAttribute("_nodup", d);
+                r[r.length] = c;
+            }
+        }
+        for(var  i = 0, len = cs.length; i < len; i++){
+            cs[i].removeAttribute("_nodup");
+        }
+        return  r;
+    }
+
+    function  nodup(cs){
+        if(!cs){
+            return  [];
+        }
+        var  T = cs.length, c, i, r = cs, cj, ri = -1;
+        if(!T || typeof  cs.nodeType != "undefined" || T == 1){
+            return  cs;
+        }
+        if(O && typeof  cs[0].selectSingleNode != "undefined"){
+            return  Q(cs);
+        }
+        var  d = ++P;
+        cs[0]._nodup = d;
+        for(i = 1; c = cs[i]; i++){
+            if(c._nodup != d){
+                c._nodup = d;
+            }else {
+                r = [];
+                for(var  j = 0; j < i; j++){
+                    r[++ri] = cs[j];
+                }
+                for(j = i+1; cj = cs[j]; j++){
+                    if(cj._nodup != d){
+                        cj._nodup = d;
+                        r[++ri] = cj;
+                    }
+                }
+                return  r;
+            }
+        }
+        return  r;
+    }
+
+    function  R(c1, c2){
+        var  d = ++P;
+        for(var  i = 0, len = c1.length; i < len; i++){
+            c1[i].setAttribute("_qdiff", d);
+        }
+        var  r = [];
+        for(var  i = 0, len = c2.length; i < len; i++){
+            if(c2[i].getAttribute("_qdiff") != d){
+                r[r.length] = c2[i];
+            }
+        }
+        for(var  i = 0, len = c1.length; i < len; i++){
+           c1[i].removeAttribute("_qdiff");
+        }
+        return  r;
+    }
+
+    function  S(c1, c2){
+        var  T = c1.length;
+        if(!T){
+            return  c2;
+        }
+        if(O && c1[0].selectSingleNode){
+            return  R(c1, c2);
+        }
+        var  d = ++P;
+        for(var  i = 0; i < T; i++){
+            c1[i]._qdiff = d;
+        }
+        var  r = [];
+        for(var  i = 0, len = c2.length; i < len; i++){
+            if(c2[i]._qdiff != d){
+                r[r.length] = c2[i];
+            }
+        }
+        return  r;
+    }
+
+    function  quickId(ns, T, U, id){
+        if(ns == U){
+           var  d = U.ownerDocument || U;
+           return  d.getElementById(id);
+        }
+
+        ns = getNodes(ns, T, "*");
+        return  N(ns, null, id);
+    }
+
+    return  {
+        getStyle : function(el, AA){
+            return  Roo.fly(el).getStyle(AA);
+        },
+        
+
+        compile : function(AB, AC){
+            AC = AC || "select";
+            
+            var  fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];
+            var  q = AB, mode, lq;
+            var  tk = Roo.DomQuery.matchers;
+            var  AD = tk.length;
+            var  mm;
+
+            
+            var  AE = q.match(E);
+            if(AE && AE[1]){
+                fn[fn.length] = 'mode="'+AE[1].replace(C, "")+'";';
+                q = q.replace(AE[1], "");
+            }
+            
+            while(AB.substr(0, 1)=="/"){
+                AB = AB.substr(1);
+            }
+
+            while(q && lq != q){
+                lq = q;
+                var  tm = q.match(F);
+                if(AC == "select"){
+                    if(tm){
+                        if(tm[1] == "#"){
+                            fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
+                        }else {
+                            fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
+                        }
+
+                        q = q.replace(tm[0], "");
+                    }else  if(q.substr(0, 1) != '@'){
+                        fn[fn.length] = 'n = getNodes(n, mode, "*");';
+                    }
+                }else {
+                    if(tm){
+                        if(tm[1] == "#"){
+                            fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
+                        }else {
+                            fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
+                        }
+
+                        q = q.replace(tm[0], "");
+                    }
+                }
+                while(!(mm = q.match(E))){
+                    var  matched = false;
+                    for(var  j = 0; j < AD; j++){
+                        var  t = tk[j];
+                        var  m = q.match(t.re);
+                        if(m){
+                            fn[fn.length] = t.select.replace(D, function(x, i){
+                                                    return  m[i];
+                                                });
+                            q = q.replace(m[0], "");
+                            matched = true;
+                            break;
+                        }
+                    }
+                    
+                    if(!matched){
+                        throw  'Error parsing selector, parsing failed at "' + q + '"';
+                    }
+                }
+                if(mm[1]){
+                    fn[fn.length] = 'mode="'+mm[1].replace(C, "")+'";';
+                    q = q.replace(mm[1], "");
+                }
+            }
+
+            fn[fn.length] = "return nodup(n);\n}";
+            
+             
+            eval(fn.join(""));
+            return  f;
+        },
+
+        
+
+        select : function(AF, AG, AH){
+            if(!AG || AG == document){
+                AG = document;
+            }
+            if(typeof  AG == "string"){
+                AG = document.getElementById(AG);
+            }
+            var  AI = AF.split(",");
+            var  AJ = [];
+            for(var  i = 0, len = AI.length; i < len; i++){
+                var  p = AI[i].replace(C, "");
+                if(!A[p]){
+                    A[p] = Roo.DomQuery.compile(p);
+                    if(!A[p]){
+                        throw  p + " is not a valid selector";
+                    }
+                }
+                var  z = A[p](AG);
+                if(z && z != document){
+                    AJ = AJ.concat(z);
+                }
+            }
+            if(AI.length > 1){
+                return  nodup(AJ);
+            }
+            return  AJ;
+        },
+
+        
+
+        selectNode : function(AK, AL){
+            return  Roo.DomQuery.select(AK, AL)[0];
+        },
+
+        
+
+        selectValue : function(AM, AN, AO){
+            AM = AM.replace(C, "");
+            if(!valueCache[AM]){
+                valueCache[AM] = Roo.DomQuery.compile(AM, "select");
+            }
+            var  n = valueCache[AM](AN);
+            n = n[0] ? n[0] : n;
+            var  v = (n && n.firstChild ? n.firstChild.nodeValue : null);
+            return  ((v === null||v === undefined||v==='') ? AO : v);
+        },
+
+        
+
+        selectNumber : function(AP, AQ, AR){
+            var  v = Roo.DomQuery.selectValue(AP, AQ, AR || 0);
+            return  parseFloat(v);
+        },
+
+        
+
+        is : function(el, ss){
+            if(typeof  el == "string"){
+                el = document.getElementById(el);
+            }
+            var  AS = (el  instanceof  Array);
+            var  AT = Roo.DomQuery.filter(AS ? el : [el], ss);
+            return  AS ? (AT.length == el.length) : (AT.length > 0);
+        },
+
+        
+
+        filter : function(AU, ss, AV){
+            ss = ss.replace(C, "");
+            if(!simpleCache[ss]){
+                simpleCache[ss] = Roo.DomQuery.compile(ss, "simple");
+            }
+            var  AW = simpleCache[ss](AU);
+            return  AV ? S(AW, AU) : AW;
+        },
+
+        
+
+        matchers : [{
+                re: /^\.([\w-]+)/,
+                select: 'n = byClassName(n, null, " {1} ");'
+            }, {
+                re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
+                select: 'n = byPseudo(n, "{1}", "{2}");'
+            },{
+                re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
+                select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
+            }, {
+                re: /^#([\w-]+)/,
+                select: 'n = byId(n, null, "{1}");'
+            },{
+                re: /^@([\w-]+)/,
+                select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
+            }
+        ],
+
+        
+
+        operators : {
+            "=" : function(a, v){
+                return  a == v;
+            },
+            "!=" : function(a, v){
+                return  a != v;
+            },
+            "^=" : function(a, v){
+                return  a && a.substr(0, v.length) == v;
+            },
+            "$=" : function(a, v){
+                return  a && a.substr(a.length-v.length) == v;
+            },
+            "*=" : function(a, v){
+                return  a && a.indexOf(v) !== -1;
+            },
+            "%=" : function(a, v){
+                return  (a % v) == 0;
+            },
+            "|=" : function(a, v){
+                return  a && (a == v || a.substr(0, v.length+1) == v+'-');
+            },
+            "~=" : function(a, v){
+                return  a && (' '+a+' ').indexOf(' '+v+' ') != -1;
+            }
+        },
+
+        
+
+        pseudos : {
+            "first-child" : function(c){
+                var  r = [], ri = -1, n;
+                for(var  i = 0, ci; ci = n = c[i]; i++){
+                    while((n = n.previousSibling) && n.nodeType != 1);
+                    if(!n){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "last-child" : function(c){
+                var  r = [], ri = -1, n;
+                for(var  i = 0, ci; ci = n = c[i]; i++){
+                    while((n = n.nextSibling) && n.nodeType != 1);
+                    if(!n){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "nth-child" : function(c, a) {
+                var  r = [], ri = -1;
+                var  m = G.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !H.test(a) && "n+" + a || a);
+                var  f = (m[1] || 1) - 0, l = m[2] - 0;
+                for(var  i = 0, n; n = c[i]; i++){
+                    var  pn = n.parentNode;
+                    if (batch != pn._batch) {
+                        var  j = 0;
+                        for(var  cn = pn.firstChild; cn; cn = cn.nextSibling){
+                            if(cn.nodeType == 1){
+                               cn.nodeIndex = ++j;
+                            }
+                        }
+
+                        pn._batch = batch;
+                    }
+                    if (f == 1) {
+                        if (l == 0 || n.nodeIndex == l){
+                            r[++ri] = n;
+                        }
+                    } else  if ((n.nodeIndex + l) % f == 0){
+                        r[++ri] = n;
+                    }
+                }
+
+                return  r;
+            },
+
+            "only-child" : function(c){
+                var  r = [], ri = -1;;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(!K(ci) && !J(ci)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "empty" : function(c){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  cns = ci.childNodes, j = 0, cn, empty = true;
+                    while(cn = cns[j]){
+                        ++j;
+                        if(cn.nodeType == 1 || cn.nodeType == 3){
+                            empty = false;
+                            break;
+                        }
+                    }
+                    if(empty){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "contains" : function(c, v){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "nodeValue" : function(c, v){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(ci.firstChild && ci.firstChild.nodeValue == v){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "checked" : function(c){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(ci.checked == true){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "not" : function(c, ss){
+                return  Roo.DomQuery.filter(c, ss, true);
+            },
+
+            "odd" : function(c){
+                return  this["nth-child"](c, "odd");
+            },
+
+            "even" : function(c){
+                return  this["nth-child"](c, "even");
+            },
+
+            "nth" : function(c, a){
+                return  c[a-1] || [];
+            },
+
+            "first" : function(c){
+                return  c[0] || [];
+            },
+
+            "last" : function(c){
+                return  c[c.length-1] || [];
+            },
+
+            "has" : function(c, ss){
+                var  s = Roo.DomQuery.select;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(s(ss, ci).length > 0){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "next" : function(c, ss){
+                var  is = Roo.DomQuery.is;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  n = J(ci);
+                    if(n && is(n, ss)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "prev" : function(c, ss){
+                var  is = Roo.DomQuery.is;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  n = K(ci);
+                    if(n && is(n, ss)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            }
+        }
+    };
+}();
+
+
+
+Roo.query = Roo.DomQuery.select;
+
+
+
+
+
+
+
+Roo.util.Observable = function(A){
+    
+    A = A|| {};
+    this.addEvents(A.events || {});
+    if (A.events) {
+        delete  A.events; 
+    }
+
+     
+    Roo.apply(this, A);
+    
+    if(this.listeners){
+        this.on(this.listeners);
+        delete  this.listeners;
+    }
+};
+Roo.util.Observable.prototype = {
+    
+
+    
+    
+    
+
+    fireEvent : function(){
+        var  ce = this.events[arguments[0].toLowerCase()];
+        if(typeof  ce == "object"){
+            return  ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
+        }else {
+            return  true;
+        }
+    },
+
+    
+    filterOptRe : /^(?:scope|delay|buffer|single)$/,
+
+    
+
+    addListener : function(B, fn, C, o){
+        if(typeof  B == "object"){
+            o = B;
+            for(var  e  in  o){
+                if(this.filterOptRe.test(e)){
+                    continue;
+                }
+                if(typeof  o[e] == "function"){
+                    
+                    this.addListener(e, o[e], o.scope,  o);
+                }else {
+                    
+                    this.addListener(e, o[e].fn, o[e].scope, o[e]);
+                }
+            }
+            return;
+        }
+
+        o = (!o || typeof  o == "boolean") ? {} : o;
+        B = B.toLowerCase();
+        var  ce = this.events[B] || true;
+        if(typeof  ce == "boolean"){
+            ce = new  Roo.util.Event(this, B);
+            this.events[B] = ce;
+        }
+
+        ce.addListener(fn, C, o);
+    },
+
+    
+
+    removeListener : function(D, fn, E){
+        var  ce = this.events[D.toLowerCase()];
+        if(typeof  ce == "object"){
+            ce.removeListener(fn, E);
+        }
+    },
+
+    
+
+    purgeListeners : function(){
+        for(var  evt  in  this.events){
+            if(typeof  this.events[evt] == "object"){
+                 this.events[evt].clearListeners();
+            }
+        }
+    },
+
+    relayEvents : function(o, F){
+        var  G = function(H){
+            return  function(){
+                return  this.fireEvent.apply(this, Roo.combine(H, Array.prototype.slice.call(arguments, 0)));
+            };
+        };
+        for(var  i = 0, len = F.length; i < len; i++){
+            var  ename = F[i];
+            if(!this.events[ename]){ this.events[ename] = true; };
+            o.on(ename, G(ename), this);
+        }
+    },
+
+    
+
+    addEvents : function(o){
+        if(!this.events){
+            this.events = {};
+        }
+
+        Roo.applyIf(this.events, o);
+    },
+
+    
+
+    hasListener : function(H){
+        var  e = this.events[H];
+        return  typeof  e == "object" && e.listeners.length > 0;
+    }
+};
+
+
+Roo.util.Observable.prototype.on = Roo.util.Observable.prototype.addListener;
+
+
+Roo.util.Observable.prototype.un = Roo.util.Observable.prototype.removeListener;
+
+
+
+Roo.util.Observable.capture = function(o, fn, I){
+    o.fireEvent = o.fireEvent.createInterceptor(fn, I);
+};
+
+
+
+Roo.util.Observable.releaseCapture = function(o){
+    o.fireEvent = Roo.util.Observable.prototype.fireEvent;
+};
+
+(function(){
+
+    var  J = function(h, o, M){
+        var  N = new  Roo.util.DelayedTask();
+        return  function(){
+            N.delay(o.buffer, h, M, Array.prototype.slice.call(arguments, 0));
+        };
+    };
+
+    var  K = function(h, e, fn, M){
+        return  function(){
+            e.removeListener(fn, M);
+            return  h.apply(M, arguments);
+        };
+    };
+
+    var  L = function(h, o, M){
+        return  function(){
+            var  N = Array.prototype.slice.call(arguments, 0);
+            setTimeout(function(){
+                h.apply(M, N);
+            }, o.delay || 10);
+        };
+    };
+
+    Roo.util.Event = function(M, N){
+        this.name = N;
+        this.obj = M;
+        this.listeners = [];
+    };
+
+    Roo.util.Event.prototype = {
+        addListener : function(fn, M, N){
+            var  o = N || {};
+            M = M || this.obj;
+            if(!this.isListening(fn, M)){
+                var  l = {fn: fn, scope: M, options: o};
+                var  h = fn;
+                if(o.delay){
+                    h = L(h, o, M);
+                }
+                if(o.single){
+                    h = K(h, this, fn, M);
+                }
+                if(o.buffer){
+                    h = J(h, o, M);
+                }
+
+                l.fireFn = h;
+                if(!this.firing){ 
+                    this.listeners.push(l);
+                }else {
+                    this.listeners = this.listeners.slice(0);
+                    this.listeners.push(l);
+                }
+            }
+        },
+
+        findListener : function(fn, O){
+            O = O || this.obj;
+            var  ls = this.listeners;
+            for(var  i = 0, len = ls.length; i < len; i++){
+                var  l = ls[i];
+                if(l.fn == fn && l.scope == O){
+                    return  i;
+                }
+            }
+            return  -1;
+        },
+
+        isListening : function(fn, P){
+            return  this.findListener(fn, P) != -1;
+        },
+
+        removeListener : function(fn, Q){
+            var  R;
+            if((R = this.findListener(fn, Q)) != -1){
+                if(!this.firing){
+                    this.listeners.splice(R, 1);
+                }else {
+                    this.listeners = this.listeners.slice(0);
+                    this.listeners.splice(R, 1);
+                }
+                return  true;
+            }
+            return  false;
+        },
+
+        clearListeners : function(){
+            this.listeners = [];
+        },
+
+        fire : function(){
+            var  ls = this.listeners, S, T = ls.length;
+            if(T > 0){
+                this.firing = true;
+                var  args = Array.prototype.slice.call(arguments, 0);
+                for(var  i = 0; i < T; i++){
+                    var  l = ls[i];
+                    if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){
+                        this.firing = false;
+                        return  false;
+                    }
+                }
+
+                this.firing = false;
+            }
+            return  true;
+        }
+    };
+})();
+
+
+
+
+
+Roo.EventManager = function(){
+    var  A, B, C = false;
+    var  F, G, H, I;
+    var  E = Roo.lib.Event;
+    var  D = Roo.lib.Dom;
+
+
+    var  J = function(){
+        if(!C){
+            C = true;
+            Roo.isReady = true;
+            if(B){
+                clearInterval(B);
+            }
+            if(Roo.isGecko || Roo.isOpera) {
+                document.removeEventListener("DOMContentLoaded", J, false);
+            }
+            if(Roo.isIE){
+                var  defer = document.getElementById("ie-deferred-loader");
+                if(defer){
+                    defer.onreadystatechange = null;
+                    defer.parentNode.removeChild(defer);
+                }
+            }
+            if(A){
+                A.fire();
+                A.clearListeners();
+            }
+        }
+    };
+    
+    var  K = function(){
+        A = new  Roo.util.Event();
+        if(Roo.isGecko || Roo.isOpera) {
+            document.addEventListener("DOMContentLoaded", J, false);
+        }else  if(Roo.isIE){
+            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
+            var  defer = document.getElementById("ie-deferred-loader");
+            defer.onreadystatechange = function(){
+                if(this.readyState == "complete"){
+                    J();
+                }
+            };
+        }else  if(Roo.isSafari){ 
+            B = setInterval(function(){
+                var  rs = document.readyState;
+                if(rs == "complete") {
+                    J();     
+                 }
+            }, 10);
+        }
+
+        
+        E.on(window, "load", J);
+    };
+
+    var  L = function(h, o){
+        var  S = new  Roo.util.DelayedTask(h);
+        return  function(e){
+            
+            e = new  Roo.EventObjectImpl(e);
+            S.delay(o.buffer, h, null, [e]);
+        };
+    };
+
+    var  M = function(h, el, S, fn){
+        return  function(e){
+            Roo.EventManager.removeListener(el, S, fn);
+            h(e);
+        };
+    };
+
+    var  N = function(h, o){
+        return  function(e){
+            
+            e = new  Roo.EventObjectImpl(e);
+            setTimeout(function(){
+                h(e);
+            }, o.delay || 10);
+        };
+    };
+
+    var  O = function(S, T, U, fn, V){
+        var  o = (!U || typeof  U == "boolean") ? {} : U;
+        fn = fn || o.fn; V = V || o.scope;
+        var  el = Roo.getDom(S);
+        if(!el){
+            throw  "Error listening for \"" + T + '\". Element "' + S + '" doesn\'t exist.';
+        }
+        var  h = function(e){
+            e = Roo.EventObject.setEvent(e);
+            var  t;
+            if(o.delegate){
+                t = e.getTarget(o.delegate, el);
+                if(!t){
+                    return;
+                }
+            }else {
+                t = e.target;
+            }
+            if(o.stopEvent === true){
+                e.stopEvent();
+            }
+            if(o.preventDefault === true){
+               e.preventDefault();
+            }
+            if(o.stopPropagation === true){
+                e.stopPropagation();
+            }
+
+            if(o.normalized === false){
+                e = e.browserEvent;
+            }
+
+
+            fn.call(V || el, e, t, o);
+        };
+        if(o.delay){
+            h = N(h, o);
+        }
+        if(o.single){
+            h = M(h, el, T, fn);
+        }
+        if(o.buffer){
+            h = L(h, o);
+        }
+
+        fn._handlers = fn._handlers || [];
+        fn._handlers.push([Roo.id(el), T, h]);
+
+        E.on(el, T, h);
+        if(T == "mousewheel" && el.addEventListener){ 
+            el.addEventListener("DOMMouseScroll", h, false);
+            E.on(window, 'unload', function(){
+                el.removeEventListener("DOMMouseScroll", h, false);
+            });
+        }
+        if(T == "mousedown" && el == document){ 
+            Roo.EventManager.stoppedMouseDownEvent.addListener(h);
+        }
+        return  h;
+    };
+
+    var  P = function(el, S, fn){
+        var  id = Roo.id(el), T = fn._handlers, hd = fn;
+        if(T){
+            for(var  i = 0, len = T.length; i < len; i++){
+                var  h = T[i];
+                if(h[0] == id && h[1] == S){
+                    hd = h[2];
+                    T.splice(i, 1);
+                    break;
+                }
+            }
+        }
+
+        E.un(el, S, hd);
+        el = Roo.getDom(el);
+        if(S == "mousewheel" && el.addEventListener){
+            el.removeEventListener("DOMMouseScroll", hd, false);
+        }
+        if(S == "mousedown" && el == document){ 
+            Roo.EventManager.stoppedMouseDownEvent.removeListener(hd);
+        }
+    };
+
+    var  Q = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
+    
+    var  R = {
+        
+        
+        
+
+        
+        
+        
+
+        wrap : function(fn, S, T){
+            return  function(e){
+                Roo.EventObject.setEvent(e);
+                fn.call(T ? S || window : window, Roo.EventObject, S);
+            };
+        },
+        
+        
+
+        addListener : function(U, V, fn, W, X){
+            if(typeof  V == "object"){
+                var  o = V;
+                for(var  e  in  o){
+                    if(Q.test(e)){
+                        continue;
+                    }
+                    if(typeof  o[e] == "function"){
+                        
+                        O(U, e, o, o[e], o.scope);
+                    }else {
+                        
+                        O(U, e, o[e]);
+                    }
+                }
+                return;
+            }
+            return  O(U, V, X, fn, W);
+        },
+        
+        
+
+        removeListener : function(Y, Z, fn){
+            return  P(Y, Z, fn);
+        },
+        
+        
+
+        onDocumentReady : function(fn, a, b){
+            if(C){ 
+                A.addListener(fn, a, b);
+                A.fire();
+                A.clearListeners();
+                return;
+            }
+            if(!A){
+                K();
+            }
+
+            A.addListener(fn, a, b);
+        },
+        
+        
+
+        onWindowResize : function(fn, c, d){
+            if(!F){
+                F = new  Roo.util.Event();
+                G = new  Roo.util.DelayedTask(function(){
+                    F.fire(D.getViewWidth(), D.getViewHeight());
+                });
+                E.on(window, "resize", function(){
+                    if(Roo.isIE){
+                        G.delay(50);
+                    }else {
+                        F.fire(D.getViewWidth(), D.getViewHeight());
+                    }
+                });
+            }
+
+            F.addListener(fn, c, d);
+        },
+
+        
+
+        onTextResize : function(fn, f, g){
+            if(!H){
+                H = new  Roo.util.Event();
+                var  textEl = new  Roo.Element(document.createElement('div'));
+                textEl.dom.className = 'x-text-resize';
+                textEl.dom.innerHTML = 'X';
+                textEl.appendTo(document.body);
+                I = textEl.dom.offsetHeight;
+                setInterval(function(){
+                    if(textEl.dom.offsetHeight != I){
+                        H.fire(I, I = textEl.dom.offsetHeight);
+                    }
+                }, this.textResizeInterval);
+            }
+
+            H.addListener(fn, f, g);
+        },
+
+        
+
+        removeResizeListener : function(fn, j){
+            if(F){
+                F.removeListener(fn, j);
+            }
+        },
+
+        
+        fireResize : function(){
+            if(F){
+                F.fire(D.getViewWidth(), D.getViewHeight());
+            }   
+        },
+        
+
+        ieDeferSrc : false,
+        
+
+        textResizeInterval : 50
+    };
+    
+    
+
+    
+     
+
+    R.on = R.addListener;
+    R.un = R.removeListener;
+
+    R.stoppedMouseDownEvent = new  Roo.util.Event();
+    return  R;
+}();
+
+
+Roo.onReady = Roo.EventManager.onDocumentReady;
+
+Roo.onReady(function(){
+    var  bd = Roo.get(document.body);
+    if(!bd){ return; }
+
+    var  S = [
+            Roo.isIE ? "roo-ie"
+            : Roo.isGecko ? "roo-gecko"
+            : Roo.isOpera ? "roo-opera"
+            : Roo.isSafari ? "roo-safari" : ""];
+
+    if(Roo.isMac){
+        S.push("roo-mac");
+    }
+    if(Roo.isLinux){
+        S.push("roo-linux");
+    }
+    if(Roo.isBorderBox){
+        S.push('roo-border-box');
+    }
+    if(Roo.isStrict){ 
+        var  p = bd.dom.parentNode;
+        if(p){
+            p.className += ' roo-strict';
+        }
+    }
+
+    bd.addClass(S.join(' '));
+});
+
+
+
+Roo.EventObject = function(){
+    
+    var  E = Roo.lib.Event;
+    
+    
+    var  T = {
+        63234 : 37, 
+        63235 : 39, 
+        63232 : 38, 
+        63233 : 40, 
+        63276 : 33, 
+        63277 : 34, 
+        63272 : 46, 
+        63273 : 36, 
+        63275 : 35  
+    };
+
+    
+    var  U = Roo.isIE ? {1:0,4:1,2:2} :
+                (Roo.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
+
+    Roo.EventObjectImpl = function(e){
+        if(e){
+            this.setEvent(e.browserEvent || e);
+        }
+    };
+    Roo.EventObjectImpl.prototype = {
+        
+
+            
+
+        
+        
+        
+
+        browserEvent : null,
+        
+
+        button : -1,
+        
+
+        shiftKey : false,
+        
+
+        ctrlKey : false,
+        
+
+        altKey : false,
+
+        
+
+        BACKSPACE : 8,
+        
+
+        TAB : 9,
+        
+
+        RETURN  : 13,
+        
+
+        ENTER : 13,
+        
+
+        SHIFT : 16,
+        
+
+        CONTROL : 17,
+        
+
+        ESC : 27,
+        
+
+        SPACE : 32,
+        
+
+        PAGEUP : 33,
+        
+
+        PAGEDOWN : 34,
+        
+
+        END : 35,
+        
+
+        HOME : 36,
+        
+
+        LEFT : 37,
+        
+
+        UP : 38,
+        
+
+        RIGHT : 39,
+        
+
+        DOWN : 40,
+        
+
+        DELETE  : 46,
+        
+
+        F5 : 116,
+
+           
+
+        setEvent : function(e){
+            if(e == this || (e && e.browserEvent)){ 
+                return  e;
+            }
+
+            this.browserEvent = e;
+            if(e){
+                
+                this.button = e.button ? U[e.button] : (e.which ? e.which-1 : -1);
+                if(e.type == 'click' && this.button == -1){
+                    this.button = 0;
+                }
+
+                this.type = e.type;
+                this.shiftKey = e.shiftKey;
+                
+                this.ctrlKey = e.ctrlKey || e.metaKey;
+                this.altKey = e.altKey;
+                
+                this.keyCode = e.keyCode;
+                
+                this.charCode = (e.type == 'keyup' || e.type == 'keydown') ? 0 : e.charCode;
+                
+                this.target = E.getTarget(e);
+                
+                this.xy = E.getXY(e);
+            }else {
+                this.button = -1;
+                this.shiftKey = false;
+                this.ctrlKey = false;
+                this.altKey = false;
+                this.keyCode = 0;
+                this.charCode =0;
+                this.target = null;
+                this.xy = [0, 0];
+            }
+            return  this;
+        },
+
+        
+
+        stopEvent : function(){
+            if(this.browserEvent){
+                if(this.browserEvent.type == 'mousedown'){
+                    Roo.EventManager.stoppedMouseDownEvent.fire(this);
+                }
+
+                E.stopEvent(this.browserEvent);
+            }
+        },
+
+        
+
+        preventDefault : function(){
+            if(this.browserEvent){
+                E.preventDefault(this.browserEvent);
+            }
+        },
+
+        
+
+        isNavKeyPress : function(){
+            var  k = this.keyCode;
+            k = Roo.isSafari ? (T[k] || k) : k;
+            return  (k >= 33 && k <= 40) || k == this.RETURN  || k == this.TAB || k == this.ESC;
+        },
+
+        isSpecialKey : function(){
+            var  k = this.keyCode;
+            return  (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13  || k == 40 || k == 27 ||
+            (k == 16) || (k == 17) ||
+            (k >= 18 && k <= 20) ||
+            (k >= 33 && k <= 35) ||
+            (k >= 36 && k <= 39) ||
+            (k >= 44 && k <= 45);
+        },
+        
+
+        stopPropagation : function(){
+            if(this.browserEvent){
+                if(this.type == 'mousedown'){
+                    Roo.EventManager.stoppedMouseDownEvent.fire(this);
+                }
+
+                E.stopPropagation(this.browserEvent);
+            }
+        },
+
+        
+
+        getCharCode : function(){
+            return  this.charCode || this.keyCode;
+        },
+
+        
+
+        getKey : function(){
+            var  k = this.keyCode || this.charCode;
+            return  Roo.isSafari ? (T[k] || k) : k;
+        },
+
+        
+
+        getPageX : function(){
+            return  this.xy[0];
+        },
+
+        
+
+        getPageY : function(){
+            return  this.xy[1];
+        },
+
+        
+
+        getTime : function(){
+            if(this.browserEvent){
+                return  E.getTime(this.browserEvent);
+            }
+            return  null;
+        },
+
+        
+
+        getXY : function(){
+            return  this.xy;
+        },
+
+        
+
+        getTarget : function(V, W, X){
+            return  V ? Roo.fly(this.target).findParent(V, W, X) : this.target;
+        },
+        
+
+        getRelatedTarget : function(){
+            if(this.browserEvent){
+                return  E.getRelatedTarget(this.browserEvent);
+            }
+            return  null;
+        },
+
+        
+
+        getWheelDelta : function(){
+            var  e = this.browserEvent;
+            var  Y = 0;
+            if(e.wheelDelta){ 
+
+                Y = e.wheelDelta/120;
+            }else  if(e.detail){ 
+
+                Y = -e.detail/3;
+            }
+            return  Y;
+        },
+
+        
+
+        hasModifier : function(){
+            return  !!((this.ctrlKey || this.altKey) || this.shiftKey);
+        },
+
+        
+
+        within : function(el, Z){
+            var  t = this[Z ? "getRelatedTarget" : "getTarget"]();
+            return  t && Roo.fly(el).contains(t);
+        },
+
+        getPoint : function(){
+            return  new  Roo.lib.Point(this.xy[0], this.xy[1]);
+        }
+    };
+
+    return  new  Roo.EventObjectImpl();
+}();
+            
+    
+
+
+
+
+(function(){
+    var  D = Roo.lib.Dom;
+    var  E = Roo.lib.Event;
+    var  A = Roo.lib.Anim;
+
+    
+    var  B = {};
+    var  C = /(-[a-z])/gi;
+    var  F = function(m, a){ return  a.charAt(1).toUpperCase(); };
+    var  G = document.defaultView;
+
+
+
+    Roo.Element = function(J, K){
+        var  L = typeof  J == "string" ?
+                document.getElementById(J) : J;
+        if(!L){ 
+            return  null;
+        }
+        var  id = L.id;
+        if(K !== true && id && Roo.Element.cache[id]){ 
+            return  Roo.Element.cache[id];
+        }
+
+
+        
+
+        this.dom = L;
+
+        
+
+        this.id = id || Roo.id(L);
+    };
+
+    var  El = Roo.Element;
+
+    El.prototype = {
+        
+
+        originalDisplay : "",
+
+        visibilityMode : 1,
+        
+
+        defaultUnit : "px",
+        
+
+        setVisibilityMode : function(J){
+            this.visibilityMode = J;
+            return  this;
+        },
+        
+
+        enableDisplayMode : function(K){
+            this.setVisibilityMode(El.DISPLAY);
+            if(typeof  K != "undefined") this.originalDisplay = K;
+            return  this;
+        },
+
+        
+
+        findParent : function(L, M, N){
+            var  p = this.dom, b = document.body, O = 0, dq = Roo.DomQuery, P;
+            M = M || 50;
+            if(typeof  M != "number"){
+                P = Roo.getDom(M);
+                M = 10;
+            }
+            while(p && p.nodeType == 1 && O < M && p != b && p != P){
+                if(dq.is(p, L)){
+                    return  N ? Roo.get(p) : p;
+                }
+
+                O++;
+                p = p.parentNode;
+            }
+            return  null;
+        },
+
+
+        
+
+        findParentNode : function(Q, R, S){
+            var  p = Roo.fly(this.dom.parentNode, '_internal');
+            return  p ? p.findParent(Q, R, S) : null;
+        },
+
+        
+
+        up : function(T, U){
+            return  this.findParentNode(T, U, true);
+        },
+
+
+
+        
+
+        is : function(V){
+            return  Roo.DomQuery.is(this.dom, V);
+        },
+
+        
+
+        animate : function(W, X, Y, Z, c){
+            this.anim(W, {duration: X, callback: Y, easing: Z}, c);
+            return  this;
+        },
+
+        
+
+        anim : function(e, g, h, j, k, cb){
+            h = h || 'run';
+            g = g || {};
+            var  l = Roo.lib.Anim[h](
+                this.dom, e,
+                (g.duration || j) || .35,
+                (g.easing || k) || 'easeOut',
+                function(){
+                    Roo.callback(cb, this);
+                    Roo.callback(g.callback, g.scope || this, [this, g]);
+                },
+                this
+            );
+            g.anim = l;
+            return  l;
+        },
+
+        
+        preanim : function(a, i){
+            return  !a[i] ? false : (typeof  a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
+        },
+
+        
+
+        clean : function(o){
+            if(this.isCleaned && o !== true){
+                return  this;
+            }
+            var  ns = /\S/;
+            var  d = this.dom, n = d.firstChild, ni = -1;
+            while(n){
+                var  nx = n.nextSibling;
+                if(n.nodeType == 3 && !ns.test(n.nodeValue)){
+                    d.removeChild(n);
+                }else {
+                    n.nodeIndex = ++ni;
+                }
+
+                n = nx;
+            }
+
+            this.isCleaned = true;
+            return  this;
+        },
+
+        
+        calcOffsetsTo : function(el){
+            el = Roo.get(el);
+            var  d = el.dom;
+            var  q = false;
+            if(el.getStyle('position') == 'static'){
+                el.position('relative');
+                q = true;
+            }
+            var  x = 0, y =0;
+            var  op = this.dom;
+            while(op && op != d && op.tagName != 'HTML'){
+                x+= op.offsetLeft;
+                y+= op.offsetTop;
+                op = op.offsetParent;
+            }
+            if(q){
+                el.position('static');
+            }
+            return  [x, y];
+        },
+
+        
+
+        scrollIntoView : function(u, v){
+            var  c = Roo.getDom(u) || document.body;
+            var  el = this.dom;
+
+            var  o = this.calcOffsetsTo(c),
+                l = o[0],
+                t = o[1],
+                b = t+el.offsetHeight,
+                r = l+el.offsetWidth;
+
+            var  ch = c.clientHeight;
+            var  ct = parseInt(c.scrollTop, 10);
+            var  cl = parseInt(c.scrollLeft, 10);
+            var  cb = ct + ch;
+            var  cr = cl + c.clientWidth;
+
+            if(t < ct){
+                c.scrollTop = t;
+            }else  if(b > cb){
+                c.scrollTop = b-ch;
+            }
+
+            if(v !== false){
+                if(l < cl){
+                    c.scrollLeft = l;
+                }else  if(r > cr){
+                    c.scrollLeft = r-c.clientWidth;
+                }
+            }
+            return  this;
+        },
+
+        
+        scrollChildIntoView : function(w, z){
+            Roo.fly(w, '_scrollChildIntoView').scrollIntoView(this, z);
+        },
+
+        
+
+        autoHeight : function(AA, AB, AC, AD){
+            var  AE = this.getHeight();
+            this.clip();
+            this.setHeight(1); 
+            setTimeout(function(){
+                var  AG = parseInt(this.dom.scrollHeight, 10); 
+                if(!AA){
+                    this.setHeight(AG);
+                    this.unclip();
+                    if(typeof  AC == "function"){
+                        AC();
+                    }
+                }else {
+                    this.setHeight(AE); 
+                    this.setHeight(AG, AA, AB, function(){
+                        this.unclip();
+                        if(typeof  AC == "function") AC();
+                    }.createDelegate(this), AD);
+                }
+            }.createDelegate(this), 0);
+            return  this;
+        },
+
+        
+
+        contains : function(el){
+            if(!el){return  false;}
+            return  D.isAncestor(this.dom, el.dom ? el.dom : el);
+        },
+
+        
+
+        isVisible : function(AF) {
+            var  AG = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
+            if(AF !== true || !AG){
+                return  AG;
+            }
+            var  p = this.dom.parentNode;
+            while(p && p.tagName.toLowerCase() != "body"){
+                if(!Roo.fly(p, '_isVisible').isVisible()){
+                    return  false;
+                }
+
+                p = p.parentNode;
+            }
+            return  true;
+        },
+
+        
+
+        select : function(AH, AI){
+            return  El.select(AH, AI, this.dom);
+        },
+
+        
+
+        query : function(AJ, AK){
+            return  Roo.DomQuery.select(AJ, this.dom);
+        },
+
+        
+
+        child : function(AL, AM){
+            var  n = Roo.DomQuery.selectNode(AL, this.dom);
+            return  AM ? n : Roo.get(n);
+        },
+
+        
+
+        down : function(AN, AO){
+            var  n = Roo.DomQuery.selectNode(" > " + AN, this.dom);
+            return  AO ? n : Roo.get(n);
+        },
+
+        
+
+        initDD : function(AP, AQ, AR){
+            var  dd = new  Roo.dd.DD(Roo.id(this.dom), AP, AQ);
+            return  Roo.apply(dd, AR);
+        },
+
+        
+
+        initDDProxy : function(AS, AT, AU){
+            var  dd = new  Roo.dd.DDProxy(Roo.id(this.dom), AS, AT);
+            return  Roo.apply(dd, AU);
+        },
+
+        
+
+        initDDTarget : function(AV, AW, AX){
+            var  dd = new  Roo.dd.DDTarget(Roo.id(this.dom), AV, AW);
+            return  Roo.apply(dd, AX);
+        },
+
+        
+
+         setVisible : function(AY, AZ){
+            if(!AZ || !A){
+                if(this.visibilityMode == El.DISPLAY){
+                    this.setDisplayed(AY);
+                }else {
+                    this.fixDisplay();
+                    this.dom.style.visibility = AY ? "visible" : "hidden";
+                }
+            }else {
+                
+                var  dom = this.dom;
+                var  J = this.visibilityMode;
+                if(AY){
+                    this.setOpacity(.01);
+                    this.setVisible(true);
+                }
+
+                this.anim({opacity: { to: (AY?1:0) }},
+                      this.preanim(arguments, 1),
+                      null, .35, 'easeIn', function(){
+                         if(!AY){
+                             if(J == El.DISPLAY){
+                                 dom.style.display = "none";
+                             }else {
+                                 dom.style.visibility = "hidden";
+                             }
+
+                             Roo.get(dom).setOpacity(1);
+                         }
+                     });
+            }
+            return  this;
+        },
+
+        
+
+        isDisplayed : function() {
+            return  this.getStyle("display") != "none";
+        },
+
+        
+
+        toggle : function(Aa){
+            this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        setDisplayed : function(Ab) {
+            if(typeof  Ab == "boolean"){
+               Ab = Ab ? this.originalDisplay : "none";
+            }
+
+            this.setStyle("display", Ab);
+            return  this;
+        },
+
+        
+
+        focus : function() {
+            try{
+                this.dom.focus();
+            }catch(e){}
+            return  this;
+        },
+
+        
+
+        blur : function() {
+            try{
+                this.dom.blur();
+            }catch(e){}
+            return  this;
+        },
+
+        
+
+        addClass : function(Ac){
+            if(Ac  instanceof  Array){
+                for(var  i = 0, len = Ac.length; i < len; i++) {
+                    this.addClass(Ac[i]);
+                }
+            }else {
+                if(Ac && !this.hasClass(Ac)){
+                    this.dom.className = this.dom.className + " " + Ac;
+                }
+            }
+            return  this;
+        },
+
+        
+
+        radioClass : function(Ad){
+            var  Ae = this.dom.parentNode.childNodes;
+            for(var  i = 0; i < Ae.length; i++) {
+                var  s = Ae[i];
+                if(s.nodeType == 1){
+                    Roo.get(s).removeClass(Ad);
+                }
+            }
+
+            this.addClass(Ad);
+            return  this;
+        },
+
+        
+
+        removeClass : function(Af){
+            if(!Af || !this.dom.className){
+                return  this;
+            }
+            if(Af  instanceof  Array){
+                for(var  i = 0, len = Af.length; i < len; i++) {
+                    this.removeClass(Af[i]);
+                }
+            }else {
+                if(this.hasClass(Af)){
+                    var  re = this.classReCache[Af];
+                    if (!re) {
+                       re = new  RegExp('(?:^|\\s+)' + Af + '(?:\\s+|$)', "g");
+                       this.classReCache[Af] = re;
+                    }
+
+                    this.dom.className =
+                        this.dom.className.replace(re, " ");
+                }
+            }
+            return  this;
+        },
+
+        
+        classReCache: {},
+
+        
+
+        toggleClass : function(Ag){
+            if(this.hasClass(Ag)){
+                this.removeClass(Ag);
+            }else {
+                this.addClass(Ag);
+            }
+            return  this;
+        },
+
+        
+
+        hasClass : function(Ah){
+            return  Ah && (' '+this.dom.className+' ').indexOf(' '+Ah+' ') != -1;
+        },
+
+        
+
+        replaceClass : function(Ai, Aj){
+            this.removeClass(Ai);
+            this.addClass(Aj);
+            return  this;
+        },
+
+        
+
+        getStyles : function(){
+            var  a = arguments, Ak = a.length, r = {};
+            for(var  i = 0; i < Ak; i++){
+                r[a[i]] = this.getStyle(a[i]);
+            }
+            return  r;
+        },
+
+        
+
+        getStyle : function(){
+            return  G && G.getComputedStyle ?
+                function(Al){
+                    var  el = this.dom, v, cs, Am;
+                    if(Al == 'float'){
+                        Al = "cssFloat";
+                    }
+                    if(el.style && (v = el.style[Al])){
+                        return  v;
+                    }
+                    if(cs = G.getComputedStyle(el, "")){
+                        if(!(Am = B[Al])){
+                            Am = B[Al] = Al.replace(C, F);
+                        }
+                        return  cs[Am];
+                    }
+                    return  null;
+                } :
+                function(Al){
+                    var  el = this.dom, v, cs, Am;
+                    if(Al == 'opacity'){
+                        if(typeof  el.style.filter == 'string'){
+                            var  m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
+                            if(m){
+                                var  fv = parseFloat(m[1]);
+                                if(!isNaN(fv)){
+                                    return  fv ? fv / 100 : 0;
+                                }
+                            }
+                        }
+                        return  1;
+                    }else  if(Al == 'float'){
+                        Al = "styleFloat";
+                    }
+                    if(!(Am = B[Al])){
+                        Am = B[Al] = Al.replace(C, F);
+                    }
+                    if(v = el.style[Am]){
+                        return  v;
+                    }
+                    if(cs = el.currentStyle){
+                        return  cs[Am];
+                    }
+                    return  null;
+                };
+        }(),
+
+        
+
+        setStyle : function(Al, Am){
+            if(typeof  Al == "string"){
+                
+                if (Al == 'float') {
+                    this.setStyle(Roo.isIE ? 'styleFloat'  : 'cssFloat', Am);
+                    return  this;
+                }
+                
+                var  camel;
+                if(!(camel = B[Al])){
+                    camel = B[Al] = Al.replace(C, F);
+                }
+                
+                if(camel == 'opacity') {
+                    this.setOpacity(Am);
+                }else {
+                    this.dom.style[camel] = Am;
+                }
+            }else {
+                for(var  style  in  Al){
+                    if(typeof  Al[style] != "function"){
+                       this.setStyle(style, Al[style]);
+                    }
+                }
+            }
+            return  this;
+        },
+
+        
+
+        applyStyles : function(An){
+            Roo.DomHelper.applyStyles(this.dom, An);
+            return  this;
+        },
+
+        
+
+        getX : function(){
+            return  D.getX(this.dom);
+        },
+
+        
+
+        getY : function(){
+            return  D.getY(this.dom);
+        },
+
+        
+
+        getXY : function(){
+            return  D.getXY(this.dom);
+        },
+
+        
+
+        setX : function(x, Ao){
+            if(!Ao || !A){
+                D.setX(this.dom, x);
+            }else {
+                this.setXY([x, this.getY()], this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+        setY : function(y, Ap){
+            if(!Ap || !A){
+                D.setY(this.dom, y);
+            }else {
+                this.setXY([this.getX(), y], this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+        setLeft : function(Aq){
+            this.setStyle("left", this.addUnits(Aq));
+            return  this;
+        },
+
+        
+
+        setTop : function(Ar){
+            this.setStyle("top", this.addUnits(Ar));
+            return  this;
+        },
+
+        
+
+        setRight : function(As){
+            this.setStyle("right", this.addUnits(As));
+            return  this;
+        },
+
+        
+
+        setBottom : function(At){
+            this.setStyle("bottom", this.addUnits(At));
+            return  this;
+        },
+
+        
+
+        setXY : function(Au, Av){
+            if(!Av || !A){
+                D.setXY(this.dom, Au);
+            }else {
+                this.anim({points: {to: Au}}, this.preanim(arguments, 1), 'motion');
+            }
+            return  this;
+        },
+
+        
+
+        setLocation : function(x, y, Aw){
+            this.setXY([x, y], this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+        moveTo : function(x, y, Ax){
+            this.setXY([x, y], this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+        getRegion : function(){
+            return  D.getRegion(this.dom);
+        },
+
+        
+
+        getHeight : function(Ay){
+            var  h = this.dom.offsetHeight || 0;
+            return  Ay !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
+        },
+
+        
+
+        getWidth : function(Az){
+            var  w = this.dom.offsetWidth || 0;
+            return  Az !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
+        },
+
+        
+
+        getComputedHeight : function(){
+            var  h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
+            if(!h){
+                h = parseInt(this.getStyle('height'), 10) || 0;
+                if(!this.isBorderBox()){
+                    h += this.getFrameWidth('tb');
+                }
+            }
+            return  h;
+        },
+
+        
+
+        getComputedWidth : function(){
+            var  w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
+            if(!w){
+                w = parseInt(this.getStyle('width'), 10) || 0;
+                if(!this.isBorderBox()){
+                    w += this.getFrameWidth('lr');
+                }
+            }
+            return  w;
+        },
+
+        
+
+        getSize : function(A0){
+            return  {width: this.getWidth(A0), height: this.getHeight(A0)};
+        },
+
+        
+
+        getViewSize : function(){
+            var  d = this.dom, A1 = document, aw = 0, ah = 0;
+            if(d == A1 || d == A1.body){
+                return  {width : D.getViewWidth(), height: D.getViewHeight()};
+            }else {
+                return  {
+                    width : d.clientWidth,
+                    height: d.clientHeight
+                };
+            }
+        },
+
+        
+
+        getValue : function(A2){
+            return  A2 ? parseInt(this.dom.value, 10) : this.dom.value;
+        },
+
+        
+        adjustWidth : function(A3){
+            if(typeof  A3 == "number"){
+                if(this.autoBoxAdjust && !this.isBorderBox()){
+                   A3 -= (this.getBorderWidth("lr") + this.getPadding("lr"));
+                }
+                if(A3 < 0){
+                    A3 = 0;
+                }
+            }
+            return  A3;
+        },
+
+        
+        adjustHeight : function(A4){
+            if(typeof  A4 == "number"){
+               if(this.autoBoxAdjust && !this.isBorderBox()){
+                   A4 -= (this.getBorderWidth("tb") + this.getPadding("tb"));
+               }
+               if(A4 < 0){
+                   A4 = 0;
+               }
+            }
+            return  A4;
+        },
+
+        
+
+        setWidth : function(A5, A6){
+            A5 = this.adjustWidth(A5);
+            if(!A6 || !A){
+                this.dom.style.width = this.addUnits(A5);
+            }else {
+                this.anim({width: {to: A5}}, this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+         setHeight : function(A7, A8){
+            A7 = this.adjustHeight(A7);
+            if(!A8 || !A){
+                this.dom.style.height = this.addUnits(A7);
+            }else {
+                this.anim({height: {to: A7}}, this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+         setSize : function(A9, BA, BB){
+            if(typeof  A9 == "object"){ 
+                BA = A9.height; A9 = A9.width;
+            }
+
+            A9 = this.adjustWidth(A9); BA = this.adjustHeight(BA);
+            if(!BB || !A){
+                this.dom.style.width = this.addUnits(A9);
+                this.dom.style.height = this.addUnits(BA);
+            }else {
+                this.anim({width: {to: A9}, height: {to: BA}}, this.preanim(arguments, 2));
+            }
+            return  this;
+        },
+
+        
+
+        setBounds : function(x, y, BC, BD, BE){
+            if(!BE || !A){
+                this.setSize(BC, BD);
+                this.setLocation(x, y);
+            }else {
+                BC = this.adjustWidth(BC); BD = this.adjustHeight(BD);
+                this.anim({points: {to: [x, y]}, width: {to: BC}, height: {to: BD}},
+                              this.preanim(arguments, 4), 'motion');
+            }
+            return  this;
+        },
+
+        
+
+        setRegion : function(BF, BG){
+            this.setBounds(BF.left, BF.top, BF.right-BF.left, BF.bottom-BF.top, this.preanim(arguments, 1));
+            return  this;
+        },
+
+        
+
+        addListener : function(BH, fn, BI, BJ){
+            Roo.EventManager.on(this.dom,  BH, fn, BI || this, BJ);
+        },
+
+        
+
+        removeListener : function(BK, fn){
+            Roo.EventManager.removeListener(this.dom,  BK, fn);
+            return  this;
+        },
+
+        
+
+        removeAllListeners : function(){
+            E.purgeElement(this.dom);
+            return  this;
+        },
+
+        relayEvent : function(BL, BM){
+            this.on(BL, function(e){
+                BM.fireEvent(BL, e);
+            });
+        },
+
+        
+
+         setOpacity : function(BN, BO){
+            if(!BO || !A){
+                var  s = this.dom.style;
+                if(Roo.isIE){
+                    s.zoom = 1;
+                    s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
+                               (BN == 1 ? "" : "alpha(opacity=" + BN * 100 + ")");
+                }else {
+                    s.opacity = BN;
+                }
+            }else {
+                this.anim({opacity: {to: BN}}, this.preanim(arguments, 1), null, .35, 'easeIn');
+            }
+            return  this;
+        },
+
+        
+
+        getLeft : function(BP){
+            if(!BP){
+                return  this.getX();
+            }else {
+                return  parseInt(this.getStyle("left"), 10) || 0;
+            }
+        },
+
+        
+
+        getRight : function(BQ){
+            if(!BQ){
+                return  this.getX() + this.getWidth();
+            }else {
+                return  (this.getLeft(true) + this.getWidth()) || 0;
+            }
+        },
+
+        
+
+        getTop : function(BR) {
+            if(!BR){
+                return  this.getY();
+            }else {
+                return  parseInt(this.getStyle("top"), 10) || 0;
+            }
+        },
+
+        
+
+        getBottom : function(BS){
+            if(!BS){
+                return  this.getY() + this.getHeight();
+            }else {
+                return  (this.getTop(true) + this.getHeight()) || 0;
+            }
+        },
+
+        
+
+        position : function(BT, BU, x, y){
+            if(!BT){
+               if(this.getStyle('position') == 'static'){
+                   this.setStyle('position', 'relative');
+               }
+            }else {
+                this.setStyle("position", BT);
+            }
+            if(BU){
+                this.setStyle("z-index", BU);
+            }
+            if(x !== undefined && y !== undefined){
+                this.setXY([x, y]);
+            }else  if(x !== undefined){
+                this.setX(x);
+            }else  if(y !== undefined){
+                this.setY(y);
+            }
+        },
+
+        
+
+        clearPositioning : function(BV){
+            BV = BV ||'';
+            this.setStyle({
+                "left": BV,
+                "right": BV,
+                "top": BV,
+                "bottom": BV,
+                "z-index": "",
+                "position" : "static"
+            });
+            return  this;
+        },
+
+        
+
+        getPositioning : function(){
+            var  l = this.getStyle("left");
+            var  t = this.getStyle("top");
+            return  {
+                "position" : this.getStyle("position"),
+                "left" : l,
+                "right" : l ? "" : this.getStyle("right"),
+                "top" : t,
+                "bottom" : t ? "" : this.getStyle("bottom"),
+                "z-index" : this.getStyle("z-index")
+            };
+        },
+
+        
+
+        getBorderWidth : function(BW){
+            return  this.addStyles(BW, El.borders);
+        },
+
+        
+
+        getPadding : function(BX){
+            return  this.addStyles(BX, El.paddings);
+        },
+
+        
+
+        setPositioning : function(pc){
+            this.applyStyles(pc);
+            if(pc.right == "auto"){
+                this.dom.style.right = "";
+            }
+            if(pc.bottom == "auto"){
+                this.dom.style.bottom = "";
+            }
+            return  this;
+        },
+
+        
+        fixDisplay : function(){
+            if(this.getStyle("display") == "none"){
+                this.setStyle("visibility", "hidden");
+                this.setStyle("display", this.originalDisplay); 
+                if(this.getStyle("display") == "none"){ 
+                    this.setStyle("display", "block");
+                }
+            }
+        },
+
+        
+
+         setLeftTop : function(BY, BZ){
+            this.dom.style.left = this.addUnits(BY);
+            this.dom.style.top = this.addUnits(BZ);
+            return  this;
+        },
+
+        
+
+         move : function(Ba, Bb, Bc){
+            var  xy = this.getXY();
+            Ba = Ba.toLowerCase();
+            switch(Ba){
+                case  "l":
+                case  "left":
+                    this.moveTo(xy[0]-Bb, xy[1], this.preanim(arguments, 2));
+                    break;
+               case  "r":
+               case  "right":
+                    this.moveTo(xy[0]+Bb, xy[1], this.preanim(arguments, 2));
+                    break;
+               case  "t":
+               case  "top":
+               case  "up":
+                    this.moveTo(xy[0], xy[1]-Bb, this.preanim(arguments, 2));
+                    break;
+               case  "b":
+               case  "bottom":
+               case  "down":
+                    this.moveTo(xy[0], xy[1]+Bb, this.preanim(arguments, 2));
+                    break;
+            }
+            return  this;
+        },
+
+        
+
+        clip : function(){
+            if(!this.isClipped){
+               this.isClipped = true;
+               this.originalClip = {
+                   "o": this.getStyle("overflow"),
+                   "x": this.getStyle("overflow-x"),
+                   "y": this.getStyle("overflow-y")
+               };
+               this.setStyle("overflow", "hidden");
+               this.setStyle("overflow-x", "hidden");
+               this.setStyle("overflow-y", "hidden");
+            }
+            return  this;
+        },
+
+        
+
+        unclip : function(){
+            if(this.isClipped){
+                this.isClipped = false;
+                var  o = this.originalClip;
+                if(o.o){this.setStyle("overflow", o.o);}
+                if(o.x){this.setStyle("overflow-x", o.x);}
+                if(o.y){this.setStyle("overflow-y", o.y);}
+            }
+            return  this;
+        },
+
+
+        
+
+        getAnchorXY : function(Bd, Be, s){
+            
+            
+
+            var  w, h, vp = false;
+            if(!s){
+                var  d = this.dom;
+                if(d == document.body || d == document){
+                    vp = true;
+                    w = D.getViewWidth(); h = D.getViewHeight();
+                }else {
+                    w = this.getWidth(); h = this.getHeight();
+                }
+            }else {
+                w = s.width;  h = s.height;
+            }
+            var  x = 0, y = 0, r = Math.round;
+            switch((Bd || "tl").toLowerCase()){
+                case  "c":
+                    x = r(w*.5);
+                    y = r(h*.5);
+                break;
+                case  "t":
+                    x = r(w*.5);
+                    y = 0;
+                break;
+                case  "l":
+                    x = 0;
+                    y = r(h*.5);
+                break;
+                case  "r":
+                    x = w;
+                    y = r(h*.5);
+                break;
+                case  "b":
+                    x = r(w*.5);
+                    y = h;
+                break;
+                case  "tl":
+                    x = 0;
+                    y = 0;
+                break;
+                case  "bl":
+                    x = 0;
+                    y = h;
+                break;
+                case  "br":
+                    x = w;
+                    y = h;
+                break;
+                case  "tr":
+                    x = w;
+                    y = 0;
+                break;
+            }
+            if(Be === true){
+                return  [x, y];
+            }
+            if(vp){
+                var  sc = this.getScroll();
+                return  [x + sc.left, y + sc.top];
+            }
+            
+            var  o = this.getXY();
+            return  [x+o[0], y+o[1]];
+        },
+
+        
+
+        getAlignToXY : function(el, p, o){
+            el = Roo.get(el);
+            var  d = this.dom;
+            if(!el.dom){
+                throw  "Element.alignTo with an element that doesn't exist";
+            }
+            var  c = false; 
+            var  p1 = "", p2 = "";
+            o = o || [0,0];
+
+            if(!p){
+                p = "tl-bl";
+            }else  if(p == "?"){
+                p = "tl-bl?";
+            }else  if(p.indexOf("-") == -1){
+                p = "tl-" + p;
+            }
+
+            p = p.toLowerCase();
+            var  m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
+            if(!m){
+               throw  "Element.alignTo with an invalid alignment " + p;
+            }
+
+            p1 = m[1]; p2 = m[2]; c = !!m[3];
+
+            
+            
+            var  a1 = this.getAnchorXY(p1, true);
+            var  a2 = el.getAnchorXY(p2, false);
+            var  x = a2[0] - a1[0] + o[0];
+            var  y = a2[1] - a1[1] + o[1];
+            if(c){
+                
+                var  w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
+                
+                var  dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
+
+                
+                
+                
+                var  p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
+               var  p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
+               var  swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
+               var  swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
+
+               var  A1 = document;
+               var  scrollX = (A1.documentElement.scrollLeft || A1.body.scrollLeft || 0)+5;
+               var  scrollY = (A1.documentElement.scrollTop || A1.body.scrollTop || 0)+5;
+
+               if((x+w) > dw + scrollX){
+                    x = swapX ? r.left-w : dw+scrollX-w;
+                }
+               if(x < scrollX){
+                   x = swapX ? r.right : scrollX;
+               }
+               if((y+h) > dh + scrollY){
+                    y = swapY ? r.top-h : dh+scrollY-h;
+                }
+               if (y < scrollY){
+                   y = swapY ? r.bottom : scrollY;
+               }
+            }
+            return  [x,y];
+        },
+
+        
+        getConstrainToXY : function(){
+            var  os = {top:0, left:0, bottom:0, right: 0};
+
+            return  function(el, Bf, Bg, Bh){
+                el = Roo.get(el);
+                Bg = Bg ? Roo.applyIf(Bg, os) : os;
+
+                var  vw, vh, vx = 0, vy = 0;
+                if(el.dom == document.body || el.dom == document){
+                    vw = Roo.lib.Dom.getViewWidth();
+                    vh = Roo.lib.Dom.getViewHeight();
+                }else {
+                    vw = el.dom.clientWidth;
+                    vh = el.dom.clientHeight;
+                    if(!Bf){
+                        var  vxy = el.getXY();
+                        vx = vxy[0];
+                        vy = vxy[1];
+                    }
+                }
+
+                var  s = el.getScroll();
+
+                vx += Bg.left + s.left;
+                vy += Bg.top + s.top;
+
+                vw -= Bg.right;
+                vh -= Bg.bottom;
+
+                var  vr = vx+vw;
+                var  vb = vy+vh;
+
+                var  xy = Bh || (!Bf ? this.getXY() : [this.getLeft(true), this.getTop(true)]);
+                var  x = xy[0], y = xy[1];
+                var  w = this.dom.offsetWidth, h = this.dom.offsetHeight;
+
+                
+                var  Bi = false;
+
+                
+                if((x + w) > vr){
+                    x = vr - w;
+                    Bi = true;
+                }
+                if((y + h) > vb){
+                    y = vb - h;
+                    Bi = true;
+                }
+                
+                if(x < vx){
+                    x = vx;
+                    Bi = true;
+                }
+                if(y < vy){
+                    y = vy;
+                    Bi = true;
+                }
+                return  Bi ? [x, y] : false;
+            };
+        }(),
+
+        
+        adjustForConstraints : function(xy, Bf, Bg){
+            return  this.getConstrainToXY(Bf || document, false, Bg, xy) ||  xy;
+        },
+
+        
+
+        alignTo : function(Bh, Bi, Bj, Bk){
+            var  xy = this.getAlignToXY(Bh, Bi, Bj);
+            this.setXY(xy, this.preanim(arguments, 3));
+            return  this;
+        },
+
+        
+
+        anchorTo : function(el, Bl, Bm, Bn, Bo, Bp){
+            var  Bq = function(){
+                this.alignTo(el, Bl, Bm, Bn);
+                Roo.callback(Bp, this);
+            };
+            Roo.EventManager.onWindowResize(Bq, this);
+            var  tm = typeof  Bo;
+            if(tm != 'undefined'){
+                Roo.EventManager.on(window, 'scroll', Bq, this,
+                    {buffer: tm == 'number' ? Bo : 50});
+            }
+
+            Bq.call(this); 
+            return  this;
+        },
+        
+
+        clearOpacity : function(){
+            if (window.ActiveXObject) {
+                if(typeof  this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
+                    this.dom.style.filter = "";
+                }
+            } else  {
+                this.dom.style.opacity = "";
+                this.dom.style["-moz-opacity"] = "";
+                this.dom.style["-khtml-opacity"] = "";
+            }
+            return  this;
+        },
+
+        
+
+        hide : function(Br){
+            this.setVisible(false, this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        show : function(Bs){
+            this.setVisible(true, this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        addUnits : function(Bt){
+            return  Roo.Element.addUnits(Bt, this.defaultUnit);
+        },
+
+        
+
+        beginMeasure : function(){
+            var  el = this.dom;
+            if(el.offsetWidth || el.offsetHeight){
+                return  this; 
+            }
+            var  Bu = [];
+            var  p = this.dom, b = document.body; 
+            while((!el.offsetWidth && !el.offsetHeight) && p && p.tagName && p != b){
+                var  pe = Roo.get(p);
+                if(pe.getStyle('display') == 'none'){
+                    Bu.push({el: p, visibility: pe.getStyle("visibility")});
+                    p.style.visibility = "hidden";
+                    p.style.display = "block";
+                }
+
+                p = p.parentNode;
+            }
+
+            this._measureChanged = Bu;
+            return  this;
+
+        },
+
+        
+
+        endMeasure : function(){
+            var  Bv = this._measureChanged;
+            if(Bv){
+                for(var  i = 0, Ak = Bv.length; i < Ak; i++) {
+                    var  r = Bv[i];
+                    r.el.style.visibility = r.visibility;
+                    r.el.style.display = "none";
+                }
+
+                this._measureChanged = null;
+            }
+            return  this;
+        },
+
+        
+
+        update : function(Bw, Bx, By){
+            if(typeof  Bw == "undefined"){
+                Bw = "";
+            }
+            if(Bx !== true){
+                this.dom.innerHTML = Bw;
+                if(typeof  By == "function"){
+                    By();
+                }
+                return  this;
+            }
+            var  id = Roo.id();
+            var  Bz = this.dom;
+
+            Bw += '<span id="' + id + '"></span>';
+
+            E.onAvailable(id, function(){
+                var  hd = document.getElementsByTagName("head")[0];
+                var  re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
+                var  B0 = /\ssrc=([\'\"])(.*?)\1/i;
+                var  B1 = /\stype=([\'\"])(.*?)\1/i;
+
+                var  B2;
+                while(B2 = re.exec(Bw)){
+                    var  attrs = B2[1];
+                    var  srcMatch = attrs ? attrs.match(B0) : false;
+                    if(srcMatch && srcMatch[2]){
+                       var  s = document.createElement("script");
+                       s.src = srcMatch[2];
+                       var  typeMatch = attrs.match(B1);
+                       if(typeMatch && typeMatch[2]){
+                           s.type = typeMatch[2];
+                       }
+
+                       hd.appendChild(s);
+                    }else  if(B2[2] && B2[2].length > 0){
+                        if(window.execScript) {
+                           window.execScript(B2[2]);
+                        } else  {
+                            
+
+                           window.eval(B2[2]);
+                        }
+                    }
+                }
+                var  el = document.getElementById(id);
+                if(el){el.parentNode.removeChild(el);}
+                if(typeof  By == "function"){
+                    By();
+                }
+            });
+            Bz.innerHTML = Bw.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
+            return  this;
+        },
+
+        
+
+        load : function(){
+            var  um = this.getUpdateManager();
+            um.update.apply(um, arguments);
+            return  this;
+        },
+
+        
+
+        getUpdateManager : function(){
+            if(!this.updateManager){
+                this.updateManager = new  Roo.UpdateManager(this);
+            }
+            return  this.updateManager;
+        },
+
+        
+
+        unselectable : function(){
+            this.dom.unselectable = "on";
+            this.swallowEvent("selectstart", true);
+            this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
+            this.addClass("x-unselectable");
+            return  this;
+        },
+
+        
+
+        getCenterXY : function(){
+            return  this.getAlignToXY(document, 'c-c');
+        },
+
+        
+
+        center : function(B0){
+            this.alignTo(B0 || document, 'c-c');
+            return  this;
+        },
+
+        
+
+        isBorderBox : function(){
+            return  I[this.dom.tagName.toLowerCase()] || Roo.isBorderBox;
+        },
+
+        
+
+        getBox : function(B1, B2){
+            var  xy;
+            if(!B2){
+                xy = this.getXY();
+            }else {
+                var  BY = parseInt(this.getStyle("left"), 10) || 0;
+                var  BZ = parseInt(this.getStyle("top"), 10) || 0;
+                xy = [BY, BZ];
+            }
+            var  el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
+            if(!B1){
+                bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
+            }else {
+                var  l = this.getBorderWidth("l")+this.getPadding("l");
+                var  r = this.getBorderWidth("r")+this.getPadding("r");
+                var  t = this.getBorderWidth("t")+this.getPadding("t");
+                var  b = this.getBorderWidth("b")+this.getPadding("b");
+                bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
+            }
+
+            bx.right = bx.x + bx.width;
+            bx.bottom = bx.y + bx.height;
+            return  bx;
+        },
+
+        
+
+        getFrameWidth : function(B3, B4){
+            return  B4 && Roo.isBorderBox ? 0 : (this.getPadding(B3) + this.getBorderWidth(B3));
+        },
+
+        
+
+        setBox : function(B5, B6, B7){
+            var  w = B5.width, h = B5.height;
+            if((B6 && !this.autoBoxAdjust) && !this.isBorderBox()){
+               w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
+               h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
+            }
+
+            this.setBounds(B5.x, B5.y, w, h, this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+         repaint : function(){
+            var  B8 = this.dom;
+            this.addClass("x-repaint");
+            setTimeout(function(){
+                Roo.get(B8).removeClass("x-repaint");
+            }, 1);
+            return  this;
+        },
+
+        
+
+        getMargins : function(B9){
+            if(!B9){
+                return  {
+                    top: parseInt(this.getStyle("margin-top"), 10) || 0,
+                    left: parseInt(this.getStyle("margin-left"), 10) || 0,
+                    bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
+                    right: parseInt(this.getStyle("margin-right"), 10) || 0
+                };
+            }else {
+                return  this.addStyles(B9, El.margins);
+             }
+        },
+
+        
+        addStyles : function(CA, CB){
+            var  CC = 0, v, w;
+            for(var  i = 0, Ak = CA.length; i < Ak; i++){
+                v = this.getStyle(CB[CA.charAt(i)]);
+                if(v){
+                     w = parseInt(v, 10);
+                     if(w){ CC += w; }
+                }
+            }
+            return  CC;
+        },
+
+        
+
+        createProxy : function(CD, CE, CF){
+            if(CE){
+                CE = Roo.getDom(CE);
+            }else {
+                CE = document.body;
+            }
+
+            CD = typeof  CD == "object" ?
+                CD : {tag : "div", cls: CD};
+            var  CG = Roo.DomHelper.append(CE, CD, true);
+            if(CF){
+               CG.setBox(this.getBox());
+            }
+            return  CG;
+        },
+
+        
+
+        mask : function(CH, CI){
+            if(this.getStyle("position") == "static"){
+                this.setStyle("position", "relative");
+            }
+            if(!this._mask){
+                this._mask = Roo.DomHelper.append(this.dom, {cls:"roo-el-mask"}, true);
+            }
+
+            this.addClass("x-masked");
+            this._mask.setDisplayed(true);
+            if(typeof  CH == 'string'){
+                if(!this._maskMsg){
+                    this._maskMsg = Roo.DomHelper.append(this.dom, {cls:"roo-el-mask-msg", cn:{tag:'div'}}, true);
+                }
+                var  mm = this._maskMsg;
+                mm.dom.className = CI ? "roo-el-mask-msg " + CI : "roo-el-mask-msg";
+                mm.dom.firstChild.innerHTML = CH;
+                mm.setDisplayed(true);
+                mm.center(this);
+            }
+            if(Roo.isIE && !(Roo.isIE7 && Roo.isStrict) && this.getStyle('height') == 'auto'){ 
+                this._mask.setHeight(this.getHeight());
+            }
+            return  this._mask;
+        },
+
+        
+
+        unmask : function(CJ){
+            if(this._mask){
+                if(CJ === true){
+                    this._mask.remove();
+                    delete  this._mask;
+                    if(this._maskMsg){
+                        this._maskMsg.remove();
+                        delete  this._maskMsg;
+                    }
+                }else {
+                    this._mask.setDisplayed(false);
+                    if(this._maskMsg){
+                        this._maskMsg.setDisplayed(false);
+                    }
+                }
+            }
+
+            this.removeClass("x-masked");
+        },
+
+        
+
+        isMasked : function(){
+            return  this._mask && this._mask.isVisible();
+        },
+
+        
+
+        createShim : function(){
+            var  el = document.createElement('iframe');
+            el.frameBorder = 'no';
+            el.className = 'roo-shim';
+            if(Roo.isIE && Roo.isSecure){
+                el.src = Roo.SSL_SECURE_URL;
+            }
+            var  CK = Roo.get(this.dom.parentNode.insertBefore(el, this.dom));
+            CK.autoBoxAdjust = false;
+            return  CK;
+        },
+
+        
+
+        remove : function(){
+            if(this.dom.parentNode){
+                this.dom.parentNode.removeChild(this.dom);
+            }
+            delete  El.cache[this.dom.id];
+        },
+
+        
+
+        addClassOnOver : function(CL, CM){
+            this.on("mouseover", function(){
+                Roo.fly(this, '_internal').addClass(CL);
+            }, this.dom);
+            var  CN = function(e){
+                if(CM !== true || !e.within(this, true)){
+                    Roo.fly(this, '_internal').removeClass(CL);
+                }
+            };
+            this.on("mouseout", CN, this.dom);
+            return  this;
+        },
+
+        
+
+        addClassOnFocus : function(CO){
+            this.on("focus", function(){
+                Roo.fly(this, '_internal').addClass(CO);
+            }, this.dom);
+            this.on("blur", function(){
+                Roo.fly(this, '_internal').removeClass(CO);
+            }, this.dom);
+            return  this;
+        },
+        
+
+        addClassOnClick : function(CP){
+            var  CQ = this.dom;
+            this.on("mousedown", function(){
+                Roo.fly(CQ, '_internal').addClass(CP);
+                var  d = Roo.get(document);
+                var  fn = function(){
+                    Roo.fly(CQ, '_internal').removeClass(CP);
+                    d.removeListener("mouseup", fn);
+                };
+                d.on("mouseup", fn);
+            });
+            return  this;
+        },
+
+        
+
+        swallowEvent : function(CR, CS){
+            var  fn = function(e){
+                e.stopPropagation();
+                if(CS){
+                    e.preventDefault();
+                }
+            };
+            if(CR  instanceof  Array){
+                for(var  i = 0, Ak = CR.length; i < Ak; i++){
+                     this.on(CR[i], fn);
+                }
+                return  this;
+            }
+
+            this.on(CR, fn);
+            return  this;
+        },
+
+        
+
+      fitToParentDelegate : Roo.emptyFn, 
+
+        
+
+        fitToParent : function(CT, CU) {
+          Roo.EventManager.removeResizeListener(this.fitToParentDelegate); 
+          this.fitToParentDelegate = Roo.emptyFn; 
+          if (CT === true && !this.dom.parentNode) { 
+            return;
+          }
+          var  p = Roo.get(CU || this.dom.parentNode);
+          this.setSize(p.getComputedWidth() - p.getFrameWidth('lr'), p.getComputedHeight() - p.getFrameWidth('tb'));
+          if (CT === true) {
+            this.fitToParentDelegate = this.fitToParent.createDelegate(this, [true, CU]);
+            Roo.EventManager.onWindowResize(this.fitToParentDelegate);
+          }
+          return  this;
+        },
+
+        
+
+        getNextSibling : function(){
+            var  n = this.dom.nextSibling;
+            while(n && n.nodeType != 1){
+                n = n.nextSibling;
+            }
+            return  n;
+        },
+
+        
+
+        getPrevSibling : function(){
+            var  n = this.dom.previousSibling;
+            while(n && n.nodeType != 1){
+                n = n.previousSibling;
+            }
+            return  n;
+        },
+
+
+        
+
+        appendChild: function(el){
+            el = Roo.get(el);
+            el.appendTo(this);
+            return  this;
+        },
+
+        
+
+        createChild: function(CV, CW, CX){
+            CV = CV || {tag:'div'};
+            if(CW){
+                return  Roo.DomHelper.insertBefore(CW, CV, CX !== true);
+            }
+            return  Roo.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, CV,  CX !== true);
+        },
+
+        
+
+        appendTo: function(el){
+            el = Roo.getDom(el);
+            el.appendChild(this.dom);
+            return  this;
+        },
+
+        
+
+        insertBefore: function(el){
+            el = Roo.getDom(el);
+            el.parentNode.insertBefore(this.dom, el);
+            return  this;
+        },
+
+        
+
+        insertAfter: function(el){
+            el = Roo.getDom(el);
+            el.parentNode.insertBefore(this.dom, el.nextSibling);
+            return  this;
+        },
+
+        
+
+        insertFirst: function(el, CY){
+            el = el || {};
+            if(typeof  el == 'object' && !el.nodeType){ 
+                return  this.createChild(el, this.dom.firstChild, CY);
+            }else {
+                el = Roo.getDom(el);
+                this.dom.insertBefore(el, this.dom.firstChild);
+                return  !CY ? Roo.get(el) : el;
+            }
+        },
+
+        
+
+        insertSibling: function(el, CZ, Ca){
+            CZ = CZ ? CZ.toLowerCase() : 'before';
+            el = el || {};
+            var  rt, Cb = CZ == 'before' ? this.dom : this.dom.nextSibling;
+
+            if(typeof  el == 'object' && !el.nodeType){ 
+                if(CZ == 'after' && !this.dom.nextSibling){
+                    rt = Roo.DomHelper.append(this.dom.parentNode, el, !Ca);
+                }else {
+                    rt = Roo.DomHelper[CZ == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !Ca);
+                }
+
+            }else {
+                rt = this.dom.parentNode.insertBefore(Roo.getDom(el),
+                            CZ == 'before' ? this.dom : this.dom.nextSibling);
+                if(!Ca){
+                    rt = Roo.get(rt);
+                }
+            }
+            return  rt;
+        },
+
+        
+
+        wrap: function(Cc, Cd){
+            if(!Cc){
+                Cc = {tag: "div"};
+            }
+            var  Ce = Roo.DomHelper.insertBefore(this.dom, Cc, !Cd);
+            Ce.dom ? Ce.dom.appendChild(this.dom) : Ce.appendChild(this.dom);
+            return  Ce;
+        },
+
+        
+
+        replace: function(el){
+            el = Roo.get(el);
+            this.insertBefore(el);
+            el.remove();
+            return  this;
+        },
+
+        
+
+        insertHtml : function(Cf, Cg, Ch){
+            var  el = Roo.DomHelper.insertHtml(Cf, this.dom, Cg);
+            return  Ch ? Roo.get(el) : el;
+        },
+
+        
+
+        set : function(o, Ci){
+            var  el = this.dom;
+            Ci = typeof  Ci == 'undefined' ? (el.setAttribute ? true : false) : Ci;
+            for(var  attr  in  o){
+                if(attr == "style" || typeof  o[attr] == "function") continue;
+                if(attr=="cls"){
+                    el.className = o["cls"];
+                }else {
+                    if(Ci) el.setAttribute(attr, o[attr]);
+                    else  el[attr] = o[attr];
+                }
+            }
+            if(o.style){
+                Roo.DomHelper.applyStyles(el, o.style);
+            }
+            return  this;
+        },
+
+        
+
+        addKeyListener : function(Cj, fn, Ck){
+            var  Cl;
+            if(typeof  Cj != "object" || Cj  instanceof  Array){
+                Cl = {
+                    key: Cj,
+                    fn: fn,
+                    scope: Ck
+                };
+            }else {
+                Cl = {
+                    key : Cj.key,
+                    shift : Cj.shift,
+                    ctrl : Cj.ctrl,
+                    alt : Cj.alt,
+                    fn: fn,
+                    scope: Ck
+                };
+            }
+            return  new  Roo.KeyMap(this, Cl);
+        },
+
+        
+
+        addKeyMap : function(Cm){
+            return  new  Roo.KeyMap(this, Cm);
+        },
+
+        
+
+         isScrollable : function(){
+            var  Cn = this.dom;
+            return  Cn.scrollHeight > Cn.clientHeight || Cn.scrollWidth > Cn.clientWidth;
+        },
+
+        
+
+
+        scrollTo : function(Co, Cp, Cq){
+            var  Cr = Co.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
+            if(!Cq || !A){
+                this.dom[Cr] = Cp;
+            }else {
+                var  to = Cr == "scrollLeft" ? [Cp, this.dom.scrollTop] : [this.dom.scrollLeft, Cp];
+                this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
+            }
+            return  this;
+        },
+
+        
+
+         scroll : function(Cs, Ct, Cu){
+             if(!this.isScrollable()){
+                 return;
+             }
+             var  el = this.dom;
+             var  l = el.scrollLeft, t = el.scrollTop;
+             var  w = el.scrollWidth, h = el.scrollHeight;
+             var  cw = el.clientWidth, ch = el.clientHeight;
+             Cs = Cs.toLowerCase();
+             var  Cv = false;
+             var  a = this.preanim(arguments, 2);
+             switch(Cs){
+                 case  "l":
+                 case  "left":
+                     if(w - l > cw){
+                         var  v = Math.min(l + Ct, w-cw);
+                         this.scrollTo("left", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "r":
+                case  "right":
+                     if(l > 0){
+                         var  v = Math.max(l - Ct, 0);
+                         this.scrollTo("left", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "t":
+                case  "top":
+                case  "up":
+                     if(t > 0){
+                         var  v = Math.max(t - Ct, 0);
+                         this.scrollTo("top", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "b":
+                case  "bottom":
+                case  "down":
+                     if(h - t > ch){
+                         var  v = Math.min(t + Ct, h-ch);
+                         this.scrollTo("top", v, a);
+                         Cv = true;
+                     }
+                     break;
+             }
+             return  Cv;
+        },
+
+        
+
+        translatePoints : function(x, y){
+            if(typeof  x == 'object' || x  instanceof  Array){
+                y = x[1]; x = x[0];
+            }
+            var  p = this.getStyle('position');
+            var  o = this.getXY();
+
+            var  l = parseInt(this.getStyle('left'), 10);
+            var  t = parseInt(this.getStyle('top'), 10);
+
+            if(isNaN(l)){
+                l = (p == "relative") ? 0 : this.dom.offsetLeft;
+            }
+            if(isNaN(t)){
+                t = (p == "relative") ? 0 : this.dom.offsetTop;
+            }
+
+            return  {left: (x - o[0] + l), top: (y - o[1] + t)};
+        },
+
+        
+
+        getScroll : function(){
+            var  d = this.dom, Cw = document;
+            if(d == Cw || d == Cw.body){
+                var  l = window.pageXOffset || Cw.documentElement.scrollLeft || Cw.body.scrollLeft || 0;
+                var  t = window.pageYOffset || Cw.documentElement.scrollTop || Cw.body.scrollTop || 0;
+                return  {left: l, top: t};
+            }else {
+                return  {left: d.scrollLeft, top: d.scrollTop};
+            }
+        },
+
+        
+
+        getColor : function(Cx, Cy, Cz){
+            var  v = this.getStyle(Cx);
+            if(!v || v == "transparent" || v == "inherit") {
+                return  Cy;
+            }
+            var  C0 = typeof  Cz == "undefined" ? "#" : Cz;
+            if(v.substr(0, 4) == "rgb("){
+                var  rvs = v.slice(4, v.length -1).split(",");
+                for(var  i = 0; i < 3; i++){
+                    var  h = parseInt(rvs[i]).toString(16);
+                    if(h < 16){
+                        h = "0" + h;
+                    }
+
+                    C0 += h;
+                }
+            } else  {
+                if(v.substr(0, 1) == "#"){
+                    if(v.length == 4) {
+                        for(var  i = 1; i < 4; i++){
+                            var  c = v.charAt(i);
+                            C0 +=  c + c;
+                        }
+                    }else  if(v.length == 7){
+                        C0 += v.substr(1);
+                    }
+                }
+            }
+            return (C0.length > 5 ? C0.toLowerCase() : Cy);
+        },
+
+        
+
+        boxWrap : function(C1){
+            C1 = C1 || 'x-box';
+            var  el = Roo.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', C1)));
+            el.child('.'+C1+'-mc').dom.appendChild(this.dom);
+            return  el;
+        },
+
+        
+
+        getAttributeNS : Roo.isIE ? function(ns, C2){
+            var  d = this.dom;
+            var  C3 = typeof  d[ns+":"+C2];
+            if(C3 != 'undefined' && C3 != 'unknown'){
+                return  d[ns+":"+C2];
+            }
+            return  d[C2];
+        } : function(ns, C4){
+            var  d = this.dom;
+            return  d.getAttributeNS(ns, C4) || d.getAttribute(ns+":"+C4) || d.getAttribute(C4) || d[C4];
+        }
+    };
+
+    var  ep = El.prototype;
+
+    
+
+    ep.on = ep.addListener;
+        
+    ep.mon = ep.addListener;
+
+    
+
+    ep.un = ep.removeListener;
+
+    
+
+    ep.autoBoxAdjust = true;
+
+    
+    El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
+
+    
+    El.addUnits = function(v, J){
+        if(v === "" || v == "auto"){
+            return  v;
+        }
+        if(v === undefined){
+            return  '';
+        }
+        if(typeof  v == "number" || !El.unitPattern.test(v)){
+            return  v + (J || 'px');
+        }
+        return  v;
+    };
+
+    
+    El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
+    
+
+    El.VISIBILITY = 1;
+    
+
+    El.DISPLAY = 2;
+
+    El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
+    El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
+    El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
+
+
+
+    
+
+    El.cache = {};
+
+    var  H;
+
+    
+
+    El.get = function(el){
+        var  ex, J, id;
+        if(!el){ return  null; }
+        if(typeof  el == "string"){ 
+            if(!(J = document.getElementById(el))){
+                return  null;
+            }
+            if(ex = El.cache[el]){
+                ex.dom = J;
+            }else {
+                ex = El.cache[el] = new  El(J);
+            }
+            return  ex;
+        }else  if(el.tagName){ 
+            if(!(id = el.id)){
+                id = Roo.id(el);
+            }
+            if(ex = El.cache[id]){
+                ex.dom = el;
+            }else {
+                ex = El.cache[id] = new  El(el);
+            }
+            return  ex;
+        }else  if(el  instanceof  El){
+            if(el != H){
+                el.dom = document.getElementById(el.id) || el.dom; 
+                                                              
+                El.cache[el.id] = el; 
+            }
+            return  el;
+        }else  if(el.isComposite){
+            return  el;
+        }else  if(el  instanceof  Array){
+            return  El.select(el);
+        }else  if(el == document){
+            
+            if(!H){
+                var  f = function(){};
+                f.prototype = El.prototype;
+                H = new  f();
+                H.dom = document;
+            }
+            return  H;
+        }
+        return  null;
+    };
+
+    
+    El.uncache = function(el){
+        for(var  i = 0, a = arguments, len = a.length; i < len; i++) {
+            if(a[i]){
+                delete  El.cache[a[i].id || a[i]];
+            }
+        }
+    };
+
+    
+    
+    
+    El.garbageCollect = function(){
+        if(!Roo.enableGarbageCollector){
+            clearInterval(El.collectorThread);
+            return;
+        }
+        for(var  eid  in  El.cache){
+            var  el = El.cache[eid], d = el.dom;
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
+                delete  El.cache[eid];
+                if(d && Roo.enableListenerCollection){
+                    E.purgeElement(d);
+                }
+            }
+        }
+    }
+
+    El.collectorThreadId = setInterval(El.garbageCollect, 30000);
+
+
+    
+    El.Flyweight = function(J){
+        this.dom = J;
+    };
+    El.Flyweight.prototype = El.prototype;
+
+    El._flyweights = {};
+    
+
+    El.fly = function(el, J){
+        J = J || '_global';
+        el = Roo.getDom(el);
+        if(!el){
+            return  null;
+        }
+        if(!El._flyweights[J]){
+            El._flyweights[J] = new  El.Flyweight();
+        }
+
+        El._flyweights[J].dom = el;
+        return  El._flyweights[J];
+    };
+
+    
+
+    Roo.get = El.get;
+    
+
+    Roo.fly = El.fly;
+
+    
+    var  I = Roo.isStrict ? {
+        select:1
+    } : {
+        input:1, select:1, textarea:1
+    };
+    if(Roo.isIE || Roo.isGecko){
+        I['button'] = 1;
+    }
+
+
+
+    Roo.EventManager.on(window, 'unload', function(){
+        delete  El.cache;
+        delete  El._flyweights;
+    });
+})();
+
+
+
+
+if(Roo.DomQuery){
+    Roo.Element.selectorFunction = Roo.DomQuery.select;
+}
+
+
+Roo.Element.select = function(J, K, L){
+    var  M;
+    if(typeof  J == "string"){
+        M = Roo.Element.selectorFunction(J, L);
+    }else  if(J.length !== undefined){
+        M = J;
+    }else {
+        throw  "Invalid selector";
+    }
+    if(K === true){
+        return  new  Roo.CompositeElement(M);
+    }else {
+        return  new  Roo.CompositeElementLite(M);
+    }
+};
+
+
+Roo.select = Roo.Element.select;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Roo.enableFx = true;
+
+
+
+Roo.Fx = {
+       
+
+    slideIn : function(A, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+
+            A = A || "t";
+
+            
+            this.fixDisplay();
+
+            
+            var  r = this.getFxRestore();
+            var  b = this.getBox();
+            
+            this.setSize(b);
+
+            
+            var  B = this.fxWrap(r.pos, o, "hidden");
+
+            var  st = this.dom.style;
+            st.visibility = "visible";
+            st.position = "absolute";
+
+            
+            var  C = function(){
+                el.fxUnwrap(B, r.pos, o);
+                st.width = r.width;
+                st.height = r.height;
+                el.afterFx(o);
+            };
+            
+            var  a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
+
+            switch(A.toLowerCase()){
+                case  "t":
+                    B.setSize(b.width, 0);
+                    st.left = st.bottom = "0";
+                    a = {height: bh};
+                break;
+                case  "l":
+                    B.setSize(0, b.height);
+                    st.right = st.top = "0";
+                    a = {width: bw};
+                break;
+                case  "r":
+                    B.setSize(0, b.height);
+                    B.setX(b.right);
+                    st.left = st.top = "0";
+                    a = {width: bw, points: pt};
+                break;
+                case  "b":
+                    B.setSize(b.width, 0);
+                    B.setY(b.bottom);
+                    st.left = st.top = "0";
+                    a = {height: bh, points: pt};
+                break;
+                case  "tl":
+                    B.setSize(0, 0);
+                    st.right = st.bottom = "0";
+                    a = {width: bw, height: bh};
+                break;
+                case  "bl":
+                    B.setSize(0, 0);
+                    B.setY(b.y+b.height);
+                    st.right = st.top = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+                case  "br":
+                    B.setSize(0, 0);
+                    B.setXY([b.right, b.bottom]);
+                    st.left = st.top = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+                case  "tr":
+                    B.setSize(0, 0);
+                    B.setX(b.x+b.width);
+                    st.left = st.bottom = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+            }
+
+            this.dom.style.visibility = "visible";
+            B.show();
+
+            arguments.callee.anim = B.fxanim(a,
+                o,
+                'motion',
+                .5,
+                'easeOut', C);
+        });
+        return  this;
+    },
+    
+       
+
+    slideOut : function(B, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+
+            B = B || "t";
+
+            
+            var  r = this.getFxRestore();
+            
+            var  b = this.getBox();
+            
+            this.setSize(b);
+
+            
+            var  C = this.fxWrap(r.pos, o, "visible");
+
+            var  st = this.dom.style;
+            st.visibility = "visible";
+            st.position = "absolute";
+
+            C.setSize(b);
+
+            var  D = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.fxUnwrap(C, r.pos, o);
+
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            var  a, E = {to: 0};
+            switch(B.toLowerCase()){
+                case  "t":
+                    st.left = st.bottom = "0";
+                    a = {height: E};
+                break;
+                case  "l":
+                    st.right = st.top = "0";
+                    a = {width: E};
+                break;
+                case  "r":
+                    st.left = st.top = "0";
+                    a = {width: E, points: {to:[b.right, b.y]}};
+                break;
+                case  "b":
+                    st.left = st.top = "0";
+                    a = {height: E, points: {to:[b.x, b.bottom]}};
+                break;
+                case  "tl":
+                    st.right = st.bottom = "0";
+                    a = {width: E, height: E};
+                break;
+                case  "bl":
+                    st.right = st.top = "0";
+                    a = {width: E, height: E, points: {to:[b.x, b.bottom]}};
+                break;
+                case  "br":
+                    st.left = st.top = "0";
+                    a = {width: E, height: E, points: {to:[b.x+b.width, b.bottom]}};
+                break;
+                case  "tr":
+                    st.left = st.bottom = "0";
+                    a = {width: E, height: E, points: {to:[b.right, b.y]}};
+                break;
+            }
+
+
+            arguments.callee.anim = C.fxanim(a,
+                o,
+                'motion',
+                .5,
+                "easeOut", D);
+        });
+        return  this;
+    },
+
+       
+
+    puff : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            this.clearOpacity();
+            this.show();
+
+            
+            var  r = this.getFxRestore();
+            var  st = this.dom.style;
+
+            var  C = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+                st.fontSize = '';
+                el.afterFx(o);
+            };
+
+            var  D = this.getWidth();
+            var  E = this.getHeight();
+
+            arguments.callee.anim = this.fxanim({
+                    width : {to: this.adjustWidth(D * 2)},
+                    height : {to: this.adjustHeight(E * 2)},
+                    points : {by: [-(D * .5), -(E * .5)]},
+                    opacity : {to: 0},
+                    fontSize: {to:200, unit: "%"}
+                },
+                o,
+                'motion',
+                .5,
+                "easeOut", C);
+        });
+        return  this;
+    },
+
+       
+
+    switchOff : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            this.clearOpacity();
+            this.clip();
+
+            
+            var  r = this.getFxRestore();
+            var  st = this.dom.style;
+
+            var  C = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
+                this.clearOpacity();
+                (function(){
+                    this.fxanim({
+                        height:{to:1},
+                        points:{by:[0, this.getHeight() * .5]}
+                    }, o, 'motion', 0.3, 'easeIn', C);
+                }).defer(100, this);
+            });
+        });
+        return  this;
+    },
+
+    
+       
+    highlight : function(C, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            C = C || "ffff9c";
+            attr = o.attr || "backgroundColor";
+
+            this.clearOpacity();
+            this.show();
+
+            var  D = this.getColor(attr);
+            var  E = this.dom.style[attr];
+            endColor = (o.endColor || D) || "ffffff";
+
+            var  F = function(){
+                el.dom.style[attr] = E;
+                el.afterFx(o);
+            };
+
+            var  a = {};
+            a[attr] = {from: C, to: endColor};
+            arguments.callee.anim = this.fxanim(a,
+                o,
+                'color',
+                1,
+                'easeIn', F);
+        });
+        return  this;
+    },
+
+   
+
+    frame : function(D, E, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            D = D || "#C3DAF9";
+            if(D.length == 6){
+                D = "#" + D;
+            }
+
+            E = E || 1;
+            duration = o.duration || 1;
+            this.show();
+
+            var  b = this.getBox();
+            var  F = function(){
+                var  G = this.createProxy({
+
+                     style:{
+                        visbility:"hidden",
+                        position:"absolute",
+                        "z-index":"35000", 
+                        border:"0px solid " + D
+                     }
+                  });
+                var  H = Roo.isBorderBox ? 2 : 1;
+                G.animate({
+                    top:{from:b.y, to:b.y - 20},
+                    left:{from:b.x, to:b.x - 20},
+                    borderWidth:{from:0, to:10},
+                    opacity:{from:1, to:0},
+                    height:{from:b.height, to:(b.height + (20*H))},
+                    width:{from:b.width, to:(b.width + (20*H))}
+                }, duration, function(){
+                    G.remove();
+                });
+                if(--E > 0){
+                     F.defer((duration/2)*1000, this);
+                }else {
+                    el.afterFx(o);
+                }
+            };
+            F.call(this);
+        });
+        return  this;
+    },
+
+   
+
+    pause : function(F){
+        var  el = this.getFxEl();
+        var  o = {};
+
+        el.queueFx(o, function(){
+            setTimeout(function(){
+                el.afterFx(o);
+            }, F * 1000);
+        });
+        return  this;
+    },
+
+   
+
+    fadeIn : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            this.setOpacity(0);
+            this.fixDisplay();
+            this.dom.style.visibility = 'visible';
+            var  to = o.endOpacity || 1;
+            arguments.callee.anim = this.fxanim({opacity:{to:to}},
+                o, null, .5, "easeOut", function(){
+                if(to == 1){
+                    this.clearOpacity();
+                }
+
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+   
+
+    fadeOut : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
+                o, null, .5, "easeOut", function(){
+                if(this.visibilityMode == Roo.Element.DISPLAY || o.useDisplay){
+                     this.dom.style.display = "none";
+                }else {
+                     this.dom.style.visibility = "hidden";
+                }
+
+                this.clearOpacity();
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+   
+
+    scale : function(w, h, o){
+        this.shift(Roo.apply({}, o, {
+            width: w,
+            height: h
+        }));
+        return  this;
+    },
+
+   
+
+    shift : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            var  a = {}, w = o.width, h = o.height, x = o.x, y = o.y,  op = o.opacity;
+            if(w !== undefined){
+                a.width = {to: this.adjustWidth(w)};
+            }
+            if(h !== undefined){
+                a.height = {to: this.adjustHeight(h)};
+            }
+            if(x !== undefined || y !== undefined){
+                a.points = {to: [
+                    x !== undefined ? x : this.getX(),
+                    y !== undefined ? y : this.getY()
+                ]};
+            }
+            if(op !== undefined){
+                a.opacity = {to: op};
+            }
+            if(o.xy !== undefined){
+                a.points = {to: o.xy};
+            }
+
+            arguments.callee.anim = this.fxanim(a,
+                o, 'motion', .35, "easeOut", function(){
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+       
+
+    ghost : function(G, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            G = G || "b";
+
+            
+            var  r = this.getFxRestore();
+            var  w = this.getWidth(),
+                h = this.getHeight();
+
+            var  st = this.dom.style;
+
+            var  H = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            var  a = {opacity: {to: 0}, points: {}}, pt = a.points;
+            switch(G.toLowerCase()){
+                case  "t":
+                    pt.by = [0, -h];
+                break;
+                case  "l":
+                    pt.by = [-w, 0];
+                break;
+                case  "r":
+                    pt.by = [w, 0];
+                break;
+                case  "b":
+                    pt.by = [0, h];
+                break;
+                case  "tl":
+                    pt.by = [-w, -h];
+                break;
+                case  "bl":
+                    pt.by = [-w, h];
+                break;
+                case  "br":
+                    pt.by = [w, h];
+                break;
+                case  "tr":
+                    pt.by = [w, -h];
+                break;
+            }
+
+
+            arguments.callee.anim = this.fxanim(a,
+                o,
+                'motion',
+                .5,
+                "easeOut", H);
+        });
+        return  this;
+    },
+
+       
+
+    syncFx : function(){
+        this.fxDefaults = Roo.apply(this.fxDefaults || {}, {
+            block : false,
+            concurrent : true,
+            stopFx : false
+        });
+        return  this;
+    },
+
+       
+
+    sequenceFx : function(){
+        this.fxDefaults = Roo.apply(this.fxDefaults || {}, {
+            block : false,
+            concurrent : false,
+            stopFx : false
+        });
+        return  this;
+    },
+
+       
+
+    nextFx : function(){
+        var  ef = this.fxQueue[0];
+        if(ef){
+            ef.call(this);
+        }
+    },
+
+       
+
+    hasActiveFx : function(){
+        return  this.fxQueue && this.fxQueue[0];
+    },
+
+       
+
+    stopFx : function(){
+        if(this.hasActiveFx()){
+            var  cur = this.fxQueue[0];
+            if(cur && cur.anim && cur.anim.isAnimated()){
+                this.fxQueue = [cur]; 
+                cur.anim.stop(true);
+            }
+        }
+        return  this;
+    },
+
+       
+
+    beforeFx : function(o){
+        if(this.hasActiveFx() && !o.concurrent){
+           if(o.stopFx){
+               this.stopFx();
+               return  true;
+           }
+           return  false;
+        }
+        return  true;
+    },
+
+       
+
+    hasFxBlock : function(){
+        var  q = this.fxQueue;
+        return  q && q[0] && q[0].block;
+    },
+
+       
+
+    queueFx : function(o, fn){
+        if(!this.fxQueue){
+            this.fxQueue = [];
+        }
+        if(!this.hasFxBlock()){
+            Roo.applyIf(o, this.fxDefaults);
+            if(!o.concurrent){
+                var  run = this.beforeFx(o);
+                fn.block = o.block;
+                this.fxQueue.push(fn);
+                if(run){
+                    this.nextFx();
+                }
+            }else {
+                fn.call(this);
+            }
+        }
+        return  this;
+    },
+
+       
+
+    fxWrap : function(H, o, I){
+        var  J;
+        if(!o.wrap || !(J = Roo.get(o.wrap))){
+            var  wrapXY;
+            if(o.fixPosition){
+                wrapXY = this.getXY();
+            }
+            var  div = document.createElement("div");
+            div.style.visibility = I;
+            J = Roo.get(this.dom.parentNode.insertBefore(div, this.dom));
+            J.setPositioning(H);
+            if(J.getStyle("position") == "static"){
+                J.position("relative");
+            }
+
+            this.clearPositioning('auto');
+            J.clip();
+            J.dom.appendChild(this.dom);
+            if(wrapXY){
+                J.setXY(wrapXY);
+            }
+        }
+        return  J;
+    },
+
+       
+
+    fxUnwrap : function(K, L, o){
+        this.clearPositioning();
+        this.setPositioning(L);
+        if(!o.wrap){
+            K.dom.parentNode.insertBefore(this.dom, K.dom);
+            K.remove();
+        }
+    },
+
+       
+
+    getFxRestore : function(){
+        var  st = this.dom.style;
+        return  {pos: this.getPositioning(), width: st.width, height : st.height};
+    },
+
+       
+
+    afterFx : function(o){
+        if(o.afterStyle){
+            this.applyStyles(o.afterStyle);
+        }
+        if(o.afterCls){
+            this.addClass(o.afterCls);
+        }
+        if(o.remove === true){
+            this.remove();
+        }
+
+        Roo.callback(o.callback, o.scope, [this]);
+        if(!o.concurrent){
+            this.fxQueue.shift();
+            this.nextFx();
+        }
+    },
+
+       
+
+    getFxEl : function(){ 
+        return  Roo.get(this.dom);
+    },
+
+       
+
+    fxanim : function(M, N, O, P, Q, cb){
+        O = O || 'run';
+        N = N || {};
+        var  R = Roo.lib.Anim[O](
+            this.dom, M,
+            (N.duration || P) || .35,
+            (N.easing || Q) || 'easeOut',
+            function(){
+                Roo.callback(cb, this);
+            },
+            this
+        );
+        N.anim = R;
+        return  R;
+    }
+};
+
+
+Roo.Fx.resize = Roo.Fx.scale;
+
+
+
+Roo.apply(Roo.Element.prototype, Roo.Fx);
+
+
+
+
+
+
+Roo.CompositeElement = function(A){
+    this.elements = [];
+    this.addElements(A);
+};
+Roo.CompositeElement.prototype = {
+    isComposite: true,
+    addElements : function(B){
+        if(!B) return  this;
+        if(typeof  B == "string"){
+            B = Roo.Element.selectorFunction(B);
+        }
+        var  C = this.elements;
+        var  D = C.length-1;
+        for(var  i = 0, len = B.length; i < len; i++) {
+               C[++D] = Roo.get(B[i]);
+        }
+        return  this;
+    },
+
+    
+
+    fill : function(E){
+        this.elements = [];
+        this.add(E);
+        return  this;
+    },
+
+    
+
+    filter : function(F){
+        var  G = [];
+        this.each(function(el){
+            if(el.is(F)){
+                G[G.length] = el.dom;
+            }
+        });
+        this.fill(G);
+        return  this;
+    },
+
+    invoke : function(fn, H){
+        var  I = this.elements;
+        for(var  i = 0, len = I.length; i < len; i++) {
+               Roo.Element.prototype[fn].apply(I[i], H);
+        }
+        return  this;
+    },
+    
+
+    add : function(J){
+        if(typeof  J == "string"){
+            this.addElements(Roo.Element.selectorFunction(J));
+        }else  if(J.length !== undefined){
+            this.addElements(J);
+        }else {
+            this.addElements([J]);
+        }
+        return  this;
+    },
+    
+
+    each : function(fn, K){
+        var  L = this.elements;
+        for(var  i = 0, len = L.length; i < len; i++){
+            if(fn.call(K || L[i], L[i], this, i) === false) {
+                break;
+            }
+        }
+        return  this;
+    },
+
+    
+
+    item : function(M){
+        return  this.elements[M] || null;
+    },
+
+    
+
+    first : function(){
+        return  this.item(0);
+    },
+
+    
+
+    last : function(){
+        return  this.item(this.elements.length-1);
+    },
+
+    
+
+    getCount : function(){
+        return  this.elements.length;
+    },
+
+    
+
+    contains : function(el){
+        return  this.indexOf(el) !== -1;
+    },
+
+    
+
+    indexOf : function(el){
+        return  this.elements.indexOf(Roo.get(el));
+    },
+
+
+    
+
+    removeElement : function(el, N){
+        if(el  instanceof  Array){
+            for(var  i = 0, len = el.length; i < len; i++){
+                this.removeElement(el[i]);
+            }
+            return  this;
+        }
+        var  O = typeof  el == 'number' ? el : this.indexOf(el);
+        if(O !== -1){
+            if(N){
+                var  d = this.elements[O];
+                if(d.dom){
+                    d.remove();
+                }else {
+                    d.parentNode.removeChild(d);
+                }
+            }
+
+            this.elements.splice(O, 1);
+        }
+        return  this;
+    },
+
+    
+
+    replaceElement : function(el, P, Q){
+        var  R = typeof  el == 'number' ? el : this.indexOf(el);
+        if(R !== -1){
+            if(Q){
+                this.elements[R].replaceWith(P);
+            }else {
+                this.elements.splice(R, 1, Roo.get(P))
+            }
+        }
+        return  this;
+    },
+
+    
+
+    clear : function(){
+        this.elements = [];
+    }
+};
+(function(){
+    Roo.CompositeElement.createCall = function(S, T){
+        if(!S[T]){
+            S[T] = function(){
+                return  this.invoke(T, arguments);
+            };
+        }
+    };
+    for(var  fnName  in  Roo.Element.prototype){
+        if(typeof  Roo.Element.prototype[fnName] == "function"){
+            Roo.CompositeElement.createCall(Roo.CompositeElement.prototype, fnName);
+        }
+    };
+})();
+
+
+
+
+
+
+Roo.CompositeElementLite = function(A){
+    Roo.CompositeElementLite.superclass.constructor.call(this, A);
+    this.el = new  Roo.Element.Flyweight();
+};
+Roo.extend(Roo.CompositeElementLite, Roo.CompositeElement, {
+    addElements : function(B){
+        if(B){
+            if(B  instanceof  Array){
+                this.elements = this.elements.concat(B);
+            }else {
+                var  yels = this.elements;
+                var  index = yels.length-1;
+                for(var  i = 0, len = B.length; i < len; i++) {
+                    yels[++index] = B[i];
+                }
+            }
+        }
+        return  this;
+    },
+    invoke : function(fn, C){
+        var  D = this.elements;
+        var  el = this.el;
+        for(var  i = 0, len = D.length; i < len; i++) {
+            el.dom = D[i];
+               Roo.Element.prototype[fn].apply(el, C);
+        }
+        return  this;
+    },
+    
+
+    item : function(E){
+        if(!this.elements[E]){
+            return  null;
+        }
+
+        this.el.dom = this.elements[E];
+        return  this.el;
+    },
+
+    
+    addListener : function(F, G, H, I){
+        var  J = this.elements;
+        for(var  i = 0, len = J.length; i < len; i++) {
+            Roo.EventManager.on(J[i], F, G, H || J[i], I);
+        }
+        return  this;
+    },
+
+    
+
+    each : function(fn, K){
+        var  L = this.elements;
+        var  el = this.el;
+        for(var  i = 0, len = L.length; i < len; i++){
+            el.dom = L[i];
+               if(fn.call(K || el, el, this, i) === false){
+                break;
+            }
+        }
+        return  this;
+    },
+
+    indexOf : function(el){
+        return  this.elements.indexOf(Roo.getDom(el));
+    },
+
+    replaceElement : function(el, M, N){
+        var  O = typeof  el == 'number' ? el : this.indexOf(el);
+        if(O !== -1){
+            M = Roo.getDom(M);
+            if(N){
+                var  d = this.elements[O];
+                d.parentNode.insertBefore(M, d);
+                d.parentNode.removeChild(d);
+            }
+
+            this.elements.splice(O, 1, M);
+        }
+        return  this;
+    }
+});
+Roo.CompositeElementLite.prototype.on = Roo.CompositeElementLite.prototype.addListener;
+
+
+
+
+
+
+
+
+Roo.data.Connection = function(A){
+    Roo.apply(this, A);
+    this.addEvents({
+        
+
+        "beforerequest" : true,
+        
+
+        "requestcomplete" : true,
+        
+
+        "requestexception" : true
+    });
+    Roo.data.Connection.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.data.Connection, Roo.util.Observable, {
+    
+
+    
+
+    
+
+    
+
+    
+
+    timeout : 30000,
+    
+
+    autoAbort:false,
+
+    
+
+    disableCaching: true,
+
+    
+
+    request : function(o){
+        if(this.fireEvent("beforerequest", this, o) !== false){
+            var  p = o.params;
+
+            if(typeof  p == "function"){
+                p = p.call(o.scope||window, o);
+            }
+            if(typeof  p == "object"){
+                p = Roo.urlEncode(o.params);
+            }
+            if(this.extraParams){
+                var  extras = Roo.urlEncode(this.extraParams);
+                p = p ? (p + '&' + extras) : extras;
+            }
+
+            var  url = o.url || this.url;
+            if(typeof  url == 'function'){
+                url = url.call(o.scope||window, o);
+            }
+
+            if(o.form){
+                var  form = Roo.getDom(o.form);
+                url = url || form.action;
+
+                var  enctype = form.getAttribute("enctype");
+                if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){
+                    return  this.doFormUpload(o, p, url);
+                }
+                var  f = Roo.lib.Ajax.serializeForm(form);
+                p = p ? (p + '&' + f) : f;
+            }
+
+            var  hs = o.headers;
+            if(this.defaultHeaders){
+                hs = Roo.apply(hs || {}, this.defaultHeaders);
+                if(!o.headers){
+                    o.headers = hs;
+                }
+            }
+
+            var  cb = {
+                success: this.handleResponse,
+                failure: this.handleFailure,
+                scope: this,
+                argument: {options: o},
+                timeout : this.timeout
+            };
+
+            var  method = o.method||this.method||(p ? "POST" : "GET");
+
+            if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){
+                url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new  Date().getTime());
+            }
+
+            if(typeof  o.autoAbort == 'boolean'){ 
+                if(o.autoAbort){
+                    this.abort();
+                }
+            }else  if(this.autoAbort !== false){
+                this.abort();
+            }
+
+            if((method == 'GET' && p) || o.xmlData){
+                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
+                p = '';
+            }
+
+            this.transId = Roo.lib.Ajax.request(method, url, cb, p, o);
+            return  this.transId;
+        }else {
+            Roo.callback(o.callback, o.scope, [o, null, null]);
+            return  null;
+        }
+    },
+
+    
+
+    isLoading : function(B){
+        if(B){
+            return  Roo.lib.Ajax.isCallInProgress(B);
+        }else {
+            return  this.transId ? true : false;
+        }
+    },
+
+    
+
+    abort : function(C){
+        if(C || this.isLoading()){
+            Roo.lib.Ajax.abort(C || this.transId);
+        }
+    },
+
+    
+    handleResponse : function(D){
+        this.transId = false;
+        var  E = D.argument.options;
+        D.argument = E ? E.argument : null;
+        this.fireEvent("requestcomplete", this, D, E);
+        Roo.callback(E.success, E.scope, [D, E]);
+        Roo.callback(E.callback, E.scope, [E, true, D]);
+    },
+
+    
+    handleFailure : function(F, e){
+        this.transId = false;
+        var  G = F.argument.options;
+        F.argument = G ? G.argument : null;
+        this.fireEvent("requestexception", this, F, G, e);
+        Roo.callback(G.failure, G.scope, [F, G]);
+        Roo.callback(G.callback, G.scope, [G, false, F]);
+    },
+
+    
+    doFormUpload : function(o, ps, H){
+        var  id = Roo.id();
+        var  I = document.createElement('iframe');
+        I.id = id;
+        I.name = id;
+        I.className = 'x-hidden';
+        if(Roo.isIE){
+            I.src = Roo.SSL_SECURE_URL;
+        }
+
+        document.body.appendChild(I);
+
+        if(Roo.isIE){
+           document.frames[id].name = id;
+        }
+
+        var  J = Roo.getDom(o.form);
+        J.target = id;
+        J.method = 'POST';
+        J.enctype = J.encoding = 'multipart/form-data';
+        if(H){
+            J.action = H;
+        }
+
+        var  K, hd;
+        if(ps){ 
+            K = [];
+            ps = Roo.urlDecode(ps, false);
+            for(var  k  in  ps){
+                if(ps.hasOwnProperty(k)){
+                    hd = document.createElement('input');
+                    hd.type = 'hidden';
+                    hd.name = k;
+                    hd.value = ps[k];
+                    J.appendChild(hd);
+                    K.push(hd);
+                }
+            }
+        }
+
+        function  cb(){
+            var  r = {  
+                responseText : '',
+                responseXML : null
+            };
+
+            r.argument = o ? o.argument : null;
+
+            try { 
+                var  doc;
+                if(Roo.isIE){
+                    doc = I.contentWindow.document;
+                }else  {
+                    doc = (I.contentDocument || window.frames[id].document);
+                }
+                if(doc && doc.body){
+                    r.responseText = doc.body.innerHTML;
+                }
+                if(doc && doc.XMLDocument){
+                    r.responseXML = doc.XMLDocument;
+                }else  {
+                    r.responseXML = doc;
+                }
+            }
+            catch(e) {
+                
+            }
+
+
+            Roo.EventManager.removeListener(I, 'load', cb, this);
+
+            this.fireEvent("requestcomplete", this, r, o);
+            Roo.callback(o.success, o.scope, [r, o]);
+            Roo.callback(o.callback, o.scope, [o, true, r]);
+
+            setTimeout(function(){document.body.removeChild(I);}, 100);
+        }
+
+
+        Roo.EventManager.on(I, 'load', cb, this);
+        J.submit();
+
+        if(K){ 
+            for(var  i = 0, len = K.length; i < len; i++){
+                J.removeChild(K[i]);
+            }
+        }
+    }
+});
+
+
+
+Roo.Ajax = new  Roo.data.Connection({
+    
+   
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+    autoAbort : false,
+
+    
+
+    serializeForm : function(L){
+        return  Roo.lib.Ajax.serializeForm(L);
+    }
+});
+
+
+
+
+Roo.Ajax = new  Roo.data.Connection({
+    
+    
+    
+
+    
+   
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+    autoAbort : false,
+
+    
+
+    serializeForm : function(A){
+        return  Roo.lib.Ajax.serializeForm(A);
+    }
+});
+
+
+
+
+
+Roo.UpdateManager = function(el, A){
+    el = Roo.get(el);
+    if(!A && el.updateManager){
+        return  el.updateManager;
+    }
+
+    
+
+    this.el = el;
+    
+
+    this.defaultUrl = null;
+
+    this.addEvents({
+        
+
+        "beforeupdate": true,
+        
+
+        "update": true,
+        
+
+        "failure": true
+    });
+    var  d = Roo.UpdateManager.defaults;
+    
+
+    this.sslBlankUrl = d.sslBlankUrl;
+    
+
+    this.disableCaching = d.disableCaching;
+    
+
+    this.indicatorText = d.indicatorText;
+    
+
+    this.showLoadIndicator = d.showLoadIndicator;
+    
+
+    this.timeout = d.timeout;
+
+    
+
+    this.loadScripts = d.loadScripts;
+
+    
+
+    this.transaction = null;
+
+    
+
+    this.autoRefreshProcId = null;
+    
+
+    this.refreshDelegate = this.refresh.createDelegate(this);
+    
+
+    this.updateDelegate = this.update.createDelegate(this);
+    
+
+    this.formUpdateDelegate = this.formUpdate.createDelegate(this);
+    
+
+    this.successDelegate = this.processSuccess.createDelegate(this);
+    
+
+    this.failureDelegate = this.processFailure.createDelegate(this);
+
+    if(!this.renderer){
+     
+
+    this.renderer = new  Roo.UpdateManager.BasicRenderer();
+    }
+
+    
+    Roo.UpdateManager.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.UpdateManager, Roo.util.Observable, {
+    
+
+    getEl : function(){
+        return  this.el;
+    },
+    
+
+    update : function(B, C, D, E){
+        if(this.fireEvent("beforeupdate", this.el, B, C) !== false){
+            var  method = this.method, cfg;
+            if(typeof  B == "object"){ 
+                cfg = B;
+                B = cfg.url;
+                C = C || cfg.params;
+                D = D || cfg.callback;
+                E = E || cfg.discardUrl;
+                if(D && cfg.scope){
+                    D = D.createDelegate(cfg.scope);
+                }
+                if(typeof  cfg.method != "undefined"){method = cfg.method;};
+                if(typeof  cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
+                if(typeof  cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
+                if(typeof  cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
+                if(typeof  cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
+            }
+
+            this.showLoading();
+            if(!E){
+                this.defaultUrl = B;
+            }
+            if(typeof  B == "function"){
+                B = B.call(this);
+            }
+
+
+            method = method || (C ? "POST" : "GET");
+            if(method == "GET"){
+                B = this.prepareUrl(B);
+            }
+
+            var  o = Roo.apply(cfg ||{}, {
+                url : B,
+                params: C,
+                success: this.successDelegate,
+                failure: this.failureDelegate,
+                callback: undefined,
+                timeout: (this.timeout*1000),
+                argument: {"url": B, "form": null, "callback": D, "params": C}
+            });
+
+            this.transaction = Roo.Ajax.request(o);
+        }
+    },
+
+    
+
+    formUpdate : function(F, G, H, I){
+        if(this.fireEvent("beforeupdate", this.el, F, G) !== false){
+            if(typeof  G == "function"){
+                G = G.call(this);
+            }
+
+            F = Roo.getDom(F);
+            this.transaction = Roo.Ajax.request({
+                form: F,
+                url:G,
+                success: this.successDelegate,
+                failure: this.failureDelegate,
+                timeout: (this.timeout*1000),
+                argument: {"url": G, "form": F, "callback": I, "reset": H}
+            });
+            this.showLoading.defer(1, this);
+        }
+    },
+
+    
+
+    refresh : function(J){
+        if(this.defaultUrl == null){
+            return;
+        }
+
+        this.update(this.defaultUrl, null, J, true);
+    },
+
+    
+
+    startAutoRefresh : function(K, L, M, N, O){
+        if(O){
+            this.update(L || this.defaultUrl, M, N, true);
+        }
+        if(this.autoRefreshProcId){
+            clearInterval(this.autoRefreshProcId);
+        }
+
+        this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [L || this.defaultUrl, M, N, true]), K*1000);
+    },
+
+    
+
+     stopAutoRefresh : function(){
+        if(this.autoRefreshProcId){
+            clearInterval(this.autoRefreshProcId);
+            delete  this.autoRefreshProcId;
+        }
+    },
+
+    isAutoRefreshing : function(){
+       return  this.autoRefreshProcId ? true : false;
+    },
+    
+
+    showLoading : function(){
+        if(this.showLoadIndicator){
+            this.el.update(this.indicatorText);
+        }
+    },
+
+    
+
+    prepareUrl : function(P){
+        if(this.disableCaching){
+            var  append = "_dc=" + (new  Date().getTime());
+            if(P.indexOf("?") !== -1){
+                P += "&" + append;
+            }else {
+                P += "?" + append;
+            }
+        }
+        return  P;
+    },
+
+    
+
+    processSuccess : function(Q){
+        this.transaction = null;
+        if(Q.argument.form && Q.argument.reset){
+            try{ 
+                Q.argument.form.reset();
+            }catch(e){}
+        }
+        if(this.loadScripts){
+            this.renderer.render(this.el, Q, this,
+                this.updateComplete.createDelegate(this, [Q]));
+        }else {
+            this.renderer.render(this.el, Q, this);
+            this.updateComplete(Q);
+        }
+    },
+
+    updateComplete : function(R){
+        this.fireEvent("update", this.el, R);
+        if(typeof  R.argument.callback == "function"){
+            R.argument.callback(this.el, true, R);
+        }
+    },
+
+    
+
+    processFailure : function(S){
+        this.transaction = null;
+        this.fireEvent("failure", this.el, S);
+        if(typeof  S.argument.callback == "function"){
+            S.argument.callback(this.el, false, S);
+        }
+    },
+
+    
+
+    setRenderer : function(T){
+        this.renderer = T;
+    },
+
+    getRenderer : function(){
+       return  this.renderer;
+    },
+
+    
+
+    setDefaultUrl : function(U){
+        this.defaultUrl = U;
+    },
+
+    
+
+    abort : function(){
+        if(this.transaction){
+            Roo.Ajax.abort(this.transaction);
+        }
+    },
+
+    
+
+    isUpdating : function(){
+        if(this.transaction){
+            return  Roo.Ajax.isLoading(this.transaction);
+        }
+        return  false;
+    }
+});
+
+
+
+   Roo.UpdateManager.defaults = {
+       
+
+         timeout : 30,
+
+         
+
+        loadScripts : false,
+
+        
+
+        sslBlankUrl : (Roo.SSL_SECURE_URL || "javascript:false"),
+        
+
+        disableCaching : false,
+        
+
+        showLoadIndicator : true,
+        
+
+        indicatorText : '<div class="loading-indicator">Loading...</div>'
+   };
+
+
+
+Roo.UpdateManager.updateElement = function(el, V, W, X){
+    var  um = Roo.get(el, true).getUpdateManager();
+    Roo.apply(um, X);
+    um.update(V, W, X ? X.callback : null);
+};
+
+Roo.UpdateManager.update = Roo.UpdateManager.updateElement;
+
+
+Roo.UpdateManager.BasicRenderer = function(){};
+
+Roo.UpdateManager.BasicRenderer.prototype = {
+    
+
+     render : function(el, Y, Z, a){
+        el.update(Y.responseText, Z.loadScripts, a);
+    }
+};
+
+
+
+
+
+
+Roo.util.DelayedTask = function(fn, A, B){
+    var  id = null, d, t;
+
+    var  C = function(){
+        var  D = new  Date().getTime();
+        if(D - t >= d){
+            clearInterval(id);
+            id = null;
+            fn.apply(A, B || []);
+        }
+    };
+    
+
+    this.delay = function(D, E, F, G){
+        if(id && D != d){
+            this.cancel();
+        }
+
+        d = D;
+        t = new  Date().getTime();
+        fn = E || fn;
+        A = F || A;
+        B = G || B;
+        if(!id){
+            id = setInterval(C, d);
+        }
+    };
+
+    
+
+    this.cancel = function(){
+        if(id){
+            clearInterval(id);
+            id = null;
+        }
+    };
+};
+
+
+Roo.util.TaskRunner = function(A){
+    A = A || 10;
+    var  B = [], C = [];
+    var  id = 0;
+    var  D = false;
+
+    var  E = function(){
+        D = false;
+        clearInterval(id);
+        id = 0;
+    };
+
+    var  F = function(){
+        if(!D){
+            D = true;
+            id = setInterval(H, A);
+        }
+    };
+
+    var  G = function(I){
+        C.push(I);
+        if(I.onStop){
+            I.onStop();
+        }
+    };
+
+    var  H = function(){
+        if(C.length > 0){
+            for(var  i = 0, len = C.length; i < len; i++){
+                B.remove(C[i]);
+            }
+
+            C = [];
+            if(B.length < 1){
+                E();
+                return;
+            }
+        }
+        var  I = new  Date().getTime();
+        for(var  i = 0, len = B.length; i < len; ++i){
+            var  t = B[i];
+            var  itime = I - t.taskRunTime;
+            if(t.interval <= itime){
+                var  rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
+                t.taskRunTime = I;
+                if(rt === false || t.taskRunCount === t.repeat){
+                    G(t);
+                    return;
+                }
+            }
+            if(t.duration && t.duration <= (I - t.taskStartTime)){
+                G(t);
+            }
+        }
+    };
+
+    
+
+    this.start = function(I){
+        B.push(I);
+        I.taskStartTime = new  Date().getTime();
+        I.taskRunTime = 0;
+        I.taskRunCount = 0;
+        F();
+        return  I;
+    };
+
+    this.stop = function(I){
+        G(I);
+        return  I;
+    };
+
+    this.stopAll = function(){
+        E();
+        for(var  i = 0, len = B.length; i < len; i++){
+            if(B[i].onStop){
+                B[i].onStop();
+            }
+        }
+
+        B = [];
+        C = [];
+    };
+};
+
+Roo.TaskMgr = new  Roo.util.TaskRunner();
+
+
+
+
+
+Roo.util.MixedCollection = function(A, B){
+    this.items = [];
+    this.map = {};
+    this.keys = [];
+    this.length = 0;
+    this.addEvents({
+        
+
+        "clear" : true,
+        
+
+        "add" : true,
+        
+
+        "replace" : true,
+        
+
+        "remove" : true,
+        "sort" : true
+    });
+    this.allowFunctions = A === true;
+    if(B){
+        this.getKey = B;
+    }
+
+    Roo.util.MixedCollection.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.util.MixedCollection, Roo.util.Observable, {
+    allowFunctions : false,
+    
+
+
+    add : function(C, o){
+        if(arguments.length == 1){
+            o = arguments[0];
+            C = this.getKey(o);
+        }
+        if(typeof  C == "undefined" || C === null){
+            this.length++;
+            this.items.push(o);
+            this.keys.push(null);
+        }else {
+            var  old = this.map[C];
+            if(old){
+                return  this.replace(C, o);
+            }
+
+            this.length++;
+            this.items.push(o);
+            this.map[C] = o;
+            this.keys.push(C);
+        }
+
+        this.fireEvent("add", this.length-1, o, C);
+        return  o;
+    },
+   
+
+
+    getKey : function(o){
+         return  o.id; 
+    },
+   
+
+
+    replace : function(D, o){
+        if(arguments.length == 1){
+            o = arguments[0];
+            D = this.getKey(o);
+        }
+        var  E = this.item(D);
+        if(typeof  D == "undefined" || D === null || typeof  E == "undefined"){
+             return  this.add(D, o);
+        }
+        var  F = this.indexOfKey(D);
+        this.items[F] = o;
+        this.map[D] = o;
+        this.fireEvent("replace", D, E, o);
+        return  o;
+    },
+   
+
+
+    addAll : function(G){
+        if(arguments.length > 1 || G  instanceof  Array){
+            var  args = arguments.length > 1 ? arguments : G;
+            for(var  i = 0, len = args.length; i < len; i++){
+                this.add(args[i]);
+            }
+        }else {
+            for(var  D  in  G){
+                if(this.allowFunctions || typeof  G[D] != "function"){
+                    this.add(D, G[D]);
+                }
+            }
+        }
+    },
+   
+
+
+    each : function(fn, H){
+        var  I = [].concat(this.items); 
+        for(var  i = 0, len = I.length; i < len; i++){
+            if(fn.call(H || I[i], I[i], i, len) === false){
+                break;
+            }
+        }
+    },
+   
+
+
+    eachKey : function(fn, J){
+        for(var  i = 0, len = this.keys.length; i < len; i++){
+            fn.call(J || window, this.keys[i], this.items[i], i, len);
+        }
+    },
+   
+
+
+    find : function(fn, K){
+        for(var  i = 0, len = this.items.length; i < len; i++){
+            if(fn.call(K || window, this.items[i], this.keys[i])){
+                return  this.items[i];
+            }
+        }
+        return  null;
+    },
+   
+
+
+    insert : function(L, M, o){
+        if(arguments.length == 2){
+            o = arguments[1];
+            M = this.getKey(o);
+        }
+        if(L >= this.length){
+            return  this.add(M, o);
+        }
+
+        this.length++;
+        this.items.splice(L, 0, o);
+        if(typeof  M != "undefined" && M != null){
+            this.map[M] = o;
+        }
+
+        this.keys.splice(L, 0, M);
+        this.fireEvent("add", L, o, M);
+        return  o;
+    },
+   
+
+
+    remove : function(o){
+        return  this.removeAt(this.indexOf(o));
+    },
+   
+
+
+    removeAt : function(N){
+        if(N < this.length && N >= 0){
+            this.length--;
+            var  o = this.items[N];
+            this.items.splice(N, 1);
+            var  M = this.keys[N];
+            if(typeof  M != "undefined"){
+                delete  this.map[M];
+            }
+
+            this.keys.splice(N, 1);
+            this.fireEvent("remove", o, M);
+        }
+    },
+   
+
+
+    removeKey : function(O){
+        return  this.removeAt(this.indexOfKey(O));
+    },
+   
+
+
+    getCount : function(){
+        return  this.length; 
+    },
+   
+
+
+    indexOf : function(o){
+        if(!this.items.indexOf){
+            for(var  i = 0, len = this.items.length; i < len; i++){
+                if(this.items[i] == o) return  i;
+            }
+            return  -1;
+        }else {
+            return  this.items.indexOf(o);
+        }
+    },
+   
+
+
+    indexOfKey : function(P){
+        if(!this.keys.indexOf){
+            for(var  i = 0, len = this.keys.length; i < len; i++){
+                if(this.keys[i] == P) return  i;
+            }
+            return  -1;
+        }else {
+            return  this.keys.indexOf(P);
+        }
+    },
+   
+
+
+    item : function(Q){
+        var  R = typeof  this.map[Q] != "undefined" ? this.map[Q] : this.items[Q];
+        return  typeof  R != 'function' || this.allowFunctions ? R : null; 
+    },
+    
+
+
+    itemAt : function(S){
+        return  this.items[S];
+    },
+    
+
+
+    key : function(T){
+        return  this.map[T];
+    },
+   
+
+
+    contains : function(o){
+        return  this.indexOf(o) != -1;
+    },
+   
+
+
+    containsKey : function(U){
+        return  typeof  this.map[U] != "undefined";
+    },
+   
+
+
+    clear : function(){
+        this.length = 0;
+        this.items = [];
+        this.keys = [];
+        this.map = {};
+        this.fireEvent("clear");
+    },
+   
+
+
+    first : function(){
+        return  this.items[0]; 
+    },
+   
+
+
+    last : function(){
+        return  this.items[this.length-1];   
+    },
+    
+    _sort : function(V, W, fn){
+        var  X = String(W).toUpperCase() == "DESC" ? -1 : 1;
+        fn = fn || function(a, b){
+            return  a-b;
+        };
+        var  c = [], k = this.keys, Y = this.items;
+        for(var  i = 0, len = Y.length; i < len; i++){
+            c[c.length] = {key: k[i], value: Y[i], index: i};
+        }
+
+        c.sort(function(a, b){
+            var  v = fn(a[V], b[V]) * X;
+            if(v == 0){
+                v = (a.index < b.index ? -1 : 1);
+            }
+            return  v;
+        });
+        for(var  i = 0, len = c.length; i < len; i++){
+            Y[i] = c[i].value;
+            k[i] = c[i].key;
+        }
+
+        this.fireEvent("sort", this);
+    },
+    
+    
+
+    sort : function(Z, fn){
+        this._sort("value", Z, fn);
+    },
+    
+    
+
+    keySort : function(a, fn){
+        this._sort("key", a, fn || function(a, b){
+            return  String(a).toUpperCase()-String(b).toUpperCase();
+        });
+    },
+    
+    
+
+    getRange : function(b, d){
+        var  e = this.items;
+        if(e.length < 1){
+            return  [];
+        }
+
+        b = b || 0;
+        d = Math.min(typeof  d == "undefined" ? this.length-1 : d, this.length-1);
+        var  r = [];
+        if(b <= d){
+            for(var  i = b; i <= d; i++) {
+                   r[r.length] = e[i];
+            }
+        }else {
+            for(var  i = b; i >= d; i--) {
+                   r[r.length] = e[i];
+            }
+        }
+        return  r;
+    },
+        
+    
+
+    filter : function(f, g){
+        if(!g.exec){ 
+            g = String(g);
+            if(g.length == 0){
+                return  this.clone();
+            }
+
+            g = new  RegExp("^" + Roo.escapeRe(g), "i");
+        }
+        return  this.filterBy(function(o){
+            return  o && g.test(o[f]);
+        });
+       },
+    
+    
+
+    filterBy : function(fn, h){
+        var  r = new  Roo.util.MixedCollection();
+        r.getKey = this.getKey;
+        var  k = this.keys, it = this.items;
+        for(var  i = 0, len = it.length; i < len; i++){
+            if(fn.call(h||this, it[i], k[i])){
+                               r.add(k[i], it[i]);
+                       }
+        }
+        return  r;
+    },
+    
+    
+
+    clone : function(){
+        var  r = new  Roo.util.MixedCollection();
+        var  k = this.keys, it = this.items;
+        for(var  i = 0, len = it.length; i < len; i++){
+            r.add(k[i], it[i]);
+        }
+
+        r.getKey = this.getKey;
+        return  r;
+    }
+});
+
+
+Roo.util.MixedCollection.prototype.get = Roo.util.MixedCollection.prototype.item;
+
+
+
+
+Roo.util.JSON = new  (function(){
+    var  useHasOwn = {}.hasOwnProperty ? true : false;
+    
+    
+    
+    
+    var  pad = function(n) {
+        return  n < 10 ? "0" + n : n;
+    };
+    
+    var  m = {
+        "\b": '\\b',
+        "\t": '\\t',
+        "\n": '\\n',
+        "\f": '\\f',
+        "\r": '\\r',
+        '"' : '\\"',
+        "\\": '\\\\'
+    };
+
+    var  encodeString = function(s){
+        if (/["\\\x00-\x1f]/.test(s)) {
+            return  '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
+                var  c = m[b];
+                if(c){
+                    return  c;
+                }
+
+                c = b.charCodeAt();
+                return  "\\u00" +
+                    Math.floor(c / 16).toString(16) +
+                    (c % 16).toString(16);
+            }) + '"';
+        }
+        return  '"' + s + '"';
+    };
+    
+    var  encodeArray = function(o){
+        var  a = ["["], b, i, l = o.length, v;
+            for (i = 0; i < l; i += 1) {
+                v = o[i];
+                switch (typeof  v) {
+                    case  "undefined":
+                    case  "function":
+                    case  "unknown":
+                        break;
+                    default:
+                        if (b) {
+                            a.push(',');
+                        }
+
+                        a.push(v === null ? "null" : Roo.util.JSON.encode(v));
+                        b = true;
+                }
+            }
+
+            a.push("]");
+            return  a.join("");
+    };
+    
+    var  encodeDate = function(o){
+        return  '"' + o.getFullYear() + "-" +
+                pad(o.getMonth() + 1) + "-" +
+                pad(o.getDate()) + "T" +
+                pad(o.getHours()) + ":" +
+                pad(o.getMinutes()) + ":" +
+                pad(o.getSeconds()) + '"';
+    };
+    
+    
+
+    this.encode = function(o){
+        if(typeof  o == "undefined" || o === null){
+            return  "null";
+        }else  if(o  instanceof  Array){
+            return  encodeArray(o);
+        }else  if(o  instanceof  Date){
+            return  encodeDate(o);
+        }else  if(typeof  o == "string"){
+            return  encodeString(o);
+        }else  if(typeof  o == "number"){
+            return  isFinite(o) ? String(o) : "null";
+        }else  if(typeof  o == "boolean"){
+            return  String(o);
+        }else  {
+            var  a = ["{"], b, i, v;
+            for (i  in  o) {
+                if(!useHasOwn || o.hasOwnProperty(i)) {
+                    v = o[i];
+                    switch (typeof  v) {
+                    case  "undefined":
+                    case  "function":
+                    case  "unknown":
+                        break;
+                    default:
+                        if(b){
+                            a.push(',');
+                        }
+
+                        a.push(this.encode(i), ":",
+                                v === null ? "null" : this.encode(v));
+                        b = true;
+                    }
+                }
+            }
+
+            a.push("}");
+            return  a.join("");
+        }
+    };
+    
+    
+
+    this.decode = function(json){
+        
+
+        return  eval("(" + json + ')');
+    };
+})();
+
+
+Roo.encode = Roo.util.JSON.encode;
+
+
+Roo.decode = Roo.util.JSON.decode;
+
+
+
+
+
+Roo.util.Format = function(){
+    var  A = /^\s+|\s+$/g;
+    return  {
+        
+
+        ellipsis : function(R, S){
+            if(R && R.length > S){
+                return  R.substr(0, S-3)+"...";
+            }
+            return  R;
+        },
+
+        
+
+        undef : function(T){
+            return  typeof  T != "undefined" ? T : "";
+        },
+
+        
+
+        htmlEncode : function(U){
+            return  !U ? U : String(U).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
+        },
+
+        
+
+        htmlDecode : function(V){
+            return  !V ? V : String(V).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"');
+        },
+
+        
+
+        trim : function(W){
+            return  String(W).replace(A, "");
+        },
+
+        
+
+        substr : function(X, Y, Z){
+            return  String(X).substr(Y, Z);
+        },
+
+        
+
+        lowercase : function(a){
+            return  String(a).toLowerCase();
+        },
+
+        
+
+        uppercase : function(b){
+            return  String(b).toUpperCase();
+        },
+
+        
+
+        capitalize : function(c){
+            return  !c ? c : c.charAt(0).toUpperCase() + c.substr(1).toLowerCase();
+        },
+
+        
+        call : function(value, fn){
+            if(arguments.length > 2){
+                var  args = Array.prototype.slice.call(arguments, 2);
+                args.unshift(value);
+                 
+                return  
+  eval(fn).apply(window, args);
+            }else {
+                
+
+                return  
+ eval(fn).call(window, value);
+            }
+        },
+
+        
+
+        usMoney : function(v){
+            v = (Math.round((v-0)*100))/100;
+            v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
+            v = String(v);
+            var  ps = v.split('.');
+            var  d = ps[0];
+            var  e = ps[1] ? '.'+ ps[1] : '.00';
+            var  r = /(\d+)(\d{3})/;
+            while (r.test(d)) {
+                d = d.replace(r, '$1' + ',' + '$2');
+            }
+            return  "$" + d + e ;
+        },
+
+        
+
+        date : function(v, f){
+            if(!v){
+                return  "";
+            }
+            if(!(v  instanceof  Date)){
+                v = new  Date(Date.parse(v));
+            }
+            return  v.dateFormat(f || "m/d/Y");
+        },
+
+        
+
+        dateRenderer : function(g){
+            return  function(v){
+                return  Roo.util.Format.date(v, g);  
+            };
+        },
+
+        
+        stripTagsRE : /<\/?[^>]+>/gi,
+        
+        
+
+        stripTags : function(v){
+            return  !v ? v : String(v).replace(this.stripTagsRE, "");
+        }
+    };
+}();
+
+
+
+
+
+
+
+Roo.MasterTemplate = function(){
+    Roo.MasterTemplate.superclass.constructor.apply(this, arguments);
+    this.originalHtml = this.html;
+    var  st = {};
+    var  m, re = this.subTemplateRe;
+    re.lastIndex = 0;
+    var  A = 0;
+    while(m = re.exec(this.html)){
+        var  name = m[1], content = m[2];
+        st[A] = {
+            name: name,
+            index: A,
+            buffer: [],
+            tpl : new  Roo.Template(content)
+        };
+        if(name){
+            st[name] = st[A];
+        }
+
+        st[A].tpl.compile();
+        st[A].tpl.call = this.call.createDelegate(this);
+        A++;
+    }
+
+    this.subCount = A;
+    this.subs = st;
+};
+Roo.extend(Roo.MasterTemplate, Roo.Template, {
+    
+
+    subTemplateRe : /<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,
+
+    
+
+     add : function(B, C){
+        if(arguments.length == 1){
+            C = arguments[0];
+            B = 0;
+        }
+        var  s = this.subs[B];
+        s.buffer[s.buffer.length] = s.tpl.apply(C);
+        return  this;
+    },
+
+    
+
+    fill : function(D, E, F){
+        var  a = arguments;
+        if(a.length == 1 || (a.length == 2 && typeof  a[1] == "boolean")){
+            E = a[0];
+            D = 0;
+            F = a[1];
+        }
+        if(F){
+            this.reset();
+        }
+        for(var  i = 0, len = E.length; i < len; i++){
+            this.add(D, E[i]);
+        }
+        return  this;
+    },
+
+    
+
+     reset : function(){
+        var  s = this.subs;
+        for(var  i = 0; i < this.subCount; i++){
+            s[i].buffer = [];
+        }
+        return  this;
+    },
+
+    applyTemplate : function(G){
+        var  s = this.subs;
+        var  H = -1;
+        this.html = this.originalHtml.replace(this.subTemplateRe, function(m, I){
+            return  s[++H].buffer.join("");
+        });
+        return  Roo.MasterTemplate.superclass.applyTemplate.call(this, G);
+    },
+
+    apply : function(){
+        return  this.applyTemplate.apply(this, arguments);
+    },
+
+    compile : function(){return  this;}
+});
+
+
+
+Roo.MasterTemplate.prototype.addAll = Roo.MasterTemplate.prototype.fill;
+
+Roo.MasterTemplate.from = function(el, I){
+    el = Roo.getDom(el);
+    return  new  Roo.MasterTemplate(el.value || el.innerHTML, I || '');
+};
+
+
+
+
+
+Roo.util.CSS = function(){
+       var  A = null;
+       var  B = document;
+
+    var  C = /(-[a-z])/gi;
+    var  D = function(m, a){ return  a.charAt(1).toUpperCase(); };
+
+   return  {
+   
+
+   createStyleSheet : function(P, id){
+       var  ss;
+       var  Q = B.getElementsByTagName("head")[0];
+       var  R = B.createElement("style");
+       R.setAttribute("type", "text/css");
+       if(id){
+           R.setAttribute("id", id);
+       }
+       if(Roo.isIE){
+           Q.appendChild(R);
+           ss = R.styleSheet;
+           ss.cssText = P;
+       }else {
+           try{
+                R.appendChild(B.createTextNode(P));
+           }catch(e){
+               R.cssText = P; 
+           }
+
+           Q.appendChild(R);
+           ss = R.styleSheet ? R.styleSheet : (R.sheet || B.styleSheets[B.styleSheets.length-1]);
+       }
+
+       this.cacheStyleSheet(ss);
+       return  ss;
+   },
+
+   
+
+   removeStyleSheet : function(id){
+       var  S = B.getElementById(id);
+       if(S){
+           S.parentNode.removeChild(S);
+       }
+   },
+
+   
+
+   swapStyleSheet : function(id, T){
+       this.removeStyleSheet(id);
+       var  ss = B.createElement("link");
+       ss.setAttribute("rel", "stylesheet");
+       ss.setAttribute("type", "text/css");
+       ss.setAttribute("id", id);
+       ss.setAttribute("href", T);
+       B.getElementsByTagName("head")[0].appendChild(ss);
+   },
+   
+   
+
+   refreshCache : function(){
+       return  this.getRules(true);
+   },
+
+   
+   cacheStyleSheet : function(ss){
+       if(!R){
+           R = {};
+       }
+       try{
+           var  ssRules = ss.cssRules || ss.rules;
+           for(var  j = ssRules.length-1; j >= 0; --j){
+               R[ssRules[j].selectorText] = ssRules[j];
+           }
+       }catch(e){}
+   },
+   
+   
+
+   getRules : function(U){
+               if(R == null || U){
+                       R = {};
+                       var  ds = B.styleSheets;
+                       for(var  i =0, len = ds.length; i < len; i++){
+                           try{
+                       this.cacheStyleSheet(ds[i]);
+                   }catch(e){} 
+               }
+               }
+               return  R;
+       },
+       
+       
+
+   getRule : function(V, W){
+               var  rs = this.getRules(W);
+               if(!(V  instanceof  Array)){
+                   return  rs[V];
+               }
+               for(var  i = 0; i < V.length; i++){
+                       if(rs[V[i]]){
+                               return  rs[V[i]];
+                       }
+               }
+               return  null;
+       },
+       
+       
+       
+
+   updateRule : function(X, Y, Z){
+               if(!(X  instanceof  Array)){
+                       var  rule = this.getRule(X);
+                       if(rule){
+                               rule.style[Y.replace(C, D)] = Z;
+                               return  true;
+                       }
+               }else {
+                       for(var  i = 0; i < X.length; i++){
+                               if(this.updateRule(X[i], Y, Z)){
+                                       return  true;
+                               }
+                       }
+               }
+               return  false;
+       }
+   };  
+}();
+
+
+
+
+
+
+Roo.util.ClickRepeater = function(el, A)
+{
+    this.el = Roo.get(el);
+    this.el.unselectable();
+
+    Roo.apply(this, A);
+
+    this.addEvents({
+    
+
+        "mousedown" : true,
+    
+
+        "click" : true,
+    
+
+        "mouseup" : true
+    });
+
+    this.el.on("mousedown", this.handleMouseDown, this);
+    if(this.preventDefault || this.stopDefault){
+        this.el.on("click", function(e){
+            if(this.preventDefault){
+                e.preventDefault();
+            }
+            if(this.stopDefault){
+                e.stopEvent();
+            }
+        }, this);
+    }
+
+    
+    if(this.handler){
+        this.on("click", this.handler,  this.scope || this);
+    }
+
+
+    Roo.util.ClickRepeater.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.util.ClickRepeater, Roo.util.Observable, {
+    interval : 20,
+    delay: 250,
+    preventDefault : true,
+    stopDefault : false,
+    timer : 0,
+
+    
+    handleMouseDown : function(){
+        clearTimeout(this.timer);
+        this.el.blur();
+        if(this.pressClass){
+            this.el.addClass(this.pressClass);
+        }
+
+        this.mousedownTime = new  Date();
+
+        Roo.get(document).on("mouseup", this.handleMouseUp, this);
+        this.el.on("mouseout", this.handleMouseOut, this);
+
+        this.fireEvent("mousedown", this);
+        this.fireEvent("click", this);
+        
+        this.timer = this.click.defer(this.delay || this.interval, this);
+    },
+
+    
+    click : function(){
+        this.fireEvent("click", this);
+        this.timer = this.click.defer(this.getInterval(), this);
+    },
+
+    
+    getInterval: function(){
+        if(!this.accelerate){
+            return  this.interval;
+        }
+        var  B = this.mousedownTime.getElapsed();
+        if(B < 500){
+            return  400;
+        }else  if(B < 1700){
+            return  320;
+        }else  if(B < 2600){
+            return  250;
+        }else  if(B < 3500){
+            return  180;
+        }else  if(B < 4400){
+            return  140;
+        }else  if(B < 5300){
+            return  80;
+        }else  if(B < 6200){
+            return  50;
+        }else {
+            return  10;
+        }
+    },
+
+    
+    handleMouseOut : function(){
+        clearTimeout(this.timer);
+        if(this.pressClass){
+            this.el.removeClass(this.pressClass);
+        }
+
+        this.el.on("mouseover", this.handleMouseReturn, this);
+    },
+
+    
+    handleMouseReturn : function(){
+        this.el.un("mouseover", this.handleMouseReturn);
+        if(this.pressClass){
+            this.el.addClass(this.pressClass);
+        }
+
+        this.click();
+    },
+
+    
+    handleMouseUp : function(){
+        clearTimeout(this.timer);
+        this.el.un("mouseover", this.handleMouseReturn);
+        this.el.un("mouseout", this.handleMouseOut);
+        Roo.get(document).un("mouseup", this.handleMouseUp);
+        this.el.removeClass(this.pressClass);
+        this.fireEvent("mouseup", this);
+    }
+});
+
+
+
+
+
+Roo.KeyNav = function(el, A){
+    this.el = Roo.get(el);
+    Roo.apply(this, A);
+    if(!this.disabled){
+        this.disabled = true;
+        this.enable();
+    }
+};
+
+Roo.KeyNav.prototype = {
+    
+
+    disabled : false,
+    
+
+    defaultEventAction: "stopEvent",
+    
+
+    forceKeyDown : false,
+
+    
+    prepareEvent : function(e){
+        var  k = e.getKey();
+        var  h = this.keyToHandler[k];
+        
+        
+        
+        if(Roo.isSafari && h && k >= 37 && k <= 40){
+            e.stopEvent();
+        }
+    },
+
+    
+    relay : function(e){
+        var  k = e.getKey();
+        var  h = this.keyToHandler[k];
+        if(h && this[h]){
+            if(this.doRelay(e, this[h], h) !== true){
+                e[this.defaultEventAction]();
+            }
+        }
+    },
+
+    
+    doRelay : function(e, h, B){
+        return  h.call(this.scope || this, e);
+    },
+
+    
+    enter : false,
+    left : false,
+    right : false,
+    up : false,
+    down : false,
+    tab : false,
+    esc : false,
+    pageUp : false,
+    pageDown : false,
+    del : false,
+    home : false,
+    end : false,
+
+    
+    keyToHandler : {
+        37 : "left",
+        39 : "right",
+        38 : "up",
+        40 : "down",
+        33 : "pageUp",
+        34 : "pageDown",
+        46 : "del",
+        36 : "home",
+        35 : "end",
+        13 : "enter",
+        27 : "esc",
+        9  : "tab"
+    },
+
+       
+
+       enable: function(){
+               if(this.disabled){
+            
+            
+            if(this.forceKeyDown || Roo.isIE || Roo.isAir){
+                this.el.on("keydown", this.relay,  this);
+            }else {
+                this.el.on("keydown", this.prepareEvent,  this);
+                this.el.on("keypress", this.relay,  this);
+            }
+
+                   this.disabled = false;
+               }
+       },
+
+       
+
+       disable: function(){
+               if(!this.disabled){
+                   if(this.forceKeyDown || Roo.isIE || Roo.isAir){
+                this.el.un("keydown", this.relay);
+            }else {
+                this.el.un("keydown", this.prepareEvent);
+                this.el.un("keypress", this.relay);
+            }
+
+                   this.disabled = true;
+               }
+       }
+};
+
+
+
+
+
+Roo.KeyMap = function(el, A, B){
+    this.el  = Roo.get(el);
+    this.eventName = B || "keydown";
+    this.bindings = [];
+    if(A){
+        this.addBinding(A);
+    }
+
+    this.enable();
+};
+
+Roo.KeyMap.prototype = {
+    
+
+    stopEvent : false,
+
+    
+
+       addBinding : function(C){
+        if(C  instanceof  Array){
+            for(var  i = 0, len = C.length; i < len; i++){
+                this.addBinding(C[i]);
+            }
+            return;
+        }
+        var  D = C.key,
+            E = C.shift, 
+            F = C.ctrl, 
+            G = C.alt,
+            fn = C.fn,
+            H = C.scope;
+        if(typeof  D == "string"){
+            var  ks = [];
+            var  keyString = D.toUpperCase();
+            for(var  j = 0, len = keyString.length; j < len; j++){
+                ks.push(keyString.charCodeAt(j));
+            }
+
+            D = ks;
+        }
+        var  I = D  instanceof  Array;
+        var  J = function(e){
+            if((!E || e.shiftKey) && (!F || e.ctrlKey) &&  (!G || e.altKey)){
+                var  k = e.getKey();
+                if(I){
+                    for(var  i = 0, len = D.length; i < len; i++){
+                        if(D[i] == k){
+                          if(this.stopEvent){
+                              e.stopEvent();
+                          }
+
+                          fn.call(H || window, k, e);
+                          return;
+                        }
+                    }
+                }else {
+                    if(k == D){
+                        if(this.stopEvent){
+                           e.stopEvent();
+                        }
+
+                        fn.call(H || window, k, e);
+                    }
+                }
+            }
+        };
+        this.bindings.push(J);  
+       },
+
+    
+
+    on : function(K, fn, L){
+        var  M, N, O, P;
+        if(typeof  K == "object" && !(K  instanceof  Array)){
+            M = K.key;
+            N = K.shift;
+            O = K.ctrl;
+            P = K.alt;
+        }else {
+            M = K;
+        }
+
+        this.addBinding({
+            key: M,
+            shift: N,
+            ctrl: O,
+            alt: P,
+            fn: fn,
+            scope: L
+        })
+    },
+
+    
+    handleKeyDown : function(e){
+           if(this.enabled){ 
+           var  b = this.bindings;
+           for(var  i = 0, len = b.length; i < len; i++){
+               b[i].call(this, e);
+           }
+           }
+       },
+       
+       
+
+       isEnabled : function(){
+           return  this.enabled;  
+       },
+       
+       
+
+       enable: function(){
+               if(!this.enabled){
+                   this.el.on(this.eventName, this.handleKeyDown, this);
+                   this.enabled = true;
+               }
+       },
+
+       
+
+       disable: function(){
+               if(this.enabled){
+                   this.el.removeListener(this.eventName, this.handleKeyDown, this);
+                   this.enabled = false;
+               }
+       }
+};
+
+
+
+
+
+Roo.util.TextMetrics = function(){
+    var  A;
+    return  {
+        
+
+        measure : function(el, E, F){
+            if(!A){
+                A = Roo.util.TextMetrics.Instance(el, F);
+            }
+
+            A.bind(el);
+            A.setFixedWidth(F || 'auto');
+            return  A.getSize(E);
+        },
+
+        
+
+        createInstance : function(el, G){
+            return  Roo.util.TextMetrics.Instance(el, G);
+        }
+    };
+}();
+
+
+Roo.util.TextMetrics.Instance = function(B, C){
+    var  ml = new  Roo.Element(document.createElement('div'));
+    document.body.appendChild(ml.dom);
+    ml.position('absolute');
+    ml.setLeftTop(-1000, -1000);
+    ml.hide();
+
+    if(C){
+        ml.setWidth(C);
+    }
+     
+    var  D = {
+        
+
+        getSize : function(E){
+            ml.update(E);
+            var  s = ml.getSize();
+            ml.update('');
+            return  s;
+        },
+
+        
+
+        bind : function(el){
+            ml.setStyle(
+                Roo.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height')
+            );
+        },
+
+        
+
+        setFixedWidth : function(F){
+            ml.setWidth(F);
+        },
+
+        
+
+        getWidth : function(G){
+            ml.dom.style.width = 'auto';
+            return  this.getSize(G).width;
+        },
+
+        
+
+        getHeight : function(H){
+            return  this.getSize(H).height;
+        }
+    };
+
+    D.bind(B);
+
+    return  D;
+};
+
+
+Roo.Element.measureText = Roo.util.TextMetrics.measure;
+
+
+
+
+
+Roo.state.Provider = function(){
+    
+
+    this.addEvents({
+        "statechange": true
+    });
+    this.state = {};
+    Roo.state.Provider.superclass.constructor.call(this);
+};
+Roo.extend(Roo.state.Provider, Roo.util.Observable, {
+    
+
+    get : function(A, B){
+        return  typeof  this.state[A] == "undefined" ?
+            B : this.state[A];
+    },
+    
+    
+
+    clear : function(C){
+        delete  this.state[C];
+        this.fireEvent("statechange", this, C, null);
+    },
+    
+    
+
+    set : function(D, E){
+        this.state[D] = E;
+        this.fireEvent("statechange", this, D, E);
+    },
+    
+    
+
+    decodeValue : function(F){
+        var  re = /^(a|n|d|b|s|o)\:(.*)$/;
+        var  G = re.exec(unescape(F));
+        if(!G || !G[1]) return; 
+        var  H = G[1];
+        var  v = G[2];
+        switch(H){
+            case  "n":
+                return  parseFloat(v);
+            case  "d":
+                return  new  Date(Date.parse(v));
+            case  "b":
+                return  (v == "1");
+            case  "a":
+                var  all = [];
+                var  values = v.split("^");
+                for(var  i = 0, len = values.length; i < len; i++){
+                    all.push(this.decodeValue(values[i]));
+                }
+                return  all;
+           case  "o":
+                var  all = {};
+                var  values = v.split("^");
+                for(var  i = 0, len = values.length; i < len; i++){
+                    var  kv = values[i].split("=");
+                    all[kv[0]] = this.decodeValue(kv[1]);
+                }
+                return  all;
+           default:
+                return  v;
+        }
+    },
+    
+    
+
+    encodeValue : function(v){
+        var  I;
+        if(typeof  v == "number"){
+            I = "n:" + v;
+        }else  if(typeof  v == "boolean"){
+            I = "b:" + (v ? "1" : "0");
+        }else  if(v  instanceof  Date){
+            I = "d:" + v.toGMTString();
+        }else  if(v  instanceof  Array){
+            var  flat = "";
+            for(var  i = 0, len = v.length; i < len; i++){
+                flat += this.encodeValue(v[i]);
+                if(i != len-1) flat += "^";
+            }
+
+            I = "a:" + flat;
+        }else  if(typeof  v == "object"){
+            var  flat = "";
+            for(var  key  in  v){
+                if(typeof  v[key] != "function"){
+                    flat += key + "=" + this.encodeValue(v[key]) + "^";
+                }
+            }
+
+            I = "o:" + flat.substring(0, flat.length-1);
+        }else {
+            I = "s:" + v;
+        }
+        return  escape(I);        
+    }
+});
+
+
+
+
+
+
+Roo.state.Manager = function(){
+    var  A = new  Roo.state.Provider();
+    
+    return  {
+        
+
+        setProvider : function(H){
+            A = H;
+        },
+        
+        
+
+        get : function(I, J){
+            return  A.get(I, J);
+        },
+        
+        
+
+         set : function(K, L){
+            A.set(K, L);
+        },
+        
+        
+
+        clear : function(M){
+            A.clear(M);
+        },
+        
+        
+
+        getProvider : function(){
+            return  A;
+        }
+    };
+}();
+
+
+
+
+
+Roo.state.CookieProvider = function(A){
+    Roo.state.CookieProvider.superclass.constructor.call(this);
+    this.path = "/";
+    this.expires = new  Date(new  Date().getTime()+(1000*60*60*24*7)); 
+    this.domain = null;
+    this.secure = false;
+    Roo.apply(this, A);
+    this.state = this.readCookies();
+};
+
+Roo.extend(Roo.state.CookieProvider, Roo.state.Provider, {
+    
+    set : function(B, C){
+        if(typeof  C == "undefined" || C === null){
+            this.clear(B);
+            return;
+        }
+
+        this.setCookie(B, C);
+        Roo.state.CookieProvider.superclass.set.call(this, B, C);
+    },
+
+    
+    clear : function(D){
+        this.clearCookie(D);
+        Roo.state.CookieProvider.superclass.clear.call(this, D);
+    },
+
+    
+    readCookies : function(){
+        var  E = {};
+        var  c = document.cookie + ";";
+        var  re = /\s?(.*?)=(.*?);/g;
+       var  F;
+       while((F = re.exec(c)) != null){
+            var  D = F[1];
+            var  C = F[2];
+            if(D && D.substring(0,3) == "ys-"){
+                E[D.substr(3)] = this.decodeValue(C);
+            }
+        }
+        return  E;
+    },
+
+    
+    setCookie : function(G, H){
+        document.cookie = "ys-"+ G + "=" + this.encodeValue(H) +
+           ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
+           ((this.path == null) ? "" : ("; path=" + this.path)) +
+           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
+           ((this.secure == true) ? "; secure" : "");
+    },
+
+    
+    clearCookie : function(I){
+        document.cookie = "ys-" + I + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
+           ((this.path == null) ? "" : ("; path=" + this.path)) +
+           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
+           ((this.secure == true) ? "; secure" : "");
+    }
+});
 (function(){var A=Roo.EventManager;var B=Roo.lib.Dom;Roo.dd.DragDrop=function(id,C,D){if(id){this.init(id,C,D);}};Roo.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(C,D,E){if(typeof D=="number"){D={left:D,right:D,top:D,bottom:D};}
 D=D||this.defaultPadding;var b=Roo.get(this.getEl()).getBox();var ce=Roo.get(C);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Roo.lib.Dom.getViewWidth(),height:Roo.lib.Dom.getViewHeight()};}else {xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}var F=b.y-c.y;var G=b.x-c.x;this.resetConstraints();this.setXConstraint(G-(D.left||0),c.width-G-b.width-(D.right||0));this.setYConstraint(F-(D.top||0),c.height-F-b.height-(D.bottom||0));},getEl:function(){if(!this._domRef){this._domRef=Roo.getDom(this.id);}return this._domRef;},getDragEl:function(){return Roo.getDom(this.dragElId);},init:function(id,H,I){this.initTarget(id,H,I);A.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,J,K){this.config=K||{};this.DDM=Roo.dd.DDM;this.groups={};if(typeof id!=="string"){id=Roo.id(id);}
 this.id=id;this.addToGroup((J)?J:"default");this.handleElId=id;this.setDragElId(id);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(L,M,N,O){if(!M&&0!==M){this.padding=[L,L,L,L];}else if(!N&&0!==N){this.padding=[L,M,L,M];}else {this.padding=[L,M,N,O];}},setInitPosition:function(P,Q){var el=this.getEl();if(!this.DDM.verifyEl(el)){return;}var dx=P||0;var dy=Q||0;var p=B.getXY(el);this.initPageX=p[0]-dx;this.initPageY=p[1]-dy;this.lastPageX=p[0];this.lastPageY=p[1];this.setStartPosition(p);},setStartPosition:function(R){var p=R||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=p[0];this.startPageY=p[1];},addToGroup:function(S){this.groups[S]=true;this.DDM.regDragDrop(this,S);},removeFromGroup:function(T){if(this.groups[T]){delete this.groups[T];}
index 77f9552..9d16e16 100644 (file)
@@ -4400,28 +4400,44 @@ Roo.DomHelper = function(){
 * For a list of available format functions, see {@link Roo.util.Format}.<br />
 * Usage:
 <pre><code>
-var t = new Roo.Template(
-    '&lt;div name="{id}"&gt;',
-        '&lt;span class="{cls}"&gt;{name:trim} {value:ellipsis(10)}&lt;/span&gt;',
-    '&lt;/div&gt;'
-);
+var t = new Roo.Template({
+    html :  '&lt;div name="{id}"&gt;' + 
+        '&lt;span class="{cls}"&gt;{name:trim} {someval:this.myformat}{value:ellipsis(10)}&lt;/span&gt;' +
+        '&lt;/div&gt;',
+    myformat: function (value, allValues) {
+        return 'XX' + value;
+    }
+});
 t.append('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'});
 </code></pre>
 * For more information see this blog post with examples: <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">DomHelper - Create Elements using DOM, HTML fragments and Templates</a>. 
 * @constructor
-* @param {String/Array} html The HTML fragment or an array of fragments to join("") or multiple arguments to join("")
+* @param {Object} cfg - Configuration object.
 */
-Roo.Template = function(html){
-    if(html instanceof Array){
-        html = html.join("");
+Roo.Template = function(cfg){
+    // BC!
+    if(cfg instanceof Array){
+        cfg = cfg.join("");
     }else if(arguments.length > 1){
-        html = Array.prototype.join.call(arguments, "");
+        cfg = Array.prototype.join.call(arguments, "");
     }
-    /**@private*/
-    this.html = html;
+    
+    
+    if (typeof(cfg) == 'object') {
+        Roo.apply(this,cfg)
+    } else {
+        // bc
+        this.html = cfg;
+    }
+    
     
 };
 Roo.Template.prototype = {
+    
+    /**
+     * @cfg {String} html  The HTML fragment or an array of fragments to join("") or multiple arguments to join("")
+     */
+    html : '',
     /**
      * Returns an HTML fragment of this template with the specified values applied.
      * @param {Object} values The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})
index e23c6c4..b6f1aeb 100644 (file)
-window["undefined"]=window["undefined"];var Roo={};Roo.apply=function(o,c,A){if(A){Roo.apply(o,A);}if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}return o;};(function(){var B=0;var ua=navigator.userAgent.toLowerCase();var C=document.compatMode=="CSS1Compat",D=ua.indexOf("opera")>-1,E=(/webkit|khtml/).test(ua),F=ua.indexOf("msie")>-1,G=ua.indexOf("msie 7")>-1,H=!E&&ua.indexOf("gecko")>-1,I=F&&!C,J=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),K=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),L=(ua.indexOf("linux")!=-1),M=window.location.href.toLowerCase().indexOf("https")===0;if(F&&!G){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Roo.apply(Roo,{isStrict:C,isSecure:M,isReady:false,debug:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/localhost/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}return o;},addBehaviors:function(o){if(!Roo.isReady){Roo.onReady(function(){Roo.addBehaviors(o);});return;}var N={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!N[s]){N[s]=Roo.select(s);}
-N[s].on(parts[1],o[b]);}}
-N=null;},id:function(el,O){O=O||"roo-gen";el=Roo.getDom(el);var id=O+(++B);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,P){if(typeof sp=='object'){P=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Roo.override(sb,o);};sbp.override=io;Roo.override(sb,P);return sb;};}(),override:function(P,Q){if(Q){var p=P.prototype;for(var method in Q){p[method]=Q[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},factory:function(c,ns){if(!c.xtype||(!ns&&!c.xns)||(c.xns===false)){return c;}
-ns=c.xns?c.xns:ns;if(c.constructor==ns[c.xtype]){return c;}if(ns[c.xtype]){if(Roo.debug)Roo.log("Roo.Factory("+c.xtype+")");var ret=new ns[c.xtype](c);ret.xns=false;return ret;}
-c.xns=false;return c;},log:function(s){if((typeof(console)=='undefined')||(typeof(console.log)=='undefined')){return;}
-console.log(s);},urlEncode:function(o){if(!o){return "";}var R=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=='undefined'){R.push(k,"=&");}else if(type!="function"&&type!="object"){R.push(k,"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){if(ov.length){for(var i=0,len=ov.length;i<len;i++){R.push(k,"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}else {R.push(k,"=&");}}}
-R.pop();return R.join("");},urlDecode:function(S,T){if(!S||!S.length){return {};}var U={};var V=S.split('&');var W,X,Y;for(var i=0,len=V.length;i<len;i++){W=V[i].split('=');X=decodeURIComponent(W[0]);Y=decodeURIComponent(W[1]);if(T!==true){if(typeof U[X]=="undefined"){U[X]=Y;}else if(typeof U[X]=="string"){U[X]=[U[X]];U[X].push(Y);}else {U[X].push(Y);}}else {U[X]=Y;}}return U;},each:function(Z,fn,f){if(typeof Z.length=="undefined"||typeof Z=="string"){Z=[Z];}for(var i=0,len=Z.length;i<len;i++){if(fn.call(f||Z[i],Z[i],i,Z)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else {r.push(a);}}return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,g,h,n){if(typeof cb=="function"){if(n){cb.defer(n,g,h||[]);}else {cb.apply(g,h||[]);}}},getDom:function(el){if(!el){return null;}return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Roo.ComponentMgr.get(id);},num:function(v,q){if(typeof v!='number'){return q;}return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;}if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,u){return v===null||v===undefined||(!u?v==='':false);},isOpera:D,isSafari:E,isIE:F,isIE7:G,isGecko:H,isBorderBox:I,isWindows:J,isLinux:L,isMac:K,useShims:((F&&!G)||(H&&K))});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux");
-(function(){if(Roo.isIE){function A(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",A);}
-window.attachEvent("onunload",A);}})();Roo.apply(Function.prototype,{createCallback:function(){var B=arguments;var C=this;return function(){return C.apply(window,B);};},createDelegate:function(D,E,F){var G=this;return function(){var H=E||arguments;if(F===true){H=Array.prototype.slice.call(arguments,0);H=H.concat(E);}else if(typeof F=="number"){H=Array.prototype.slice.call(arguments,0);var applyArgs=[F,0].concat(E);Array.prototype.splice.apply(H,applyArgs);}return G.apply(D||window,H);};},defer:function(H,I,J,K){var fn=this.createDelegate(I,J,K);if(H){return setTimeout(fn,H);}
-fn();return 0;},createSequence:function(L,M){if(typeof L!="function"){return this;}var N=this;return function(){var O=N.apply(this||window,arguments);L.apply(M||this||window,arguments);return O;};},createInterceptor:function(O,P){if(typeof O!="function"){return this;}var Q=this;return function(){O.target=this;O.method=Q;if(O.apply(P||this||window,arguments)===false){return;}return Q.apply(this||window,arguments);};}});
-Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(B,C,ch){var D=new String(B);if(ch===null||ch===undefined||ch===''){ch=" ";}while(D.length<C){D=ch+D;}return D;},format:function(E){var F=Array.prototype.slice.call(arguments,1);return E.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(F[i]);});}});String.prototype.toggle=function(G,H){return this==G?H:G;};
-Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
-Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(B){var C=this.length>>>0;if(typeof B!="function")throw new TypeError();var D=new Array(C);var E=arguments[1];for(var i=0;i<C;i++){if(i in this)D[i]=B.call(E,this[i],i,this);}return D;}});
-Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(B){if(Date.formatFunctions[B]==null){Date.createNewFormat(B);}var C=Date.formatFunctions[B];return this[C]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(D){var E="format"+Date.formatFunctions.count++;Date.formatFunctions[D]=E;var F="Date.prototype."+E+" = function(){return ";var G=false;var ch='';for(var i=0;i<D.length;++i){ch=D.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+="'"+String.escape(ch)+"' + ";}else {F+=Date.getFormatCode(ch);}}eval(F.substring(0,F.length-3)+";}");};Date.getFormatCode=function(H){switch(H){case "d":return "String.leftPad(this.getDate(), 2, '0') + ";case "D":return "Date.dayNames[this.getDay()].substring(0, 3) + ";case "j":return "this.getDate() + ";case "l":return "Date.dayNames[this.getDay()] + ";case "S":return "this.getSuffix() + ";case "w":return "this.getDay() + ";case "z":return "this.getDayOfYear() + ";case "W":return "this.getWeekOfYear() + ";case "F":return "Date.monthNames[this.getMonth()] + ";case "m":return "String.leftPad(this.getMonth() + 1, 2, '0') + ";case "M":return "Date.monthNames[this.getMonth()].substring(0, 3) + ";case "n":return "(this.getMonth() + 1) + ";case "t":return "this.getDaysInMonth() + ";case "L":return "(this.isLeapYear() ? 1 : 0) + ";case "Y":return "this.getFullYear() + ";case "y":return "('' + this.getFullYear()).substring(2, 4) + ";case "a":return "(this.getHours() < 12 ? 'am' : 'pm') + ";case "A":return "(this.getHours() < 12 ? 'AM' : 'PM') + ";case "g":return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";case "G":return "this.getHours() + ";case "h":return "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";case "H":return "String.leftPad(this.getHours(), 2, '0') + ";case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";default:return "'"+String.escape(H)+"' + ";}};Date.parseDate=function(I,J){if(Date.parseFunctions[J]==null){Date.createParser(J);}var K=Date.parseFunctions[J];return Date[K](I);};Date.createParser=function(L){var M="parse"+Date.parseFunctions.count++;var N=Date.parseRegexes.length;var O=1;Date.parseFunctions[L]=M;var P="Date."+M+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"var results = input.match(Date.parseRegexes["+N+"]);\n"+"if (results && results.length > 0) {";var Q="";var R=false;var ch='';for(var i=0;i<L.length;++i){ch=L.charAt(i);if(!R&&ch=="\\"){R=true;}else if(R){R=false;Q+=String.escape(ch);}else {var obj=Date.formatCodeToRegex(ch,O);O+=obj.g;Q+=obj.s;if(obj.g&&obj.c){P+=obj.c;}}}
-P+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m);}\n"+"else if (y >= 0)\n"+"{v = new Date(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";Date.parseRegexes[N]=new RegExp("^"+Q+"$");eval(P);};Date.formatCodeToRegex=function(S,T){switch(S){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+T+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+T+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+T+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+T+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = parseInt(results["+T+"], 10) - 1;\n",s:"(\\d{2})"};case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+T+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+T+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case "a":return {g:1,c:"if (results["+T+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+T+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case "g":case "G":return {g:1,c:"h = parseInt(results["+T+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+T+"], 10);\n",s:"(\\d{2})"};case "O":return {g:1,c:["o = results[",T,"];\n","var sn = o.substring(0,1);\n","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n","var mn = o.substring(3,5) % 60;\n","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n","    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"].join(""),s:"([+\-]\\d{4})"};case "T":return {g:0,c:null,s:"[A-Z]{1,4}"};case "Z":return {g:1,c:"z = results["+T+"];\n"+"z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"};default:return {g:0,c:null,s:String.escape(S)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/,"$1");};Date.prototype.getGMTOffset=function(){return (this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")+String.leftPad(this.getTimezoneOffset()%60,2,"0");};Date.prototype.getDayOfYear=function(){var U=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){U+=Date.daysInMonth[i];}return U+this.getDate()-1;};Date.prototype.getWeekOfYear=function(){var V=this.getDayOfYear()+(4-this.getDay());var W=new Date(this.getFullYear(),0,1);var X=(7-W.getDay()+4);return String.leftPad(((V-X)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var Y=this.getFullYear();return ((Y&3)==0&&(Y%100||(Y%400==0&&Y)));};Date.prototype.getFirstDayOfMonth=function(){var Z=(this.getDay()-(this.getDate()-1))%7;return (Z<0)?(Z+7):Z;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return (a<0)?(a+7):a;};Date.prototype.getFirstDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),1);};Date.prototype.getLastDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return "st";case 2:case 22:return "nd";case 3:case 23:return "rd";default:return "th";}};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.clearTime=function(b){if(b){return this.clone().clearTime();}
-this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};if(Roo.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(c){if(c<=-1){var n=Math.ceil(-c);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else {return Date.brokenSetMonth.apply(this,arguments);}};}
-Date.MILLI="ms";Date.SECOND="s";Date.MINUTE="mi";Date.HOUR="h";Date.DAY="d";Date.MONTH="mo";Date.YEAR="y";Date.prototype.add=function(e,f){var d=this.clone();if(!e||f===0)return d;switch(e.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+f);break;case Date.SECOND:d.setSeconds(this.getSeconds()+f);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+f);break;case Date.HOUR:d.setHours(this.getHours()+f);break;case Date.DAY:d.setDate(this.getDate()+f);break;case Date.MONTH:var a=this.getDate();if(a>28){a=Math.min(a,this.getFirstDateOfMonth().add('mo',f).getLastDateOfMonth().getDate());}
-d.setDate(a);d.setMonth(this.getMonth()+f);break;case Date.YEAR:d.setFullYear(this.getFullYear()+f);break;}return d;};
-Roo.lib.Dom={getViewWidth:function(A){return A?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(B){return B?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var C=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(C,this.getViewportHeight());},getDocumentWidth:function(){var D=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(D,this.getViewportWidth());},getViewportHeight:function(){var E=self.innerHeight;var F=document.compatMode;if((F||Roo.isIE)&&!Roo.isOpera){E=(F=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}return E;},getViewportWidth:function(){var G=self.innerWidth;var H=document.compatMode;if(H||Roo.isIE){G=(H=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}return G;},isAncestor:function(p,c){p=Roo.getDom(p);c=Roo.getDom(c);if(!p||!c){return false;}if(p.contains&&!Roo.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return !!(p.compareDocumentPosition(c)&16);}else {var parent=c.parentNode;while(parent){if(parent==p){return true;}else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
-parent=parent.parentNode;}return false;}},getRegion:function(el){return Roo.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,I,bd=document.body;el=Roo.getDom(el);var J=Roo.lib.AnimBase.fly;if(el.getBoundingClientRect){b=el.getBoundingClientRect();I=J(document).getScroll();return [b.left+I.left,b.top+I.top];}var x=0,y=0;p=el;var K=J(el).getStyle("position")=="absolute";while(p){x+=p.offsetLeft;y+=p.offsetTop;if(!K&&J(p).getStyle("position")=="absolute"){K=true;}if(Roo.isGecko){pe=J(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}if(Roo.isSafari&&K){x-=bd.offsetLeft;y-=bd.offsetTop;}if(Roo.isGecko&&!K){var dbd=J(bd);x+=parseInt(dbd.getStyle("borderLeftWidth"),10)||0;y+=parseInt(dbd.getStyle("borderTopWidth"),10)||0;}
-p=el.parentNode;while(p&&p!=bd){if(!Roo.isOpera||(p.tagName!='TR'&&J(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}return [x,y];},setXY:function(el,xy){el=Roo.fly(el,'_setXY');el.position();var L=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=L.left+"px";}if(xy[1]!==false){el.dom.style.top=L.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};
-Roo.lib.Event=function(){var A=false;var B=[];var C=[];var D=0;var E=[];var F=0;var G=null;return {POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var self=this;var callback=function(){self._tryPreloadAttach();};this._interval=setInterval(callback,this.POLL_INTERVAL);}},onAvailable:function(h,k,m,n){E.push({id:h,fn:k,obj:m,override:n,checkReady:false});D=this.POLL_RETRYS;this.startInterval();},addListener:function(el,o,fn){el=Roo.getDom(el);if(!el||!fn){return false;}if("unload"==o){C[C.length]=[el,o,fn];return true;}var p=function(e){return fn(Roo.lib.Event.getEvent(e));};var li=[el,o,fn,p];var q=B.length;B[q]=li;this.doAdd(el,o,p,false);return true;},removeListener:function(el,r,fn){var i,s;el=Roo.getDom(el);if(!fn){return this.purgeElement(el,false,r);}if("unload"==r){for(i=0,s=C.length;i<s;i++){var li=C[i];if(li&&li[0]==el&&li[1]==r&&li[2]==fn){C.splice(i,1);return true;}}return false;}var u=null;var v=arguments[3];if("undefined"==typeof v){v=this._getCacheIndex(el,r,fn);}if(v>=0){u=B[v];}if(!el||!u){return false;}
-this.doRemove(el,r,u[this.WFN],false);delete B[v][this.WFN];delete B[v][this.FN];B.splice(v,1);return true;},getTarget:function(ev,w){ev=ev.browserEvent||ev;var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(z){if(Roo.isSafari&&z&&3==z.nodeType){return z.parentNode;}else {return z;}},getPageX:function(ev){ev=ev.browserEvent||ev;var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(Roo.isIE){x+=this.getScroll()[1];}}return x;},getPageY:function(ev){ev=ev.browserEvent||ev;var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(Roo.isIE){y+=this.getScroll()[0];}}return y;},getXY:function(ev){ev=ev.browserEvent||ev;return [this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}return this.resolveTextNode(t);},getTime:function(ev){ev=ev.browserEvent||ev;if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}}return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){ev=ev.browserEvent||ev;if(ev.stopPropagation){ev.stopPropagation();}else {ev.cancelBubble=true;}},preventDefault:function(ev){ev=ev.browserEvent||ev;if(ev.preventDefault){ev.preventDefault();}else {ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}
-c=c.caller;}}return ev;},getCharCode:function(ev){ev=ev.browserEvent||ev;return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,AA,fn){for(var i=0,s=B.length;i<s;++i){var li=B[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==AA){return i;}}return -1;},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){A=true;var EU=Roo.lib.Event;if(Roo.isIE){EU.doRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}
-this.locked=true;var AB=!A;if(!AB){AB=(D>0);}var AC=[];for(var i=0,s=E.length;i<s;++i){var item=E[i];if(item){var el=this.getEl(item.id);if(el){if(!item.checkReady||A||el.nextSibling||(document&&document.body)){var scope=el;if(item.override){if(item.override===true){scope=item.obj;}else {scope=item.override;}}
-item.fn.call(scope,item.obj);E[i]=null;}}else {AC.push(item);}}}
-D=(AC.length===0)?0:D-1;if(AB){this.startInterval();}else {clearInterval(this._interval);this._interval=null;}
-this.locked=false;return true;},purgeElement:function(el,AD,AE){var AF=this.getListeners(el,AE);if(AF){for(var i=0,s=AF.length;i<s;++i){var l=AF[i];this.removeListener(el,l.type,l.fn);}}if(AD&&el&&el.childNodes){for(i=0,s=el.childNodes.length;i<s;++i){this.purgeElement(el.childNodes[i],AD,AE);}}},getListeners:function(el,AG){var AH=[],AI;if(!AG){AI=[B,C];}else if(AG=="unload"){AI=[C];}else {AI=[B];}for(var j=0;j<AI.length;++j){var searchList=AI[j];if(searchList&&searchList.length>0){for(var i=0,s=searchList.length;i<s;++i){var l=searchList[i];if(l&&l[this.EL]===el&&(!AG||AG===l[this.TYPE])){AH.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}return (AH.length)?AH:null;},_unload:function(e){var EU=Roo.lib.Event,i,j,l,AJ,AK;for(i=0,AJ=C.length;i<AJ;++i){l=C[i];if(l){var scope=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){scope=l[EU.OBJ];}else {scope=l[EU.ADJ_SCOPE];}}
-l[EU.FN].call(scope,EU.getEvent(e),l[EU.OBJ]);C[i]=null;l=null;scope=null;}}
-C=null;if(B&&B.length>0){j=B.length;while(j){AK=j-1;l=B[AK];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],AK);}
-j=j-1;}
-l=null;EU.clearCache();}
-EU.doRemove(window,"unload",EU._unload);},getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return [dd.scrollTop,dd.scrollLeft];}else if(db){return [db.scrollTop,db.scrollLeft];}else {return [0,0];}},doAdd:function(){if(window.addEventListener){return function(el,AL,fn,AM){el.addEventListener(AL,fn,(AM));};}else if(window.attachEvent){return function(el,AL,fn,AM){el.attachEvent("on"+AL,fn);};}else {return function(){};}}(),doRemove:function(){if(window.removeEventListener){return function(el,AL,fn,AM){el.removeEventListener(AL,fn,(AM));};}else if(window.detachEvent){return function(el,AL,fn){el.detachEvent("on"+AL,fn);};}else {return function(){};}}()};}();(function(){var E=Roo.lib.Event;E.on=E.addListener;E.un=E.removeListener;if(document&&document.body){E._load();}else {E.doAdd(window,"load",E._load);}
-E.doAdd(window,"unload",E._unload);E._tryPreloadAttach();})();
-(function(){Roo.lib.Ajax={request:function(A,B,cb,C,D){if(D){var hs=D.headers;if(hs){for(var h in hs){if(hs.hasOwnProperty(h)){this.initHeader(h,hs[h],false);}}}if(D.xmlData){this.initHeader('Content-Type','text/xml',false);A='POST';C=D.xmlData;}}return this.asyncRequest(A,B,cb,C);},serializeForm:function(E){if(typeof E=='string'){E=(document.getElementById(E)||document.forms[E]);}var el,F,G,H,I='',J=false;for(var i=0;i<E.elements.length;i++){el=E.elements[i];H=E.elements[i].disabled;F=E.elements[i].name;G=E.elements[i].value;if(!H&&F){switch(el.type){case 'select-one':case 'select-multiple':for(var j=0;j<el.options.length;j++){if(el.options[j].selected){if(Roo.isIE){I+=encodeURIComponent(F)+'='+encodeURIComponent(el.options[j].attributes['value'].specified?el.options[j].value:el.options[j].text)+'&';}else {I+=encodeURIComponent(F)+'='+encodeURIComponent(el.options[j].hasAttribute('value')?el.options[j].value:el.options[j].text)+'&';}}}break;case 'radio':case 'checkbox':if(el.checked){I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';}break;case 'file':case undefined:case 'reset':case 'button':break;case 'submit':if(J==false){I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';J=true;}break;default:I+=encodeURIComponent(F)+'='+encodeURIComponent(G)+'&';break;}}}
-I=I.substr(0,I.length-1);return I;},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:'application/x-www-form-urlencoded',useDefaultXhrHeader:true,defaultXhrHeader:'XMLHttpRequest',hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(id){this.activeX.unshift(id);},setDefaultPostHeader:function(b){this.useDefaultHeader=b;},setDefaultXhrHeader:function(b){this.useDefaultXhrHeader=b;},setPollingInterval:function(i){if(typeof i=='number'&&isFinite(i)){this.pollInterval=i;}},createXhrObject:function(K){var L,M;try{M=new XMLHttpRequest();L={conn:M,tId:K};}catch(e){for(var i=0;i<this.activeX.length;++i){try{http=new ActiveXObject(this.activeX[i]);obj={conn:http,tId:transactionId};break;}catch(e){}}}finally{return L;}},getConnectionObject:function(){var o;var N=this.transactionId;try{o=this.createXhrObject(N);if(o){this.transactionId++;}}catch(e){}finally{return o;}},asyncRequest:function(O,P,Q,R){var o=this.getConnectionObject();if(!o){return null;}else {o.conn.open(O,P,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders['X-Requested-With']){this.initHeader('X-Requested-With',this.defaultXhrHeader,true);}}if(R&&this.useDefaultHeader){this.initHeader('Content-Type',this.defaultPostHeader);}if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(o);}
-this.handleReadyState(o,Q);o.conn.send(R||null);return o;}},handleReadyState:function(o,S){var T=this;if(S&&S.timeout){this.timeout[o.tId]=window.setTimeout(function(){T.abort(o,S,true);},S.timeout);}
-this.poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(T.poll[o.tId]);delete T.poll[o.tId];if(S&&S.timeout){window.clearTimeout(T.timeout[o.tId]);delete T.timeout[o.tId];}
-T.handleTransactionResponse(o,S);}},this.pollInterval);},handleTransactionResponse:function(o,U,V){if(!U){this.releaseObject(o);return;}var W,X;try{if(o.conn.status!==undefined&&o.conn.status!=0){W=o.conn.status;}else {W=13030;}}catch(e){httpStatus=13030;}if(W>=200&&W<300){X=this.createResponseObject(o,U.argument);if(U.success){if(!U.scope){U.success(X);}else {U.success.apply(U.scope,[X]);}}}else {switch(W){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:X=this.createExceptionObject(o.tId,U.argument,(V?V:false));if(U.failure){if(!U.scope){U.failure(X);}else {U.failure.apply(U.scope,[X]);}}break;default:X=this.createResponseObject(o,U.argument);if(U.failure){if(!U.scope){U.failure(X);}else {U.failure.apply(U.scope,[X]);}}}}
-this.releaseObject(o);X=null;},createResponseObject:function(o,Y){var Z={};var a={};try{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){a[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}catch(e){}
-Z.tId=o.tId;Z.status=o.conn.status;Z.statusText=o.conn.statusText;Z.getResponseHeader=a;Z.getAllResponseHeaders=headerStr;Z.responseText=o.conn.responseText;Z.responseXML=o.conn.responseXML;if(typeof Y!==undefined){Z.argument=Y;}return Z;},createExceptionObject:function(c,d,f){var g=0;var k='communication failure';var l=-1;var m='transaction aborted';var n={};n.tId=c;if(f){n.status=l;n.statusText=m;}else {n.status=g;n.statusText=k;}if(d){n.argument=d;}return n;},initHeader:function(p,q,r){var s=(r)?this.defaultHeaders:this.headers;if(s[p]===undefined){s[p]=q;}else {s[p]=q+","+s[p];}if(r){this.hasDefaultHeaders=true;}else {this.hasHeaders=true;}},setHeader:function(o){if(this.hasDefaultHeaders){for(var prop in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.defaultHeaders[prop]);}}}if(this.hasHeaders){for(var prop in this.headers){if(this.headers.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.headers[prop]);}}
-this.headers={};this.hasHeaders=false;}},resetDefaultHeaders:function(){delete this.defaultHeaders;this.defaultHeaders={};this.hasDefaultHeaders=false;},abort:function(o,t,u){if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this.poll[o.tId]);delete this.poll[o.tId];if(u){delete this.timeout[o.tId];}
-this.handleTransactionResponse(o,t,true);return true;}else {return false;}},isCallInProgress:function(o){if(o&&o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}else {return false;}},releaseObject:function(o){o.conn=null;o=null;},activeX:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP']};})();
-Roo.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Roo.lib.Region.prototype={contains:function(A){return (A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);},getArea:function(){return ((this.bottom-this.top)*(this.right-this.left));},intersect:function(B){var t=Math.max(this.top,B.top);var r=Math.min(this.right,B.right);var b=Math.min(this.bottom,B.bottom);var l=Math.max(this.left,B.left);if(b>=t&&r>=l){return new Roo.lib.Region(t,r,b,l);}else {return null;}},union:function(C){var t=Math.min(this.top,C.top);var r=Math.max(this.right,C.right);var b=Math.max(this.bottom,C.bottom);var l=Math.min(this.left,C.left);return new Roo.lib.Region(t,r,b,l);},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Roo.lib.Region.getRegion=function(el){var p=Roo.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Roo.lib.Region(t,r,b,l);};
-Roo.lib.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Roo.lib.Point.prototype=new Roo.lib.Region();
-(function(){Roo.lib.Anim={scroll:function(el,A,B,C,cb,D){this.run(el,A,B,C,cb,D,Roo.lib.Scroll);},motion:function(el,E,F,G,cb,H){this.run(el,E,F,G,cb,H,Roo.lib.Motion);},color:function(el,I,J,K,cb,L){this.run(el,I,J,K,cb,L,Roo.lib.ColorAnim);},run:function(el,M,N,O,cb,P,Q){Q=Q||Roo.lib.AnimBase;if(typeof O=="string"){O=Roo.lib.Easing[O];}var R=new Q(el,M,N,O);R.animateX(function(){Roo.callback(cb,P);});return R;}};})();
-(function(){var A;function B(el){if(!A){A=new Roo.Element.Flyweight();}
-A.dom=el;return A;}
-Roo.lib.AnimBase=function(el,C,D,E){if(el){this.init(el,C,D,E);}};Roo.lib.AnimBase.fly=B;Roo.lib.AnimBase.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return ("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,D,E){return this.method(this.currentFrame,D,E-D,this.totalFrames);},setAttribute:function(F,G,H){if(this.patterns.noNegatives.test(F)){G=(G>0)?G:0;}
-Roo.fly(this.getEl(),'_anim').setStyle(F,G+H);},getAttribute:function(I){var el=this.getEl();var J=B(el).getStyle(I);if(J!=='auto'&&!this.patterns.offsetUnit.test(J)){return parseFloat(J);}var a=this.patterns.offsetAttribute.exec(I)||[];var K=!!(a[3]);var L=!!(a[2]);if(L||(B(el).getStyle('position')=='absolute'&&K)){J=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else {J=0;}return J;},getDefaultUnit:function(M){if(this.patterns.defaultUnit.test(M)){return 'px';}return '';},animateX:function(N,O){var f=function(){this.onComplete.removeListener(f);if(typeof N=="function"){N.call(O||this,this);}};this.onComplete.addListener(f,this);this.animate();},setRuntimeAttribute:function(P){var Q;var R;var S=this.attributes;this.runtimeAttributes[P]={};var T=function(U){return (typeof U!=='undefined');};if(!T(S[P]['to'])&&!T(S[P]['by'])){return false;}
-Q=(T(S[P]['from']))?S[P]['from']:this.getAttribute(P);if(T(S[P]['to'])){R=S[P]['to'];}else if(T(S[P]['by'])){if(Q.constructor==Array){R=[];for(var i=0,len=Q.length;i<len;++i){R[i]=Q[i]+S[P]['by'][i];}}else {R=Q+S[P]['by'];}}
-this.runtimeAttributes[P].start=Q;this.runtimeAttributes[P].end=R;this.runtimeAttributes[P].unit=(T(S[P].unit))?S[P]['unit']:this.getDefaultUnit(P);},init:function(el,U,V,W){var X=false;var Y=null;var Z=0;el=Roo.getDom(el);this.attributes=U||{};this.duration=V||1;this.method=W||Roo.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Roo.lib.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return X;};this.getStartTime=function(){return Y;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}
-this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Roo.lib.AnimMgr.fps*this.duration):this.duration;Roo.lib.AnimMgr.registerElement(this);};this.stop=function(e){if(e){this.currentFrame=this.totalFrames;this._onTween.fire();}
-Roo.lib.AnimMgr.stop(this);};var b=function(){this.onStart.fire();this.runtimeAttributes={};for(var P in this.attributes){this.setRuntimeAttribute(P);}
-X=true;Z=0;Y=new Date();};var c=function(){var e={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};e.toString=function(){return ('duration: '+e.duration+', currentFrame: '+e.currentFrame);};this.onTween.fire(e);var g=this.runtimeAttributes;for(var P in g){this.setAttribute(P,this.doMethod(P,g[P].start,g[P].end),g[P].unit);}
-Z+=1;};var d=function(){var e=(new Date()-Y)/1000;var g={duration:e,frames:Z,fps:Z/e};g.toString=function(){return ('duration: '+g.duration+', frames: '+g.frames+', fps: '+g.fps);};X=false;Z=0;this.onComplete.fire(g);};this._onStart=new Roo.util.Event(this);this.onStart=new Roo.util.Event(this);this.onTween=new Roo.util.Event(this);this._onTween=new Roo.util.Event(this);this.onComplete=new Roo.util.Event(this);this._onComplete=new Roo.util.Event(this);this._onStart.addListener(b);this._onTween.addListener(c);this._onComplete.addListener(d);}};})();
-Roo.lib.AnimMgr=new function(){var A=null;var B=[];var C=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;C+=1;F._onStart.fire();this.start();};this.unRegister=function(F,G){F._onComplete.fire();G=G||D(F);if(G!=-1){B.splice(G,1);}
-C-=1;if(C<=0){this.stop();}};this.start=function(){if(A===null){A=setInterval(this.run,this.delay);}};this.stop=function(F){if(!F){clearInterval(A);for(var i=0,len=B.length;i<len;++i){if(B[0].isAnimated()){this.unRegister(B[0],0);}}
-B=[];A=null;C=0;}else {this.unRegister(F);}};this.run=function(){for(var i=0,len=B.length;i<len;++i){var tween=B[i];if(!tween||!tween.isAnimated()){continue;}if(tween.currentFrame<tween.totalFrames||tween.totalFrames===null){tween.currentFrame+=1;if(tween.useSeconds){E(tween);}
-tween._onTween.fire();}else {Roo.lib.AnimMgr.stop(tween,i);}}};var D=function(F){for(var i=0,len=B.length;i<len;++i){if(B[i]==F){return i;}}return -1;};var E=function(F){var G=F.totalFrames;var H=F.currentFrame;var I=(F.currentFrame*F.duration*1000/F.totalFrames);var J=(new Date()-F.getStartTime());var K=0;if(J<F.duration*1000){K=Math.round((J/I-1)*F.currentFrame);}else {K=G-(H+1);}if(K>0&&isFinite(K)){if(F.currentFrame+K>=G){K=G-(H+1);}
-F.currentFrame+=K;}};};
-Roo.lib.Bezier=new function(){this.getPosition=function(A,t){var n=A.length;var B=[];for(var i=0;i<n;++i){B[i]=[A[i][0],A[i][1]];}for(var j=1;j<n;++j){for(i=0;i<n-j;++i){B[i][0]=(1-t)*B[i][0]+t*B[parseInt(i+1,10)][0];B[i][1]=(1-t)*B[i][1]+t*B[parseInt(i+1,10)][1];}}return [B[0][0],B[0][1]];};};
-(function(){Roo.lib.ColorAnim=function(el,D,E,F){Roo.lib.ColorAnim.superclass.constructor.call(this,el,D,E,F);};Roo.extend(Roo.lib.ColorAnim,Roo.lib.AnimBase);var A=Roo.lib.AnimBase.fly;var Y=Roo.lib;var B=Y.ColorAnim.superclass;var C=Y.ColorAnim.prototype;C.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("ColorAnim "+id);};C.patterns.color=/color$/i;C.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;C.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;C.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;C.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;C.parseColor=function(s){if(s.length==3){return s;}var c=this.patterns.hex.exec(s);if(c&&c.length==4){return [parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];}
-c=this.patterns.rgb.exec(s);if(c&&c.length==4){return [parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];}
-c=this.patterns.hex3.exec(s);if(c&&c.length==4){return [parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];}return null;};C.getAttribute=function(D){var el=this.getEl();if(this.patterns.color.test(D)){var val=A(el).getStyle(D);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=A(parent).getStyle(D);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=A(parent).getStyle(D);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else {val=B.getAttribute.call(this,D);}return val;};C.getAttribute=function(D){var el=this.getEl();if(this.patterns.color.test(D)){var val=A(el).getStyle(D);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=A(parent).getStyle(D);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=A(parent).getStyle(D);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else {val=B.getAttribute.call(this,D);}return val;};C.doMethod=function(D,E,F){var G;if(this.patterns.color.test(D)){G=[];for(var i=0,len=E.length;i<len;++i){G[i]=B.doMethod.call(this,D,E[i],F[i]);}
-G='rgb('+Math.floor(G[0])+','+Math.floor(G[1])+','+Math.floor(G[2])+')';}else {G=B.doMethod.call(this,D,E,F);}return G;};C.setRuntimeAttribute=function(D){B.setRuntimeAttribute.call(this,D);if(this.patterns.color.test(D)){var attributes=this.attributes;var start=this.parseColor(this.runtimeAttributes[D].start);var end=this.parseColor(this.runtimeAttributes[D].end);if(typeof attributes[D]['to']==='undefined'&&typeof attributes[D]['by']!=='undefined'){end=this.parseColor(attributes[D].by);for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+end[i];}}
-this.runtimeAttributes[D].start=start;this.runtimeAttributes[D].end=end;}};})();
-Roo.lib.Easing={easeNone:function(t,b,c,d){return c*t/d+b;},easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return -c*(t/=d)*(t-2)+b;},easeBoth:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t+b;}return -c/2*((--t)*(t-2)-1)+b;},easeInStrong:function(t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutStrong:function(t,b,c,d){return -c*((t=t/d-1)*t*t*t-1)+b;},easeBothStrong:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t*t*t+b;}return -c/2*((t-=2)*t*t*t-2)+b;},elasticIn:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d)==1){return b+c;}if(!p){p=d*.3;}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}return -(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasticOut:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d)==1){return b+c;}if(!p){p=d*.3;}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasticBoth:function(t,b,c,d,a,p){if(t==0){return b;}if((t/=d/2)==2){return b+c;}if(!p){p=d*(.3*1.5);}if(!a||a<Math.abs(c)){a=c;var s=p/4;}else {var s=p/(2*Math.PI)*Math.asin(c/a);}if(t<1){return -.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backIn:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}return c*(t/=d)*t*((s+1)*t-s)+b;},backOut:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backBoth:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;}return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},bounceIn:function(t,b,c,d){return c-Roo.lib.Easing.bounceOut(d-t,0,c,d)+b;},bounceOut:function(t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return Roo.lib.Easing.bounceIn(t*2,0,c,d)*.5+b;}return Roo.lib.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};
-(function(){Roo.lib.Motion=function(el,E,F,G){if(el){Roo.lib.Motion.superclass.constructor.call(this,el,E,F,G);}};Roo.extend(Roo.lib.Motion,Roo.lib.ColorAnim);var Y=Roo.lib;var A=Y.Motion.superclass;var B=Y.Motion.prototype;B.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Motion "+id);};B.patterns.points=/^points$/i;B.setAttribute=function(E,F,G){if(this.patterns.points.test(E)){G=G||'px';A.setAttribute.call(this,'left',F[0],G);A.setAttribute.call(this,'top',F[1],G);}else {A.setAttribute.call(this,E,F,G);}};B.getAttribute=function(E){if(this.patterns.points.test(E)){var val=[A.getAttribute.call(this,'left'),A.getAttribute.call(this,'top')];}else {val=A.getAttribute.call(this,E);}return val;};B.doMethod=function(E,F,G){var H=null;if(this.patterns.points.test(E)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;H=Y.Bezier.getPosition(this.runtimeAttributes[E],t);}else {H=A.doMethod.call(this,E,F,G);}return H;};B.setRuntimeAttribute=function(E){if(this.patterns.points.test(E)){var el=this.getEl();var attributes=this.attributes;var start;var control=attributes['points']['control']||[];var end;var i,len;if(control.length>0&&!(control[0] instanceof Array)){control=[control];}else {var tmp=[];for(i=0,len=control.length;i<len;++i){tmp[i]=control[i];}
-control=tmp;}
-Roo.fly(el).position();if(D(attributes['points']['from'])){Roo.lib.Dom.setXY(el,attributes['points']['from']);}else {Roo.lib.Dom.setXY(el,Roo.lib.Dom.getXY(el));}
-start=this.getAttribute('points');if(D(attributes['points']['to'])){end=C.call(this,attributes['points']['to'],start);var pageXY=Roo.lib.Dom.getXY(this.getEl());for(i=0,len=control.length;i<len;++i){control[i]=C.call(this,control[i],start);}}else if(D(attributes['points']['by'])){end=[start[0]+attributes['points']['by'][0],start[1]+attributes['points']['by'][1]];for(i=0,len=control.length;i<len;++i){control[i]=[start[0]+control[i][0],start[1]+control[i][1]];}}
-this.runtimeAttributes[E]=[start];if(control.length>0){this.runtimeAttributes[E]=this.runtimeAttributes[E].concat(control);}
-this.runtimeAttributes[E][this.runtimeAttributes[E].length]=end;}else {A.setRuntimeAttribute.call(this,E);}};var C=function(E,F){var G=Roo.lib.Dom.getXY(this.getEl());E=[E[0]-G[0]+F[0],E[1]-G[1]+F[1]];return E;};var D=function(E){return (typeof E!=='undefined');};})();
-(function(){Roo.lib.Scroll=function(el,C,D,E){if(el){Roo.lib.Scroll.superclass.constructor.call(this,el,C,D,E);}};Roo.extend(Roo.lib.Scroll,Roo.lib.ColorAnim);var Y=Roo.lib;var A=Y.Scroll.superclass;var B=Y.Scroll.prototype;B.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else {F=A.doMethod.call(this,C,D,E);}return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else {D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];}else {A.setAttribute.call(this,C,D,E);}};})();
-Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}
-b+="<"+o.tag;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||typeof o[attr]=="function")continue;if(attr=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var key in s){if(typeof s[key]!="function"){b+=key+":"+s[key]+";";}}
-b+='"';}}else {if(attr=="cls"){b+=' class="'+o["cls"]+'"';}else if(attr=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else {b+=" "+attr+'="'+o[attr]+'"';}}}if(B.test(o.tag)){b+="/>";}else {b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,len=cn.length;i<len;i++){b+=E(cn[i],b);}}else {b+=E(cn,b);}}if(o.html){b+=o.html;}
-b+="</"+o.tag+">";}return b;};var F=function(o,M){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");}
-ns=D[o.ns];}if(typeof(o)=='string'){return M.appendChild(document.createTextNode(o));}
-o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var N=el.setAttribute?true:false;for(var attr in o){if(attr=="tag"||attr=="ns"||attr=="xmlns"||attr=="children"||attr=="cn"||attr=="html"||attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"&&Roo.isIE){el.className=o["cls"];}else {if(N)el.setAttribute(attr=="cls"?'class':attr,o[attr]);else el[attr]=o[attr];}}
-Roo.DomHelper.applyStyles(el,o.style);var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,len=cn.length;i<len;i++){F(cn[i],el);}}else {F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(M){M.appendChild(el);}return el;};var G=function(M,s,h,e){A.innerHTML=[s,h,e].join('');var i=-1,el=A;while(++i<M){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(M,N,el,O){if(!A){A=document.createElement('div');}var P;var Q=null;if(M=='td'){if(N=='afterbegin'||N=='beforeend'){return;}if(N=='beforebegin'){Q=el;el=el.parentNode;}else {Q=el.nextSibling;el=el.parentNode;}
-P=G(4,J,O,K);}else if(M=='tr'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(3,H,O,I);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(3,H,O,I);}else {if(N=='afterbegin'){Q=el.firstChild;}
-P=G(4,J,O,K);}}else if(M=='tbody'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(2,ts,O,te);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(2,ts,O,te);}else {if(N=='afterbegin'){Q=el.firstChild;}
-P=G(3,H,O,I);}}else {if(N=='beforebegin'||N=='afterend'){return;}if(N=='afterbegin'){Q=el.firstChild;}
-P=G(2,ts,O,te);}
-el.insertBefore(P,Q);return P;};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,c){if(c){el=Roo.fly(el);if(typeof c=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var matches;while((matches=re.exec(c))!=null){el.setStyle(matches[1],matches[2]);}}else if(typeof c=="object"){for(var style in c){el.setStyle(style,c[style]);}}else if(typeof c=="function"){Roo.DomHelper.applyStyles(el,c.call());}}},insertHtml:function(d,el,e){d=d.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;if(rs=L(el.tagName.toLowerCase(),d,el,e)){return rs;}}switch(d){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',e);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',e);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',e);return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',e);return el.nextSibling;}throw 'Illegal insertion point -> "'+d+'"';}var f=el.ownerDocument.createRange();var g;switch(d){case "beforebegin":f.setStartBefore(el);g=f.createContextualFragment(e);el.parentNode.insertBefore(g,el);return el.previousSibling;case "afterbegin":if(el.firstChild){f.setStartBefore(el.firstChild);g=f.createContextualFragment(e);el.insertBefore(g,el.firstChild);return el.firstChild;}else {el.innerHTML=e;return el.firstChild;}case "beforeend":if(el.lastChild){f.setStartAfter(el.lastChild);g=f.createContextualFragment(e);el.appendChild(g);return el.lastChild;}else {el.innerHTML=e;return el.lastChild;}case "afterend":f.setStartAfter(el);g=f.createContextualFragment(e);el.parentNode.insertBefore(g,el.nextSibling);return el.nextSibling;}throw 'Illegal insertion point -> "'+d+'"';},insertBefore:function(el,o,h){return this.doInsert(el,o,h,"beforeBegin");},insertAfter:function(el,o,j){return this.doInsert(el,o,j,"afterEnd","nextSibling");},insertFirst:function(el,o,k){return this.doInsert(el,o,k,"afterBegin");},doInsert:function(el,o,l,m,n){el=Roo.getDom(el);var p;if(this.useDom||o.ns){p=F(o,null);el.parentNode.insertBefore(p,n?el[n]:el);}else {var e=E(o);p=this.insertHtml(m,el,e);}return l?Roo.get(p,true):p;},append:function(el,o,q){el=Roo.getDom(el);var r;if(this.useDom||o.ns){r=F(o,null);el.appendChild(r);}else {var e=E(o);r=this.insertHtml("beforeEnd",el,e);}return q?Roo.get(r,true):r;},overwrite:function(el,o,t){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}
-F(o,el);}else {el.innerHTML=E(o);}return t?Roo.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var u=E(o);return new Roo.Template(u);}};}();
-Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}
-this.html=A;};Roo.Template.prototype={applyTemplate:function(values){try{if(this.compiled){return this.compiled(values);}var useF=this.disableFormats!==true;var fm=Roo.util.Format,tpl=this;var fn=function(m,E,F,G){if(F&&useF){if(F.substr(0,5)=="this."){return tpl.call(F.substr(5),values[E],values);}else {if(G){var re=/^\s*['"](.*)["']\s*$/;G=G.split(',');for(var i=0,len=G.length;i<len;i++){G[i]=G[i].replace(re,"$1");}
-G=[values[E]].concat(G);}else {G=[values[E]];}return fm[F].apply(fm,G);}}else {return values[E]!==undefined?values[E]:"";}};return this.html.replace(this.re,fn);}catch(e){Roo.log(e);throw e;}},set:function(B,C){this.html=B;this.compiled=null;if(C){this.compile();}return this;},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Roo.util.Format;var D=this.disableFormats!==true;var E=Roo.isGecko?"+":",";var fn=function(m,G,H,I){if(H&&D){I=I?','+I:"";if(H.substr(0,5)!="this."){H="fm."+H+'(';}else {H='this.call("'+H.substr(5)+'", ';I=", values";}}else {I='';H="(values['"+G+"'] == undefined ? '' : ";}return "'"+E+H+"values['"+G+"']"+I+")"+E+"'";};var F;if(Roo.isGecko){F="this.compiled = function(values){ return '"+this.html.replace(/\\/g,'\\\\').replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};";}else {F=["this.compiled = function(values){ return ['"];F.push(this.html.replace(/\\/g,'\\\\').replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn));F.push("'].join('');};");F=F.join('');}eval(F);return this;},call:function(G,H,I){return this[G](H,I);},insertFirst:function(el,J,K){return this.doInsert('afterBegin',el,J,K);},insertBefore:function(el,L,M){return this.doInsert('beforeBegin',el,L,M);},insertAfter:function(el,N,O){return this.doInsert('afterEnd',el,N,O);},append:function(el,P,Q){return this.doInsert('beforeEnd',el,P,Q);},doInsert:function(R,el,S,T){el=Roo.getDom(el);var U=Roo.DomHelper.insertHtml(R,el,this.applyTemplate(S));return T?Roo.get(U,true):U;},overwrite:function(el,V,W){el=Roo.getDom(el);el.innerHTML=this.applyTemplate(V);return W?Roo.get(el.firstChild,true):el.firstChild;}};Roo.Template.prototype.apply=Roo.Template.prototype.applyTemplate;Roo.DomHelper.Template=Roo.Template;Roo.Template.from=function(el){el=Roo.getDom(el);return new Roo.Template(el.value||el.innerHTML);};
-Roo.DomQuery=function(){var A={},simpleCache={},valueCache={};var B=/\S/;var C=/^\s+|\s+$/g;var D=/\{(\d+)\}/g;var E=/^(\s?[\/>+~]\s?|\s|$)/;var F=/^(#)?([\w-\*]+)/;var G=/(\d*)n\+?(\d*)/,H=/\D/;function I(p,T){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==T){return n;}}
-n=n.nextSibling;}return null;};function J(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function K(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function L(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!B.test(n.nodeValue)){d.removeChild(n);}else {n.nodeIndex=++ni;}
-n=nx;}return this;};function byClassName(c,a,v){if(!v){return c;}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((' '+ci.className+' ').indexOf(v)!=-1){r[++ri]=ci;}}return r;};function attrValue(n,T){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}if(!n){return null;}if(T=="for"){return n.htmlFor;}if(T=="class"||T=="className"){return n.className;}return n.getAttribute(T)||n[T];};function getNodes(ns,T,U){var V=[],ri=-1,cs;if(!ns){return V;}
-U=U||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}if(!T){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(U);for(var j=0,ci;ci=cs[j];j++){V[++ri]=ci;}}}else if(T=="/"||T==">"){var utag=U.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.children||ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==U||U=='*'){V[++ri]=cj;}}}}else if(T=="+"){var utag=U.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(n&&(n.nodeName==utag||n.nodeName==U||U=='*')){V[++ri]=n;}}}else if(T=="~"){for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&(n.nodeType!=1||(U=='*'||n.tagName.toLowerCase()!=U)));if(n){V[++ri]=n;}}}return V;};function M(a,b){if(b.slice){return a.concat(b);}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}return a;}function byTag(cs,T){if(cs.tagName||cs==document){cs=[cs];}if(!T){return cs;}var r=[],ri=-1;T=T.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==T){r[++ri]=ci;}}return r;};function N(cs,T,id){if(cs.tagName||cs==document){cs=[cs];}if(!id){return cs;}var r=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[++ri]=ci;return r;}}return r;};function byAttribute(cs,T,U,op,V){var r=[],ri=-1,st=V=="{";var f=Roo.DomQuery.operators[op];for(var i=0,ci;ci=cs[i];i++){var a;if(st){a=Roo.DomQuery.getStyle(ci,T);}else if(T=="class"||T=="className"){a=ci.className;}else if(T=="for"){a=ci.htmlFor;}else if(T=="href"){a=ci.getAttribute("href",2);}else {a=ci.getAttribute(T);}if((f&&f(a,U))||(!f&&a)){r[++ri]=ci;}}return r;};function byPseudo(cs,T,U){return Roo.DomQuery.pseudos[T](cs,U);};var O=window.ActiveXObject?true:false;var batch=30803;var P=30803;function Q(cs){var d=++P;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}return r;}function nodup(cs){if(!cs){return [];}var T=cs.length,c,i,r=cs,cj,ri=-1;if(!T||typeof cs.nodeType!="undefined"||T==1){return cs;}if(O&&typeof cs[0].selectSingleNode!="undefined"){return Q(cs);}var d=++P;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else {r=[];for(var j=0;j<i;j++){r[++ri]=cs[j];}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj;}}return r;}}return r;}function R(c1,c2){var d=++P;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}return r;}function S(c1,c2){var T=c1.length;if(!T){return c2;}if(O&&c1[0].selectSingleNode){return R(c1,c2);}var d=++P;for(var i=0;i<T;i++){c1[i]._qdiff=d;}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}return r;}function quickId(ns,T,U,id){if(ns==U){var d=U.ownerDocument||U;return d.getElementById(id);}
-ns=getNodes(ns,T,"*");return N(ns,null,id);}return {getStyle:function(el,AA){return Roo.fly(el).getStyle(AA);},compile:function(AB,AC){AC=AC||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];var q=AB,mode,lq;var tk=Roo.DomQuery.matchers;var AD=tk.length;var mm;var AE=q.match(E);if(AE&&AE[1]){fn[fn.length]='mode="'+AE[1].replace(C,"")+'";';q=q.replace(AE[1],"");}while(AB.substr(0,1)=="/"){AB=AB.substr(1);}while(q&&lq!=q){lq=q;var tm=q.match(F);if(AC=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");';}else {fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}else if(q.substr(0,1)!='@'){fn[fn.length]='n = getNodes(n, mode, "*");';}}else {if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");';}else {fn[fn.length]='n = byTag(n, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}}while(!(mm=q.match(E))){var matched=false;for(var j=0;j<AD;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(D,function(x,i){return m[i];});q=q.replace(m[0],"");matched=true;break;}}if(!matched){throw 'Error parsing selector, parsing failed at "'+q+'"';}}if(mm[1]){fn[fn.length]='mode="'+mm[1].replace(C,"")+'";';q=q.replace(mm[1],"");}}
-fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(AF,AG,AH){if(!AG||AG==document){AG=document;}if(typeof AG=="string"){AG=document.getElementById(AG);}var AI=AF.split(",");var AJ=[];for(var i=0,len=AI.length;i<len;i++){var p=AI[i].replace(C,"");if(!A[p]){A[p]=Roo.DomQuery.compile(p);if(!A[p]){throw p+" is not a valid selector";}}var z=A[p](AG);if(z&&z!=document){AJ=AJ.concat(z);}}if(AI.length>1){return nodup(AJ);}return AJ;},selectNode:function(AK,AL){return Roo.DomQuery.select(AK,AL)[0];},selectValue:function(AM,AN,AO){AM=AM.replace(C,"");if(!valueCache[AM]){valueCache[AM]=Roo.DomQuery.compile(AM,"select");}var n=valueCache[AM](AN);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return ((v===null||v===undefined||v==='')?AO:v);},selectNumber:function(AP,AQ,AR){var v=Roo.DomQuery.selectValue(AP,AQ,AR||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}var AS=(el instanceof Array);var AT=Roo.DomQuery.filter(AS?el:[el],ss);return AS?(AT.length==el.length):(AT.length>0);},filter:function(AU,ss,AV){ss=ss.replace(C,"");if(!simpleCache[ss]){simpleCache[ss]=Roo.DomQuery.compile(ss,"simple");}var AW=simpleCache[ss](AU);return AV?S(AW,AU):AW;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return (a%v)==0;},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+'-');},"~=":function(a,v){return a&&(' '+a+' ').indexOf(' '+v+' ')!=-1;}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}}return r;},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}}return r;},"nth-child":function(c,a){var r=[],ri=-1;var m=G.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!H.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j;}}
-pn._batch=batch;}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n;}}else if((n.nodeIndex+l)%f==0){r[++ri]=n;}}return r;},"only-child":function(c){var r=[],ri=-1;;for(var i=0,ci;ci=c[i];i++){if(!K(ci)&&!J(ci)){r[++ri]=ci;}}return r;},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}}if(empty){r[++ri]=ci;}}return r;},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||'').indexOf(v)!=-1){r[++ri]=ci;}}return r;},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci;}}return r;},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci;}}return r;},"not":function(c,ss){return Roo.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Roo.DomQuery.select;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci;}}return r;},"next":function(c,ss){var is=Roo.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=J(ci);if(n&&is(n,ss)){r[++ri]=ci;}}return r;},"prev":function(c,ss){var is=Roo.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=K(ci);if(n&&is(n,ss)){r[++ri]=ci;}}return r;}}};}();Roo.query=Roo.DomQuery.select;
-Roo.util.Observable=function(A){A=A||{};this.addEvents(A.events||{});if(A.events){delete A.events;}
-Roo.apply(this,A);if(this.listeners){this.on(this.listeners);delete this.listeners;}};Roo.util.Observable.prototype={fireEvent:function(){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}else {return true;}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(B,fn,C,o){if(typeof B=="object"){o=B;for(var e in o){if(this.filterOptRe.test(e)){continue;}if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else {this.addListener(e,o[e].fn,o[e].scope,o[e]);}}return;}
-o=(!o||typeof o=="boolean")?{}:o;B=B.toLowerCase();var ce=this.events[B]||true;if(typeof ce=="boolean"){ce=new Roo.util.Event(this,B);this.events[B]=ce;}
-ce.addListener(fn,C,o);},removeListener:function(D,fn,E){var ce=this.events[D.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,E);}},purgeListeners:function(){for(var evt in this.events){if(typeof this.events[evt]=="object"){this.events[evt].clearListeners();}}},relayEvents:function(o,F){var G=function(H){return function(){return this.fireEvent.apply(this,Roo.combine(H,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=F.length;i<len;i++){var ename=F[i];if(!this.events[ename]){this.events[ename]=true;};o.on(ename,G(ename),this);}},addEvents:function(o){if(!this.events){this.events={};}
-Roo.applyIf(this.events,o);},hasListener:function(H){var e=this.events[H];return typeof e=="object"&&e.listeners.length>0;}};Roo.util.Observable.prototype.on=Roo.util.Observable.prototype.addListener;Roo.util.Observable.prototype.un=Roo.util.Observable.prototype.removeListener;Roo.util.Observable.capture=function(o,fn,I){o.fireEvent=o.fireEvent.createInterceptor(fn,I);};Roo.util.Observable.releaseCapture=function(o){o.fireEvent=Roo.util.Observable.prototype.fireEvent;};(function(){var J=function(h,o,M){var N=new Roo.util.DelayedTask();return function(){N.delay(o.buffer,h,M,Array.prototype.slice.call(arguments,0));};};var K=function(h,e,fn,M){return function(){e.removeListener(fn,M);return h.apply(M,arguments);};};var L=function(h,o,M){return function(){var N=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(M,N);},o.delay||10);};};Roo.util.Event=function(M,N){this.name=N;this.obj=M;this.listeners=[];};Roo.util.Event.prototype={addListener:function(fn,M,N){var o=N||{};M=M||this.obj;if(!this.isListening(fn,M)){var l={fn:fn,scope:M,options:o};var h=fn;if(o.delay){h=L(h,o,M);}if(o.single){h=K(h,this,fn,M);}if(o.buffer){h=J(h,o,M);}
-l.fireFn=h;if(!this.firing){this.listeners.push(l);}else {this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},findListener:function(fn,O){O=O||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==O){return i;}}return -1;},isListening:function(fn,P){return this.findListener(fn,P)!=-1;},removeListener:function(fn,Q){var R;if((R=this.findListener(fn,Q))!=-1){if(!this.firing){this.listeners.splice(R,1);}else {this.listeners=this.listeners.slice(0);this.listeners.splice(R,1);}return true;}return false;},clearListeners:function(){this.listeners=[];},fire:function(){var ls=this.listeners,S,T=ls.length;if(T>0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i<T;i++){var l=ls[i];if(l.fireFn.apply(l.scope||this.obj||window,arguments)===false){this.firing=false;return false;}}
-this.firing=false;}return true;}};})();
-Roo.EventManager=function(){var A,B,C=false;var F,G,H,I;var E=Roo.lib.Event;var D=Roo.lib.Dom;var J=function(){if(!C){C=true;Roo.isReady=true;if(B){clearInterval(B);}if(Roo.isGecko||Roo.isOpera){document.removeEventListener("DOMContentLoaded",J,false);}if(Roo.isIE){var defer=document.getElementById("ie-deferred-loader");if(defer){defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}}if(A){A.fire();A.clearListeners();}}};var K=function(){A=new Roo.util.Event();if(Roo.isGecko||Roo.isOpera){document.addEventListener("DOMContentLoaded",J,false);}else if(Roo.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){J();}};}else if(Roo.isSafari){B=setInterval(function(){var rs=document.readyState;if(rs=="complete"){J();}},10);}
-E.on(window,"load",J);};var L=function(h,o){var S=new Roo.util.DelayedTask(h);return function(e){e=new Roo.EventObjectImpl(e);S.delay(o.buffer,h,null,[e]);};};var M=function(h,el,S,fn){return function(e){Roo.EventManager.removeListener(el,S,fn);h(e);};};var N=function(h,o){return function(e){e=new Roo.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var O=function(S,T,U,fn,V){var o=(!U||typeof U=="boolean")?{}:U;fn=fn||o.fn;V=V||o.scope;var el=Roo.getDom(S);if(!el){throw "Error listening for \""+T+'\". Element "'+S+'" doesn\'t exist.';}var h=function(e){e=Roo.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else {t=e.target;}if(o.stopEvent===true){e.stopEvent();}if(o.preventDefault===true){e.preventDefault();}if(o.stopPropagation===true){e.stopPropagation();}if(o.normalized===false){e=e.browserEvent;}
-fn.call(V||el,e,t,o);};if(o.delay){h=N(h,o);}if(o.single){h=M(h,el,T,fn);}if(o.buffer){h=L(h,o);}
-fn._handlers=fn._handlers||[];fn._handlers.push([Roo.id(el),T,h]);E.on(el,T,h);if(T=="mousewheel"&&el.addEventListener){el.addEventListener("DOMMouseScroll",h,false);E.on(window,'unload',function(){el.removeEventListener("DOMMouseScroll",h,false);});}if(T=="mousedown"&&el==document){Roo.EventManager.stoppedMouseDownEvent.addListener(h);}return h;};var P=function(el,S,fn){var id=Roo.id(el),T=fn._handlers,hd=fn;if(T){for(var i=0,len=T.length;i<len;i++){var h=T[i];if(h[0]==id&&h[1]==S){hd=h[2];T.splice(i,1);break;}}}
-E.un(el,S,hd);el=Roo.getDom(el);if(S=="mousewheel"&&el.addEventListener){el.removeEventListener("DOMMouseScroll",hd,false);}if(S=="mousedown"&&el==document){Roo.EventManager.stoppedMouseDownEvent.removeListener(hd);}};var Q=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var R={wrap:function(fn,S,T){return function(e){Roo.EventObject.setEvent(e);fn.call(T?S||window:window,Roo.EventObject,S);};},addListener:function(U,V,fn,W,X){if(typeof V=="object"){var o=V;for(var e in o){if(Q.test(e)){continue;}if(typeof o[e]=="function"){O(U,e,o,o[e],o.scope);}else {O(U,e,o[e]);}}return;}return O(U,V,X,fn,W);},removeListener:function(Y,Z,fn){return P(Y,Z,fn);},onDocumentReady:function(fn,a,b){if(C){A.addListener(fn,a,b);A.fire();A.clearListeners();return;}if(!A){K();}
-A.addListener(fn,a,b);},onWindowResize:function(fn,c,d){if(!F){F=new Roo.util.Event();G=new Roo.util.DelayedTask(function(){F.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",function(){if(Roo.isIE){G.delay(50);}else {F.fire(D.getViewWidth(),D.getViewHeight());}});}
-F.addListener(fn,c,d);},onTextResize:function(fn,f,g){if(!H){H=new Roo.util.Event();var textEl=new Roo.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);I=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=I){H.fire(I,I=textEl.dom.offsetHeight);}},this.textResizeInterval);}
-H.addListener(fn,f,g);},removeResizeListener:function(fn,j){if(F){F.removeListener(fn,j);}},fireResize:function(){if(F){F.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};R.on=R.addListener;R.un=R.removeListener;R.stoppedMouseDownEvent=new Roo.util.Event();return R;}();Roo.onReady=Roo.EventManager.onDocumentReady;Roo.onReady(function(){var bd=Roo.get(document.body);if(!bd){return;}var S=[Roo.isIE?"roo-ie":Roo.isGecko?"roo-gecko":Roo.isOpera?"roo-opera":Roo.isSafari?"roo-safari":""];if(Roo.isMac){S.push("roo-mac");}if(Roo.isLinux){S.push("roo-linux");}if(Roo.isBorderBox){S.push('roo-border-box');}if(Roo.isStrict){var p=bd.dom.parentNode;if(p){p.className+=' roo-strict';}}
-bd.addClass(S.join(' '));});Roo.EventObject=function(){var E=Roo.lib.Event;var T={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var U=Roo.isIE?{1:0,4:1,2:2}:(Roo.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Roo.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Roo.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN :13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE :46,F5:116,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}
-this.browserEvent=e;if(e){this.button=e.button?U[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;}
-this.type=e.type;this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=(e.type=='keyup'||e.type=='keydown')?0:e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else {this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Roo.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Roo.isSafari?(T[k]||k):k;return (k>=33&&k<=40)||k==this.RETURN ||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;return (this.type=='keypress'&&this.ctrlKey)||k==9||k==13||k==40||k==27||(k==16)||(k==17)||(k>=18&&k<=20)||(k>=33&&k<=35)||(k>=36&&k<=39)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.type=='mousedown'){Roo.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Roo.isSafari?(T[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);}return null;},getXY:function(){return this.xy;},getTarget:function(V,W,X){return V?Roo.fly(this.target).findParent(V,W,X):this.target;},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);}return null;},getWheelDelta:function(){var e=this.browserEvent;var Y=0;if(e.wheelDelta){Y=e.wheelDelta/120;}else if(e.detail){Y=-e.detail/3;}return Y;},hasModifier:function(){return !!((this.ctrlKey||this.altKey)||this.shiftKey);},within:function(el,Z){var t=this[Z?"getRelatedTarget":"getTarget"]();return t&&Roo.fly(el).contains(t);},getPoint:function(){return new Roo.lib.Point(this.xy[0],this.xy[1]);}};return new Roo.EventObjectImpl();}();
-(function(){var D=Roo.lib.Dom;var E=Roo.lib.Event;var A=Roo.lib.Anim;var B={};var C=/(-[a-z])/gi;var F=function(m,a){return a.charAt(1).toUpperCase();};var G=document.defaultView;Roo.Element=function(J,K){var L=typeof J=="string"?document.getElementById(J):J;if(!L){return null;}var id=L.id;if(K!==true&&id&&Roo.Element.cache[id]){return Roo.Element.cache[id];}
-this.dom=L;this.id=id||Roo.id(L);};var El=Roo.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(J){this.visibilityMode=J;return this;},enableDisplayMode:function(K){this.setVisibilityMode(El.DISPLAY);if(typeof K!="undefined")this.originalDisplay=K;return this;},findParent:function(L,M,N){var p=this.dom,b=document.body,O=0,dq=Roo.DomQuery,P;M=M||50;if(typeof M!="number"){P=Roo.getDom(M);M=10;}while(p&&p.nodeType==1&&O<M&&p!=b&&p!=P){if(dq.is(p,L)){return N?Roo.get(p):p;}
-O++;p=p.parentNode;}return null;},findParentNode:function(Q,R,S){var p=Roo.fly(this.dom.parentNode,'_internal');return p?p.findParent(Q,R,S):null;},up:function(T,U){return this.findParentNode(T,U,true);},is:function(V){return Roo.DomQuery.is(this.dom,V);},animate:function(W,X,Y,Z,c){this.anim(W,{duration:X,callback:Y,easing:Z},c);return this;},anim:function(e,g,h,j,k,cb){h=h||'run';g=g||{};var l=Roo.lib.Anim[h](this.dom,e,(g.duration||j)||.35,(g.easing||k)||'easeOut',function(){Roo.callback(cb,this);Roo.callback(g.callback,g.scope||this,[this,g]);},this);g.anim=l;return l;},preanim:function(a,i){return !a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]});},clean:function(o){if(this.isCleaned&&o!==true){return this;}var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n);}else {n.nodeIndex=++ni;}
-n=nx;}
-this.isCleaned=true;return this;},calcOffsetsTo:function(el){el=Roo.get(el);var d=el.dom;var q=false;if(el.getStyle('position')=='static'){el.position('relative');q=true;}var x=0,y=0;var op=this.dom;while(op&&op!=d&&op.tagName!='HTML'){x+=op.offsetLeft;y+=op.offsetTop;op=op.offsetParent;}if(q){el.position('static');}return [x,y];},scrollIntoView:function(u,v){var c=Roo.getDom(u)||document.body;var el=this.dom;var o=this.calcOffsetsTo(c),l=o[0],t=o[1],b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}if(v!==false){if(l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}}return this;},scrollChildIntoView:function(w,z){Roo.fly(w,'_scrollChildIntoView').scrollIntoView(this,z);},autoHeight:function(AA,AB,AC,AD){var AE=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var AG=parseInt(this.dom.scrollHeight,10);if(!AA){this.setHeight(AG);this.unclip();if(typeof AC=="function"){AC();}}else {this.setHeight(AE);this.setHeight(AG,AA,AB,function(){this.unclip();if(typeof AC=="function")AC();}.createDelegate(this),AD);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;}return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(AF){var AG=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(AF!==true||!AG){return AG;}var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Roo.fly(p,'_isVisible').isVisible()){return false;}
-p=p.parentNode;}return true;},select:function(AH,AI){return El.select(AH,AI,this.dom);},query:function(AJ,AK){return Roo.DomQuery.select(AJ,this.dom);},child:function(AL,AM){var n=Roo.DomQuery.selectNode(AL,this.dom);return AM?n:Roo.get(n);},down:function(AN,AO){var n=Roo.DomQuery.selectNode(" > "+AN,this.dom);return AO?n:Roo.get(n);},initDD:function(AP,AQ,AR){var dd=new Roo.dd.DD(Roo.id(this.dom),AP,AQ);return Roo.apply(dd,AR);},initDDProxy:function(AS,AT,AU){var dd=new Roo.dd.DDProxy(Roo.id(this.dom),AS,AT);return Roo.apply(dd,AU);},initDDTarget:function(AV,AW,AX){var dd=new Roo.dd.DDTarget(Roo.id(this.dom),AV,AW);return Roo.apply(dd,AX);},setVisible:function(AY,AZ){if(!AZ||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(AY);}else {this.fixDisplay();this.dom.style.visibility=AY?"visible":"hidden";}}else {var dom=this.dom;var J=this.visibilityMode;if(AY){this.setOpacity(.01);this.setVisible(true);}
-this.anim({opacity:{to:(AY?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!AY){if(J==El.DISPLAY){dom.style.display="none";}else {dom.style.visibility="hidden";}
-Roo.get(dom).setOpacity(1);}});}return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(Aa){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(Ab){if(typeof Ab=="boolean"){Ab=Ab?this.originalDisplay:"none";}
-this.setStyle("display",Ab);return this;},focus:function(){try{this.dom.focus();}catch(e){}return this;},blur:function(){try{this.dom.blur();}catch(e){}return this;},addClass:function(Ac){if(Ac instanceof Array){for(var i=0,len=Ac.length;i<len;i++){this.addClass(Ac[i]);}}else {if(Ac&&!this.hasClass(Ac)){this.dom.className=this.dom.className+" "+Ac;}}return this;},radioClass:function(Ad){var Ae=this.dom.parentNode.childNodes;for(var i=0;i<Ae.length;i++){var s=Ae[i];if(s.nodeType==1){Roo.get(s).removeClass(Ad);}}
-this.addClass(Ad);return this;},removeClass:function(Af){if(!Af||!this.dom.className){return this;}if(Af instanceof Array){for(var i=0,len=Af.length;i<len;i++){this.removeClass(Af[i]);}}else {if(this.hasClass(Af)){var re=this.classReCache[Af];if(!re){re=new RegExp('(?:^|\\s+)'+Af+'(?:\\s+|$)',"g");this.classReCache[Af]=re;}
-this.dom.className=this.dom.className.replace(re," ");}}return this;},classReCache:{},toggleClass:function(Ag){if(this.hasClass(Ag)){this.removeClass(Ag);}else {this.addClass(Ag);}return this;},hasClass:function(Ah){return Ah&&(' '+this.dom.className+' ').indexOf(' '+Ah+' ')!=-1;},replaceClass:function(Ai,Aj){this.removeClass(Ai);this.addClass(Aj);return this;},getStyles:function(){var a=arguments,Ak=a.length,r={};for(var i=0;i<Ak;i++){r[a[i]]=this.getStyle(a[i]);}return r;},getStyle:function(){return G&&G.getComputedStyle?function(Al){var el=this.dom,v,cs,Am;if(Al=='float'){Al="cssFloat";}if(el.style&&(v=el.style[Al])){return v;}if(cs=G.getComputedStyle(el,"")){if(!(Am=B[Al])){Am=B[Al]=Al.replace(C,F);}return cs[Am];}return null;}:function(Al){var el=this.dom,v,cs,Am;if(Al=='opacity'){if(typeof el.style.filter=='string'){var m=el.style.filter.match(/alpha\(opacity=(.*)\)/i);if(m){var fv=parseFloat(m[1]);if(!isNaN(fv)){return fv?fv/100:0;}}}return 1;}else if(Al=='float'){Al="styleFloat";}if(!(Am=B[Al])){Am=B[Al]=Al.replace(C,F);}if(v=el.style[Am]){return v;}if(cs=el.currentStyle){return cs[Am];}return null;};}(),setStyle:function(Al,Am){if(typeof Al=="string"){if(Al=='float'){this.setStyle(Roo.isIE?'styleFloat':'cssFloat',Am);return this;}var camel;if(!(camel=B[Al])){camel=B[Al]=Al.replace(C,F);}if(camel=='opacity'){this.setOpacity(Am);}else {this.dom.style[camel]=Am;}}else {for(var style in Al){if(typeof Al[style]!="function"){this.setStyle(style,Al[style]);}}}return this;},applyStyles:function(An){Roo.DomHelper.applyStyles(this.dom,An);return this;},getX:function(){return D.getX(this.dom);},getY:function(){return D.getY(this.dom);},getXY:function(){return D.getXY(this.dom);},setX:function(x,Ao){if(!Ao||!A){D.setX(this.dom,x);}else {this.setXY([x,this.getY()],this.preanim(arguments,1));}return this;},setY:function(y,Ap){if(!Ap||!A){D.setY(this.dom,y);}else {this.setXY([this.getX(),y],this.preanim(arguments,1));}return this;},setLeft:function(Aq){this.setStyle("left",this.addUnits(Aq));return this;},setTop:function(Ar){this.setStyle("top",this.addUnits(Ar));return this;},setRight:function(As){this.setStyle("right",this.addUnits(As));return this;},setBottom:function(At){this.setStyle("bottom",this.addUnits(At));return this;},setXY:function(Au,Av){if(!Av||!A){D.setXY(this.dom,Au);}else {this.anim({points:{to:Au}},this.preanim(arguments,1),'motion');}return this;},setLocation:function(x,y,Aw){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,Ax){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(Ay){var h=this.dom.offsetHeight||0;return Ay!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");},getWidth:function(Az){var w=this.dom.offsetWidth||0;return Az!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}return w;},getSize:function(A0){return {width:this.getWidth(A0),height:this.getHeight(A0)};},getViewSize:function(){var d=this.dom,A1=document,aw=0,ah=0;if(d==A1||d==A1.body){return {width:D.getViewWidth(),height:D.getViewHeight()};}else {return {width:d.clientWidth,height:d.clientHeight};}},getValue:function(A2){return A2?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(A3){if(typeof A3=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){A3-=(this.getBorderWidth("lr")+this.getPadding("lr"));}if(A3<0){A3=0;}}return A3;},adjustHeight:function(A4){if(typeof A4=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){A4-=(this.getBorderWidth("tb")+this.getPadding("tb"));}if(A4<0){A4=0;}}return A4;},setWidth:function(A5,A6){A5=this.adjustWidth(A5);if(!A6||!A){this.dom.style.width=this.addUnits(A5);}else {this.anim({width:{to:A5}},this.preanim(arguments,1));}return this;},setHeight:function(A7,A8){A7=this.adjustHeight(A7);if(!A8||!A){this.dom.style.height=this.addUnits(A7);}else {this.anim({height:{to:A7}},this.preanim(arguments,1));}return this;},setSize:function(A9,BA,BB){if(typeof A9=="object"){BA=A9.height;A9=A9.width;}
-A9=this.adjustWidth(A9);BA=this.adjustHeight(BA);if(!BB||!A){this.dom.style.width=this.addUnits(A9);this.dom.style.height=this.addUnits(BA);}else {this.anim({width:{to:A9},height:{to:BA}},this.preanim(arguments,2));}return this;},setBounds:function(x,y,BC,BD,BE){if(!BE||!A){this.setSize(BC,BD);this.setLocation(x,y);}else {BC=this.adjustWidth(BC);BD=this.adjustHeight(BD);this.anim({points:{to:[x,y]},width:{to:BC},height:{to:BD}},this.preanim(arguments,4),'motion');}return this;},setRegion:function(BF,BG){this.setBounds(BF.left,BF.top,BF.right-BF.left,BF.bottom-BF.top,this.preanim(arguments,1));return this;},addListener:function(BH,fn,BI,BJ){Roo.EventManager.on(this.dom,BH,fn,BI||this,BJ);},removeListener:function(BK,fn){Roo.EventManager.removeListener(this.dom,BK,fn);return this;},removeAllListeners:function(){E.purgeElement(this.dom);return this;},relayEvent:function(BL,BM){this.on(BL,function(e){BM.fireEvent(BL,e);});},setOpacity:function(BN,BO){if(!BO||!A){var s=this.dom.style;if(Roo.isIE){s.zoom=1;s.filter=(s.filter||'').replace(/alpha\([^\)]*\)/gi,"")+(BN==1?"":"alpha(opacity="+BN*100+")");}else {s.opacity=BN;}}else {this.anim({opacity:{to:BN}},this.preanim(arguments,1),null,.35,'easeIn');}return this;},getLeft:function(BP){if(!BP){return this.getX();}else {return parseInt(this.getStyle("left"),10)||0;}},getRight:function(BQ){if(!BQ){return this.getX()+this.getWidth();}else {return (this.getLeft(true)+this.getWidth())||0;}},getTop:function(BR){if(!BR){return this.getY();}else {return parseInt(this.getStyle("top"),10)||0;}},getBottom:function(BS){if(!BS){return this.getY()+this.getHeight();}else {return (this.getTop(true)+this.getHeight())||0;}},position:function(BT,BU,x,y){if(!BT){if(this.getStyle('position')=='static'){this.setStyle('position','relative');}}else {this.setStyle("position",BT);}if(BU){this.setStyle("z-index",BU);}if(x!==undefined&&y!==undefined){this.setXY([x,y]);}else if(x!==undefined){this.setX(x);}else if(y!==undefined){this.setY(y);}},clearPositioning:function(BV){BV=BV||'';this.setStyle({"left":BV,"right":BV,"top":BV,"bottom":BV,"z-index":"","position":"static"});return this;},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return {"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")};},getBorderWidth:function(BW){return this.addStyles(BW,El.borders);},getPadding:function(BX){return this.addStyles(BX,El.paddings);},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right="";}if(pc.bottom=="auto"){this.dom.style.bottom="";}return this;},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block");}}},setLeftTop:function(BY,BZ){this.dom.style.left=this.addUnits(BY);this.dom.style.top=this.addUnits(BZ);return this;},move:function(Ba,Bb,Bc){var xy=this.getXY();Ba=Ba.toLowerCase();switch(Ba){case "l":case "left":this.moveTo(xy[0]-Bb,xy[1],this.preanim(arguments,2));break;case "r":case "right":this.moveTo(xy[0]+Bb,xy[1],this.preanim(arguments,2));break;case "t":case "top":case "up":this.moveTo(xy[0],xy[1]-Bb,this.preanim(arguments,2));break;case "b":case "bottom":case "down":this.moveTo(xy[0],xy[1]+Bb,this.preanim(arguments,2));break;}return this;},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden");}return this;},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o);}if(o.x){this.setStyle("overflow-x",o.x);}if(o.y){this.setStyle("overflow-y",o.y);}}return this;},getAnchorXY:function(Bd,Be,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight();}else {w=this.getWidth();h=this.getHeight();}}else {w=s.width;h=s.height;}var x=0,y=0,r=Math.round;switch((Bd||"tl").toLowerCase()){case "c":x=r(w*.5);y=r(h*.5);break;case "t":x=r(w*.5);y=0;break;case "l":x=0;y=r(h*.5);break;case "r":x=w;y=r(h*.5);break;case "b":x=r(w*.5);y=h;break;case "tl":x=0;y=0;break;case "bl":x=0;y=h;break;case "br":x=w;y=h;break;case "tr":x=w;y=0;break;}if(Be===true){return [x,y];}if(vp){var sc=this.getScroll();return [x+sc.left,y+sc.top];}var o=this.getXY();return [x+o[0],y+o[1]];},getAlignToXY:function(el,p,o){el=Roo.get(el);var d=this.dom;if(!el.dom){throw "Element.alignTo with an element that doesn't exist";}var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl";}else if(p=="?"){p="tl-bl?";}else if(p.indexOf("-")==-1){p="tl-"+p;}
-p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw "Element.alignTo with an invalid alignment "+p;}
-p1=m[1];p2=m[2];c=!!m[3];var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var swapY=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var swapX=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var A1=document;var scrollX=(A1.documentElement.scrollLeft||A1.body.scrollLeft||0)+5;var scrollY=(A1.documentElement.scrollTop||A1.body.scrollTop||0)+5;if((x+w)>dw+scrollX){x=swapX?r.left-w:dw+scrollX-w;}if(x<scrollX){x=swapX?r.right:scrollX;}if((y+h)>dh+scrollY){y=swapY?r.top-h:dh+scrollY-h;}if(y<scrollY){y=swapY?r.bottom:scrollY;}}return [x,y];},getConstrainToXY:function(){var os={top:0,left:0,bottom:0,right:0};return function(el,Bf,Bg,Bh){el=Roo.get(el);Bg=Bg?Roo.applyIf(Bg,os):os;var vw,vh,vx=0,vy=0;if(el.dom==document.body||el.dom==document){vw=Roo.lib.Dom.getViewWidth();vh=Roo.lib.Dom.getViewHeight();}else {vw=el.dom.clientWidth;vh=el.dom.clientHeight;if(!Bf){var vxy=el.getXY();vx=vxy[0];vy=vxy[1];}}var s=el.getScroll();vx+=Bg.left+s.left;vy+=Bg.top+s.top;vw-=Bg.right;vh-=Bg.bottom;var vr=vx+vw;var vb=vy+vh;var xy=Bh||(!Bf?this.getXY():[this.getLeft(true),this.getTop(true)]);var x=xy[0],y=xy[1];var w=this.dom.offsetWidth,h=this.dom.offsetHeight;var Bi=false;if((x+w)>vr){x=vr-w;Bi=true;}if((y+h)>vb){y=vb-h;Bi=true;}if(x<vx){x=vx;Bi=true;}if(y<vy){y=vy;Bi=true;}return Bi?[x,y]:false;};}(),adjustForConstraints:function(xy,Bf,Bg){return this.getConstrainToXY(Bf||document,false,Bg,xy)||xy;},alignTo:function(Bh,Bi,Bj,Bk){var xy=this.getAlignToXY(Bh,Bi,Bj);this.setXY(xy,this.preanim(arguments,3));return this;},anchorTo:function(el,Bl,Bm,Bn,Bo,Bp){var Bq=function(){this.alignTo(el,Bl,Bm,Bn);Roo.callback(Bp,this);};Roo.EventManager.onWindowResize(Bq,this);var tm=typeof Bo;if(tm!='undefined'){Roo.EventManager.on(window,'scroll',Bq,this,{buffer:tm=='number'?Bo:50});}
-Bq.call(this);return this;},clearOpacity:function(){if(window.ActiveXObject){if(typeof this.dom.style.filter=='string'&&(/alpha/i).test(this.dom.style.filter)){this.dom.style.filter="";}}else {this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]="";}return this;},hide:function(Br){this.setVisible(false,this.preanim(arguments,0));return this;},show:function(Bs){this.setVisible(true,this.preanim(arguments,0));return this;},addUnits:function(Bt){return Roo.Element.addUnits(Bt,this.defaultUnit);},beginMeasure:function(){var el=this.dom;if(el.offsetWidth||el.offsetHeight){return this;}var Bu=[];var p=this.dom,b=document.body;while((!el.offsetWidth&&!el.offsetHeight)&&p&&p.tagName&&p!=b){var pe=Roo.get(p);if(pe.getStyle('display')=='none'){Bu.push({el:p,visibility:pe.getStyle("visibility")});p.style.visibility="hidden";p.style.display="block";}
-p=p.parentNode;}
-this._measureChanged=Bu;return this;},endMeasure:function(){var Bv=this._measureChanged;if(Bv){for(var i=0,Ak=Bv.length;i<Ak;i++){var r=Bv[i];r.el.style.visibility=r.visibility;r.el.style.display="none";}
-this._measureChanged=null;}return this;},update:function(Bw,Bx,By){if(typeof Bw=="undefined"){Bw="";}if(Bx!==true){this.dom.innerHTML=Bw;if(typeof By=="function"){By();}return this;}var id=Roo.id();var Bz=this.dom;Bw+='<span id="'+id+'"></span>';E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var B0=/\ssrc=([\'\"])(.*?)\1/i;var B1=/\stype=([\'\"])(.*?)\1/i;var B2;while(B2=re.exec(Bw)){var attrs=B2[1];var srcMatch=attrs?attrs.match(B0):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(B1);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2];}
-hd.appendChild(s);}else if(B2[2]&&B2[2].length>0){if(window.execScript){window.execScript(B2[2]);}else {window.eval(B2[2]);}}}var el=document.getElementById(id);if(el){el.parentNode.removeChild(el);}if(typeof By=="function"){By();}});Bz.innerHTML=Bw.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdateManager();um.update.apply(um,arguments);return this;},getUpdateManager:function(){if(!this.updateManager){this.updateManager=new Roo.UpdateManager(this);}return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(B0){this.alignTo(B0||document,'c-c');return this;},isBorderBox:function(){return I[this.dom.tagName.toLowerCase()]||Roo.isBorderBox;},getBox:function(B1,B2){var xy;if(!B2){xy=this.getXY();}else {var BY=parseInt(this.getStyle("left"),10)||0;var BZ=parseInt(this.getStyle("top"),10)||0;xy=[BY,BZ];}var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!B1){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else {var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(B3,B4){return B4&&Roo.isBorderBox?0:(this.getPadding(B3)+this.getBorderWidth(B3));},setBox:function(B5,B6,B7){var w=B5.width,h=B5.height;if((B6&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-this.setBounds(B5.x,B5.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var B8=this.dom;this.addClass("x-repaint");setTimeout(function(){Roo.get(B8).removeClass("x-repaint");},1);return this;},getMargins:function(B9){if(!B9){return {top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else {return this.addStyles(B9,El.margins);}},addStyles:function(CA,CB){var CC=0,v,w;for(var i=0,Ak=CA.length;i<Ak;i++){v=this.getStyle(CB[CA.charAt(i)]);if(v){w=parseInt(v,10);if(w){CC+=w;}}}return CC;},createProxy:function(CD,CE,CF){if(CE){CE=Roo.getDom(CE);}else {CE=document.body;}
-CD=typeof CD=="object"?CD:{tag:"div",cls:CD};var CG=Roo.DomHelper.append(CE,CD,true);if(CF){CG.setBox(this.getBox());}return CG;},mask:function(CH,CI){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}if(!this._mask){this._mask=Roo.DomHelper.append(this.dom,{cls:"roo-el-mask"},true);}
-this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof CH=='string'){if(!this._maskMsg){this._maskMsg=Roo.DomHelper.append(this.dom,{cls:"roo-el-mask-msg",cn:{tag:'div'}},true);}var mm=this._maskMsg;mm.dom.className=CI?"roo-el-mask-msg "+CI:"roo-el-mask-msg";mm.dom.firstChild.innerHTML=CH;mm.setDisplayed(true);mm.center(this);}if(Roo.isIE&&!(Roo.isIE7&&Roo.isStrict)&&this.getStyle('height')=='auto'){this._mask.setHeight(this.getHeight());}return this._mask;},unmask:function(CJ){if(this._mask){if(CJ===true){this._mask.remove();delete this._mask;if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}}else {this._mask.setDisplayed(false);if(this._maskMsg){this._maskMsg.setDisplayed(false);}}}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='no';el.className='roo-shim';if(Roo.isIE&&Roo.isSecure){el.src=Roo.SSL_SECURE_URL;}var CK=Roo.get(this.dom.parentNode.insertBefore(el,this.dom));CK.autoBoxAdjust=false;return CK;},remove:function(){if(this.dom.parentNode){this.dom.parentNode.removeChild(this.dom);}delete El.cache[this.dom.id];},addClassOnOver:function(CL,CM){this.on("mouseover",function(){Roo.fly(this,'_internal').addClass(CL);},this.dom);var CN=function(e){if(CM!==true||!e.within(this,true)){Roo.fly(this,'_internal').removeClass(CL);}};this.on("mouseout",CN,this.dom);return this;},addClassOnFocus:function(CO){this.on("focus",function(){Roo.fly(this,'_internal').addClass(CO);},this.dom);this.on("blur",function(){Roo.fly(this,'_internal').removeClass(CO);},this.dom);return this;},addClassOnClick:function(CP){var CQ=this.dom;this.on("mousedown",function(){Roo.fly(CQ,'_internal').addClass(CP);var d=Roo.get(document);var fn=function(){Roo.fly(CQ,'_internal').removeClass(CP);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(CR,CS){var fn=function(e){e.stopPropagation();if(CS){e.preventDefault();}};if(CR instanceof Array){for(var i=0,Ak=CR.length;i<Ak;i++){this.on(CR[i],fn);}return this;}
-this.on(CR,fn);return this;},fitToParentDelegate:Roo.emptyFn,fitToParent:function(CT,CU){Roo.EventManager.removeResizeListener(this.fitToParentDelegate);this.fitToParentDelegate=Roo.emptyFn;if(CT===true&&!this.dom.parentNode){return;}var p=Roo.get(CU||this.dom.parentNode);this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'),p.getComputedHeight()-p.getFrameWidth('tb'));if(CT===true){this.fitToParentDelegate=this.fitToParent.createDelegate(this,[true,CU]);Roo.EventManager.onWindowResize(this.fitToParentDelegate);}return this;},getNextSibling:function(){var n=this.dom.nextSibling;while(n&&n.nodeType!=1){n=n.nextSibling;}return n;},getPrevSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=1){n=n.previousSibling;}return n;},appendChild:function(el){el=Roo.get(el);el.appendTo(this);return this;},createChild:function(CV,CW,CX){CV=CV||{tag:'div'};if(CW){return Roo.DomHelper.insertBefore(CW,CV,CX!==true);}return Roo.DomHelper[!this.dom.firstChild?'overwrite':'append'](this.dom,CV,CX!==true);},appendTo:function(el){el=Roo.getDom(el);el.appendChild(this.dom);return this;},insertBefore:function(el){el=Roo.getDom(el);el.parentNode.insertBefore(this.dom,el);return this;},insertAfter:function(el){el=Roo.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this;},insertFirst:function(el,CY){el=el||{};if(typeof el=='object'&&!el.nodeType){return this.createChild(el,this.dom.firstChild,CY);}else {el=Roo.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return !CY?Roo.get(el):el;}},insertSibling:function(el,CZ,Ca){CZ=CZ?CZ.toLowerCase():'before';el=el||{};var rt,Cb=CZ=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType){if(CZ=='after'&&!this.dom.nextSibling){rt=Roo.DomHelper.append(this.dom.parentNode,el,!Ca);}else {rt=Roo.DomHelper[CZ=='after'?'insertAfter':'insertBefore'](this.dom,el,!Ca);}}else {rt=this.dom.parentNode.insertBefore(Roo.getDom(el),CZ=='before'?this.dom:this.dom.nextSibling);if(!Ca){rt=Roo.get(rt);}}return rt;},wrap:function(Cc,Cd){if(!Cc){Cc={tag:"div"};}var Ce=Roo.DomHelper.insertBefore(this.dom,Cc,!Cd);Ce.dom?Ce.dom.appendChild(this.dom):Ce.appendChild(this.dom);return Ce;},replace:function(el){el=Roo.get(el);this.insertBefore(el);el.remove();return this;},insertHtml:function(Cf,Cg,Ch){var el=Roo.DomHelper.insertHtml(Cf,this.dom,Cg);return Ch?Roo.get(el):el;},set:function(o,Ci){var el=this.dom;Ci=typeof Ci=='undefined'?(el.setAttribute?true:false):Ci;for(var attr in o){if(attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else {if(Ci)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}if(o.style){Roo.DomHelper.applyStyles(el,o.style);}return this;},addKeyListener:function(Cj,fn,Ck){var Cl;if(typeof Cj!="object"||Cj instanceof Array){Cl={key:Cj,fn:fn,scope:Ck};}else {Cl={key:Cj.key,shift:Cj.shift,ctrl:Cj.ctrl,alt:Cj.alt,fn:fn,scope:Ck};}return new Roo.KeyMap(this,Cl);},addKeyMap:function(Cm){return new Roo.KeyMap(this,Cm);},isScrollable:function(){var Cn=this.dom;return Cn.scrollHeight>Cn.clientHeight||Cn.scrollWidth>Cn.clientWidth;},scrollTo:function(Co,Cp,Cq){var Cr=Co.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!Cq||!A){this.dom[Cr]=Cp;}else {var to=Cr=="scrollLeft"?[Cp,this.dom.scrollTop]:[this.dom.scrollLeft,Cp];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}return this;},scroll:function(Cs,Ct,Cu){if(!this.isScrollable()){return;}var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;Cs=Cs.toLowerCase();var Cv=false;var a=this.preanim(arguments,2);switch(Cs){case "l":case "left":if(w-l>cw){var v=Math.min(l+Ct,w-cw);this.scrollTo("left",v,a);Cv=true;}break;case "r":case "right":if(l>0){var v=Math.max(l-Ct,0);this.scrollTo("left",v,a);Cv=true;}break;case "t":case "top":case "up":if(t>0){var v=Math.max(t-Ct,0);this.scrollTo("top",v,a);Cv=true;}break;case "b":case "bottom":case "down":if(h-t>ch){var v=Math.min(t+Ct,h-ch);this.scrollTo("top",v,a);Cv=true;}break;}return Cv;},translatePoints:function(x,y){if(typeof x=='object'||x instanceof Array){y=x[1];x=x[0];}var p=this.getStyle('position');var o=this.getXY();var l=parseInt(this.getStyle('left'),10);var t=parseInt(this.getStyle('top'),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;}if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;}return {left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,Cw=document;if(d==Cw||d==Cw.body){var l=window.pageXOffset||Cw.documentElement.scrollLeft||Cw.body.scrollLeft||0;var t=window.pageYOffset||Cw.documentElement.scrollTop||Cw.body.scrollTop||0;return {left:l,top:t};}else {return {left:d.scrollLeft,top:d.scrollTop};}},getColor:function(Cx,Cy,Cz){var v=this.getStyle(Cx);if(!v||v=="transparent"||v=="inherit"){return Cy;}var C0=typeof Cz=="undefined"?"#":Cz;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]).toString(16);if(h<16){h="0"+h;}
-C0+=h;}}else {if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);C0+=c+c;}}else if(v.length==7){C0+=v.substr(1);}}}return (C0.length>5?C0.toLowerCase():Cy);},boxWrap:function(C1){C1=C1||'x-box';var el=Roo.get(this.insertHtml('beforeBegin',String.format('<div class="{0}">'+El.boxMarkup+'</div>',C1)));el.child('.'+C1+'-mc').dom.appendChild(this.dom);return el;},getAttributeNS:Roo.isIE?function(ns,C2){var d=this.dom;var C3=typeof d[ns+":"+C2];if(C3!='undefined'&&C3!='unknown'){return d[ns+":"+C2];}return d[C2];}:function(ns,C4){var d=this.dom;return d.getAttributeNS(ns,C4)||d.getAttribute(ns+":"+C4)||d.getAttribute(C4)||d[C4];}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.un=ep.removeListener;ep.autoBoxAdjust=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,J){if(v===""||v=="auto"){return v;}if(v===undefined){return '';}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(J||'px');}return v;};El.boxMarkup='<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var H;El.get=function(el){var ex,J,id;if(!el){return null;}if(typeof el=="string"){if(!(J=document.getElementById(el))){return null;}if(ex=El.cache[el]){ex.dom=J;}else {ex=El.cache[el]=new El(J);}return ex;}else if(el.tagName){if(!(id=el.id)){id=Roo.id(el);}if(ex=El.cache[id]){ex.dom=el;}else {ex=El.cache[id]=new El(el);}return ex;}else if(el instanceof El){if(el!=H){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;}return el;}else if(el.isComposite){return el;}else if(el instanceof Array){return El.select(el);}else if(el==document){if(!H){var f=function(){};f.prototype=El.prototype;H=new f();H.dom=document;}return H;}return null;};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i]){delete El.cache[a[i].id||a[i]];}}};El.garbageCollect=function(){if(!Roo.enableGarbageCollector){clearInterval(El.collectorThread);return;}for(var eid in El.cache){var el=El.cache[eid],d=el.dom;if(!d||!d.parentNode||(!d.offsetParent&&!document.getElementById(eid))){delete El.cache[eid];if(d&&Roo.enableListenerCollection){E.purgeElement(d);}}}}
-El.collectorThreadId=setInterval(El.garbageCollect,30000);El.Flyweight=function(J){this.dom=J;};El.Flyweight.prototype=El.prototype;El._flyweights={};El.fly=function(el,J){J=J||'_global';el=Roo.getDom(el);if(!el){return null;}if(!El._flyweights[J]){El._flyweights[J]=new El.Flyweight();}
-El._flyweights[J].dom=el;return El._flyweights[J];};Roo.get=El.get;Roo.fly=El.fly;var I=Roo.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Roo.isIE||Roo.isGecko){I['button']=1;}
-Roo.EventManager.on(window,'unload',function(){delete El.cache;delete El._flyweights;});})();if(Roo.DomQuery){Roo.Element.selectorFunction=Roo.DomQuery.select;}
-Roo.Element.select=function(J,K,L){var M;if(typeof J=="string"){M=Roo.Element.selectorFunction(J,L);}else if(J.length!==undefined){M=J;}else {throw "Invalid selector";}if(K===true){return new Roo.CompositeElement(M);}else {return new Roo.CompositeElementLite(M);}};Roo.select=Roo.Element.select;
-Roo.enableFx=true;Roo.Fx={slideIn:function(A,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){A=A||"t";this.fixDisplay();var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var B=this.fxWrap(r.pos,o,"hidden");var st=this.dom.style;st.visibility="visible";st.position="absolute";var C=function(){el.fxUnwrap(B,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,pt={to:[b.x,b.y]},bw={to:b.width},bh={to:b.height};switch(A.toLowerCase()){case "t":B.setSize(b.width,0);st.left=st.bottom="0";a={height:bh};break;case "l":B.setSize(0,b.height);st.right=st.top="0";a={width:bw};break;case "r":B.setSize(0,b.height);B.setX(b.right);st.left=st.top="0";a={width:bw,points:pt};break;case "b":B.setSize(b.width,0);B.setY(b.bottom);st.left=st.top="0";a={height:bh,points:pt};break;case "tl":B.setSize(0,0);st.right=st.bottom="0";a={width:bw,height:bh};break;case "bl":B.setSize(0,0);B.setY(b.y+b.height);st.right=st.top="0";a={width:bw,height:bh,points:pt};break;case "br":B.setSize(0,0);B.setXY([b.right,b.bottom]);st.left=st.top="0";a={width:bw,height:bh,points:pt};break;case "tr":B.setSize(0,0);B.setX(b.x+b.width);st.left=st.bottom="0";a={width:bw,height:bh,points:pt};break;}
-this.dom.style.visibility="visible";B.show();arguments.callee.anim=B.fxanim(a,o,'motion',.5,'easeOut',C);});return this;},slideOut:function(B,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){B=B||"t";var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var C=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";C.setSize(b);var D=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.fxUnwrap(C,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,E={to:0};switch(B.toLowerCase()){case "t":st.left=st.bottom="0";a={height:E};break;case "l":st.right=st.top="0";a={width:E};break;case "r":st.left=st.top="0";a={width:E,points:{to:[b.right,b.y]}};break;case "b":st.left=st.top="0";a={height:E,points:{to:[b.x,b.bottom]}};break;case "tl":st.right=st.bottom="0";a={width:E,height:E};break;case "bl":st.right=st.top="0";a={width:E,height:E,points:{to:[b.x,b.bottom]}};break;case "br":st.left=st.top="0";a={width:E,height:E,points:{to:[b.x+b.width,b.bottom]}};break;case "tr":st.left=st.bottom="0";a={width:E,height:E,points:{to:[b.right,b.y]}};break;}
-arguments.callee.anim=C.fxanim(a,o,'motion',.5,"easeOut",D);});return this;},puff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.show();var r=this.getFxRestore();var st=this.dom.style;var C=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var D=this.getWidth();var E=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(D*2)},height:{to:this.adjustHeight(E*2)},points:{by:[-(D*.5),-(E*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",C);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var C=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',C);}).defer(100,this);});});return this;},highlight:function(C,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){C=C||"ffff9c";attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var D=this.getColor(attr);var E=this.dom.style[attr];endColor=(o.endColor||D)||"ffffff";var F=function(){el.dom.style[attr]=E;el.afterFx(o);};var a={};a[attr]={from:C,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',F);});return this;},frame:function(D,E,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){D=D||"#C3DAF9";if(D.length==6){D="#"+D;}
-E=E||1;duration=o.duration||1;this.show();var b=this.getBox();var F=function(){var G=this.createProxy({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+D}});var H=Roo.isBorderBox?2:1;G.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*H))},width:{from:b.width,to:(b.width+(20*H))}},duration,function(){G.remove();});if(--E>0){F.defer((duration/2)*1000,this);}else {el.afterFx(o);}};F.call(this);});return this;},pause:function(F){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},F*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Roo.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else {this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Roo.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}if(h!==undefined){a.height={to:this.adjustHeight(h)};}if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};}if(op!==undefined){a.opacity={to:op};}if(o.xy!==undefined){a.points={to:o.xy};}
-arguments.callee.anim=this.fxanim(a,o,'motion',.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(G,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){G=G||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var H=function(){if(o.useDisplay){el.setDisplayed(false);}else {el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};var a={opacity:{to:0},points:{}},pt=a.points;switch(G.toLowerCase()){case "t":pt.by=[0,-h];break;case "l":pt.by=[-w,0];break;case "r":pt.by=[w,0];break;case "b":pt.by=[0,h];break;case "tl":pt.by=[-w,-h];break;case "bl":pt.by=[-w,h];break;case "br":pt.by=[w,h];break;case "tr":pt.by=[w,-h];break;}
-arguments.callee.anim=this.fxanim(a,o,'motion',.5,"easeOut",H);});return this;},syncFx:function(){this.fxDefaults=Roo.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Roo.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}}return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;}return false;}return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];}if(!this.hasFxBlock()){Roo.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else {fn.call(this);}}return this;},fxWrap:function(H,o,I){var J;if(!o.wrap||!(J=Roo.get(o.wrap))){var wrapXY;if(o.fixPosition){wrapXY=this.getXY();}var div=document.createElement("div");div.style.visibility=I;J=Roo.get(this.dom.parentNode.insertBefore(div,this.dom));J.setPositioning(H);if(J.getStyle("position")=="static"){J.position("relative");}
-this.clearPositioning('auto');J.clip();J.dom.appendChild(this.dom);if(wrapXY){J.setXY(wrapXY);}}return J;},fxUnwrap:function(K,L,o){this.clearPositioning();this.setPositioning(L);if(!o.wrap){K.dom.parentNode.insertBefore(this.dom,K.dom);K.remove();}},getFxRestore:function(){var st=this.dom.style;return {pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);}if(o.afterCls){this.addClass(o.afterCls);}if(o.remove===true){this.remove();}
-Roo.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.fxQueue.shift();this.nextFx();}},getFxEl:function(){return Roo.get(this.dom);},fxanim:function(M,N,O,P,Q,cb){O=O||'run';N=N||{};var R=Roo.lib.Anim[O](this.dom,M,(N.duration||P)||.35,(N.easing||Q)||'easeOut',function(){Roo.callback(cb,this);},this);N.anim=R;return R;}};Roo.Fx.resize=Roo.Fx.scale;Roo.apply(Roo.Element.prototype,Roo.Fx);
-Roo.CompositeElement=function(A){this.elements=[];this.addElements(A);};Roo.CompositeElement.prototype={isComposite:true,addElements:function(B){if(!B)return this;if(typeof B=="string"){B=Roo.Element.selectorFunction(B);}var C=this.elements;var D=C.length-1;for(var i=0,len=B.length;i<len;i++){C[++D]=Roo.get(B[i]);}return this;},fill:function(E){this.elements=[];this.add(E);return this;},filter:function(F){var G=[];this.each(function(el){if(el.is(F)){G[G.length]=el.dom;}});this.fill(G);return this;},invoke:function(fn,H){var I=this.elements;for(var i=0,len=I.length;i<len;i++){Roo.Element.prototype[fn].apply(I[i],H);}return this;},add:function(J){if(typeof J=="string"){this.addElements(Roo.Element.selectorFunction(J));}else if(J.length!==undefined){this.addElements(J);}else {this.addElements([J]);}return this;},each:function(fn,K){var L=this.elements;for(var i=0,len=L.length;i<len;i++){if(fn.call(K||L[i],L[i],this,i)===false){break;}}return this;},item:function(M){return this.elements[M]||null;},first:function(){return this.item(0);},last:function(){return this.item(this.elements.length-1);},getCount:function(){return this.elements.length;},contains:function(el){return this.indexOf(el)!==-1;},indexOf:function(el){return this.elements.indexOf(Roo.get(el));},removeElement:function(el,N){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.removeElement(el[i]);}return this;}var O=typeof el=='number'?el:this.indexOf(el);if(O!==-1){if(N){var d=this.elements[O];if(d.dom){d.remove();}else {d.parentNode.removeChild(d);}}
-this.elements.splice(O,1);}return this;},replaceElement:function(el,P,Q){var R=typeof el=='number'?el:this.indexOf(el);if(R!==-1){if(Q){this.elements[R].replaceWith(P);}else {this.elements.splice(R,1,Roo.get(P))}}return this;},clear:function(){this.elements=[];}};(function(){Roo.CompositeElement.createCall=function(S,T){if(!S[T]){S[T]=function(){return this.invoke(T,arguments);};}};for(var fnName in Roo.Element.prototype){if(typeof Roo.Element.prototype[fnName]=="function"){Roo.CompositeElement.createCall(Roo.CompositeElement.prototype,fnName);}};})();
-Roo.CompositeElementLite=function(A){Roo.CompositeElementLite.superclass.constructor.call(this,A);this.el=new Roo.Element.Flyweight();};Roo.extend(Roo.CompositeElementLite,Roo.CompositeElement,{addElements:function(B){if(B){if(B instanceof Array){this.elements=this.elements.concat(B);}else {var yels=this.elements;var index=yels.length-1;for(var i=0,len=B.length;i<len;i++){yels[++index]=B[i];}}}return this;},invoke:function(fn,C){var D=this.elements;var el=this.el;for(var i=0,len=D.length;i<len;i++){el.dom=D[i];Roo.Element.prototype[fn].apply(el,C);}return this;},item:function(E){if(!this.elements[E]){return null;}
-this.el.dom=this.elements[E];return this.el;},addListener:function(F,G,H,I){var J=this.elements;for(var i=0,len=J.length;i<len;i++){Roo.EventManager.on(J[i],F,G,H||J[i],I);}return this;},each:function(fn,K){var L=this.elements;var el=this.el;for(var i=0,len=L.length;i<len;i++){el.dom=L[i];if(fn.call(K||el,el,this,i)===false){break;}}return this;},indexOf:function(el){return this.elements.indexOf(Roo.getDom(el));},replaceElement:function(el,M,N){var O=typeof el=='number'?el:this.indexOf(el);if(O!==-1){M=Roo.getDom(M);if(N){var d=this.elements[O];d.parentNode.insertBefore(M,d);d.parentNode.removeChild(d);}
-this.elements.splice(O,1,M);}return this;}});Roo.CompositeElementLite.prototype.on=Roo.CompositeElementLite.prototype.addListener;
-Roo.data.Connection=function(A){Roo.apply(this,A);this.addEvents({"beforerequest":true,"requestcomplete":true,"requestexception":true});Roo.data.Connection.superclass.constructor.call(this);};Roo.extend(Roo.data.Connection,Roo.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,request:function(o){if(this.fireEvent("beforerequest",this,o)!==false){var p=o.params;if(typeof p=="function"){p=p.call(o.scope||window,o);}if(typeof p=="object"){p=Roo.urlEncode(o.params);}if(this.extraParams){var extras=Roo.urlEncode(this.extraParams);p=p?(p+'&'+extras):extras;}var url=o.url||this.url;if(typeof url=='function'){url=url.call(o.scope||window,o);}if(o.form){var form=Roo.getDom(o.form);url=url||form.action;var enctype=form.getAttribute("enctype");if(o.isUpload||(enctype&&enctype.toLowerCase()=='multipart/form-data')){return this.doFormUpload(o,p,url);}var f=Roo.lib.Ajax.serializeForm(form);p=p?(p+'&'+f):f;}var hs=o.headers;if(this.defaultHeaders){hs=Roo.apply(hs||{},this.defaultHeaders);if(!o.headers){o.headers=hs;}}var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:o},timeout:this.timeout};var method=o.method||this.method||(p?"POST":"GET");if(method=='GET'&&(this.disableCaching&&o.disableCaching!==false)||o.disableCaching===true){url+=(url.indexOf('?')!=-1?'&':'?')+'_dc='+(new Date().getTime());}if(typeof o.autoAbort=='boolean'){if(o.autoAbort){this.abort();}}else if(this.autoAbort!==false){this.abort();}if((method=='GET'&&p)||o.xmlData){url+=(url.indexOf('?')!=-1?'&':'?')+p;p='';}
-this.transId=Roo.lib.Ajax.request(method,url,cb,p,o);return this.transId;}else {Roo.callback(o.callback,o.scope,[o,null,null]);return null;}},isLoading:function(B){if(B){return Roo.lib.Ajax.isCallInProgress(B);}else {return this.transId?true:false;}},abort:function(C){if(C||this.isLoading()){Roo.lib.Ajax.abort(C||this.transId);}},handleResponse:function(D){this.transId=false;var E=D.argument.options;D.argument=E?E.argument:null;this.fireEvent("requestcomplete",this,D,E);Roo.callback(E.success,E.scope,[D,E]);Roo.callback(E.callback,E.scope,[E,true,D]);},handleFailure:function(F,e){this.transId=false;var G=F.argument.options;F.argument=G?G.argument:null;this.fireEvent("requestexception",this,F,G,e);Roo.callback(G.failure,G.scope,[F,G]);Roo.callback(G.callback,G.scope,[G,false,F]);},doFormUpload:function(o,ps,H){var id=Roo.id();var I=document.createElement('iframe');I.id=id;I.name=id;I.className='x-hidden';if(Roo.isIE){I.src=Roo.SSL_SECURE_URL;}
-document.body.appendChild(I);if(Roo.isIE){document.frames[id].name=id;}var J=Roo.getDom(o.form);J.target=id;J.method='POST';J.enctype=J.encoding='multipart/form-data';if(H){J.action=H;}var K,hd;if(ps){K=[];ps=Roo.urlDecode(ps,false);for(var k in ps){if(ps.hasOwnProperty(k)){hd=document.createElement('input');hd.type='hidden';hd.name=k;hd.value=ps[k];J.appendChild(hd);K.push(hd);}}}function cb(){var r={responseText:'',responseXML:null};r.argument=o?o.argument:null;try{var doc;if(Roo.isIE){doc=I.contentWindow.document;}else {doc=(I.contentDocument||window.frames[id].document);}if(doc&&doc.body){r.responseText=doc.body.innerHTML;}if(doc&&doc.XMLDocument){r.responseXML=doc.XMLDocument;}else {r.responseXML=doc;}}catch(e){}
-Roo.EventManager.removeListener(I,'load',cb,this);this.fireEvent("requestcomplete",this,r,o);Roo.callback(o.success,o.scope,[r,o]);Roo.callback(o.callback,o.scope,[o,true,r]);setTimeout(function(){document.body.removeChild(I);},100);}
-Roo.EventManager.on(I,'load',cb,this);J.submit();if(K){for(var i=0,len=K.length;i<len;i++){J.removeChild(K[i]);}}}});Roo.Ajax=new Roo.data.Connection({autoAbort:false,serializeForm:function(L){return Roo.lib.Ajax.serializeForm(L);}});
-Roo.Ajax=new Roo.data.Connection({autoAbort:false,serializeForm:function(A){return Roo.lib.Ajax.serializeForm(A);}});
-Roo.UpdateManager=function(el,A){el=Roo.get(el);if(!A&&el.updateManager){return el.updateManager;}
-this.el=el;this.defaultUrl=null;this.addEvents({"beforeupdate":true,"update":true,"failure":true});var d=Roo.UpdateManager.defaults;this.sslBlankUrl=d.sslBlankUrl;this.disableCaching=d.disableCaching;this.indicatorText=d.indicatorText;this.showLoadIndicator=d.showLoadIndicator;this.timeout=d.timeout;this.loadScripts=d.loadScripts;this.transaction=null;this.autoRefreshProcId=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);this.successDelegate=this.processSuccess.createDelegate(this);this.failureDelegate=this.processFailure.createDelegate(this);if(!this.renderer){this.renderer=new Roo.UpdateManager.BasicRenderer();}
-Roo.UpdateManager.superclass.constructor.call(this);};Roo.extend(Roo.UpdateManager,Roo.util.Observable,{getEl:function(){return this.el;},update:function(B,C,D,E){if(this.fireEvent("beforeupdate",this.el,B,C)!==false){var method=this.method,cfg;if(typeof B=="object"){cfg=B;B=cfg.url;C=C||cfg.params;D=D||cfg.callback;E=E||cfg.discardUrl;if(D&&cfg.scope){D=D.createDelegate(cfg.scope);}if(typeof cfg.method!="undefined"){method=cfg.method;};if(typeof cfg.nocache!="undefined"){this.disableCaching=cfg.nocache;};if(typeof cfg.text!="undefined"){this.indicatorText='<div class="loading-indicator">'+cfg.text+"</div>";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};}
-this.showLoading();if(!E){this.defaultUrl=B;}if(typeof B=="function"){B=B.call(this);}
-method=method||(C?"POST":"GET");if(method=="GET"){B=this.prepareUrl(B);}var o=Roo.apply(cfg||{},{url:B,params:C,success:this.successDelegate,failure:this.failureDelegate,callback:undefined,timeout:(this.timeout*1000),argument:{"url":B,"form":null,"callback":D,"params":C}});this.transaction=Roo.Ajax.request(o);}},formUpdate:function(F,G,H,I){if(this.fireEvent("beforeupdate",this.el,F,G)!==false){if(typeof G=="function"){G=G.call(this);}
-F=Roo.getDom(F);this.transaction=Roo.Ajax.request({form:F,url:G,success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":G,"form":F,"callback":I,"reset":H}});this.showLoading.defer(1,this);}},refresh:function(J){if(this.defaultUrl==null){return;}
-this.update(this.defaultUrl,null,J,true);},startAutoRefresh:function(K,L,M,N,O){if(O){this.update(L||this.defaultUrl,M,N,true);}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);}
-this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[L||this.defaultUrl,M,N,true]),K*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},prepareUrl:function(P){if(this.disableCaching){var append="_dc="+(new Date().getTime());if(P.indexOf("?")!==-1){P+="&"+append;}else {P+="?"+append;}}return P;},processSuccess:function(Q){this.transaction=null;if(Q.argument.form&&Q.argument.reset){try{Q.argument.form.reset();}catch(e){}}if(this.loadScripts){this.renderer.render(this.el,Q,this,this.updateComplete.createDelegate(this,[Q]));}else {this.renderer.render(this.el,Q,this);this.updateComplete(Q);}},updateComplete:function(R){this.fireEvent("update",this.el,R);if(typeof R.argument.callback=="function"){R.argument.callback(this.el,true,R);}},processFailure:function(S){this.transaction=null;this.fireEvent("failure",this.el,S);if(typeof S.argument.callback=="function"){S.argument.callback(this.el,false,S);}},setRenderer:function(T){this.renderer=T;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(U){this.defaultUrl=U;},abort:function(){if(this.transaction){Roo.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Roo.Ajax.isLoading(this.transaction);}return false;}});Roo.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Roo.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>'};Roo.UpdateManager.updateElement=function(el,V,W,X){var um=Roo.get(el,true).getUpdateManager();Roo.apply(um,X);um.update(V,W,X?X.callback:null);};Roo.UpdateManager.update=Roo.UpdateManager.updateElement;Roo.UpdateManager.BasicRenderer=function(){};Roo.UpdateManager.BasicRenderer.prototype={render:function(el,Y,Z,a){el.update(Y.responseText,Z.loadScripts,a);}};
-Roo.util.DelayedTask=function(fn,A,B){var id=null,d,t;var C=function(){var D=new Date().getTime();if(D-t>=d){clearInterval(id);id=null;fn.apply(A,B||[]);}};this.delay=function(D,E,F,G){if(id&&D!=d){this.cancel();}
-d=D;t=new Date().getTime();fn=E||fn;A=F||A;B=G||B;if(!id){id=setInterval(C,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
-Roo.util.TaskRunner=function(A){A=A||10;var B=[],C=[];var id=0;var D=false;var E=function(){D=false;clearInterval(id);id=0;};var F=function(){if(!D){D=true;id=setInterval(H,A);}};var G=function(I){C.push(I);if(I.onStop){I.onStop();}};var H=function(){if(C.length>0){for(var i=0,len=C.length;i<len;i++){B.remove(C[i]);}
-C=[];if(B.length<1){E();return;}}var I=new Date().getTime();for(var i=0,len=B.length;i<len;++i){var t=B[i];var itime=I-t.taskRunTime;if(t.interval<=itime){var rt=t.run.apply(t.scope||t,t.args||[++t.taskRunCount]);t.taskRunTime=I;if(rt===false||t.taskRunCount===t.repeat){G(t);return;}}if(t.duration&&t.duration<=(I-t.taskStartTime)){G(t);}}};this.start=function(I){B.push(I);I.taskStartTime=new Date().getTime();I.taskRunTime=0;I.taskRunCount=0;F();return I;};this.stop=function(I){G(I);return I;};this.stopAll=function(){E();for(var i=0,len=B.length;i<len;i++){if(B[i].onStop){B[i].onStop();}}
-B=[];C=[];};};Roo.TaskMgr=new Roo.util.TaskRunner();
-Roo.util.MixedCollection=function(A,B){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents({"clear":true,"add":true,"replace":true,"remove":true,"sort":true});this.allowFunctions=A===true;if(B){this.getKey=B;}
-Roo.util.MixedCollection.superclass.constructor.call(this);};Roo.extend(Roo.util.MixedCollection,Roo.util.Observable,{allowFunctions:false,add:function(C,o){if(arguments.length==1){o=arguments[0];C=this.getKey(o);}if(typeof C=="undefined"||C===null){this.length++;this.items.push(o);this.keys.push(null);}else {var old=this.map[C];if(old){return this.replace(C,o);}
-this.length++;this.items.push(o);this.map[C]=o;this.keys.push(C);}
-this.fireEvent("add",this.length-1,o,C);return o;},getKey:function(o){return o.id;},replace:function(D,o){if(arguments.length==1){o=arguments[0];D=this.getKey(o);}var E=this.item(D);if(typeof D=="undefined"||D===null||typeof E=="undefined"){return this.add(D,o);}var F=this.indexOfKey(D);this.items[F]=o;this.map[D]=o;this.fireEvent("replace",D,E,o);return o;},addAll:function(G){if(arguments.length>1||G instanceof Array){var args=arguments.length>1?arguments:G;for(var i=0,len=args.length;i<len;i++){this.add(args[i]);}}else {for(var D in G){if(this.allowFunctions||typeof G[D]!="function"){this.add(D,G[D]);}}}},each:function(fn,H){var I=[].concat(this.items);for(var i=0,len=I.length;i<len;i++){if(fn.call(H||I[i],I[i],i,len)===false){break;}}},eachKey:function(fn,J){for(var i=0,len=this.keys.length;i<len;i++){fn.call(J||window,this.keys[i],this.items[i],i,len);}},find:function(fn,K){for(var i=0,len=this.items.length;i<len;i++){if(fn.call(K||window,this.items[i],this.keys[i])){return this.items[i];}}return null;},insert:function(L,M,o){if(arguments.length==2){o=arguments[1];M=this.getKey(o);}if(L>=this.length){return this.add(M,o);}
-this.length++;this.items.splice(L,0,o);if(typeof M!="undefined"&&M!=null){this.map[M]=o;}
-this.keys.splice(L,0,M);this.fireEvent("add",L,o,M);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(N){if(N<this.length&&N>=0){this.length--;var o=this.items[N];this.items.splice(N,1);var M=this.keys[N];if(typeof M!="undefined"){delete this.map[M];}
-this.keys.splice(N,1);this.fireEvent("remove",o,M);}},removeKey:function(O){return this.removeAt(this.indexOfKey(O));},getCount:function(){return this.length;},indexOf:function(o){if(!this.items.indexOf){for(var i=0,len=this.items.length;i<len;i++){if(this.items[i]==o)return i;}return -1;}else {return this.items.indexOf(o);}},indexOfKey:function(P){if(!this.keys.indexOf){for(var i=0,len=this.keys.length;i<len;i++){if(this.keys[i]==P)return i;}return -1;}else {return this.keys.indexOf(P);}},item:function(Q){var R=typeof this.map[Q]!="undefined"?this.map[Q]:this.items[Q];return typeof R!='function'||this.allowFunctions?R:null;},itemAt:function(S){return this.items[S];},key:function(T){return this.map[T];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(U){return typeof this.map[U]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(V,W,fn){var X=String(W).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,Y=this.items;for(var i=0,len=Y.length;i<len;i++){c[c.length]={key:k[i],value:Y[i],index:i};}
-c.sort(function(a,b){var v=fn(a[V],b[V])*X;if(v==0){v=(a.index<b.index?-1:1);}return v;});for(var i=0,len=c.length;i<len;i++){Y[i]=c[i].value;k[i]=c[i].key;}
-this.fireEvent("sort",this);},sort:function(Z,fn){this._sort("value",Z,fn);},keySort:function(a,fn){this._sort("key",a,fn||function(a,b){return String(a).toUpperCase()-String(b).toUpperCase();});},getRange:function(b,d){var e=this.items;if(e.length<1){return [];}
-b=b||0;d=Math.min(typeof d=="undefined"?this.length-1:d,this.length-1);var r=[];if(b<=d){for(var i=b;i<=d;i++){r[r.length]=e[i];}}else {for(var i=b;i>=d;i--){r[r.length]=e[i];}}return r;},filter:function(f,g){if(!g.exec){g=String(g);if(g.length==0){return this.clone();}
-g=new RegExp("^"+Roo.escapeRe(g),"i");}return this.filterBy(function(o){return o&&g.test(o[f]);});},filterBy:function(fn,h){var r=new Roo.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){if(fn.call(h||this,it[i],k[i])){r.add(k[i],it[i]);}}return r;},clone:function(){var r=new Roo.util.MixedCollection();var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){r.add(k[i],it[i]);}
-r.getKey=this.getKey;return r;}});Roo.util.MixedCollection.prototype.get=Roo.util.MixedCollection.prototype.item;
-Roo.util.JSON=new (function(){var useHasOwn={}.hasOwnProperty?true:false;var pad=function(n){return n<10?"0"+n:n;};var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return '"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return "\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}return '"'+s+'"';};var encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(',');}
-a.push(v===null?"null":Roo.util.JSON.encode(v));b=true;}}
-a.push("]");return a.join("");};var encodeDate=function(o){return '"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"';};this.encode=function(o){if(typeof o=="undefined"||o===null){return "null";}else if(o instanceof Array){return encodeArray(o);}else if(o instanceof Date){return encodeDate(o);}else if(typeof o=="string"){return encodeString(o);}else if(typeof o=="number"){return isFinite(o)?String(o):"null";}else if(typeof o=="boolean"){return String(o);}else {var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(',');}
-a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}
-a.push("}");return a.join("");}};this.decode=function(json){return eval("("+json+')');};})();Roo.encode=Roo.util.JSON.encode;Roo.decode=Roo.util.JSON.decode;
-Roo.util.Format=function(){var A=/^\s+|\s+$/g;return {ellipsis:function(R,S){if(R&&R.length>S){return R.substr(0,S-3)+"...";}return R;},undef:function(T){return typeof T!="undefined"?T:"";},htmlEncode:function(U){return !U?U:String(U).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");},htmlDecode:function(V){return !V?V:String(V).replace(/&amp;/g,"&").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"');},trim:function(W){return String(W).replace(A,"");},substr:function(X,Y,Z){return String(X).substr(Y,Z);},lowercase:function(a){return String(a).toLowerCase();},uppercase:function(b){return String(b).toUpperCase();},capitalize:function(c){return !c?c:c.charAt(0).toUpperCase()+c.substr(1).toLowerCase();},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args);}else {return eval(fn).call(window,value);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split('.');var d=ps[0];var e=ps[1]?'.'+ps[1]:'.00';var r=/(\d+)(\d{3})/;while(r.test(d)){d=d.replace(r,'$1'+','+'$2');}return "$"+d+e;},date:function(v,f){if(!v){return "";}if(!(v instanceof Date)){v=new Date(Date.parse(v));}return v.dateFormat(f||"m/d/Y");},dateRenderer:function(g){return function(v){return Roo.util.Format.date(v,g);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return !v?v:String(v).replace(this.stripTagsRE,"");}};}();
-Roo.MasterTemplate=function(){Roo.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var st={};var m,re=this.subTemplateRe;re.lastIndex=0;var A=0;while(m=re.exec(this.html)){var name=m[1],content=m[2];st[A]={name:name,index:A,buffer:[],tpl:new Roo.Template(content)};if(name){st[name]=st[A];}
-st[A].tpl.compile();st[A].tpl.call=this.call.createDelegate(this);A++;}
-this.subCount=A;this.subs=st;};Roo.extend(Roo.MasterTemplate,Roo.Template,{subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(B,C){if(arguments.length==1){C=arguments[0];B=0;}var s=this.subs[B];s.buffer[s.buffer.length]=s.tpl.apply(C);return this;},fill:function(D,E,F){var a=arguments;if(a.length==1||(a.length==2&&typeof a[1]=="boolean")){E=a[0];D=0;F=a[1];}if(F){this.reset();}for(var i=0,len=E.length;i<len;i++){this.add(D,E[i]);}return this;},reset:function(){var s=this.subs;for(var i=0;i<this.subCount;i++){s[i].buffer=[];}return this;},applyTemplate:function(G){var s=this.subs;var H=-1;this.html=this.originalHtml.replace(this.subTemplateRe,function(m,I){return s[++H].buffer.join("");});return Roo.MasterTemplate.superclass.applyTemplate.call(this,G);},apply:function(){return this.applyTemplate.apply(this,arguments);},compile:function(){return this;}});Roo.MasterTemplate.prototype.addAll=Roo.MasterTemplate.prototype.fill;Roo.MasterTemplate.from=function(el,I){el=Roo.getDom(el);return new Roo.MasterTemplate(el.value||el.innerHTML,I||'');};
-Roo.util.CSS=function(){var A=null;var B=document;var C=/(-[a-z])/gi;var D=function(m,a){return a.charAt(1).toUpperCase();};return {createStyleSheet:function(P,id){var ss;var Q=B.getElementsByTagName("head")[0];var R=B.createElement("style");R.setAttribute("type","text/css");if(id){R.setAttribute("id",id);}if(Roo.isIE){Q.appendChild(R);ss=R.styleSheet;ss.cssText=P;}else {try{R.appendChild(B.createTextNode(P));}catch(e){R.cssText=P;}
-Q.appendChild(R);ss=R.styleSheet?R.styleSheet:(R.sheet||B.styleSheets[B.styleSheets.length-1]);}
-this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){var S=B.getElementById(id);if(S){S.parentNode.removeChild(S);}},swapStyleSheet:function(id,T){this.removeStyleSheet(id);var ss=B.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",T);B.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(!R){R={};}try{var ssRules=ss.cssRules||ss.rules;for(var j=ssRules.length-1;j>=0;--j){R[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(U){if(R==null||U){R={};var ds=B.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}return R;},getRule:function(V,W){var rs=this.getRules(W);if(!(V instanceof Array)){return rs[V];}for(var i=0;i<V.length;i++){if(rs[V[i]]){return rs[V[i]];}}return null;},updateRule:function(X,Y,Z){if(!(X instanceof Array)){var rule=this.getRule(X);if(rule){rule.style[Y.replace(C,D)]=Z;return true;}}else {for(var i=0;i<X.length;i++){if(this.updateRule(X[i],Y,Z)){return true;}}}return false;}};}();
-Roo.util.ClickRepeater=function(el,A){this.el=Roo.get(el);this.el.unselectable();Roo.apply(this,A);this.addEvents({"mousedown":true,"click":true,"mouseup":true});this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}if(this.stopDefault){e.stopEvent();}},this);}if(this.handler){this.on("click",this.handler,this.scope||this);}
-Roo.util.ClickRepeater.superclass.constructor.call(this);};Roo.extend(Roo.util.ClickRepeater,Roo.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
-this.mousedownTime=new Date();Roo.get(document).on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.getInterval(),this);},getInterval:function(){if(!this.accelerate){return this.interval;}var B=this.mousedownTime.getElapsed();if(B<500){return 400;}else if(B<1700){return 320;}else if(B<2600){return 250;}else if(B<3500){return 180;}else if(B<4400){return 140;}else if(B<5300){return 80;}else if(B<6200){return 50;}else {return 10;}},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
-this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn);if(this.pressClass){this.el.addClass(this.pressClass);}
-this.click();},handleMouseUp:function(){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn);this.el.un("mouseout",this.handleMouseOut);Roo.get(document).un("mouseup",this.handleMouseUp);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this);}});
-Roo.KeyNav=function(el,A){this.el=Roo.get(el);Roo.apply(this,A);if(!this.disabled){this.disabled=true;this.enable();}};Roo.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",forceKeyDown:false,prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Roo.isSafari&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,B){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(this.forceKeyDown||Roo.isIE||Roo.isAir){this.el.on("keydown",this.relay,this);}else {this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}
-this.disabled=false;}},disable:function(){if(!this.disabled){if(this.forceKeyDown||Roo.isIE||Roo.isAir){this.el.un("keydown",this.relay);}else {this.el.un("keydown",this.prepareEvent);this.el.un("keypress",this.relay);}
-this.disabled=true;}}};
-Roo.KeyMap=function(el,A,B){this.el=Roo.get(el);this.eventName=B||"keydown";this.bindings=[];if(A){this.addBinding(A);}
-this.enable();};Roo.KeyMap.prototype={stopEvent:false,addBinding:function(C){if(C instanceof Array){for(var i=0,len=C.length;i<len;i++){this.addBinding(C[i]);}return;}var D=C.key,E=C.shift,F=C.ctrl,G=C.alt,fn=C.fn,H=C.scope;if(typeof D=="string"){var ks=[];var keyString=D.toUpperCase();for(var j=0,len=keyString.length;j<len;j++){ks.push(keyString.charCodeAt(j));}
-D=ks;}var I=D instanceof Array;var J=function(e){if((!E||e.shiftKey)&&(!F||e.ctrlKey)&&(!G||e.altKey)){var k=e.getKey();if(I){for(var i=0,len=D.length;i<len;i++){if(D[i]==k){if(this.stopEvent){e.stopEvent();}
-fn.call(H||window,k,e);return;}}}else {if(k==D){if(this.stopEvent){e.stopEvent();}
-fn.call(H||window,k,e);}}}};this.bindings.push(J);},on:function(K,fn,L){var M,N,O,P;if(typeof K=="object"&&!(K instanceof Array)){M=K.key;N=K.shift;O=K.ctrl;P=K.alt;}else {M=K;}
-this.addBinding({key:M,shift:N,ctrl:O,alt:P,fn:fn,scope:L})},handleKeyDown:function(e){if(this.enabled){var b=this.bindings;for(var i=0,len=b.length;i<len;i++){b[i].call(this,e);}}},isEnabled:function(){return this.enabled;},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.handleKeyDown,this);this.enabled=true;}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.handleKeyDown,this);this.enabled=false;}}};
-Roo.util.TextMetrics=function(){var A;return {measure:function(el,E,F){if(!A){A=Roo.util.TextMetrics.Instance(el,F);}
-A.bind(el);A.setFixedWidth(F||'auto');return A.getSize(E);},createInstance:function(el,G){return Roo.util.TextMetrics.Instance(el,G);}};}();Roo.util.TextMetrics.Instance=function(B,C){var ml=new Roo.Element(document.createElement('div'));document.body.appendChild(ml.dom);ml.position('absolute');ml.setLeftTop(-1000,-1000);ml.hide();if(C){ml.setWidth(C);}var D={getSize:function(E){ml.update(E);var s=ml.getSize();ml.update('');return s;},bind:function(el){ml.setStyle(Roo.fly(el).getStyles('font-size','font-style','font-weight','font-family','line-height'));},setFixedWidth:function(F){ml.setWidth(F);},getWidth:function(G){ml.dom.style.width='auto';return this.getSize(G).width;},getHeight:function(H){return this.getSize(H).height;}};D.bind(B);return D;};Roo.Element.measureText=Roo.util.TextMetrics.measure;
-Roo.state.Provider=function(){this.addEvents({"statechange":true});this.state={};Roo.state.Provider.superclass.constructor.call(this);};Roo.extend(Roo.state.Provider,Roo.util.Observable,{get:function(A,B){return typeof this.state[A]=="undefined"?B:this.state[A];},clear:function(C){delete this.state[C];this.fireEvent("statechange",this,C,null);},set:function(D,E){this.state[D]=E;this.fireEvent("statechange",this,D,E);},decodeValue:function(F){var re=/^(a|n|d|b|s|o)\:(.*)$/;var G=re.exec(unescape(F));if(!G||!G[1])return;var H=G[1];var v=G[2];switch(H){case "n":return parseFloat(v);case "d":return new Date(Date.parse(v));case "b":return (v=="1");case "a":var all=[];var values=v.split("^");for(var i=0,len=values.length;i<len;i++){all.push(this.decodeValue(values[i]));}return all;case "o":var all={};var values=v.split("^");for(var i=0,len=values.length;i<len;i++){var kv=values[i].split("=");all[kv[0]]=this.decodeValue(kv[1]);}return all;default:return v;}},encodeValue:function(v){var I;if(typeof v=="number"){I="n:"+v;}else if(typeof v=="boolean"){I="b:"+(v?"1":"0");}else if(v instanceof Date){I="d:"+v.toGMTString();}else if(v instanceof Array){var flat="";for(var i=0,len=v.length;i<len;i++){flat+=this.encodeValue(v[i]);if(i!=len-1)flat+="^";}
-I="a:"+flat;}else if(typeof v=="object"){var flat="";for(var key in v){if(typeof v[key]!="function"){flat+=key+"="+this.encodeValue(v[key])+"^";}}
-I="o:"+flat.substring(0,flat.length-1);}else {I="s:"+v;}return escape(I);}});
-Roo.state.Manager=function(){var A=new Roo.state.Provider();return {setProvider:function(H){A=H;},get:function(I,J){return A.get(I,J);},set:function(K,L){A.set(K,L);},clear:function(M){A.clear(M);},getProvider:function(){return A;}};}();
-Roo.state.CookieProvider=function(A){Roo.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Roo.apply(this,A);this.state=this.readCookies();};Roo.extend(Roo.state.CookieProvider,Roo.state.Provider,{set:function(B,C){if(typeof C=="undefined"||C===null){this.clear(B);return;}
-this.setCookie(B,C);Roo.state.CookieProvider.superclass.set.call(this,B,C);},clear:function(D){this.clearCookie(D);Roo.state.CookieProvider.superclass.clear.call(this,D);},readCookies:function(){var E={};var c=document.cookie+";";var re=/\s?(.*?)=(.*?);/g;var F;while((F=re.exec(c))!=null){var D=F[1];var C=F[2];if(D&&D.substring(0,3)=="ys-"){E[D.substr(3)]=this.decodeValue(C);}}return E;},setCookie:function(G,H){document.cookie="ys-"+G+"="+this.encodeValue(H)+((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");},clearCookie:function(I){document.cookie="ys-"+I+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");}});
+
+
+
+
+
+
+
+window["undefined"] = window["undefined"];
+
+
+
+var  Roo = {}; 
+
+
+
+Roo.apply = function(o, c, A){
+    if(A){
+        
+        Roo.apply(o, A);
+    }
+    if(o && c && typeof  c == 'object'){
+        for(var  p  in  c){
+            o[p] = c[p];
+        }
+    }
+    return  o;
+};
+
+
+(function(){
+    var  B = 0;
+    var  ua = navigator.userAgent.toLowerCase();
+
+    var  C = document.compatMode == "CSS1Compat",
+        D = ua.indexOf("opera") > -1,
+        E = (/webkit|khtml/).test(ua),
+        F = ua.indexOf("msie") > -1,
+        G = ua.indexOf("msie 7") > -1,
+        H = !E && ua.indexOf("gecko") > -1,
+        I = F && !C,
+        J = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),
+        K = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),
+        L = (ua.indexOf("linux") != -1),
+        M = window.location.href.toLowerCase().indexOf("https") === 0;
+
+    
+       if(F && !G){
+        try{
+            document.execCommand("BackgroundImageCache", false, true);
+        }catch(e){}
+    }
+
+
+    Roo.apply(Roo, {
+        
+
+        isStrict : C,
+        
+
+        isSecure : M,
+        
+
+        isReady : false,
+        
+
+        
+        debug: false,
+
+        
+
+        enableGarbageCollector : true,
+
+        
+
+        enableListenerCollection:false,
+
+        
+
+        SSL_SECURE_URL : "javascript:false",
+
+        
+
+        BLANK_IMAGE_URL : "http:/"+"/localhost/s.gif",
+
+        emptyFn : function(){},
+
+        
+
+        applyIf : function(o, c){
+            if(o && c){
+                for(var  p  in  c){
+                    if(typeof  o[p] == "undefined"){ o[p] = c[p]; }
+                }
+            }
+            return  o;
+        },
+
+        
+
+        addBehaviors : function(o){
+            if(!Roo.isReady){
+                Roo.onReady(function(){
+                    Roo.addBehaviors(o);
+                });
+                return;
+            }
+            var  N = {}; 
+            for(var  b  in  o){
+                var  parts = b.split('@');
+                if(parts[1]){ 
+                    var  s = parts[0];
+                    if(!N[s]){
+                        N[s] = Roo.select(s);
+                    }
+
+                    N[s].on(parts[1], o[b]);
+                }
+            }
+
+            N = null;
+        },
+
+        
+
+        id : function(el, O){
+            O = O || "roo-gen";
+            el = Roo.getDom(el);
+            var  id = O + (++B);
+            return  el ? (el.id ? el.id : (el.id = id)) : id;
+        },
+         
+       
+        
+
+        extend : function(){
+            
+            var  io = function(o){
+                for(var  m  in  o){
+                    this[m] = o[m];
+                }
+            };
+            return  function(sb, sp, P){
+                if(typeof  sp == 'object'){ 
+                    P = sp;
+                    sp = sb;
+                    sb = function(){sp.apply(this, arguments);};
+                }
+                var  F = function(){}, sbp, spp = sp.prototype;
+                F.prototype = spp;
+                sbp = sb.prototype = new  F();
+                sbp.constructor=sb;
+                sb.superclass=spp;
+                
+                if(spp.constructor == Object.prototype.constructor){
+                    spp.constructor=sp;
+                   
+                }
+
+                
+                sb.override = function(o){
+                    Roo.override(sb, o);
+                };
+                sbp.override = io;
+                Roo.override(sb, P);
+                return  sb;
+            };
+        }(),
+
+        
+
+        override : function(P, Q){
+            if(Q){
+                var  p = P.prototype;
+                for(var  method  in  Q){
+                    p[method] = Q[method];
+                }
+            }
+        },
+        
+
+        namespace : function(){
+            var  a=arguments, o=null, i, j, d, rt;
+            for (i=0; i<a.length; ++i) {
+                d=a[i].split(".");
+                rt = d[0];
+                
+
+                eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
+                for (j=1; j<d.length; ++j) {
+                    o[d[j]]=o[d[j]] || {};
+                    o=o[d[j]];
+                }
+            }
+        },
+        
+
+         
+        factory : function(c, ns)
+        {
+            
+            if (!c.xtype   || (!ns && !c.xns) ||  (c.xns === false)) { 
+                return  c;
+            }
+
+            ns = c.xns ? c.xns : ns; 
+            if (c.constructor == ns[c.xtype]) {
+                return  c;
+            }
+            if (ns[c.xtype]) {
+                if (Roo.debug) Roo.log("Roo.Factory(" + c.xtype + ")");
+                var  ret = new  ns[c.xtype](c);
+                ret.xns = false;
+                return  ret;
+            }
+
+            c.xns = false; 
+            return  c;
+        },
+         
+
+        log : function(s)
+        {
+            if ((typeof(console) == 'undefined') || (typeof(console.log) == 'undefined')) {
+                return; 
+            }
+
+            console.log(s);
+            
+        },
+        
+
+        urlEncode : function(o){
+            if(!o){
+                return  "";
+            }
+            var  R = [];
+            for(var  key  in  o){
+                var  ov = o[key], k = encodeURIComponent(key);
+                var  type = typeof  ov;
+                if(type == 'undefined'){
+                    R.push(k, "=&");
+                }else  if(type != "function" && type != "object"){
+                    R.push(k, "=", encodeURIComponent(ov), "&");
+                }else  if(ov  instanceof  Array){
+                    if (ov.length) {
+                           for(var  i = 0, len = ov.length; i < len; i++) {
+                               R.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&");
+                           }
+                       } else  {
+                           R.push(k, "=&");
+                       }
+                }
+            }
+
+            R.pop();
+            return  R.join("");
+        },
+
+        
+
+        urlDecode : function(S, T){
+            if(!S || !S.length){
+                return  {};
+            }
+            var  U = {};
+            var  V = S.split('&');
+            var  W, X, Y;
+            for(var  i = 0, len = V.length; i < len; i++){
+                W = V[i].split('=');
+                X = decodeURIComponent(W[0]);
+                Y = decodeURIComponent(W[1]);
+                if(T !== true){
+                    if(typeof  U[X] == "undefined"){
+                        U[X] = Y;
+                    }else  if(typeof  U[X] == "string"){
+                        U[X] = [U[X]];
+                        U[X].push(Y);
+                    }else {
+                        U[X].push(Y);
+                    }
+                }else {
+                    U[X] = Y;
+                }
+            }
+            return  U;
+        },
+
+        
+
+        each : function(Z, fn, f){
+            if(typeof  Z.length == "undefined" || typeof  Z == "string"){
+                Z = [Z];
+            }
+            for(var  i = 0, len = Z.length; i < len; i++){
+                if(fn.call(f || Z[i], Z[i], i, Z) === false){ return  i; };
+            }
+        },
+
+        
+        combine : function(){
+            var  as = arguments, l = as.length, r = [];
+            for(var  i = 0; i < l; i++){
+                var  a = as[i];
+                if(a  instanceof  Array){
+                    r = r.concat(a);
+                }else  if(a.length !== undefined && !a.substr){
+                    r = r.concat(Array.prototype.slice.call(a, 0));
+                }else {
+                    r.push(a);
+                }
+            }
+            return  r;
+        },
+
+        
+
+        escapeRe : function(s) {
+            return  s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1");
+        },
+
+        
+        callback : function(cb, g, h, n){
+            if(typeof  cb == "function"){
+                if(n){
+                    cb.defer(n, g, h || []);
+                }else {
+                    cb.apply(g, h || []);
+                }
+            }
+        },
+
+        
+
+        getDom : function(el){
+            if(!el){
+                return  null;
+            }
+            return  el.dom ? el.dom : (typeof  el == 'string' ? document.getElementById(el) : el);
+        },
+
+        
+
+        getCmp : function(id){
+            return  Roo.ComponentMgr.get(id);
+        },
+         
+        num : function(v, q){
+            if(typeof  v != 'number'){
+                return  q;
+            }
+            return  v;
+        },
+
+        destroy : function(){
+            for(var  i = 0, a = arguments, len = a.length; i < len; i++) {
+                var  as = a[i];
+                if(as){
+                    if(as.dom){
+                        as.removeAllListeners();
+                        as.remove();
+                        continue;
+                    }
+                    if(typeof  as.purgeListeners == 'function'){
+                        as.purgeListeners();
+                    }
+                    if(typeof  as.destroy == 'function'){
+                        as.destroy();
+                    }
+                }
+            }
+        },
+
+        
+        
+
+        type : function(o){
+            if(o === undefined || o === null){
+                return  false;
+            }
+            if(o.htmlElement){
+                return  'element';
+            }
+            var  t = typeof  o;
+            if(t == 'object' && o.nodeName) {
+                switch(o.nodeType) {
+                    case  1: return  'element';
+                    case  3: return  (/\S/).test(o.nodeValue) ? 'textnode' : 'whitespace';
+                }
+            }
+            if(t == 'object' || t == 'function') {
+                switch(o.constructor) {
+                    case  Array: return  'array';
+                    case  RegExp: return  'regexp';
+                }
+                if(typeof  o.length == 'number' && typeof  o.item == 'function') {
+                    return  'nodelist';
+                }
+            }
+            return  t;
+        },
+
+        
+
+        isEmpty : function(v, u){
+            return  v === null || v === undefined || (!u ? v === '' : false);
+        },
+        
+        
+
+        isOpera : D,
+        
+
+        isSafari : E,
+        
+
+        isIE : F,
+        
+
+        isIE7 : G,
+        
+
+        isGecko : H,
+        
+
+        isBorderBox : I,
+        
+
+        isWindows : J,
+        
+
+        isLinux : L,
+        
+
+        isMac : K,
+
+        
+
+        useShims : ((F && !G) || (H && K))
+    });
+
+
+})();
+
+Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
+                "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout", "Roo.app", "Roo.ux");
+
+
+
+
+(function() {    
+    
+    if(Roo.isIE) {
+        function  A() {
+            var  p = Function.prototype;
+            delete  p.createSequence;
+            delete  p.defer;
+            delete  p.createDelegate;
+            delete  p.createCallback;
+            delete  p.createInterceptor;
+
+            window.detachEvent("onunload", A);
+        }
+
+        window.attachEvent("onunload", A);
+    }
+})();
+
+
+
+
+Roo.apply(Function.prototype, {
+     
+
+    createCallback : function(
+){
+        
+        var  B = arguments;
+        var  C = this;
+        return  function() {
+            return  C.apply(window, B);
+        };
+    },
+
+    
+
+    createDelegate : function(D, E, F){
+        var  G = this;
+        return  function() {
+            var  H = E || arguments;
+            if(F === true){
+                H = Array.prototype.slice.call(arguments, 0);
+                H = H.concat(E);
+            }else  if(typeof  F == "number"){
+                H = Array.prototype.slice.call(arguments, 0); 
+                var  applyArgs = [F, 0].concat(E); 
+                Array.prototype.splice.apply(H, applyArgs); 
+            }
+            return  G.apply(D || window, H);
+        };
+    },
+
+    
+
+    defer : function(H, I, J, K){
+        var  fn = this.createDelegate(I, J, K);
+        if(H){
+            return  setTimeout(fn, H);
+        }
+
+        fn();
+        return  0;
+    },
+    
+
+    createSequence : function(L, M){
+        if(typeof  L != "function"){
+            return  this;
+        }
+        var  N = this;
+        return  function() {
+            var  O = N.apply(this || window, arguments);
+            L.apply(M || this || window, arguments);
+            return  O;
+        };
+    },
+
+    
+
+    createInterceptor : function(O, P){
+        if(typeof  O != "function"){
+            return  this;
+        }
+        var  Q = this;
+        return  function() {
+            O.target = this;
+            O.method = Q;
+            if(O.apply(P || this || window, arguments) === false){
+                return;
+            }
+            return  Q.apply(this || window, arguments);
+        };
+    }
+});
+
+
+
+
+Roo.applyIf(String, {
+    
+    
+
+    
+    
+
+    escape : function(A) {
+        return  A.replace(/('|\\)/g, "\\$1");
+    },
+
+    
+
+    leftPad : function (B, C, ch) {
+        var  D = new  String(B);
+        if(ch === null || ch === undefined || ch === '') {
+            ch = " ";
+        }
+        while (D.length < C) {
+            D = ch + D;
+        }
+        return  D;
+    },
+
+    
+
+    format : function(E){
+        var  F = Array.prototype.slice.call(arguments, 1);
+        return  E.replace(/\{(\d+)\}/g, function(m, i){
+            return  Roo.util.Format.htmlEncode(F[i]);
+        });
+    }
+});
+
+
+
+String.prototype.toggle = function(G, H){
+    return  this == G ? H : G;
+};
+
+
+
+
+Roo.applyIf(Number.prototype, {
+    
+
+    constrain : function(A, B){
+        return  Math.min(Math.max(this, A), B);
+    }
+});
+
+
+
+Roo.applyIf(Array.prototype, {
+    
+
+    indexOf : function(o){
+       for (var  i = 0, len = this.length; i < len; i++){
+             if(this[i] == o) return  i;
+       }
+          return  -1;
+    },
+
+    
+
+    remove : function(o){
+       var  A = this.indexOf(o);
+       if(A != -1){
+           this.splice(A, 1);
+       }
+    },
+    
+
+    map : function(B )
+    {
+        var  C = this.length >>> 0;
+        if (typeof  B != "function")
+            throw  new  TypeError();
+
+        var  D = new  Array(C);
+        var  E = arguments[1];
+        for (var  i = 0; i < C; i++)
+        {
+            if (i  in  this)
+                D[i] = B.call(E, this[i], i, this);
+        }
+
+        return  D;
+    }
+    
+});
+
+
+
+
+
+
+
+
+
+
+
+
+Date.prototype.getElapsed = function(A) {
+       return  Math.abs((A || new  Date()).getTime()-this.getTime());
+};
+
+
+
+
+Date.parseFunctions = {count:0};
+
+Date.parseRegexes = [];
+
+Date.formatFunctions = {count:0};
+
+
+Date.prototype.dateFormat = function(B) {
+    if (Date.formatFunctions[B] == null) {
+        Date.createNewFormat(B);
+    }
+    var  C = Date.formatFunctions[B];
+    return  this[C]();
+};
+
+
+
+
+Date.prototype.format = Date.prototype.dateFormat;
+
+
+Date.createNewFormat = function(D) {
+    var  E = "format" + Date.formatFunctions.count++;
+    Date.formatFunctions[D] = E;
+    var  F = "Date.prototype." + E + " = function(){return ";
+    var  G = false;
+    var  ch = '';
+    for (var  i = 0; i < D.length; ++i) {
+        ch = D.charAt(i);
+        if (!G && ch == "\\") {
+            G = true;
+        }
+        else  if (G) {
+            G = false;
+            F += "'" + String.escape(ch) + "' + ";
+        }
+        else  {
+            F += Date.getFormatCode(ch);
+        }
+    }
+    
+
+    eval(F.substring(0, F.length - 3) + ";}");
+};
+
+
+Date.getFormatCode = function(H) {
+    switch (H) {
+    case  "d":
+        return  "String.leftPad(this.getDate(), 2, '0') + ";
+    case  "D":
+        return  "Date.dayNames[this.getDay()].substring(0, 3) + ";
+    case  "j":
+        return  "this.getDate() + ";
+    case  "l":
+        return  "Date.dayNames[this.getDay()] + ";
+    case  "S":
+        return  "this.getSuffix() + ";
+    case  "w":
+        return  "this.getDay() + ";
+    case  "z":
+        return  "this.getDayOfYear() + ";
+    case  "W":
+        return  "this.getWeekOfYear() + ";
+    case  "F":
+        return  "Date.monthNames[this.getMonth()] + ";
+    case  "m":
+        return  "String.leftPad(this.getMonth() + 1, 2, '0') + ";
+    case  "M":
+        return  "Date.monthNames[this.getMonth()].substring(0, 3) + ";
+    case  "n":
+        return  "(this.getMonth() + 1) + ";
+    case  "t":
+        return  "this.getDaysInMonth() + ";
+    case  "L":
+        return  "(this.isLeapYear() ? 1 : 0) + ";
+    case  "Y":
+        return  "this.getFullYear() + ";
+    case  "y":
+        return  "('' + this.getFullYear()).substring(2, 4) + ";
+    case  "a":
+        return  "(this.getHours() < 12 ? 'am' : 'pm') + ";
+    case  "A":
+        return  "(this.getHours() < 12 ? 'AM' : 'PM') + ";
+    case  "g":
+        return  "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";
+    case  "G":
+        return  "this.getHours() + ";
+    case  "h":
+        return  "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";
+    case  "H":
+        return  "String.leftPad(this.getHours(), 2, '0') + ";
+    case  "i":
+        return  "String.leftPad(this.getMinutes(), 2, '0') + ";
+    case  "s":
+        return  "String.leftPad(this.getSeconds(), 2, '0') + ";
+    case  "O":
+        return  "this.getGMTOffset() + ";
+    case  "T":
+        return  "this.getTimezone() + ";
+    case  "Z":
+        return  "(this.getTimezoneOffset() * -60) + ";
+    default:
+        return  "'" + String.escape(H) + "' + ";
+    }
+};
+
+
+
+Date.parseDate = function(I, J) {
+    if (Date.parseFunctions[J] == null) {
+        Date.createParser(J);
+    }
+    var  K = Date.parseFunctions[J];
+    return  Date[K](I);
+};
+
+
+Date.createParser = function(L) {
+    var  M = "parse" + Date.parseFunctions.count++;
+    var  N = Date.parseRegexes.length;
+    var  O = 1;
+    Date.parseFunctions[L] = M;
+
+    var  P = "Date." + M + " = function(input){\n"
+        + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"
+        + "var d = new Date();\n"
+        + "y = d.getFullYear();\n"
+        + "m = d.getMonth();\n"
+        + "d = d.getDate();\n"
+        + "var results = input.match(Date.parseRegexes[" + N + "]);\n"
+        + "if (results && results.length > 0) {";
+    var  Q = "";
+
+    var  R = false;
+    var  ch = '';
+    for (var  i = 0; i < L.length; ++i) {
+        ch = L.charAt(i);
+        if (!R && ch == "\\") {
+            R = true;
+        }
+        else  if (R) {
+            R = false;
+            Q += String.escape(ch);
+        }
+        else  {
+            var  obj = Date.formatCodeToRegex(ch, O);
+            O += obj.g;
+            Q += obj.s;
+            if (obj.g && obj.c) {
+                P += obj.c;
+            }
+        }
+    }
+
+
+    P += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
+        + "{v = new Date(y, m, d, h, i, s);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
+        + "{v = new Date(y, m, d, h, i);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
+        + "{v = new Date(y, m, d, h);}\n"
+        + "else if (y >= 0 && m >= 0 && d > 0)\n"
+        + "{v = new Date(y, m, d);}\n"
+        + "else if (y >= 0 && m >= 0)\n"
+        + "{v = new Date(y, m);}\n"
+        + "else if (y >= 0)\n"
+        + "{v = new Date(y);}\n"
+        + "}return (v && (z || o))?\n" 
+        + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" 
+        + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" 
+        + ";}";
+
+    Date.parseRegexes[N] = new  RegExp("^" + Q + "$");
+    
+
+    eval(P);
+};
+
+
+Date.formatCodeToRegex = function(S, T) {
+    switch (S) {
+    case  "D":
+        return  {g:0,
+        c:null,
+        s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
+    case  "j":
+        return  {g:1,
+            c:"d = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{1,2})"}; 
+    case  "d":
+        return  {g:1,
+            c:"d = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"}; 
+    case  "l":
+        return  {g:0,
+            c:null,
+            s:"(?:" + Date.dayNames.join("|") + ")"};
+    case  "S":
+        return  {g:0,
+            c:null,
+            s:"(?:st|nd|rd|th)"};
+    case  "w":
+        return  {g:0,
+            c:null,
+            s:"\\d"};
+    case  "z":
+        return  {g:0,
+            c:null,
+            s:"(?:\\d{1,3})"};
+    case  "W":
+        return  {g:0,
+            c:null,
+            s:"(?:\\d{2})"};
+    case  "F":
+        return  {g:1,
+            c:"m = parseInt(Date.monthNumbers[results[" + T + "].substring(0, 3)], 10);\n",
+            s:"(" + Date.monthNames.join("|") + ")"};
+    case  "M":
+        return  {g:1,
+            c:"m = parseInt(Date.monthNumbers[results[" + T + "]], 10);\n",
+            s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
+    case  "n":
+        return  {g:1,
+            c:"m = parseInt(results[" + T + "], 10) - 1;\n",
+            s:"(\\d{1,2})"}; 
+    case  "m":
+        return  {g:1,
+            c:"m = parseInt(results[" + T + "], 10) - 1;\n",
+            s:"(\\d{2})"}; 
+    case  "t":
+        return  {g:0,
+            c:null,
+            s:"\\d{1,2}"};
+    case  "L":
+        return  {g:0,
+            c:null,
+            s:"(?:1|0)"};
+    case  "Y":
+        return  {g:1,
+            c:"y = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{4})"};
+    case  "y":
+        return  {g:1,
+            c:"var ty = parseInt(results[" + T + "], 10);\n"
+                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
+            s:"(\\d{1,2})"};
+    case  "a":
+        return  {g:1,
+            c:"if (results[" + T + "] == 'am') {\n"
+                + "if (h == 12) { h = 0; }\n"
+                + "} else { if (h < 12) { h += 12; }}",
+            s:"(am|pm)"};
+    case  "A":
+        return  {g:1,
+            c:"if (results[" + T + "] == 'AM') {\n"
+                + "if (h == 12) { h = 0; }\n"
+                + "} else { if (h < 12) { h += 12; }}",
+            s:"(AM|PM)"};
+    case  "g":
+    case  "G":
+        return  {g:1,
+            c:"h = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{1,2})"}; 
+    case  "h":
+    case  "H":
+        return  {g:1,
+            c:"h = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"}; 
+    case  "i":
+        return  {g:1,
+            c:"i = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"};
+    case  "s":
+        return  {g:1,
+            c:"s = parseInt(results[" + T + "], 10);\n",
+            s:"(\\d{2})"};
+    case  "O":
+        return  {g:1,
+            c:[
+                "o = results[", T, "];\n",
+                "var sn = o.substring(0,1);\n", 
+                "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n", 
+                "var mn = o.substring(3,5) % 60;\n", 
+                "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", 
+                "    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"
+            ].join(""),
+            s:"([+\-]\\d{4})"};
+    case  "T":
+        return  {g:0,
+            c:null,
+            s:"[A-Z]{1,4}"}; 
+    case  "Z":
+        return  {g:1,
+            c:"z = results[" + T + "];\n" 
+                  + "z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",
+            s:"([+\-]?\\d{1,5})"}; 
+    default:
+        return  {g:0,
+            c:null,
+            s:String.escape(S)};
+    }
+};
+
+
+
+Date.prototype.getTimezone = function() {
+    return  this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/, "$1");
+};
+
+
+
+Date.prototype.getGMTOffset = function() {
+    return  (this.getTimezoneOffset() > 0 ? "-" : "+")
+        + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
+        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
+};
+
+
+
+Date.prototype.getDayOfYear = function() {
+    var  U = 0;
+    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+    for (var  i = 0; i < this.getMonth(); ++i) {
+        U += Date.daysInMonth[i];
+    }
+    return  U + this.getDate() - 1;
+};
+
+
+
+Date.prototype.getWeekOfYear = function() {
+    
+    var  V = this.getDayOfYear() + (4 - this.getDay());
+    
+    var  W = new  Date(this.getFullYear(), 0, 1);
+    var  X = (7 - W.getDay() + 4);
+    return  String.leftPad(((V - X) / 7) + 1, 2, "0");
+};
+
+
+
+Date.prototype.isLeapYear = function() {
+    var  Y = this.getFullYear();
+    return  ((Y & 3) == 0 && (Y % 100 || (Y % 400 == 0 && Y)));
+};
+
+
+
+Date.prototype.getFirstDayOfMonth = function() {
+    var  Z = (this.getDay() - (this.getDate() - 1)) % 7;
+    return  (Z < 0) ? (Z + 7) : Z;
+};
+
+
+
+Date.prototype.getLastDayOfMonth = function() {
+    var  a = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
+    return  (a < 0) ? (a + 7) : a;
+};
+
+
+
+
+Date.prototype.getFirstDateOfMonth = function() {
+    return  new  Date(this.getFullYear(), this.getMonth(), 1);
+};
+
+
+
+Date.prototype.getLastDateOfMonth = function() {
+    return  new  Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
+};
+
+
+Date.prototype.getDaysInMonth = function() {
+    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+    return  Date.daysInMonth[this.getMonth()];
+};
+
+
+
+Date.prototype.getSuffix = function() {
+    switch (this.getDate()) {
+        case  1:
+        case  21:
+        case  31:
+            return  "st";
+        case  2:
+        case  22:
+            return  "nd";
+        case  3:
+        case  23:
+            return  "rd";
+        default:
+            return  "th";
+    }
+};
+
+
+Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
+
+
+
+Date.monthNames =
+   ["January",
+    "February",
+    "March",
+    "April",
+    "May",
+    "June",
+    "July",
+    "August",
+    "September",
+    "October",
+    "November",
+    "December"];
+
+
+
+Date.dayNames =
+   ["Sunday",
+    "Monday",
+    "Tuesday",
+    "Wednesday",
+    "Thursday",
+    "Friday",
+    "Saturday"];
+
+
+Date.y2kYear = 50;
+
+Date.monthNumbers = {
+    Jan:0,
+    Feb:1,
+    Mar:2,
+    Apr:3,
+    May:4,
+    Jun:5,
+    Jul:6,
+    Aug:7,
+    Sep:8,
+    Oct:9,
+    Nov:10,
+    Dec:11};
+
+
+
+Date.prototype.clone = function() {
+       return  new  Date(this.getTime());
+};
+
+
+
+Date.prototype.clearTime = function(b){
+    if(b){
+        return  this.clone().clearTime();
+    }
+
+    this.setHours(0);
+    this.setMinutes(0);
+    this.setSeconds(0);
+    this.setMilliseconds(0);
+    return  this;
+};
+
+
+
+if(Roo.isSafari){
+    Date.brokenSetMonth = Date.prototype.setMonth;
+       Date.prototype.setMonth = function(c){
+               if(c <= -1){
+                       var  n = Math.ceil(-c);
+                       var  back_year = Math.ceil(n/12);
+                       var  month = (n % 12) ? 12 - n % 12 : 0 ;
+                       this.setFullYear(this.getFullYear() - back_year);
+                       return  Date.brokenSetMonth.call(this, month);
+               } else  {
+                       return  Date.brokenSetMonth.apply(this, arguments);
+               }
+       };
+}
+
+
+
+
+Date.MILLI = "ms";
+
+
+Date.SECOND = "s";
+
+
+Date.MINUTE = "mi";
+
+
+Date.HOUR = "h";
+
+
+Date.DAY = "d";
+
+
+Date.MONTH = "mo";
+
+
+Date.YEAR = "y";
+
+
+
+Date.prototype.add = function(e, f){
+  var  d = this.clone();
+  if (!e || f === 0) return  d;
+  switch(e.toLowerCase()){
+    case  Date.MILLI:
+      d.setMilliseconds(this.getMilliseconds() + f);
+      break;
+    case  Date.SECOND:
+      d.setSeconds(this.getSeconds() + f);
+      break;
+    case  Date.MINUTE:
+      d.setMinutes(this.getMinutes() + f);
+      break;
+    case  Date.HOUR:
+      d.setHours(this.getHours() + f);
+      break;
+    case  Date.DAY:
+      d.setDate(this.getDate() + f);
+      break;
+    case  Date.MONTH:
+      var  a = this.getDate();
+      if(a > 28){
+          a = Math.min(a, this.getFirstDateOfMonth().add('mo', f).getLastDateOfMonth().getDate());
+      }
+
+      d.setDate(a);
+      d.setMonth(this.getMonth() + f);
+      break;
+    case  Date.YEAR:
+      d.setFullYear(this.getFullYear() + f);
+      break;
+  }
+  return  d;
+};
+
+
+
+Roo.lib.Dom = {
+    getViewWidth : function(A) {
+        return  A ? this.getDocumentWidth() : this.getViewportWidth();
+    },
+
+    getViewHeight : function(B) {
+        return  B ? this.getDocumentHeight() : this.getViewportHeight();
+    },
+
+    getDocumentHeight: function() {
+        var  C = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
+        return  Math.max(C, this.getViewportHeight());
+    },
+
+    getDocumentWidth: function() {
+        var  D = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
+        return  Math.max(D, this.getViewportWidth());
+    },
+
+    getViewportHeight: function() {
+        var  E = self.innerHeight;
+        var  F = document.compatMode;
+
+        if ((F || Roo.isIE) && !Roo.isOpera) {
+            E = (F == "CSS1Compat") ?
+                     document.documentElement.clientHeight :
+                     document.body.clientHeight;
+        }
+
+        return  E;
+    },
+
+    getViewportWidth: function() {
+        var  G = self.innerWidth;
+        var  H = document.compatMode;
+
+        if (H || Roo.isIE) {
+            G = (H == "CSS1Compat") ?
+                    document.documentElement.clientWidth :
+                    document.body.clientWidth;
+        }
+        return  G;
+    },
+
+    isAncestor : function(p, c) {
+        p = Roo.getDom(p);
+        c = Roo.getDom(c);
+        if (!p || !c) {
+            return  false;
+        }
+
+        if (p.contains && !Roo.isSafari) {
+            return  p.contains(c);
+        } else  if (p.compareDocumentPosition) {
+            return  !!(p.compareDocumentPosition(c) & 16);
+        } else  {
+            var  parent = c.parentNode;
+            while (parent) {
+                if (parent == p) {
+                    return  true;
+                }
+                else  if (!parent.tagName || parent.tagName.toUpperCase() == "HTML") {
+                    return  false;
+                }
+
+                parent = parent.parentNode;
+            }
+            return  false;
+        }
+    },
+
+    getRegion : function(el) {
+        return  Roo.lib.Region.getRegion(el);
+    },
+
+    getY : function(el) {
+        return  this.getXY(el)[1];
+    },
+
+    getX : function(el) {
+        return  this.getXY(el)[0];
+    },
+
+    getXY : function(el) {
+        var  p, pe, b, I, bd = document.body;
+        el = Roo.getDom(el);
+        var  J = Roo.lib.AnimBase.fly;
+        if (el.getBoundingClientRect) {
+            b = el.getBoundingClientRect();
+            I = J(document).getScroll();
+            return  [b.left + I.left, b.top + I.top];
+        }
+        var  x = 0, y = 0;
+
+        p = el;
+
+        var  K = J(el).getStyle("position") == "absolute";
+
+        while (p) {
+
+            x += p.offsetLeft;
+            y += p.offsetTop;
+
+            if (!K && J(p).getStyle("position") == "absolute") {
+                K = true;
+            }
+
+            if (Roo.isGecko) {
+                pe = J(p);
+
+                var  bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
+                var  bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
+
+
+                x += bl;
+                y += bt;
+
+
+                if (p != el && pe.getStyle('overflow') != 'visible') {
+                    x += bl;
+                    y += bt;
+                }
+            }
+
+            p = p.offsetParent;
+        }
+
+        if (Roo.isSafari && K) {
+            x -= bd.offsetLeft;
+            y -= bd.offsetTop;
+        }
+
+        if (Roo.isGecko && !K) {
+            var  dbd = J(bd);
+            x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
+            y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
+        }
+
+
+        p = el.parentNode;
+        while (p && p != bd) {
+            if (!Roo.isOpera || (p.tagName != 'TR' && J(p).getStyle("display") != "inline")) {
+                x -= p.scrollLeft;
+                y -= p.scrollTop;
+            }
+
+            p = p.parentNode;
+        }
+        return  [x, y];
+    },
+  
+
+
+    setXY : function(el, xy) {
+        el = Roo.fly(el, '_setXY');
+        el.position();
+        var  L = el.translatePoints(xy);
+        if (xy[0] !== false) {
+            el.dom.style.left = L.left + "px";
+        }
+        if (xy[1] !== false) {
+            el.dom.style.top = L.top + "px";
+        }
+    },
+
+    setX : function(el, x) {
+        this.setXY(el, [x, false]);
+    },
+
+    setY : function(el, y) {
+        this.setXY(el, [false, y]);
+    }
+};
+
+
+
+
+Roo.lib.Event = function() {
+    var  A = false;
+    var  B = [];
+    var  C = [];
+    var  D = 0;
+    var  E = [];
+    var  F = 0;
+    var  G = null;
+
+    return  {
+        POLL_RETRYS: 200,
+        POLL_INTERVAL: 20,
+        EL: 0,
+        TYPE: 1,
+        FN: 2,
+        WFN: 3,
+        OBJ: 3,
+        ADJ_SCOPE: 4,
+        _interval: null,
+
+        startInterval: function() {
+            if (!this._interval) {
+                var  self = this;
+                var  callback = function() {
+                    self._tryPreloadAttach();
+                };
+                this._interval = setInterval(callback, this.POLL_INTERVAL);
+
+            }
+        },
+
+        onAvailable: function(h, k, m, n) {
+            E.push({ id:         h,
+                fn:         k,
+                obj:        m,
+                override:   n,
+                checkReady: false    });
+
+            D = this.POLL_RETRYS;
+            this.startInterval();
+        },
+
+
+        addListener: function(el, o, fn) {
+            el = Roo.getDom(el);
+            if (!el || !fn) {
+                return  false;
+            }
+
+            if ("unload" == o) {
+                C[C.length] =
+                [el, o, fn];
+                return  true;
+            }
+
+            var  p = function(e) {
+                return  fn(Roo.lib.Event.getEvent(e));
+            };
+
+            var  li = [el, o, fn, p];
+
+            var  q = B.length;
+            B[q] = li;
+
+            this.doAdd(el, o, p, false);
+            return  true;
+
+        },
+
+
+        removeListener: function(el, r, fn) {
+            var  i, s;
+
+            el = Roo.getDom(el);
+
+            if(!fn) {
+                return  this.purgeElement(el, false, r);
+            }
+
+
+            if ("unload" == r) {
+
+                for (i = 0,s = C.length; i < s; i++) {
+                    var  li = C[i];
+                    if (li &&
+                        li[0] == el &&
+                        li[1] == r &&
+                        li[2] == fn) {
+                        C.splice(i, 1);
+                        return  true;
+                    }
+                }
+
+                return  false;
+            }
+
+            var  u = null;
+
+
+            var  v = arguments[3];
+
+            if ("undefined" == typeof  v) {
+                v = this._getCacheIndex(el, r, fn);
+            }
+
+            if (v >= 0) {
+                u = B[v];
+            }
+
+            if (!el || !u) {
+                return  false;
+            }
+
+
+            this.doRemove(el, r, u[this.WFN], false);
+
+            delete  B[v][this.WFN];
+            delete  B[v][this.FN];
+            B.splice(v, 1);
+
+            return  true;
+
+        },
+
+
+        getTarget: function(ev, w) {
+            ev = ev.browserEvent || ev;
+            var  t = ev.target || ev.srcElement;
+            return  this.resolveTextNode(t);
+        },
+
+
+        resolveTextNode: function(z) {
+            if (Roo.isSafari && z && 3 == z.nodeType) {
+                return  z.parentNode;
+            } else  {
+                return  z;
+            }
+        },
+
+
+        getPageX: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  x = ev.pageX;
+            if (!x && 0 !== x) {
+                x = ev.clientX || 0;
+
+                if (Roo.isIE) {
+                    x += this.getScroll()[1];
+                }
+            }
+
+            return  x;
+        },
+
+
+        getPageY: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  y = ev.pageY;
+            if (!y && 0 !== y) {
+                y = ev.clientY || 0;
+
+                if (Roo.isIE) {
+                    y += this.getScroll()[0];
+                }
+            }
+
+
+            return  y;
+        },
+
+
+        getXY: function(ev) {
+            ev = ev.browserEvent || ev;
+            return  [this.getPageX(ev), this.getPageY(ev)];
+        },
+
+
+        getRelatedTarget: function(ev) {
+            ev = ev.browserEvent || ev;
+            var  t = ev.relatedTarget;
+            if (!t) {
+                if (ev.type == "mouseout") {
+                    t = ev.toElement;
+                } else  if (ev.type == "mouseover") {
+                    t = ev.fromElement;
+                }
+            }
+
+            return  this.resolveTextNode(t);
+        },
+
+
+        getTime: function(ev) {
+            ev = ev.browserEvent || ev;
+            if (!ev.time) {
+                var  t = new  Date().getTime();
+                try {
+                    ev.time = t;
+                } catch(ex) {
+                    this.lastError = ex;
+                    return  t;
+                }
+            }
+
+            return  ev.time;
+        },
+
+
+        stopEvent: function(ev) {
+            this.stopPropagation(ev);
+            this.preventDefault(ev);
+        },
+
+
+        stopPropagation: function(ev) {
+            ev = ev.browserEvent || ev;
+            if (ev.stopPropagation) {
+                ev.stopPropagation();
+            } else  {
+                ev.cancelBubble = true;
+            }
+        },
+
+
+        preventDefault: function(ev) {
+            ev = ev.browserEvent || ev;
+            if(ev.preventDefault) {
+                ev.preventDefault();
+            } else  {
+                ev.returnValue = false;
+            }
+        },
+
+
+        getEvent: function(e) {
+            var  ev = e || window.event;
+            if (!ev) {
+                var  c = this.getEvent.caller;
+                while (c) {
+                    ev = c.arguments[0];
+                    if (ev && Event == ev.constructor) {
+                        break;
+                    }
+
+                    c = c.caller;
+                }
+            }
+            return  ev;
+        },
+
+
+        getCharCode: function(ev) {
+            ev = ev.browserEvent || ev;
+            return  ev.charCode || ev.keyCode || 0;
+        },
+
+
+        _getCacheIndex: function(el, AA, fn) {
+            for (var  i = 0,s = B.length; i < s; ++i) {
+                var  li = B[i];
+                if (li &&
+                    li[this.FN] == fn &&
+                    li[this.EL] == el &&
+                    li[this.TYPE] == AA) {
+                    return  i;
+                }
+            }
+
+            return  -1;
+        },
+
+
+        elCache: {},
+
+
+        getEl: function(id) {
+            return  document.getElementById(id);
+        },
+
+
+        clearCache: function() {
+        },
+
+
+        _load: function(e) {
+            A = true;
+            var  EU = Roo.lib.Event;
+
+
+            if (Roo.isIE) {
+                EU.doRemove(window, "load", EU._load);
+            }
+        },
+
+
+        _tryPreloadAttach: function() {
+
+            if (this.locked) {
+                return  false;
+            }
+
+
+            this.locked = true;
+
+
+            var  AB = !A;
+            if (!AB) {
+                AB = (D > 0);
+            }
+
+
+            var  AC = [];
+            for (var  i = 0,s = E.length; i < s; ++i) {
+                var  item = E[i];
+                if (item) {
+                    var  el = this.getEl(item.id);
+
+                    if (el) {
+                        if (!item.checkReady ||
+                            A ||
+                            el.nextSibling ||
+                            (document && document.body)) {
+
+                            var  scope = el;
+                            if (item.override) {
+                                if (item.override === true) {
+                                    scope = item.obj;
+                                } else  {
+                                    scope = item.override;
+                                }
+                            }
+
+                            item.fn.call(scope, item.obj);
+                            E[i] = null;
+                        }
+                    } else  {
+                        AC.push(item);
+                    }
+                }
+            }
+
+
+            D = (AC.length === 0) ? 0 : D - 1;
+
+            if (AB) {
+
+                this.startInterval();
+            } else  {
+                clearInterval(this._interval);
+                this._interval = null;
+            }
+
+
+            this.locked = false;
+
+            return  true;
+
+        },
+
+
+        purgeElement: function(el, AD, AE) {
+            var  AF = this.getListeners(el, AE);
+            if (AF) {
+                for (var  i = 0,s = AF.length; i < s; ++i) {
+                    var  l = AF[i];
+                    this.removeListener(el, l.type, l.fn);
+                }
+            }
+
+            if (AD && el && el.childNodes) {
+                for (i = 0,s = el.childNodes.length; i < s; ++i) {
+                    this.purgeElement(el.childNodes[i], AD, AE);
+                }
+            }
+        },
+
+
+        getListeners: function(el, AG) {
+            var  AH = [], AI;
+            if (!AG) {
+                AI = [B, C];
+            } else  if (AG == "unload") {
+                AI = [C];
+            } else  {
+                AI = [B];
+            }
+
+            for (var  j = 0; j < AI.length; ++j) {
+                var  searchList = AI[j];
+                if (searchList && searchList.length > 0) {
+                    for (var  i = 0,s = searchList.length; i < s; ++i) {
+                        var  l = searchList[i];
+                        if (l && l[this.EL] === el &&
+                            (!AG || AG === l[this.TYPE])) {
+                            AH.push({
+                                type:   l[this.TYPE],
+                                fn:     l[this.FN],
+                                obj:    l[this.OBJ],
+                                adjust: l[this.ADJ_SCOPE],
+                                index:  i
+                            });
+                        }
+                    }
+                }
+            }
+
+            return  (AH.length) ? AH : null;
+        },
+
+
+        _unload: function(e) {
+
+            var  EU = Roo.lib.Event, i, j, l, AJ, AK;
+
+            for (i = 0,AJ = C.length; i < AJ; ++i) {
+                l = C[i];
+                if (l) {
+                    var  scope = window;
+                    if (l[EU.ADJ_SCOPE]) {
+                        if (l[EU.ADJ_SCOPE] === true) {
+                            scope = l[EU.OBJ];
+                        } else  {
+                            scope = l[EU.ADJ_SCOPE];
+                        }
+                    }
+
+                    l[EU.FN].call(scope, EU.getEvent(e), l[EU.OBJ]);
+                    C[i] = null;
+                    l = null;
+                    scope = null;
+                }
+            }
+
+
+            C = null;
+
+            if (B && B.length > 0) {
+                j = B.length;
+                while (j) {
+                    AK = j - 1;
+                    l = B[AK];
+                    if (l) {
+                        EU.removeListener(l[EU.EL], l[EU.TYPE],
+                                l[EU.FN], AK);
+                    }
+
+                    j = j - 1;
+                }
+
+                l = null;
+
+                EU.clearCache();
+            }
+
+
+            EU.doRemove(window, "unload", EU._unload);
+
+        },
+
+
+        getScroll: function() {
+            var  dd = document.documentElement, db = document.body;
+            if (dd && (dd.scrollTop || dd.scrollLeft)) {
+                return  [dd.scrollTop, dd.scrollLeft];
+            } else  if (db) {
+                return  [db.scrollTop, db.scrollLeft];
+            } else  {
+                return  [0, 0];
+            }
+        },
+
+
+        doAdd: function () {
+            if (window.addEventListener) {
+                return  function(el, AL, fn, AM) {
+                    el.addEventListener(AL, fn, (AM));
+                };
+            } else  if (window.attachEvent) {
+                return  function(el, AL, fn, AM) {
+                    el.attachEvent("on" + AL, fn);
+                };
+            } else  {
+                return  function() {
+                };
+            }
+        }(),
+
+
+        doRemove: function() {
+            if (window.removeEventListener) {
+                return  function (el, AL, fn, AM) {
+                    el.removeEventListener(AL, fn, (AM));
+                };
+            } else  if (window.detachEvent) {
+                return  function (el, AL, fn) {
+                    el.detachEvent("on" + AL, fn);
+                };
+            } else  {
+                return  function() {
+                };
+            }
+        }()
+    };
+    
+}();
+(function() {     
+   
+    var  E = Roo.lib.Event;
+    E.on = E.addListener;
+    E.un = E.removeListener;
+
+    if (document && document.body) {
+        E._load();
+    } else  {
+        E.doAdd(window, "load", E._load);
+    }
+
+    E.doAdd(window, "unload", E._unload);
+    E._tryPreloadAttach();
+})();
+
+
+
+
+
+(function() {
+    
+    Roo.lib.Ajax = {
+        request : function(A, B, cb, C, D) {
+            if(D){
+                var  hs = D.headers;
+                if(hs){
+                    for(var  h  in  hs){
+                        if(hs.hasOwnProperty(h)){
+                            this.initHeader(h, hs[h], false);
+                        }
+                    }
+                }
+                if(D.xmlData){
+                    this.initHeader('Content-Type', 'text/xml', false);
+                    A = 'POST';
+                    C = D.xmlData;
+                }
+            }
+
+            return  this.asyncRequest(A, B, cb, C);
+        },
+
+        serializeForm : function(E) {
+            if(typeof  E == 'string') {
+                E = (document.getElementById(E) || document.forms[E]);
+            }
+
+            var  el, F, G, H, I = '', J = false;
+            for (var  i = 0; i < E.elements.length; i++) {
+                el = E.elements[i];
+                H = E.elements[i].disabled;
+                F = E.elements[i].name;
+                G = E.elements[i].value;
+
+                if (!H && F){
+                    switch (el.type)
+                            {
+                        case  'select-one':
+                        case  'select-multiple':
+                            for (var  j = 0; j < el.options.length; j++) {
+                                if (el.options[j].selected) {
+                                    if (Roo.isIE) {
+                                        I += encodeURIComponent(F) + '=' + encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text) + '&';
+                                    }
+                                    else  {
+                                        I += encodeURIComponent(F) + '=' + encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text) + '&';
+                                    }
+                                }
+                            }
+                            break;
+                        case  'radio':
+                        case  'checkbox':
+                            if (el.checked) {
+                                I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                            }
+                            break;
+                        case  'file':
+
+                        case  undefined:
+
+                        case  'reset':
+
+                        case  'button':
+
+                            break;
+                        case  'submit':
+                            if(J == false) {
+                                I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                                J = true;
+                            }
+                            break;
+                        default:
+                            I += encodeURIComponent(F) + '=' + encodeURIComponent(G) + '&';
+                            break;
+                    }
+                }
+            }
+
+            I = I.substr(0, I.length - 1);
+            return  I;
+        },
+
+        headers:{},
+
+        hasHeaders:false,
+
+        useDefaultHeader:true,
+
+        defaultPostHeader:'application/x-www-form-urlencoded',
+
+        useDefaultXhrHeader:true,
+
+        defaultXhrHeader:'XMLHttpRequest',
+
+        hasDefaultHeaders:true,
+
+        defaultHeaders:{},
+
+        poll:{},
+
+        timeout:{},
+
+        pollInterval:50,
+
+        transactionId:0,
+
+        setProgId:function(id)
+        {
+            this.activeX.unshift(id);
+        },
+
+        setDefaultPostHeader:function(b)
+        {
+            this.useDefaultHeader = b;
+        },
+
+        setDefaultXhrHeader:function(b)
+        {
+            this.useDefaultXhrHeader = b;
+        },
+
+        setPollingInterval:function(i)
+        {
+            if (typeof  i == 'number' && isFinite(i)) {
+                this.pollInterval = i;
+            }
+        },
+
+        createXhrObject:function(K)
+        {
+            var  L,M;
+            try
+            {
+
+                M = new  XMLHttpRequest();
+
+                L = { conn:M, tId:K };
+            }
+            catch(e)
+            {
+                for (var  i = 0; i < this.activeX.length; ++i) {
+                    try
+                    {
+
+                        http = new  ActiveXObject(this.activeX[i]);
+
+                        obj = { conn:http, tId:transactionId };
+                        break;
+                    }
+                    catch(e) {
+                    }
+                }
+            }
+            finally
+            {
+                return  L;
+            }
+        },
+
+        getConnectionObject:function()
+        {
+            var  o;
+            var  N = this.transactionId;
+
+            try
+            {
+                o = this.createXhrObject(N);
+                if (o) {
+                    this.transactionId++;
+                }
+            }
+            catch(e) {
+            }
+            finally
+            {
+                return  o;
+            }
+        },
+
+        asyncRequest:function(O, P, Q, R)
+        {
+            var  o = this.getConnectionObject();
+
+            if (!o) {
+                return  null;
+            }
+            else  {
+                o.conn.open(O, P, true);
+
+                if (this.useDefaultXhrHeader) {
+                    if (!this.defaultHeaders['X-Requested-With']) {
+                        this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
+                    }
+                }
+
+                if(R && this.useDefaultHeader){
+                    this.initHeader('Content-Type', this.defaultPostHeader);
+                }
+
+                 if (this.hasDefaultHeaders || this.hasHeaders) {
+                    this.setHeader(o);
+                }
+
+
+                this.handleReadyState(o, Q);
+                o.conn.send(R || null);
+
+                return  o;
+            }
+        },
+
+        handleReadyState:function(o, S)
+        {
+            var  T = this;
+
+            if (S && S.timeout) {
+                this.timeout[o.tId] = window.setTimeout(function() {
+                    T.abort(o, S, true);
+                }, S.timeout);
+            }
+
+
+            this.poll[o.tId] = window.setInterval(
+                    function() {
+                        if (o.conn && o.conn.readyState == 4) {
+                            window.clearInterval(T.poll[o.tId]);
+                            delete  T.poll[o.tId];
+
+                            if(S && S.timeout) {
+                                window.clearTimeout(T.timeout[o.tId]);
+                                delete  T.timeout[o.tId];
+                            }
+
+
+                            T.handleTransactionResponse(o, S);
+                        }
+                    }
+                    , this.pollInterval);
+        },
+
+        handleTransactionResponse:function(o, U, V)
+        {
+
+            if (!U) {
+                this.releaseObject(o);
+                return;
+            }
+
+            var  W, X;
+
+            try
+            {
+                if (o.conn.status !== undefined && o.conn.status != 0) {
+                    W = o.conn.status;
+                }
+                else  {
+                    W = 13030;
+                }
+            }
+            catch(e) {
+
+
+                httpStatus = 13030;
+            }
+
+            if (W >= 200 && W < 300) {
+                X = this.createResponseObject(o, U.argument);
+                if (U.success) {
+                    if (!U.scope) {
+                        U.success(X);
+                    }
+                    else  {
+
+
+                        U.success.apply(U.scope, [X]);
+                    }
+                }
+            }
+            else  {
+                switch (W) {
+
+                    case  12002:
+                    case  12029:
+                    case  12030:
+                    case  12031:
+                    case  12152:
+                    case  13030:
+                        X = this.createExceptionObject(o.tId, U.argument, (V ? V : false));
+                        if (U.failure) {
+                            if (!U.scope) {
+                                U.failure(X);
+                            }
+                            else  {
+                                U.failure.apply(U.scope, [X]);
+                            }
+                        }
+                        break;
+                    default:
+                        X = this.createResponseObject(o, U.argument);
+                        if (U.failure) {
+                            if (!U.scope) {
+                                U.failure(X);
+                            }
+                            else  {
+                                U.failure.apply(U.scope, [X]);
+                            }
+                        }
+                }
+            }
+
+
+            this.releaseObject(o);
+            X = null;
+        },
+
+        createResponseObject:function(o, Y)
+        {
+            var  Z = {};
+            var  a = {};
+
+            try
+            {
+                var  headerStr = o.conn.getAllResponseHeaders();
+                var  header = headerStr.split('\n');
+                for (var  i = 0; i < header.length; i++) {
+                    var  delimitPos = header[i].indexOf(':');
+                    if (delimitPos != -1) {
+                        a[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
+                    }
+                }
+            }
+            catch(e) {
+            }
+
+
+            Z.tId = o.tId;
+            Z.status = o.conn.status;
+            Z.statusText = o.conn.statusText;
+            Z.getResponseHeader = a;
+            Z.getAllResponseHeaders = headerStr;
+            Z.responseText = o.conn.responseText;
+            Z.responseXML = o.conn.responseXML;
+
+            if (typeof  Y !== undefined) {
+                Z.argument = Y;
+            }
+
+            return  Z;
+        },
+
+        createExceptionObject:function(c, d, f)
+        {
+            var  g = 0;
+            var  k = 'communication failure';
+            var  l = -1;
+            var  m = 'transaction aborted';
+
+            var  n = {};
+
+            n.tId = c;
+            if (f) {
+                n.status = l;
+                n.statusText = m;
+            }
+            else  {
+                n.status = g;
+                n.statusText = k;
+            }
+
+            if (d) {
+                n.argument = d;
+            }
+
+            return  n;
+        },
+
+        initHeader:function(p, q, r)
+        {
+            var  s = (r) ? this.defaultHeaders : this.headers;
+
+            if (s[p] === undefined) {
+                s[p] = q;
+            }
+            else  {
+
+
+                s[p] = q + "," + s[p];
+            }
+
+            if (r) {
+                this.hasDefaultHeaders = true;
+            }
+            else  {
+                this.hasHeaders = true;
+            }
+        },
+
+
+        setHeader:function(o)
+        {
+            if (this.hasDefaultHeaders) {
+                for (var  prop  in  this.defaultHeaders) {
+                    if (this.defaultHeaders.hasOwnProperty(prop)) {
+                        o.conn.setRequestHeader(prop, this.defaultHeaders[prop]);
+                    }
+                }
+            }
+
+            if (this.hasHeaders) {
+                for (var  prop  in  this.headers) {
+                    if (this.headers.hasOwnProperty(prop)) {
+                        o.conn.setRequestHeader(prop, this.headers[prop]);
+                    }
+                }
+
+                this.headers = {};
+                this.hasHeaders = false;
+            }
+        },
+
+        resetDefaultHeaders:function() {
+            delete  this.defaultHeaders;
+            this.defaultHeaders = {};
+            this.hasDefaultHeaders = false;
+        },
+
+        abort:function(o, t, u)
+        {
+            if(this.isCallInProgress(o)) {
+                o.conn.abort();
+                window.clearInterval(this.poll[o.tId]);
+                delete  this.poll[o.tId];
+                if (u) {
+                    delete  this.timeout[o.tId];
+                }
+
+
+                this.handleTransactionResponse(o, t, true);
+
+                return  true;
+            }
+            else  {
+                return  false;
+            }
+        },
+
+
+        isCallInProgress:function(o)
+        {
+            if (o && o.conn) {
+                return  o.conn.readyState != 4 && o.conn.readyState != 0;
+            }
+            else  {
+
+                return  false;
+            }
+        },
+
+
+        releaseObject:function(o)
+        {
+
+            o.conn = null;
+
+            o = null;
+        },
+
+        activeX:[
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP',
+        'Microsoft.XMLHTTP'
+        ]
+
+
+    };
+})();
+
+
+
+Roo.lib.Region = function(t, r, b, l) {
+    this.top = t;
+    this[1] = t;
+    this.right = r;
+    this.bottom = b;
+    this.left = l;
+    this[0] = l;
+};
+
+
+Roo.lib.Region.prototype = {
+    contains : function(A) {
+        return  ( A.left >= this.left &&
+                 A.right <= this.right &&
+                 A.top >= this.top &&
+                 A.bottom <= this.bottom    );
+
+    },
+
+    getArea : function() {
+        return  ( (this.bottom - this.top) * (this.right - this.left) );
+    },
+
+    intersect : function(B) {
+        var  t = Math.max(this.top, B.top);
+        var  r = Math.min(this.right, B.right);
+        var  b = Math.min(this.bottom, B.bottom);
+        var  l = Math.max(this.left, B.left);
+
+        if (b >= t && r >= l) {
+            return  new  Roo.lib.Region(t, r, b, l);
+        } else  {
+            return  null;
+        }
+    },
+    union : function(C) {
+        var  t = Math.min(this.top, C.top);
+        var  r = Math.max(this.right, C.right);
+        var  b = Math.max(this.bottom, C.bottom);
+        var  l = Math.min(this.left, C.left);
+
+        return  new  Roo.lib.Region(t, r, b, l);
+    },
+
+    adjust : function(t, l, b, r) {
+        this.top += t;
+        this.left += l;
+        this.right += r;
+        this.bottom += b;
+        return  this;
+    }
+};
+
+Roo.lib.Region.getRegion = function(el) {
+    var  p = Roo.lib.Dom.getXY(el);
+
+    var  t = p[1];
+    var  r = p[0] + el.offsetWidth;
+    var  b = p[1] + el.offsetHeight;
+    var  l = p[0];
+
+    return  new  Roo.lib.Region(t, r, b, l);
+};
+
+
+
+
+
+
+Roo.lib.Point = function(x, y) {
+    if (x  instanceof  Array) {
+        y = x[1];
+        x = x[0];
+    }
+
+    this.x = this.right = this.left = this[0] = x;
+    this.y = this.top = this.bottom = this[1] = y;
+};
+
+Roo.lib.Point.prototype = new  Roo.lib.Region();
+
+
+
+(function() {   
+
+    Roo.lib.Anim = {
+        scroll : function(el, A, B, C, cb, D) {
+            this.run(el, A, B, C, cb, D, Roo.lib.Scroll);
+        },
+
+        motion : function(el, E, F, G, cb, H) {
+            this.run(el, E, F, G, cb, H, Roo.lib.Motion);
+        },
+
+        color : function(el, I, J, K, cb, L) {
+            this.run(el, I, J, K, cb, L, Roo.lib.ColorAnim);
+        },
+
+        run : function(el, M, N, O, cb, P, Q) {
+            Q = Q || Roo.lib.AnimBase;
+            if (typeof  O == "string") {
+                O = Roo.lib.Easing[O];
+            }
+            var  R = new  Q(el, M, N, O);
+            R.animateX(function() {
+                Roo.callback(cb, P);
+            });
+            return  R;
+        }
+    };
+})();
+
+
+
+(function() {    
+    var  A;
+    
+    function  B(el) {
+        if (!A) {
+            A = new  Roo.Element.Flyweight();
+        }
+
+        A.dom = el;
+        return  A;
+    }
+
+
+    
+    
+   
+    
+    Roo.lib.AnimBase = function(el, C, D, E) {
+        if (el) {
+            this.init(el, C, D, E);
+        }
+    };
+
+    Roo.lib.AnimBase.fly = B;
+    
+    
+    
+    Roo.lib.AnimBase.prototype = {
+
+        toString: function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Anim " + id);
+        },
+
+        patterns: {
+            noNegatives:        /width|height|opacity|padding/i,
+            offsetAttribute:  /^((width|height)|(top|left))$/,
+            defaultUnit:        /width|height|top$|bottom$|left$|right$/i,
+            offsetUnit:         /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i
+        },
+
+
+        doMethod: function(C, D, E) {
+            return  this.method(this.currentFrame, D, E - D, this.totalFrames);
+        },
+
+
+        setAttribute: function(F, G, H) {
+            if (this.patterns.noNegatives.test(F)) {
+                G = (G > 0) ? G : 0;
+            }
+
+
+            Roo.fly(this.getEl(), '_anim').setStyle(F, G + H);
+        },
+
+
+        getAttribute: function(I) {
+            var  el = this.getEl();
+            var  J = B(el).getStyle(I);
+
+            if (J !== 'auto' && !this.patterns.offsetUnit.test(J)) {
+                return  parseFloat(J);
+            }
+
+            var  a = this.patterns.offsetAttribute.exec(I) || [];
+            var  K = !!( a[3] );
+            var  L = !!( a[2] );
+
+
+            if (L || (B(el).getStyle('position') == 'absolute' && K)) {
+                J = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
+            } else  {
+                J = 0;
+            }
+
+            return  J;
+        },
+
+
+        getDefaultUnit: function(M) {
+            if (this.patterns.defaultUnit.test(M)) {
+                return  'px';
+            }
+
+            return  '';
+        },
+
+        animateX : function(N, O) {
+            var  f = function() {
+                this.onComplete.removeListener(f);
+                if (typeof  N == "function") {
+                    N.call(O || this, this);
+                }
+            };
+            this.onComplete.addListener(f, this);
+            this.animate();
+        },
+
+
+        setRuntimeAttribute: function(P) {
+            var  Q;
+            var  R;
+            var  S = this.attributes;
+
+            this.runtimeAttributes[P] = {};
+
+            var  T = function(U) {
+                return  (typeof  U !== 'undefined');
+            };
+
+            if (!T(S[P]['to']) && !T(S[P]['by'])) {
+                return  false;
+            }
+
+
+            Q = ( T(S[P]['from']) ) ? S[P]['from'] : this.getAttribute(P);
+
+
+            if (T(S[P]['to'])) {
+                R = S[P]['to'];
+            } else  if (T(S[P]['by'])) {
+                if (Q.constructor == Array) {
+                    R = [];
+                    for (var  i = 0, len = Q.length; i < len; ++i) {
+                        R[i] = Q[i] + S[P]['by'][i];
+                    }
+                } else  {
+                    R = Q + S[P]['by'];
+                }
+            }
+
+
+            this.runtimeAttributes[P].start = Q;
+            this.runtimeAttributes[P].end = R;
+
+
+            this.runtimeAttributes[P].unit = ( T(S[P].unit) ) ? S[P]['unit'] : this.getDefaultUnit(P);
+        },
+
+
+        init: function(el, U, V, W) {
+
+            var  X = false;
+
+
+            var  Y = null;
+
+
+            var  Z = 0;
+
+
+            el = Roo.getDom(el);
+
+
+            this.attributes = U || {};
+
+
+            this.duration = V || 1;
+
+
+            this.method = W || Roo.lib.Easing.easeNone;
+
+
+            this.useSeconds = true;
+
+
+            this.currentFrame = 0;
+
+
+            this.totalFrames = Roo.lib.AnimMgr.fps;
+
+
+            this.getEl = function() {
+                return  el;
+            };
+
+
+            this.isAnimated = function() {
+                return  X;
+            };
+
+
+            this.getStartTime = function() {
+                return  Y;
+            };
+
+            this.runtimeAttributes = {};
+
+
+            this.animate = function() {
+                if (this.isAnimated()) {
+                    return  false;
+                }
+
+
+                this.currentFrame = 0;
+
+                this.totalFrames = ( this.useSeconds ) ? Math.ceil(Roo.lib.AnimMgr.fps * this.duration) : this.duration;
+
+                Roo.lib.AnimMgr.registerElement(this);
+            };
+
+
+            this.stop = function(e) {
+                if (e) {
+                    this.currentFrame = this.totalFrames;
+                    this._onTween.fire();
+                }
+
+                Roo.lib.AnimMgr.stop(this);
+            };
+
+            var  b = function() {
+                this.onStart.fire();
+
+                this.runtimeAttributes = {};
+                for (var  P  in  this.attributes) {
+                    this.setRuntimeAttribute(P);
+                }
+
+
+                X = true;
+                Z = 0;
+                Y = new  Date();
+            };
+
+
+            var  c = function() {
+                var  e = {
+                    duration: new  Date() - this.getStartTime(),
+                    currentFrame: this.currentFrame
+                };
+
+                e.toString = function() {
+                    return  (
+                            'duration: ' + e.duration +
+                            ', currentFrame: ' + e.currentFrame
+                            );
+                };
+
+                this.onTween.fire(e);
+
+                var  g = this.runtimeAttributes;
+
+                for (var  P  in  g) {
+                    this.setAttribute(P, this.doMethod(P, g[P].start, g[P].end), g[P].unit);
+                }
+
+
+                Z += 1;
+            };
+
+            var  d = function() {
+                var  e = (new  Date() - Y) / 1000 ;
+
+                var  g = {
+                    duration: e,
+                    frames: Z,
+                    fps: Z / e
+                };
+
+                g.toString = function() {
+                    return  (
+                            'duration: ' + g.duration +
+                            ', frames: ' + g.frames +
+                            ', fps: ' + g.fps
+                            );
+                };
+
+                X = false;
+                Z = 0;
+                this.onComplete.fire(g);
+            };
+
+
+            this._onStart = new  Roo.util.Event(this);
+            this.onStart = new  Roo.util.Event(this);
+            this.onTween = new  Roo.util.Event(this);
+            this._onTween = new  Roo.util.Event(this);
+            this.onComplete = new  Roo.util.Event(this);
+            this._onComplete = new  Roo.util.Event(this);
+            this._onStart.addListener(b);
+            this._onTween.addListener(c);
+            this._onComplete.addListener(d);
+        }
+    };
+})();
+
+
+
+
+Roo.lib.AnimMgr = new  function() {
+
+        var  A = null;
+
+
+        var  B = [];
+
+
+        var  C = 0;
+
+
+        this.fps = 1000;
+
+
+        this.delay = 1;
+
+
+        this.registerElement = function(F) {
+            B[B.length] = F;
+            C += 1;
+            F._onStart.fire();
+            this.start();
+        };
+
+
+        this.unRegister = function(F, G) {
+            F._onComplete.fire();
+            G = G || D(F);
+            if (G != -1) {
+                B.splice(G, 1);
+            }
+
+
+            C -= 1;
+            if (C <= 0) {
+                this.stop();
+            }
+        };
+
+
+        this.start = function() {
+            if (A === null) {
+                A = setInterval(this.run, this.delay);
+            }
+        };
+
+
+        this.stop = function(F) {
+            if (!F) {
+                clearInterval(A);
+
+                for (var  i = 0, len = B.length; i < len; ++i) {
+                    if (B[0].isAnimated()) {
+                        this.unRegister(B[0], 0);
+                    }
+                }
+
+
+                B = [];
+                A = null;
+                C = 0;
+            }
+            else  {
+                this.unRegister(F);
+            }
+        };
+
+
+        this.run = function() {
+            for (var  i = 0, len = B.length; i < len; ++i) {
+                var  tween = B[i];
+                if (!tween || !tween.isAnimated()) {
+                    continue;
+                }
+
+                if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null)
+                {
+                    tween.currentFrame += 1;
+
+                    if (tween.useSeconds) {
+                        E(tween);
+                    }
+
+                    tween._onTween.fire();
+                }
+                else  {
+                    Roo.lib.AnimMgr.stop(tween, i);
+                }
+            }
+        };
+
+        var  D = function(F) {
+            for (var  i = 0, len = B.length; i < len; ++i) {
+                if (B[i] == F) {
+                    return  i;
+                }
+            }
+            return  -1;
+        };
+
+
+        var  E = function(F) {
+            var  G = F.totalFrames;
+            var  H = F.currentFrame;
+            var  I = (F.currentFrame * F.duration * 1000 / F.totalFrames);
+            var  J = (new  Date() - F.getStartTime());
+            var  K = 0;
+
+            if (J < F.duration * 1000) {
+                K = Math.round((J / I - 1) * F.currentFrame);
+            } else  {
+                K = G - (H + 1);
+            }
+            if (K > 0 && isFinite(K)) {
+                if (F.currentFrame + K >= G) {
+                    K = G - (H + 1);
+                }
+
+
+                F.currentFrame += K;
+            }
+        };
+    };
+
+
+Roo.lib.Bezier = new  function() {
+
+        this.getPosition = function(A, t) {
+            var  n = A.length;
+            var  B = [];
+
+            for (var  i = 0; i < n; ++i) {
+                B[i] = [A[i][0], A[i][1]];
+            }
+
+            for (var  j = 1; j < n; ++j) {
+                for (i = 0; i < n - j; ++i) {
+                    B[i][0] = (1 - t) * B[i][0] + t * B[parseInt(i + 1, 10)][0];
+                    B[i][1] = (1 - t) * B[i][1] + t * B[parseInt(i + 1, 10)][1];
+                }
+            }
+
+            return  [ B[0][0], B[0][1] ];
+
+        };
+    };
+
+
+(function() {
+
+    Roo.lib.ColorAnim = function(el, D, E, F) {
+        Roo.lib.ColorAnim.superclass.constructor.call(this, el, D, E, F);
+    };
+
+    Roo.extend(Roo.lib.ColorAnim, Roo.lib.AnimBase);
+
+    var  A = Roo.lib.AnimBase.fly;
+    var  Y = Roo.lib;
+    var  B = Y.ColorAnim.superclass;
+    var  C = Y.ColorAnim.prototype;
+
+    C.toString = function() {
+        var  el = this.getEl();
+        var  id = el.id || el.tagName;
+        return  ("ColorAnim " + id);
+    };
+
+    C.patterns.color = /color$/i;
+    C.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
+    C.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
+    C.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
+    C.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
+
+
+    C.parseColor = function(s) {
+        if (s.length == 3) {
+            return  s;
+        }
+
+        var  c = this.patterns.hex.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1], 16), parseInt(c[2], 16), parseInt(c[3], 16) ];
+        }
+
+
+        c = this.patterns.rgb.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1], 10), parseInt(c[2], 10), parseInt(c[3], 10) ];
+        }
+
+
+        c = this.patterns.hex3.exec(s);
+        if (c && c.length == 4) {
+            return  [ parseInt(c[1] + c[1], 16), parseInt(c[2] + c[2], 16), parseInt(c[3] + c[3], 16) ];
+        }
+
+        return  null;
+    };
+    
+    C.getAttribute = function(D) {
+        var  el = this.getEl();
+        if (this.patterns.color.test(D)) {
+            var  val = A(el).getStyle(D);
+
+            if (this.patterns.transparent.test(val)) {
+                var  parent = el.parentNode;
+                val = A(parent).getStyle(D);
+
+                while (parent && this.patterns.transparent.test(val)) {
+                    parent = parent.parentNode;
+                    val = A(parent).getStyle(D);
+                    if (parent.tagName.toUpperCase() == 'HTML') {
+                        val = '#fff';
+                    }
+                }
+            }
+        } else  {
+            val = B.getAttribute.call(this, D);
+        }
+
+        return  val;
+    };
+    C.getAttribute = function(D) {
+        var  el = this.getEl();
+        if (this.patterns.color.test(D)) {
+            var  val = A(el).getStyle(D);
+
+            if (this.patterns.transparent.test(val)) {
+                var  parent = el.parentNode;
+                val = A(parent).getStyle(D);
+
+                while (parent && this.patterns.transparent.test(val)) {
+                    parent = parent.parentNode;
+                    val = A(parent).getStyle(D);
+                    if (parent.tagName.toUpperCase() == 'HTML') {
+                        val = '#fff';
+                    }
+                }
+            }
+        } else  {
+            val = B.getAttribute.call(this, D);
+        }
+
+        return  val;
+    };
+
+    C.doMethod = function(D, E, F) {
+        var  G;
+
+        if (this.patterns.color.test(D)) {
+            G = [];
+            for (var  i = 0, len = E.length; i < len; ++i) {
+                G[i] = B.doMethod.call(this, D, E[i], F[i]);
+            }
+
+
+            G = 'rgb(' + Math.floor(G[0]) + ',' + Math.floor(G[1]) + ',' + Math.floor(G[2]) + ')';
+        }
+        else  {
+            G = B.doMethod.call(this, D, E, F);
+        }
+
+        return  G;
+    };
+
+    C.setRuntimeAttribute = function(D) {
+        B.setRuntimeAttribute.call(this, D);
+
+        if (this.patterns.color.test(D)) {
+            var  attributes = this.attributes;
+            var  start = this.parseColor(this.runtimeAttributes[D].start);
+            var  end = this.parseColor(this.runtimeAttributes[D].end);
+
+            if (typeof  attributes[D]['to'] === 'undefined' && typeof  attributes[D]['by'] !== 'undefined') {
+                end = this.parseColor(attributes[D].by);
+
+                for (var  i = 0, len = start.length; i < len; ++i) {
+                    end[i] = start[i] + end[i];
+                }
+            }
+
+
+            this.runtimeAttributes[D].start = start;
+            this.runtimeAttributes[D].end = end;
+        }
+    };
+})();
+
+
+
+
+Roo.lib.Easing = {
+
+
+    easeNone: function (t, b, c, d) {
+        return  c * t / d + b;
+    },
+
+
+    easeIn: function (t, b, c, d) {
+        return  c * (t /= d) * t + b;
+    },
+
+
+    easeOut: function (t, b, c, d) {
+        return  -c * (t /= d) * (t - 2) + b;
+    },
+
+
+    easeBoth: function (t, b, c, d) {
+        if ((t /= d / 2) < 1) {
+            return  c / 2 * t * t + b;
+        }
+
+        return  -c / 2 * ((--t) * (t - 2) - 1) + b;
+    },
+
+
+    easeInStrong: function (t, b, c, d) {
+        return  c * (t /= d) * t * t * t + b;
+    },
+
+
+    easeOutStrong: function (t, b, c, d) {
+        return  -c * ((t = t / d - 1) * t * t * t - 1) + b;
+    },
+
+
+    easeBothStrong: function (t, b, c, d) {
+        if ((t /= d / 2) < 1) {
+            return  c / 2 * t * t * t * t + b;
+        }
+
+        return  -c / 2 * ((t -= 2) * t * t * t - 2) + b;
+    },
+
+
+
+    elasticIn: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+        if ((t /= d) == 1) {
+            return  b + c;
+        }
+        if (!p) {
+            p = d * .3;
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        return  -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
+    },
+
+
+    elasticOut: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+        if ((t /= d) == 1) {
+            return  b + c;
+        }
+        if (!p) {
+            p = d * .3;
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        return  a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
+    },
+
+
+    elasticBoth: function (t, b, c, d, a, p) {
+        if (t == 0) {
+            return  b;
+        }
+
+        if ((t /= d / 2) == 2) {
+            return  b + c;
+        }
+
+        if (!p) {
+            p = d * (.3 * 1.5);
+        }
+
+        if (!a || a < Math.abs(c)) {
+            a = c;
+            var  s = p / 4;
+        }
+        else  {
+            var  s = p / (2 * Math.PI) * Math.asin(c / a);
+        }
+
+        if (t < 1) {
+            return  -.5 * (a * Math.pow(2, 10 * (t -= 1)) *
+                          Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
+        }
+        return  a * Math.pow(2, -10 * (t -= 1)) *
+               Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
+    },
+
+
+
+    backIn: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+        return  c * (t /= d) * t * ((s + 1) * t - s) + b;
+    },
+
+
+    backOut: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+        return  c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
+    },
+
+
+    backBoth: function (t, b, c, d, s) {
+        if (typeof  s == 'undefined') {
+            s = 1.70158;
+        }
+
+        if ((t /= d / 2 ) < 1) {
+            return  c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
+        }
+        return  c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
+    },
+
+
+    bounceIn: function (t, b, c, d) {
+        return  c - Roo.lib.Easing.bounceOut(d - t, 0, c, d) + b;
+    },
+
+
+    bounceOut: function (t, b, c, d) {
+        if ((t /= d) < (1 / 2.75)) {
+            return  c * (7.5625 * t * t) + b;
+        } else  if (t < (2 / 2.75)) {
+            return  c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
+        } else  if (t < (2.5 / 2.75)) {
+            return  c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
+        }
+        return  c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
+    },
+
+
+    bounceBoth: function (t, b, c, d) {
+        if (t < d / 2) {
+            return  Roo.lib.Easing.bounceIn(t * 2, 0, c, d) * .5 + b;
+        }
+        return  Roo.lib.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
+    }
+};
+
+
+    (function() {
+        Roo.lib.Motion = function(el, E, F, G) {
+            if (el) {
+                Roo.lib.Motion.superclass.constructor.call(this, el, E, F, G);
+            }
+        };
+
+        Roo.extend(Roo.lib.Motion, Roo.lib.ColorAnim);
+
+
+        var  Y = Roo.lib;
+        var  A = Y.Motion.superclass;
+        var  B = Y.Motion.prototype;
+
+        B.toString = function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Motion " + id);
+        };
+
+        B.patterns.points = /^points$/i;
+
+        B.setAttribute = function(E, F, G) {
+            if (this.patterns.points.test(E)) {
+                G = G || 'px';
+                A.setAttribute.call(this, 'left', F[0], G);
+                A.setAttribute.call(this, 'top', F[1], G);
+            } else  {
+                A.setAttribute.call(this, E, F, G);
+            }
+        };
+
+        B.getAttribute = function(E) {
+            if (this.patterns.points.test(E)) {
+                var  val = [
+                        A.getAttribute.call(this, 'left'),
+                        A.getAttribute.call(this, 'top')
+                        ];
+            } else  {
+                val = A.getAttribute.call(this, E);
+            }
+
+            return  val;
+        };
+
+        B.doMethod = function(E, F, G) {
+            var  H = null;
+
+            if (this.patterns.points.test(E)) {
+                var  t = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
+                H = Y.Bezier.getPosition(this.runtimeAttributes[E], t);
+            } else  {
+                H = A.doMethod.call(this, E, F, G);
+            }
+            return  H;
+        };
+
+        B.setRuntimeAttribute = function(E) {
+            if (this.patterns.points.test(E)) {
+                var  el = this.getEl();
+                var  attributes = this.attributes;
+                var  start;
+                var  control = attributes['points']['control'] || [];
+                var  end;
+                var  i, len;
+
+                if (control.length > 0 && !(control[0]  instanceof  Array)) {
+                    control = [control];
+                } else  {
+                    var  tmp = [];
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        tmp[i] = control[i];
+                    }
+
+                    control = tmp;
+                }
+
+
+                Roo.fly(el).position();
+
+                if (D(attributes['points']['from'])) {
+                    Roo.lib.Dom.setXY(el, attributes['points']['from']);
+                }
+                else  {
+                    Roo.lib.Dom.setXY(el, Roo.lib.Dom.getXY(el));
+                }
+
+
+                start = this.getAttribute('points');
+
+
+                if (D(attributes['points']['to'])) {
+                    end = C.call(this, attributes['points']['to'], start);
+
+                    var  pageXY = Roo.lib.Dom.getXY(this.getEl());
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        control[i] = C.call(this, control[i], start);
+                    }
+
+
+                } else  if (D(attributes['points']['by'])) {
+                    end = [ start[0] + attributes['points']['by'][0], start[1] + attributes['points']['by'][1] ];
+
+                    for (i = 0,len = control.length; i < len; ++i) {
+                        control[i] = [ start[0] + control[i][0], start[1] + control[i][1] ];
+                    }
+                }
+
+
+                this.runtimeAttributes[E] = [start];
+
+                if (control.length > 0) {
+                    this.runtimeAttributes[E] = this.runtimeAttributes[E].concat(control);
+                }
+
+
+                this.runtimeAttributes[E][this.runtimeAttributes[E].length] = end;
+            }
+            else  {
+                A.setRuntimeAttribute.call(this, E);
+            }
+        };
+
+        var  C = function(E, F) {
+            var  G = Roo.lib.Dom.getXY(this.getEl());
+            E = [ E[0] - G[0] + F[0], E[1] - G[1] + F[1] ];
+
+            return  E;
+        };
+
+        var  D = function(E) {
+            return  (typeof  E !== 'undefined');
+        };
+    })();
+
+
+
+    (function() {
+        Roo.lib.Scroll = function(el, C, D, E) {
+            if (el) {
+                Roo.lib.Scroll.superclass.constructor.call(this, el, C, D, E);
+            }
+        };
+
+        Roo.extend(Roo.lib.Scroll, Roo.lib.ColorAnim);
+
+
+        var  Y = Roo.lib;
+        var  A = Y.Scroll.superclass;
+        var  B = Y.Scroll.prototype;
+
+        B.toString = function() {
+            var  el = this.getEl();
+            var  id = el.id || el.tagName;
+            return  ("Scroll " + id);
+        };
+
+        B.doMethod = function(C, D, E) {
+            var  F = null;
+
+            if (C == 'scroll') {
+                F = [
+                        this.method(this.currentFrame, D[0], E[0] - D[0], this.totalFrames),
+                        this.method(this.currentFrame, D[1], E[1] - D[1], this.totalFrames)
+                        ];
+
+            } else  {
+                F = A.doMethod.call(this, C, D, E);
+            }
+            return  F;
+        };
+
+        B.getAttribute = function(C) {
+            var  D = null;
+            var  el = this.getEl();
+
+            if (C == 'scroll') {
+                D = [ el.scrollLeft, el.scrollTop ];
+            } else  {
+                D = A.getAttribute.call(this, C);
+            }
+
+            return  D;
+        };
+
+        B.setAttribute = function(C, D, E) {
+            var  el = this.getEl();
+
+            if (C == 'scroll') {
+                el.scrollLeft = D[0];
+                el.scrollTop = D[1];
+            } else  {
+                A.setAttribute.call(this, C, D, E);
+            }
+        };
+    })();
+
+
+
+
+
+
+Roo.DomHelper = function(){
+    var  A = null;
+    var  B = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
+    var  C = /^table|tbody|tr|td$/i;
+    var  D = {};
+    
+    
+
+    var  E = function(o){
+        if(typeof  o == 'string'){
+            return  o;
+        }
+        var  b = "";
+        if(!o.tag){
+            o.tag = "div";
+        }
+
+        b += "<" + o.tag;
+        for(var  attr  in  o){
+            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof  o[attr] == "function") continue;
+            if(attr == "style"){
+                var  s = o["style"];
+                if(typeof  s == "function"){
+                    s = s.call();
+                }
+                if(typeof  s == "string"){
+                    b += ' style="' + s + '"';
+                }else  if(typeof  s == "object"){
+                    b += ' style="';
+                    for(var  key  in  s){
+                        if(typeof  s[key] != "function"){
+                            b += key + ":" + s[key] + ";";
+                        }
+                    }
+
+                    b += '"';
+                }
+            }else {
+                if(attr == "cls"){
+                    b += ' class="' + o["cls"] + '"';
+                }else  if(attr == "htmlFor"){
+                    b += ' for="' + o["htmlFor"] + '"';
+                }else {
+                    b += " " + attr + '="' + o[attr] + '"';
+                }
+            }
+        }
+        if(B.test(o.tag)){
+            b += "/>";
+        }else {
+            b += ">";
+            var  cn = o.children || o.cn;
+            if(cn){
+                
+                if((cn  instanceof  Array) || (Roo.isSafari && typeof(cn.join) == "function")){
+                    for(var  i = 0, len = cn.length; i < len; i++) {
+                        b += E(cn[i], b);
+                    }
+                }else {
+                    b += E(cn, b);
+                }
+            }
+            if(o.html){
+                b += o.html;
+            }
+
+            b += "</" + o.tag + ">";
+        }
+        return  b;
+    };
+
+    
+    
+
+    var  F = function(o, M){
+         
+        
+        var  ns = false;
+        if (o.ns && o.ns != 'html') {
+               
+            if (o.xmlns && typeof(D[o.ns]) == 'undefined') {
+                D[o.ns] = o.xmlns;
+                ns = o.xmlns;
+            }
+            if (typeof(D[o.ns]) == 'undefined') {
+                console.log("Trying to create namespace element " + o.ns + ", however no xmlns was sent to builder previously");
+            }
+
+            ns = D[o.ns];
+        }
+        
+        
+        if (typeof(o) == 'string') {
+            return  M.appendChild(document.createTextNode(o));
+        }
+
+        o.tag = o.tag || div;
+        if (o.ns && Roo.isIE) {
+            ns = false;
+            o.tag = o.ns + ':' + o.tag;
+            
+        }
+        var  el = ns ? document.createElementNS( ns, o.tag||'div') :  document.createElement(o.tag||'div');
+        var  N = el.setAttribute ? true : false; 
+        for(var  attr  in  o){
+            
+            if(attr == "tag" || attr == "ns" ||attr == "xmlns" ||attr == "children" || attr == "cn" || attr == "html" || 
+                    attr == "style" || typeof  o[attr] == "function") continue;
+                    
+            if(attr=="cls" && Roo.isIE){
+                el.className = o["cls"];
+            }else {
+                if(N) el.setAttribute(attr=="cls" ? 'class' : attr, o[attr]);
+                else  el[attr] = o[attr];
+            }
+        }
+
+        Roo.DomHelper.applyStyles(el, o.style);
+        var  cn = o.children || o.cn;
+        if(cn){
+            
+             if((cn  instanceof  Array) || (Roo.isSafari && typeof(cn.join) == "function")){
+                for(var  i = 0, len = cn.length; i < len; i++) {
+                    F(cn[i], el);
+                }
+            }else {
+                F(cn, el);
+            }
+        }
+        if(o.html){
+            el.innerHTML = o.html;
+        }
+        if(M){
+           M.appendChild(el);
+        }
+        return  el;
+    };
+
+    var  G = function(M, s, h, e){
+        A.innerHTML = [s, h, e].join('');
+        var  i = -1, el = A;
+        while(++i < M){
+            el = el.firstChild;
+        }
+        return  el;
+    };
+
+    
+    var  ts = '<table>',
+        te = '</table>',
+        H = ts+'<tbody>',
+        I = '</tbody>'+te,
+        J = H + '<tr>',
+        K = '</tr>'+I;
+
+    
+
+    var  L = function(M, N, el, O){
+        if(!A){
+            A = document.createElement('div');
+        }
+        var  P;
+        var  Q = null;
+        if(M == 'td'){
+            if(N == 'afterbegin' || N == 'beforeend'){ 
+                return;
+            }
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+            } else {
+                Q = el.nextSibling;
+                el = el.parentNode;
+            }
+
+            P = G(4, J, O, K);
+        }
+        else  if(M == 'tr'){
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+                P = G(3, H, O, I);
+            } else  if(N == 'afterend'){
+                Q = el.nextSibling;
+                el = el.parentNode;
+                P = G(3, H, O, I);
+            } else { 
+                if(N == 'afterbegin'){
+                    Q = el.firstChild;
+                }
+
+                P = G(4, J, O, K);
+            }
+        } else  if(M == 'tbody'){
+            if(N == 'beforebegin'){
+                Q = el;
+                el = el.parentNode;
+                P = G(2, ts, O, te);
+            } else  if(N == 'afterend'){
+                Q = el.nextSibling;
+                el = el.parentNode;
+                P = G(2, ts, O, te);
+            } else {
+                if(N == 'afterbegin'){
+                    Q = el.firstChild;
+                }
+
+                P = G(3, H, O, I);
+            }
+        } else { 
+            if(N == 'beforebegin' || N == 'afterend'){ 
+                return;
+            }
+            if(N == 'afterbegin'){
+                Q = el.firstChild;
+            }
+
+            P = G(2, ts, O, te);
+        }
+
+        el.insertBefore(P, Q);
+        return  P;
+    };
+
+    return  {
+    
+
+    useDom : false,
+
+    
+
+    markup : function(o){
+        return  E(o);
+    },
+
+    
+
+    applyStyles : function(el, c){
+        if(c){
+           el = Roo.fly(el);
+           if(typeof  c == "string"){
+               var  re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+               var  matches;
+               while ((matches = re.exec(c)) != null){
+                   el.setStyle(matches[1], matches[2]);
+               }
+           }else  if (typeof  c == "object"){
+               for (var  style  in  c){
+                  el.setStyle(style, c[style]);
+               }
+           }else  if (typeof  c == "function"){
+                Roo.DomHelper.applyStyles(el, c.call());
+           }
+        }
+    },
+
+    
+
+    insertHtml : function(d, el, e){
+        d = d.toLowerCase();
+        if(el.insertAdjacentHTML){
+            if(C.test(el.tagName)){
+                var  rs;
+                if(rs = L(el.tagName.toLowerCase(), d, el, e)){
+                    return  rs;
+                }
+            }
+            switch(d){
+                case  "beforebegin":
+                    el.insertAdjacentHTML('BeforeBegin', e);
+                    return  el.previousSibling;
+                case  "afterbegin":
+                    el.insertAdjacentHTML('AfterBegin', e);
+                    return  el.firstChild;
+                case  "beforeend":
+                    el.insertAdjacentHTML('BeforeEnd', e);
+                    return  el.lastChild;
+                case  "afterend":
+                    el.insertAdjacentHTML('AfterEnd', e);
+                    return  el.nextSibling;
+            }
+            throw  'Illegal insertion point -> "' + d + '"';
+        }
+        var  f = el.ownerDocument.createRange();
+        var  g;
+        switch(d){
+             case  "beforebegin":
+                f.setStartBefore(el);
+                g = f.createContextualFragment(e);
+                el.parentNode.insertBefore(g, el);
+                return  el.previousSibling;
+             case  "afterbegin":
+                if(el.firstChild){
+                    f.setStartBefore(el.firstChild);
+                    g = f.createContextualFragment(e);
+                    el.insertBefore(g, el.firstChild);
+                    return  el.firstChild;
+                }else {
+                    el.innerHTML = e;
+                    return  el.firstChild;
+                }
+            case  "beforeend":
+                if(el.lastChild){
+                    f.setStartAfter(el.lastChild);
+                    g = f.createContextualFragment(e);
+                    el.appendChild(g);
+                    return  el.lastChild;
+                }else {
+                    el.innerHTML = e;
+                    return  el.lastChild;
+                }
+            case  "afterend":
+                f.setStartAfter(el);
+                g = f.createContextualFragment(e);
+                el.parentNode.insertBefore(g, el.nextSibling);
+                return  el.nextSibling;
+            }
+            throw  'Illegal insertion point -> "' + d + '"';
+    },
+
+    
+
+    insertBefore : function(el, o, h){
+        return  this.doInsert(el, o, h, "beforeBegin");
+    },
+
+    
+
+    insertAfter : function(el, o, j){
+        return  this.doInsert(el, o, j, "afterEnd", "nextSibling");
+    },
+
+    
+
+    insertFirst : function(el, o, k){
+        return  this.doInsert(el, o, k, "afterBegin");
+    },
+
+    
+    doInsert : function(el, o, l, m, n){
+        el = Roo.getDom(el);
+        var  p;
+        if(this.useDom || o.ns){
+            p = F(o, null);
+            el.parentNode.insertBefore(p, n ? el[n] : el);
+        }else {
+            var  e = E(o);
+            p = this.insertHtml(m, el, e);
+        }
+        return  l ? Roo.get(p, true) : p;
+    },
+
+    
+
+    append : function(el, o, q){
+        el = Roo.getDom(el);
+        var  r;
+        if(this.useDom || o.ns){
+            r = F(o, null);
+            el.appendChild(r);
+        }else {
+            var  e = E(o);
+            r = this.insertHtml("beforeEnd", el, e);
+        }
+        return  q ? Roo.get(r, true) : r;
+    },
+
+    
+
+    overwrite : function(el, o, t){
+        el = Roo.getDom(el);
+        if (o.ns) {
+          
+            while (el.childNodes.length) {
+                el.removeChild(el.firstChild);
+            }
+
+            F(o, el);
+        } else  {
+            el.innerHTML = E(o);   
+        }
+        
+        return  t ? Roo.get(el.firstChild, true) : el.firstChild;
+    },
+
+    
+
+    createTemplate : function(o){
+        var  u = E(o);
+        return  new  Roo.Template(u);
+    }
+    };
+}();
+
+
+
+
+
+Roo.Template = function(A){
+    
+    if(A  instanceof  Array){
+        A = A.join("");
+    }else  if(arguments.length > 1){
+        A = Array.prototype.join.call(arguments, "");
+    }
+    
+    
+    if (typeof(A) == 'object') {
+        Roo.apply(this,A)
+    } else  {
+        
+        this.html = A;
+    }
+    
+    
+};
+Roo.Template.prototype = {
+    
+    
+
+    html : '',
+    
+
+    applyTemplate : function(values){
+        try {
+            
+            if(this.compiled){
+                return  this.compiled(values);
+            }
+            var  useF = this.disableFormats !== true;
+            var  fm = Roo.util.Format, tpl = this;
+            var  fn = function(m, E, F, G){
+                if(F && useF){
+                    if(F.substr(0, 5) == "this."){
+                        return  tpl.call(F.substr(5), values[E], values);
+                    }else {
+                        if(G){
+                            
+                            
+                            
+                            var  re = /^\s*['"](.*)["']\s*$/;
+                            G = G.split(',');
+                            for(var  i = 0, len = G.length; i < len; i++){
+                                G[i] = G[i].replace(re, "$1");
+                            }
+
+                            G = [values[E]].concat(G);
+                        }else {
+                            G = [values[E]];
+                        }
+                        return  fm[F].apply(fm, G);
+                    }
+                }else {
+                    return  values[E] !== undefined ? values[E] : "";
+                }
+            };
+            return  this.html.replace(this.re, fn);
+        } catch (e) {
+            Roo.log(e);
+            throw  e;
+        }
+         
+    },
+    
+    
+
+    set : function(B, C){
+        this.html = B;
+        this.compiled = null;
+        if(C){
+            this.compile();
+        }
+        return  this;
+    },
+    
+    
+
+    disableFormats : false,
+    
+    
+
+    re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
+    
+    
+
+    compile : function(){
+        var  fm = Roo.util.Format;
+        var  D = this.disableFormats !== true;
+        var  E = Roo.isGecko ? "+" : ",";
+        var  fn = function(m, G, H, I){
+            if(H && D){
+                I = I ? ',' + I : "";
+                if(H.substr(0, 5) != "this."){
+                    H = "fm." + H + '(';
+                }else {
+                    H = 'this.call("'+ H.substr(5) + '", ';
+                    I = ", values";
+                }
+            }else {
+                I= ''; H = "(values['" + G + "'] == undefined ? '' : ";
+            }
+            return  "'"+ E + H + "values['" + G + "']" + I + ")"+E+"'";
+        };
+        var  F;
+        
+        if(Roo.isGecko){
+            F = "this.compiled = function(values){ return '" +
+                   this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
+                    "';};";
+        }else {
+            F = ["this.compiled = function(values){ return ['"];
+            F.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn));
+            F.push("'].join('');};");
+            F = F.join('');
+        }
+        
+
+        eval(F);
+        return  this;
+    },
+    
+    
+    call : function(G, H, I){
+        return  this[G](H, I);
+    },
+    
+    
+
+    insertFirst: function(el, J, K){
+        return  this.doInsert('afterBegin', el, J, K);
+    },
+
+    
+
+    insertBefore: function(el, L, M){
+        return  this.doInsert('beforeBegin', el, L, M);
+    },
+
+    
+
+    insertAfter : function(el, N, O){
+        return  this.doInsert('afterEnd', el, N, O);
+    },
+    
+    
+
+    append : function(el, P, Q){
+        return  this.doInsert('beforeEnd', el, P, Q);
+    },
+
+    doInsert : function(R, el, S, T){
+        el = Roo.getDom(el);
+        var  U = Roo.DomHelper.insertHtml(R, el, this.applyTemplate(S));
+        return  T ? Roo.get(U, true) : U;
+    },
+
+    
+
+    overwrite : function(el, V, W){
+        el = Roo.getDom(el);
+        el.innerHTML = this.applyTemplate(V);
+        return  W ? Roo.get(el.firstChild, true) : el.firstChild;
+    }
+};
+
+
+Roo.Template.prototype.apply = Roo.Template.prototype.applyTemplate;
+
+
+Roo.DomHelper.Template = Roo.Template;
+
+
+
+Roo.Template.from = function(el){
+    el = Roo.getDom(el);
+    return  new  Roo.Template(el.value || el.innerHTML);
+};
+
+
+
+
+
+
+
+Roo.DomQuery = function(){
+    var  A = {}, simpleCache = {}, valueCache = {};
+    var  B = /\S/;
+    var  C = /^\s+|\s+$/g;
+    var  D = /\{(\d+)\}/g;
+    var  E = /^(\s?[\/>+~]\s?|\s|$)/;
+    var  F = /^(#)?([\w-\*]+)/;
+    var  G = /(\d*)n\+?(\d*)/, H = /\D/;
+
+    function  I(p, T){
+        var  i = 0;
+        var  n = p.firstChild;
+        while(n){
+            if(n.nodeType == 1){
+               if(++i == T){
+                   return  n;
+               }
+            }
+
+            n = n.nextSibling;
+        }
+        return  null;
+    };
+
+    function  J(n){
+        while((n = n.nextSibling) && n.nodeType != 1);
+        return  n;
+    };
+
+    function  K(n){
+        while((n = n.previousSibling) && n.nodeType != 1);
+        return  n;
+    };
+
+    function  L(d){
+        var  n = d.firstChild, ni = -1;
+           while(n){
+               var  nx = n.nextSibling;
+               if(n.nodeType == 3 && !B.test(n.nodeValue)){
+                   d.removeChild(n);
+               }else {
+                   n.nodeIndex = ++ni;
+               }
+
+               n = nx;
+           }
+           return  this;
+       };
+
+    function  byClassName(c, a, v){
+        if(!v){
+            return  c;
+        }
+        var  r = [], ri = -1, cn;
+        for(var  i = 0, ci; ci = c[i]; i++){
+            if((' '+ci.className+' ').indexOf(v) != -1){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  attrValue(n, T){
+        if(!n.tagName && typeof  n.length != "undefined"){
+            n = n[0];
+        }
+        if(!n){
+            return  null;
+        }
+        if(T == "for"){
+            return  n.htmlFor;
+        }
+        if(T == "class" || T == "className"){
+            return  n.className;
+        }
+        return  n.getAttribute(T) || n[T];
+
+    };
+
+    function  getNodes(ns, T, U){
+        var  V = [], ri = -1, cs;
+        if(!ns){
+            return  V;
+        }
+
+        U = U || "*";
+        if(typeof  ns.getElementsByTagName != "undefined"){
+            ns = [ns];
+        }
+        if(!T){
+            for(var  i = 0, ni; ni = ns[i]; i++){
+                cs = ni.getElementsByTagName(U);
+                for(var  j = 0, ci; ci = cs[j]; j++){
+                    V[++ri] = ci;
+                }
+            }
+        }else  if(T == "/" || T == ">"){
+            var  utag = U.toUpperCase();
+            for(var  i = 0, ni, cn; ni = ns[i]; i++){
+                cn = ni.children || ni.childNodes;
+                for(var  j = 0, cj; cj = cn[j]; j++){
+                    if(cj.nodeName == utag || cj.nodeName == U  || U == '*'){
+                        V[++ri] = cj;
+                    }
+                }
+            }
+        }else  if(T == "+"){
+            var  utag = U.toUpperCase();
+            for(var  i = 0, n; n = ns[i]; i++){
+                while((n = n.nextSibling) && n.nodeType != 1);
+                if(n && (n.nodeName == utag || n.nodeName == U || U == '*')){
+                    V[++ri] = n;
+                }
+            }
+        }else  if(T == "~"){
+            for(var  i = 0, n; n = ns[i]; i++){
+                while((n = n.nextSibling) && (n.nodeType != 1 || (U == '*' || n.tagName.toLowerCase()!=U)));
+                if(n){
+                    V[++ri] = n;
+                }
+            }
+        }
+        return  V;
+    };
+
+    function  M(a, b){
+        if(b.slice){
+            return  a.concat(b);
+        }
+        for(var  i = 0, l = b.length; i < l; i++){
+            a[a.length] = b[i];
+        }
+        return  a;
+    }
+
+    function  byTag(cs, T){
+        if(cs.tagName || cs == document){
+            cs = [cs];
+        }
+        if(!T){
+            return  cs;
+        }
+        var  r = [], ri = -1;
+        T = T.toLowerCase();
+        for(var  i = 0, ci; ci = cs[i]; i++){
+            if(ci.nodeType == 1 && ci.tagName.toLowerCase()==T){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  N(cs, T, id){
+        if(cs.tagName || cs == document){
+            cs = [cs];
+        }
+        if(!id){
+            return  cs;
+        }
+        var  r = [], ri = -1;
+        for(var  i = 0,ci; ci = cs[i]; i++){
+            if(ci && ci.id == id){
+                r[++ri] = ci;
+                return  r;
+            }
+        }
+        return  r;
+    };
+
+    function  byAttribute(cs, T, U, op, V){
+        var  r = [], ri = -1, st = V=="{";
+        var  f = Roo.DomQuery.operators[op];
+        for(var  i = 0, ci; ci = cs[i]; i++){
+            var  a;
+            if(st){
+                a = Roo.DomQuery.getStyle(ci, T);
+            }
+            else  if(T == "class" || T == "className"){
+                a = ci.className;
+            }else  if(T == "for"){
+                a = ci.htmlFor;
+            }else  if(T == "href"){
+                a = ci.getAttribute("href", 2);
+            }else {
+                a = ci.getAttribute(T);
+            }
+            if((f && f(a, U)) || (!f && a)){
+                r[++ri] = ci;
+            }
+        }
+        return  r;
+    };
+
+    function  byPseudo(cs, T, U){
+        return  Roo.DomQuery.pseudos[T](cs, U);
+    };
+
+    
+    
+    
+    var  O = window.ActiveXObject ? true : false;
+
+    
+    
+    
+    
+
+    var  batch = 30803; 
+
+    var  P = 30803;
+
+    function  Q(cs){
+        var  d = ++P;
+        cs[0].setAttribute("_nodup", d);
+        var  r = [cs[0]];
+        for(var  i = 1, len = cs.length; i < len; i++){
+            var  c = cs[i];
+            if(!c.getAttribute("_nodup") != d){
+                c.setAttribute("_nodup", d);
+                r[r.length] = c;
+            }
+        }
+        for(var  i = 0, len = cs.length; i < len; i++){
+            cs[i].removeAttribute("_nodup");
+        }
+        return  r;
+    }
+
+    function  nodup(cs){
+        if(!cs){
+            return  [];
+        }
+        var  T = cs.length, c, i, r = cs, cj, ri = -1;
+        if(!T || typeof  cs.nodeType != "undefined" || T == 1){
+            return  cs;
+        }
+        if(O && typeof  cs[0].selectSingleNode != "undefined"){
+            return  Q(cs);
+        }
+        var  d = ++P;
+        cs[0]._nodup = d;
+        for(i = 1; c = cs[i]; i++){
+            if(c._nodup != d){
+                c._nodup = d;
+            }else {
+                r = [];
+                for(var  j = 0; j < i; j++){
+                    r[++ri] = cs[j];
+                }
+                for(j = i+1; cj = cs[j]; j++){
+                    if(cj._nodup != d){
+                        cj._nodup = d;
+                        r[++ri] = cj;
+                    }
+                }
+                return  r;
+            }
+        }
+        return  r;
+    }
+
+    function  R(c1, c2){
+        var  d = ++P;
+        for(var  i = 0, len = c1.length; i < len; i++){
+            c1[i].setAttribute("_qdiff", d);
+        }
+        var  r = [];
+        for(var  i = 0, len = c2.length; i < len; i++){
+            if(c2[i].getAttribute("_qdiff") != d){
+                r[r.length] = c2[i];
+            }
+        }
+        for(var  i = 0, len = c1.length; i < len; i++){
+           c1[i].removeAttribute("_qdiff");
+        }
+        return  r;
+    }
+
+    function  S(c1, c2){
+        var  T = c1.length;
+        if(!T){
+            return  c2;
+        }
+        if(O && c1[0].selectSingleNode){
+            return  R(c1, c2);
+        }
+        var  d = ++P;
+        for(var  i = 0; i < T; i++){
+            c1[i]._qdiff = d;
+        }
+        var  r = [];
+        for(var  i = 0, len = c2.length; i < len; i++){
+            if(c2[i]._qdiff != d){
+                r[r.length] = c2[i];
+            }
+        }
+        return  r;
+    }
+
+    function  quickId(ns, T, U, id){
+        if(ns == U){
+           var  d = U.ownerDocument || U;
+           return  d.getElementById(id);
+        }
+
+        ns = getNodes(ns, T, "*");
+        return  N(ns, null, id);
+    }
+
+    return  {
+        getStyle : function(el, AA){
+            return  Roo.fly(el).getStyle(AA);
+        },
+        
+
+        compile : function(AB, AC){
+            AC = AC || "select";
+            
+            var  fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];
+            var  q = AB, mode, lq;
+            var  tk = Roo.DomQuery.matchers;
+            var  AD = tk.length;
+            var  mm;
+
+            
+            var  AE = q.match(E);
+            if(AE && AE[1]){
+                fn[fn.length] = 'mode="'+AE[1].replace(C, "")+'";';
+                q = q.replace(AE[1], "");
+            }
+            
+            while(AB.substr(0, 1)=="/"){
+                AB = AB.substr(1);
+            }
+
+            while(q && lq != q){
+                lq = q;
+                var  tm = q.match(F);
+                if(AC == "select"){
+                    if(tm){
+                        if(tm[1] == "#"){
+                            fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
+                        }else {
+                            fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
+                        }
+
+                        q = q.replace(tm[0], "");
+                    }else  if(q.substr(0, 1) != '@'){
+                        fn[fn.length] = 'n = getNodes(n, mode, "*");';
+                    }
+                }else {
+                    if(tm){
+                        if(tm[1] == "#"){
+                            fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
+                        }else {
+                            fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
+                        }
+
+                        q = q.replace(tm[0], "");
+                    }
+                }
+                while(!(mm = q.match(E))){
+                    var  matched = false;
+                    for(var  j = 0; j < AD; j++){
+                        var  t = tk[j];
+                        var  m = q.match(t.re);
+                        if(m){
+                            fn[fn.length] = t.select.replace(D, function(x, i){
+                                                    return  m[i];
+                                                });
+                            q = q.replace(m[0], "");
+                            matched = true;
+                            break;
+                        }
+                    }
+                    
+                    if(!matched){
+                        throw  'Error parsing selector, parsing failed at "' + q + '"';
+                    }
+                }
+                if(mm[1]){
+                    fn[fn.length] = 'mode="'+mm[1].replace(C, "")+'";';
+                    q = q.replace(mm[1], "");
+                }
+            }
+
+            fn[fn.length] = "return nodup(n);\n}";
+            
+             
+            eval(fn.join(""));
+            return  f;
+        },
+
+        
+
+        select : function(AF, AG, AH){
+            if(!AG || AG == document){
+                AG = document;
+            }
+            if(typeof  AG == "string"){
+                AG = document.getElementById(AG);
+            }
+            var  AI = AF.split(",");
+            var  AJ = [];
+            for(var  i = 0, len = AI.length; i < len; i++){
+                var  p = AI[i].replace(C, "");
+                if(!A[p]){
+                    A[p] = Roo.DomQuery.compile(p);
+                    if(!A[p]){
+                        throw  p + " is not a valid selector";
+                    }
+                }
+                var  z = A[p](AG);
+                if(z && z != document){
+                    AJ = AJ.concat(z);
+                }
+            }
+            if(AI.length > 1){
+                return  nodup(AJ);
+            }
+            return  AJ;
+        },
+
+        
+
+        selectNode : function(AK, AL){
+            return  Roo.DomQuery.select(AK, AL)[0];
+        },
+
+        
+
+        selectValue : function(AM, AN, AO){
+            AM = AM.replace(C, "");
+            if(!valueCache[AM]){
+                valueCache[AM] = Roo.DomQuery.compile(AM, "select");
+            }
+            var  n = valueCache[AM](AN);
+            n = n[0] ? n[0] : n;
+            var  v = (n && n.firstChild ? n.firstChild.nodeValue : null);
+            return  ((v === null||v === undefined||v==='') ? AO : v);
+        },
+
+        
+
+        selectNumber : function(AP, AQ, AR){
+            var  v = Roo.DomQuery.selectValue(AP, AQ, AR || 0);
+            return  parseFloat(v);
+        },
+
+        
+
+        is : function(el, ss){
+            if(typeof  el == "string"){
+                el = document.getElementById(el);
+            }
+            var  AS = (el  instanceof  Array);
+            var  AT = Roo.DomQuery.filter(AS ? el : [el], ss);
+            return  AS ? (AT.length == el.length) : (AT.length > 0);
+        },
+
+        
+
+        filter : function(AU, ss, AV){
+            ss = ss.replace(C, "");
+            if(!simpleCache[ss]){
+                simpleCache[ss] = Roo.DomQuery.compile(ss, "simple");
+            }
+            var  AW = simpleCache[ss](AU);
+            return  AV ? S(AW, AU) : AW;
+        },
+
+        
+
+        matchers : [{
+                re: /^\.([\w-]+)/,
+                select: 'n = byClassName(n, null, " {1} ");'
+            }, {
+                re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
+                select: 'n = byPseudo(n, "{1}", "{2}");'
+            },{
+                re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
+                select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
+            }, {
+                re: /^#([\w-]+)/,
+                select: 'n = byId(n, null, "{1}");'
+            },{
+                re: /^@([\w-]+)/,
+                select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
+            }
+        ],
+
+        
+
+        operators : {
+            "=" : function(a, v){
+                return  a == v;
+            },
+            "!=" : function(a, v){
+                return  a != v;
+            },
+            "^=" : function(a, v){
+                return  a && a.substr(0, v.length) == v;
+            },
+            "$=" : function(a, v){
+                return  a && a.substr(a.length-v.length) == v;
+            },
+            "*=" : function(a, v){
+                return  a && a.indexOf(v) !== -1;
+            },
+            "%=" : function(a, v){
+                return  (a % v) == 0;
+            },
+            "|=" : function(a, v){
+                return  a && (a == v || a.substr(0, v.length+1) == v+'-');
+            },
+            "~=" : function(a, v){
+                return  a && (' '+a+' ').indexOf(' '+v+' ') != -1;
+            }
+        },
+
+        
+
+        pseudos : {
+            "first-child" : function(c){
+                var  r = [], ri = -1, n;
+                for(var  i = 0, ci; ci = n = c[i]; i++){
+                    while((n = n.previousSibling) && n.nodeType != 1);
+                    if(!n){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "last-child" : function(c){
+                var  r = [], ri = -1, n;
+                for(var  i = 0, ci; ci = n = c[i]; i++){
+                    while((n = n.nextSibling) && n.nodeType != 1);
+                    if(!n){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "nth-child" : function(c, a) {
+                var  r = [], ri = -1;
+                var  m = G.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !H.test(a) && "n+" + a || a);
+                var  f = (m[1] || 1) - 0, l = m[2] - 0;
+                for(var  i = 0, n; n = c[i]; i++){
+                    var  pn = n.parentNode;
+                    if (batch != pn._batch) {
+                        var  j = 0;
+                        for(var  cn = pn.firstChild; cn; cn = cn.nextSibling){
+                            if(cn.nodeType == 1){
+                               cn.nodeIndex = ++j;
+                            }
+                        }
+
+                        pn._batch = batch;
+                    }
+                    if (f == 1) {
+                        if (l == 0 || n.nodeIndex == l){
+                            r[++ri] = n;
+                        }
+                    } else  if ((n.nodeIndex + l) % f == 0){
+                        r[++ri] = n;
+                    }
+                }
+
+                return  r;
+            },
+
+            "only-child" : function(c){
+                var  r = [], ri = -1;;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(!K(ci) && !J(ci)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "empty" : function(c){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  cns = ci.childNodes, j = 0, cn, empty = true;
+                    while(cn = cns[j]){
+                        ++j;
+                        if(cn.nodeType == 1 || cn.nodeType == 3){
+                            empty = false;
+                            break;
+                        }
+                    }
+                    if(empty){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "contains" : function(c, v){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "nodeValue" : function(c, v){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(ci.firstChild && ci.firstChild.nodeValue == v){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "checked" : function(c){
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(ci.checked == true){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "not" : function(c, ss){
+                return  Roo.DomQuery.filter(c, ss, true);
+            },
+
+            "odd" : function(c){
+                return  this["nth-child"](c, "odd");
+            },
+
+            "even" : function(c){
+                return  this["nth-child"](c, "even");
+            },
+
+            "nth" : function(c, a){
+                return  c[a-1] || [];
+            },
+
+            "first" : function(c){
+                return  c[0] || [];
+            },
+
+            "last" : function(c){
+                return  c[c.length-1] || [];
+            },
+
+            "has" : function(c, ss){
+                var  s = Roo.DomQuery.select;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    if(s(ss, ci).length > 0){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "next" : function(c, ss){
+                var  is = Roo.DomQuery.is;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  n = J(ci);
+                    if(n && is(n, ss)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            },
+
+            "prev" : function(c, ss){
+                var  is = Roo.DomQuery.is;
+                var  r = [], ri = -1;
+                for(var  i = 0, ci; ci = c[i]; i++){
+                    var  n = K(ci);
+                    if(n && is(n, ss)){
+                        r[++ri] = ci;
+                    }
+                }
+                return  r;
+            }
+        }
+    };
+}();
+
+
+
+Roo.query = Roo.DomQuery.select;
+
+
+
+
+
+
+
+Roo.util.Observable = function(A){
+    
+    A = A|| {};
+    this.addEvents(A.events || {});
+    if (A.events) {
+        delete  A.events; 
+    }
+
+     
+    Roo.apply(this, A);
+    
+    if(this.listeners){
+        this.on(this.listeners);
+        delete  this.listeners;
+    }
+};
+Roo.util.Observable.prototype = {
+    
+
+    
+    
+    
+
+    fireEvent : function(){
+        var  ce = this.events[arguments[0].toLowerCase()];
+        if(typeof  ce == "object"){
+            return  ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
+        }else {
+            return  true;
+        }
+    },
+
+    
+    filterOptRe : /^(?:scope|delay|buffer|single)$/,
+
+    
+
+    addListener : function(B, fn, C, o){
+        if(typeof  B == "object"){
+            o = B;
+            for(var  e  in  o){
+                if(this.filterOptRe.test(e)){
+                    continue;
+                }
+                if(typeof  o[e] == "function"){
+                    
+                    this.addListener(e, o[e], o.scope,  o);
+                }else {
+                    
+                    this.addListener(e, o[e].fn, o[e].scope, o[e]);
+                }
+            }
+            return;
+        }
+
+        o = (!o || typeof  o == "boolean") ? {} : o;
+        B = B.toLowerCase();
+        var  ce = this.events[B] || true;
+        if(typeof  ce == "boolean"){
+            ce = new  Roo.util.Event(this, B);
+            this.events[B] = ce;
+        }
+
+        ce.addListener(fn, C, o);
+    },
+
+    
+
+    removeListener : function(D, fn, E){
+        var  ce = this.events[D.toLowerCase()];
+        if(typeof  ce == "object"){
+            ce.removeListener(fn, E);
+        }
+    },
+
+    
+
+    purgeListeners : function(){
+        for(var  evt  in  this.events){
+            if(typeof  this.events[evt] == "object"){
+                 this.events[evt].clearListeners();
+            }
+        }
+    },
+
+    relayEvents : function(o, F){
+        var  G = function(H){
+            return  function(){
+                return  this.fireEvent.apply(this, Roo.combine(H, Array.prototype.slice.call(arguments, 0)));
+            };
+        };
+        for(var  i = 0, len = F.length; i < len; i++){
+            var  ename = F[i];
+            if(!this.events[ename]){ this.events[ename] = true; };
+            o.on(ename, G(ename), this);
+        }
+    },
+
+    
+
+    addEvents : function(o){
+        if(!this.events){
+            this.events = {};
+        }
+
+        Roo.applyIf(this.events, o);
+    },
+
+    
+
+    hasListener : function(H){
+        var  e = this.events[H];
+        return  typeof  e == "object" && e.listeners.length > 0;
+    }
+};
+
+
+Roo.util.Observable.prototype.on = Roo.util.Observable.prototype.addListener;
+
+
+Roo.util.Observable.prototype.un = Roo.util.Observable.prototype.removeListener;
+
+
+
+Roo.util.Observable.capture = function(o, fn, I){
+    o.fireEvent = o.fireEvent.createInterceptor(fn, I);
+};
+
+
+
+Roo.util.Observable.releaseCapture = function(o){
+    o.fireEvent = Roo.util.Observable.prototype.fireEvent;
+};
+
+(function(){
+
+    var  J = function(h, o, M){
+        var  N = new  Roo.util.DelayedTask();
+        return  function(){
+            N.delay(o.buffer, h, M, Array.prototype.slice.call(arguments, 0));
+        };
+    };
+
+    var  K = function(h, e, fn, M){
+        return  function(){
+            e.removeListener(fn, M);
+            return  h.apply(M, arguments);
+        };
+    };
+
+    var  L = function(h, o, M){
+        return  function(){
+            var  N = Array.prototype.slice.call(arguments, 0);
+            setTimeout(function(){
+                h.apply(M, N);
+            }, o.delay || 10);
+        };
+    };
+
+    Roo.util.Event = function(M, N){
+        this.name = N;
+        this.obj = M;
+        this.listeners = [];
+    };
+
+    Roo.util.Event.prototype = {
+        addListener : function(fn, M, N){
+            var  o = N || {};
+            M = M || this.obj;
+            if(!this.isListening(fn, M)){
+                var  l = {fn: fn, scope: M, options: o};
+                var  h = fn;
+                if(o.delay){
+                    h = L(h, o, M);
+                }
+                if(o.single){
+                    h = K(h, this, fn, M);
+                }
+                if(o.buffer){
+                    h = J(h, o, M);
+                }
+
+                l.fireFn = h;
+                if(!this.firing){ 
+                    this.listeners.push(l);
+                }else {
+                    this.listeners = this.listeners.slice(0);
+                    this.listeners.push(l);
+                }
+            }
+        },
+
+        findListener : function(fn, O){
+            O = O || this.obj;
+            var  ls = this.listeners;
+            for(var  i = 0, len = ls.length; i < len; i++){
+                var  l = ls[i];
+                if(l.fn == fn && l.scope == O){
+                    return  i;
+                }
+            }
+            return  -1;
+        },
+
+        isListening : function(fn, P){
+            return  this.findListener(fn, P) != -1;
+        },
+
+        removeListener : function(fn, Q){
+            var  R;
+            if((R = this.findListener(fn, Q)) != -1){
+                if(!this.firing){
+                    this.listeners.splice(R, 1);
+                }else {
+                    this.listeners = this.listeners.slice(0);
+                    this.listeners.splice(R, 1);
+                }
+                return  true;
+            }
+            return  false;
+        },
+
+        clearListeners : function(){
+            this.listeners = [];
+        },
+
+        fire : function(){
+            var  ls = this.listeners, S, T = ls.length;
+            if(T > 0){
+                this.firing = true;
+                var  args = Array.prototype.slice.call(arguments, 0);
+                for(var  i = 0; i < T; i++){
+                    var  l = ls[i];
+                    if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){
+                        this.firing = false;
+                        return  false;
+                    }
+                }
+
+                this.firing = false;
+            }
+            return  true;
+        }
+    };
+})();
+
+
+
+
+
+Roo.EventManager = function(){
+    var  A, B, C = false;
+    var  F, G, H, I;
+    var  E = Roo.lib.Event;
+    var  D = Roo.lib.Dom;
+
+
+    var  J = function(){
+        if(!C){
+            C = true;
+            Roo.isReady = true;
+            if(B){
+                clearInterval(B);
+            }
+            if(Roo.isGecko || Roo.isOpera) {
+                document.removeEventListener("DOMContentLoaded", J, false);
+            }
+            if(Roo.isIE){
+                var  defer = document.getElementById("ie-deferred-loader");
+                if(defer){
+                    defer.onreadystatechange = null;
+                    defer.parentNode.removeChild(defer);
+                }
+            }
+            if(A){
+                A.fire();
+                A.clearListeners();
+            }
+        }
+    };
+    
+    var  K = function(){
+        A = new  Roo.util.Event();
+        if(Roo.isGecko || Roo.isOpera) {
+            document.addEventListener("DOMContentLoaded", J, false);
+        }else  if(Roo.isIE){
+            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
+            var  defer = document.getElementById("ie-deferred-loader");
+            defer.onreadystatechange = function(){
+                if(this.readyState == "complete"){
+                    J();
+                }
+            };
+        }else  if(Roo.isSafari){ 
+            B = setInterval(function(){
+                var  rs = document.readyState;
+                if(rs == "complete") {
+                    J();     
+                 }
+            }, 10);
+        }
+
+        
+        E.on(window, "load", J);
+    };
+
+    var  L = function(h, o){
+        var  S = new  Roo.util.DelayedTask(h);
+        return  function(e){
+            
+            e = new  Roo.EventObjectImpl(e);
+            S.delay(o.buffer, h, null, [e]);
+        };
+    };
+
+    var  M = function(h, el, S, fn){
+        return  function(e){
+            Roo.EventManager.removeListener(el, S, fn);
+            h(e);
+        };
+    };
+
+    var  N = function(h, o){
+        return  function(e){
+            
+            e = new  Roo.EventObjectImpl(e);
+            setTimeout(function(){
+                h(e);
+            }, o.delay || 10);
+        };
+    };
+
+    var  O = function(S, T, U, fn, V){
+        var  o = (!U || typeof  U == "boolean") ? {} : U;
+        fn = fn || o.fn; V = V || o.scope;
+        var  el = Roo.getDom(S);
+        if(!el){
+            throw  "Error listening for \"" + T + '\". Element "' + S + '" doesn\'t exist.';
+        }
+        var  h = function(e){
+            e = Roo.EventObject.setEvent(e);
+            var  t;
+            if(o.delegate){
+                t = e.getTarget(o.delegate, el);
+                if(!t){
+                    return;
+                }
+            }else {
+                t = e.target;
+            }
+            if(o.stopEvent === true){
+                e.stopEvent();
+            }
+            if(o.preventDefault === true){
+               e.preventDefault();
+            }
+            if(o.stopPropagation === true){
+                e.stopPropagation();
+            }
+
+            if(o.normalized === false){
+                e = e.browserEvent;
+            }
+
+
+            fn.call(V || el, e, t, o);
+        };
+        if(o.delay){
+            h = N(h, o);
+        }
+        if(o.single){
+            h = M(h, el, T, fn);
+        }
+        if(o.buffer){
+            h = L(h, o);
+        }
+
+        fn._handlers = fn._handlers || [];
+        fn._handlers.push([Roo.id(el), T, h]);
+
+        E.on(el, T, h);
+        if(T == "mousewheel" && el.addEventListener){ 
+            el.addEventListener("DOMMouseScroll", h, false);
+            E.on(window, 'unload', function(){
+                el.removeEventListener("DOMMouseScroll", h, false);
+            });
+        }
+        if(T == "mousedown" && el == document){ 
+            Roo.EventManager.stoppedMouseDownEvent.addListener(h);
+        }
+        return  h;
+    };
+
+    var  P = function(el, S, fn){
+        var  id = Roo.id(el), T = fn._handlers, hd = fn;
+        if(T){
+            for(var  i = 0, len = T.length; i < len; i++){
+                var  h = T[i];
+                if(h[0] == id && h[1] == S){
+                    hd = h[2];
+                    T.splice(i, 1);
+                    break;
+                }
+            }
+        }
+
+        E.un(el, S, hd);
+        el = Roo.getDom(el);
+        if(S == "mousewheel" && el.addEventListener){
+            el.removeEventListener("DOMMouseScroll", hd, false);
+        }
+        if(S == "mousedown" && el == document){ 
+            Roo.EventManager.stoppedMouseDownEvent.removeListener(hd);
+        }
+    };
+
+    var  Q = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
+    
+    var  R = {
+        
+        
+        
+
+        
+        
+        
+
+        wrap : function(fn, S, T){
+            return  function(e){
+                Roo.EventObject.setEvent(e);
+                fn.call(T ? S || window : window, Roo.EventObject, S);
+            };
+        },
+        
+        
+
+        addListener : function(U, V, fn, W, X){
+            if(typeof  V == "object"){
+                var  o = V;
+                for(var  e  in  o){
+                    if(Q.test(e)){
+                        continue;
+                    }
+                    if(typeof  o[e] == "function"){
+                        
+                        O(U, e, o, o[e], o.scope);
+                    }else {
+                        
+                        O(U, e, o[e]);
+                    }
+                }
+                return;
+            }
+            return  O(U, V, X, fn, W);
+        },
+        
+        
+
+        removeListener : function(Y, Z, fn){
+            return  P(Y, Z, fn);
+        },
+        
+        
+
+        onDocumentReady : function(fn, a, b){
+            if(C){ 
+                A.addListener(fn, a, b);
+                A.fire();
+                A.clearListeners();
+                return;
+            }
+            if(!A){
+                K();
+            }
+
+            A.addListener(fn, a, b);
+        },
+        
+        
+
+        onWindowResize : function(fn, c, d){
+            if(!F){
+                F = new  Roo.util.Event();
+                G = new  Roo.util.DelayedTask(function(){
+                    F.fire(D.getViewWidth(), D.getViewHeight());
+                });
+                E.on(window, "resize", function(){
+                    if(Roo.isIE){
+                        G.delay(50);
+                    }else {
+                        F.fire(D.getViewWidth(), D.getViewHeight());
+                    }
+                });
+            }
+
+            F.addListener(fn, c, d);
+        },
+
+        
+
+        onTextResize : function(fn, f, g){
+            if(!H){
+                H = new  Roo.util.Event();
+                var  textEl = new  Roo.Element(document.createElement('div'));
+                textEl.dom.className = 'x-text-resize';
+                textEl.dom.innerHTML = 'X';
+                textEl.appendTo(document.body);
+                I = textEl.dom.offsetHeight;
+                setInterval(function(){
+                    if(textEl.dom.offsetHeight != I){
+                        H.fire(I, I = textEl.dom.offsetHeight);
+                    }
+                }, this.textResizeInterval);
+            }
+
+            H.addListener(fn, f, g);
+        },
+
+        
+
+        removeResizeListener : function(fn, j){
+            if(F){
+                F.removeListener(fn, j);
+            }
+        },
+
+        
+        fireResize : function(){
+            if(F){
+                F.fire(D.getViewWidth(), D.getViewHeight());
+            }   
+        },
+        
+
+        ieDeferSrc : false,
+        
+
+        textResizeInterval : 50
+    };
+    
+    
+
+    
+     
+
+    R.on = R.addListener;
+    R.un = R.removeListener;
+
+    R.stoppedMouseDownEvent = new  Roo.util.Event();
+    return  R;
+}();
+
+
+Roo.onReady = Roo.EventManager.onDocumentReady;
+
+Roo.onReady(function(){
+    var  bd = Roo.get(document.body);
+    if(!bd){ return; }
+
+    var  S = [
+            Roo.isIE ? "roo-ie"
+            : Roo.isGecko ? "roo-gecko"
+            : Roo.isOpera ? "roo-opera"
+            : Roo.isSafari ? "roo-safari" : ""];
+
+    if(Roo.isMac){
+        S.push("roo-mac");
+    }
+    if(Roo.isLinux){
+        S.push("roo-linux");
+    }
+    if(Roo.isBorderBox){
+        S.push('roo-border-box');
+    }
+    if(Roo.isStrict){ 
+        var  p = bd.dom.parentNode;
+        if(p){
+            p.className += ' roo-strict';
+        }
+    }
+
+    bd.addClass(S.join(' '));
+});
+
+
+
+Roo.EventObject = function(){
+    
+    var  E = Roo.lib.Event;
+    
+    
+    var  T = {
+        63234 : 37, 
+        63235 : 39, 
+        63232 : 38, 
+        63233 : 40, 
+        63276 : 33, 
+        63277 : 34, 
+        63272 : 46, 
+        63273 : 36, 
+        63275 : 35  
+    };
+
+    
+    var  U = Roo.isIE ? {1:0,4:1,2:2} :
+                (Roo.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
+
+    Roo.EventObjectImpl = function(e){
+        if(e){
+            this.setEvent(e.browserEvent || e);
+        }
+    };
+    Roo.EventObjectImpl.prototype = {
+        
+
+            
+
+        
+        
+        
+
+        browserEvent : null,
+        
+
+        button : -1,
+        
+
+        shiftKey : false,
+        
+
+        ctrlKey : false,
+        
+
+        altKey : false,
+
+        
+
+        BACKSPACE : 8,
+        
+
+        TAB : 9,
+        
+
+        RETURN  : 13,
+        
+
+        ENTER : 13,
+        
+
+        SHIFT : 16,
+        
+
+        CONTROL : 17,
+        
+
+        ESC : 27,
+        
+
+        SPACE : 32,
+        
+
+        PAGEUP : 33,
+        
+
+        PAGEDOWN : 34,
+        
+
+        END : 35,
+        
+
+        HOME : 36,
+        
+
+        LEFT : 37,
+        
+
+        UP : 38,
+        
+
+        RIGHT : 39,
+        
+
+        DOWN : 40,
+        
+
+        DELETE  : 46,
+        
+
+        F5 : 116,
+
+           
+
+        setEvent : function(e){
+            if(e == this || (e && e.browserEvent)){ 
+                return  e;
+            }
+
+            this.browserEvent = e;
+            if(e){
+                
+                this.button = e.button ? U[e.button] : (e.which ? e.which-1 : -1);
+                if(e.type == 'click' && this.button == -1){
+                    this.button = 0;
+                }
+
+                this.type = e.type;
+                this.shiftKey = e.shiftKey;
+                
+                this.ctrlKey = e.ctrlKey || e.metaKey;
+                this.altKey = e.altKey;
+                
+                this.keyCode = e.keyCode;
+                
+                this.charCode = (e.type == 'keyup' || e.type == 'keydown') ? 0 : e.charCode;
+                
+                this.target = E.getTarget(e);
+                
+                this.xy = E.getXY(e);
+            }else {
+                this.button = -1;
+                this.shiftKey = false;
+                this.ctrlKey = false;
+                this.altKey = false;
+                this.keyCode = 0;
+                this.charCode =0;
+                this.target = null;
+                this.xy = [0, 0];
+            }
+            return  this;
+        },
+
+        
+
+        stopEvent : function(){
+            if(this.browserEvent){
+                if(this.browserEvent.type == 'mousedown'){
+                    Roo.EventManager.stoppedMouseDownEvent.fire(this);
+                }
+
+                E.stopEvent(this.browserEvent);
+            }
+        },
+
+        
+
+        preventDefault : function(){
+            if(this.browserEvent){
+                E.preventDefault(this.browserEvent);
+            }
+        },
+
+        
+
+        isNavKeyPress : function(){
+            var  k = this.keyCode;
+            k = Roo.isSafari ? (T[k] || k) : k;
+            return  (k >= 33 && k <= 40) || k == this.RETURN  || k == this.TAB || k == this.ESC;
+        },
+
+        isSpecialKey : function(){
+            var  k = this.keyCode;
+            return  (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13  || k == 40 || k == 27 ||
+            (k == 16) || (k == 17) ||
+            (k >= 18 && k <= 20) ||
+            (k >= 33 && k <= 35) ||
+            (k >= 36 && k <= 39) ||
+            (k >= 44 && k <= 45);
+        },
+        
+
+        stopPropagation : function(){
+            if(this.browserEvent){
+                if(this.type == 'mousedown'){
+                    Roo.EventManager.stoppedMouseDownEvent.fire(this);
+                }
+
+                E.stopPropagation(this.browserEvent);
+            }
+        },
+
+        
+
+        getCharCode : function(){
+            return  this.charCode || this.keyCode;
+        },
+
+        
+
+        getKey : function(){
+            var  k = this.keyCode || this.charCode;
+            return  Roo.isSafari ? (T[k] || k) : k;
+        },
+
+        
+
+        getPageX : function(){
+            return  this.xy[0];
+        },
+
+        
+
+        getPageY : function(){
+            return  this.xy[1];
+        },
+
+        
+
+        getTime : function(){
+            if(this.browserEvent){
+                return  E.getTime(this.browserEvent);
+            }
+            return  null;
+        },
+
+        
+
+        getXY : function(){
+            return  this.xy;
+        },
+
+        
+
+        getTarget : function(V, W, X){
+            return  V ? Roo.fly(this.target).findParent(V, W, X) : this.target;
+        },
+        
+
+        getRelatedTarget : function(){
+            if(this.browserEvent){
+                return  E.getRelatedTarget(this.browserEvent);
+            }
+            return  null;
+        },
+
+        
+
+        getWheelDelta : function(){
+            var  e = this.browserEvent;
+            var  Y = 0;
+            if(e.wheelDelta){ 
+
+                Y = e.wheelDelta/120;
+            }else  if(e.detail){ 
+
+                Y = -e.detail/3;
+            }
+            return  Y;
+        },
+
+        
+
+        hasModifier : function(){
+            return  !!((this.ctrlKey || this.altKey) || this.shiftKey);
+        },
+
+        
+
+        within : function(el, Z){
+            var  t = this[Z ? "getRelatedTarget" : "getTarget"]();
+            return  t && Roo.fly(el).contains(t);
+        },
+
+        getPoint : function(){
+            return  new  Roo.lib.Point(this.xy[0], this.xy[1]);
+        }
+    };
+
+    return  new  Roo.EventObjectImpl();
+}();
+            
+    
+
+
+
+
+(function(){
+    var  D = Roo.lib.Dom;
+    var  E = Roo.lib.Event;
+    var  A = Roo.lib.Anim;
+
+    
+    var  B = {};
+    var  C = /(-[a-z])/gi;
+    var  F = function(m, a){ return  a.charAt(1).toUpperCase(); };
+    var  G = document.defaultView;
+
+
+
+    Roo.Element = function(J, K){
+        var  L = typeof  J == "string" ?
+                document.getElementById(J) : J;
+        if(!L){ 
+            return  null;
+        }
+        var  id = L.id;
+        if(K !== true && id && Roo.Element.cache[id]){ 
+            return  Roo.Element.cache[id];
+        }
+
+
+        
+
+        this.dom = L;
+
+        
+
+        this.id = id || Roo.id(L);
+    };
+
+    var  El = Roo.Element;
+
+    El.prototype = {
+        
+
+        originalDisplay : "",
+
+        visibilityMode : 1,
+        
+
+        defaultUnit : "px",
+        
+
+        setVisibilityMode : function(J){
+            this.visibilityMode = J;
+            return  this;
+        },
+        
+
+        enableDisplayMode : function(K){
+            this.setVisibilityMode(El.DISPLAY);
+            if(typeof  K != "undefined") this.originalDisplay = K;
+            return  this;
+        },
+
+        
+
+        findParent : function(L, M, N){
+            var  p = this.dom, b = document.body, O = 0, dq = Roo.DomQuery, P;
+            M = M || 50;
+            if(typeof  M != "number"){
+                P = Roo.getDom(M);
+                M = 10;
+            }
+            while(p && p.nodeType == 1 && O < M && p != b && p != P){
+                if(dq.is(p, L)){
+                    return  N ? Roo.get(p) : p;
+                }
+
+                O++;
+                p = p.parentNode;
+            }
+            return  null;
+        },
+
+
+        
+
+        findParentNode : function(Q, R, S){
+            var  p = Roo.fly(this.dom.parentNode, '_internal');
+            return  p ? p.findParent(Q, R, S) : null;
+        },
+
+        
+
+        up : function(T, U){
+            return  this.findParentNode(T, U, true);
+        },
+
+
+
+        
+
+        is : function(V){
+            return  Roo.DomQuery.is(this.dom, V);
+        },
+
+        
+
+        animate : function(W, X, Y, Z, c){
+            this.anim(W, {duration: X, callback: Y, easing: Z}, c);
+            return  this;
+        },
+
+        
+
+        anim : function(e, g, h, j, k, cb){
+            h = h || 'run';
+            g = g || {};
+            var  l = Roo.lib.Anim[h](
+                this.dom, e,
+                (g.duration || j) || .35,
+                (g.easing || k) || 'easeOut',
+                function(){
+                    Roo.callback(cb, this);
+                    Roo.callback(g.callback, g.scope || this, [this, g]);
+                },
+                this
+            );
+            g.anim = l;
+            return  l;
+        },
+
+        
+        preanim : function(a, i){
+            return  !a[i] ? false : (typeof  a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
+        },
+
+        
+
+        clean : function(o){
+            if(this.isCleaned && o !== true){
+                return  this;
+            }
+            var  ns = /\S/;
+            var  d = this.dom, n = d.firstChild, ni = -1;
+            while(n){
+                var  nx = n.nextSibling;
+                if(n.nodeType == 3 && !ns.test(n.nodeValue)){
+                    d.removeChild(n);
+                }else {
+                    n.nodeIndex = ++ni;
+                }
+
+                n = nx;
+            }
+
+            this.isCleaned = true;
+            return  this;
+        },
+
+        
+        calcOffsetsTo : function(el){
+            el = Roo.get(el);
+            var  d = el.dom;
+            var  q = false;
+            if(el.getStyle('position') == 'static'){
+                el.position('relative');
+                q = true;
+            }
+            var  x = 0, y =0;
+            var  op = this.dom;
+            while(op && op != d && op.tagName != 'HTML'){
+                x+= op.offsetLeft;
+                y+= op.offsetTop;
+                op = op.offsetParent;
+            }
+            if(q){
+                el.position('static');
+            }
+            return  [x, y];
+        },
+
+        
+
+        scrollIntoView : function(u, v){
+            var  c = Roo.getDom(u) || document.body;
+            var  el = this.dom;
+
+            var  o = this.calcOffsetsTo(c),
+                l = o[0],
+                t = o[1],
+                b = t+el.offsetHeight,
+                r = l+el.offsetWidth;
+
+            var  ch = c.clientHeight;
+            var  ct = parseInt(c.scrollTop, 10);
+            var  cl = parseInt(c.scrollLeft, 10);
+            var  cb = ct + ch;
+            var  cr = cl + c.clientWidth;
+
+            if(t < ct){
+                c.scrollTop = t;
+            }else  if(b > cb){
+                c.scrollTop = b-ch;
+            }
+
+            if(v !== false){
+                if(l < cl){
+                    c.scrollLeft = l;
+                }else  if(r > cr){
+                    c.scrollLeft = r-c.clientWidth;
+                }
+            }
+            return  this;
+        },
+
+        
+        scrollChildIntoView : function(w, z){
+            Roo.fly(w, '_scrollChildIntoView').scrollIntoView(this, z);
+        },
+
+        
+
+        autoHeight : function(AA, AB, AC, AD){
+            var  AE = this.getHeight();
+            this.clip();
+            this.setHeight(1); 
+            setTimeout(function(){
+                var  AG = parseInt(this.dom.scrollHeight, 10); 
+                if(!AA){
+                    this.setHeight(AG);
+                    this.unclip();
+                    if(typeof  AC == "function"){
+                        AC();
+                    }
+                }else {
+                    this.setHeight(AE); 
+                    this.setHeight(AG, AA, AB, function(){
+                        this.unclip();
+                        if(typeof  AC == "function") AC();
+                    }.createDelegate(this), AD);
+                }
+            }.createDelegate(this), 0);
+            return  this;
+        },
+
+        
+
+        contains : function(el){
+            if(!el){return  false;}
+            return  D.isAncestor(this.dom, el.dom ? el.dom : el);
+        },
+
+        
+
+        isVisible : function(AF) {
+            var  AG = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
+            if(AF !== true || !AG){
+                return  AG;
+            }
+            var  p = this.dom.parentNode;
+            while(p && p.tagName.toLowerCase() != "body"){
+                if(!Roo.fly(p, '_isVisible').isVisible()){
+                    return  false;
+                }
+
+                p = p.parentNode;
+            }
+            return  true;
+        },
+
+        
+
+        select : function(AH, AI){
+            return  El.select(AH, AI, this.dom);
+        },
+
+        
+
+        query : function(AJ, AK){
+            return  Roo.DomQuery.select(AJ, this.dom);
+        },
+
+        
+
+        child : function(AL, AM){
+            var  n = Roo.DomQuery.selectNode(AL, this.dom);
+            return  AM ? n : Roo.get(n);
+        },
+
+        
+
+        down : function(AN, AO){
+            var  n = Roo.DomQuery.selectNode(" > " + AN, this.dom);
+            return  AO ? n : Roo.get(n);
+        },
+
+        
+
+        initDD : function(AP, AQ, AR){
+            var  dd = new  Roo.dd.DD(Roo.id(this.dom), AP, AQ);
+            return  Roo.apply(dd, AR);
+        },
+
+        
+
+        initDDProxy : function(AS, AT, AU){
+            var  dd = new  Roo.dd.DDProxy(Roo.id(this.dom), AS, AT);
+            return  Roo.apply(dd, AU);
+        },
+
+        
+
+        initDDTarget : function(AV, AW, AX){
+            var  dd = new  Roo.dd.DDTarget(Roo.id(this.dom), AV, AW);
+            return  Roo.apply(dd, AX);
+        },
+
+        
+
+         setVisible : function(AY, AZ){
+            if(!AZ || !A){
+                if(this.visibilityMode == El.DISPLAY){
+                    this.setDisplayed(AY);
+                }else {
+                    this.fixDisplay();
+                    this.dom.style.visibility = AY ? "visible" : "hidden";
+                }
+            }else {
+                
+                var  dom = this.dom;
+                var  J = this.visibilityMode;
+                if(AY){
+                    this.setOpacity(.01);
+                    this.setVisible(true);
+                }
+
+                this.anim({opacity: { to: (AY?1:0) }},
+                      this.preanim(arguments, 1),
+                      null, .35, 'easeIn', function(){
+                         if(!AY){
+                             if(J == El.DISPLAY){
+                                 dom.style.display = "none";
+                             }else {
+                                 dom.style.visibility = "hidden";
+                             }
+
+                             Roo.get(dom).setOpacity(1);
+                         }
+                     });
+            }
+            return  this;
+        },
+
+        
+
+        isDisplayed : function() {
+            return  this.getStyle("display") != "none";
+        },
+
+        
+
+        toggle : function(Aa){
+            this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        setDisplayed : function(Ab) {
+            if(typeof  Ab == "boolean"){
+               Ab = Ab ? this.originalDisplay : "none";
+            }
+
+            this.setStyle("display", Ab);
+            return  this;
+        },
+
+        
+
+        focus : function() {
+            try{
+                this.dom.focus();
+            }catch(e){}
+            return  this;
+        },
+
+        
+
+        blur : function() {
+            try{
+                this.dom.blur();
+            }catch(e){}
+            return  this;
+        },
+
+        
+
+        addClass : function(Ac){
+            if(Ac  instanceof  Array){
+                for(var  i = 0, len = Ac.length; i < len; i++) {
+                    this.addClass(Ac[i]);
+                }
+            }else {
+                if(Ac && !this.hasClass(Ac)){
+                    this.dom.className = this.dom.className + " " + Ac;
+                }
+            }
+            return  this;
+        },
+
+        
+
+        radioClass : function(Ad){
+            var  Ae = this.dom.parentNode.childNodes;
+            for(var  i = 0; i < Ae.length; i++) {
+                var  s = Ae[i];
+                if(s.nodeType == 1){
+                    Roo.get(s).removeClass(Ad);
+                }
+            }
+
+            this.addClass(Ad);
+            return  this;
+        },
+
+        
+
+        removeClass : function(Af){
+            if(!Af || !this.dom.className){
+                return  this;
+            }
+            if(Af  instanceof  Array){
+                for(var  i = 0, len = Af.length; i < len; i++) {
+                    this.removeClass(Af[i]);
+                }
+            }else {
+                if(this.hasClass(Af)){
+                    var  re = this.classReCache[Af];
+                    if (!re) {
+                       re = new  RegExp('(?:^|\\s+)' + Af + '(?:\\s+|$)', "g");
+                       this.classReCache[Af] = re;
+                    }
+
+                    this.dom.className =
+                        this.dom.className.replace(re, " ");
+                }
+            }
+            return  this;
+        },
+
+        
+        classReCache: {},
+
+        
+
+        toggleClass : function(Ag){
+            if(this.hasClass(Ag)){
+                this.removeClass(Ag);
+            }else {
+                this.addClass(Ag);
+            }
+            return  this;
+        },
+
+        
+
+        hasClass : function(Ah){
+            return  Ah && (' '+this.dom.className+' ').indexOf(' '+Ah+' ') != -1;
+        },
+
+        
+
+        replaceClass : function(Ai, Aj){
+            this.removeClass(Ai);
+            this.addClass(Aj);
+            return  this;
+        },
+
+        
+
+        getStyles : function(){
+            var  a = arguments, Ak = a.length, r = {};
+            for(var  i = 0; i < Ak; i++){
+                r[a[i]] = this.getStyle(a[i]);
+            }
+            return  r;
+        },
+
+        
+
+        getStyle : function(){
+            return  G && G.getComputedStyle ?
+                function(Al){
+                    var  el = this.dom, v, cs, Am;
+                    if(Al == 'float'){
+                        Al = "cssFloat";
+                    }
+                    if(el.style && (v = el.style[Al])){
+                        return  v;
+                    }
+                    if(cs = G.getComputedStyle(el, "")){
+                        if(!(Am = B[Al])){
+                            Am = B[Al] = Al.replace(C, F);
+                        }
+                        return  cs[Am];
+                    }
+                    return  null;
+                } :
+                function(Al){
+                    var  el = this.dom, v, cs, Am;
+                    if(Al == 'opacity'){
+                        if(typeof  el.style.filter == 'string'){
+                            var  m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
+                            if(m){
+                                var  fv = parseFloat(m[1]);
+                                if(!isNaN(fv)){
+                                    return  fv ? fv / 100 : 0;
+                                }
+                            }
+                        }
+                        return  1;
+                    }else  if(Al == 'float'){
+                        Al = "styleFloat";
+                    }
+                    if(!(Am = B[Al])){
+                        Am = B[Al] = Al.replace(C, F);
+                    }
+                    if(v = el.style[Am]){
+                        return  v;
+                    }
+                    if(cs = el.currentStyle){
+                        return  cs[Am];
+                    }
+                    return  null;
+                };
+        }(),
+
+        
+
+        setStyle : function(Al, Am){
+            if(typeof  Al == "string"){
+                
+                if (Al == 'float') {
+                    this.setStyle(Roo.isIE ? 'styleFloat'  : 'cssFloat', Am);
+                    return  this;
+                }
+                
+                var  camel;
+                if(!(camel = B[Al])){
+                    camel = B[Al] = Al.replace(C, F);
+                }
+                
+                if(camel == 'opacity') {
+                    this.setOpacity(Am);
+                }else {
+                    this.dom.style[camel] = Am;
+                }
+            }else {
+                for(var  style  in  Al){
+                    if(typeof  Al[style] != "function"){
+                       this.setStyle(style, Al[style]);
+                    }
+                }
+            }
+            return  this;
+        },
+
+        
+
+        applyStyles : function(An){
+            Roo.DomHelper.applyStyles(this.dom, An);
+            return  this;
+        },
+
+        
+
+        getX : function(){
+            return  D.getX(this.dom);
+        },
+
+        
+
+        getY : function(){
+            return  D.getY(this.dom);
+        },
+
+        
+
+        getXY : function(){
+            return  D.getXY(this.dom);
+        },
+
+        
+
+        setX : function(x, Ao){
+            if(!Ao || !A){
+                D.setX(this.dom, x);
+            }else {
+                this.setXY([x, this.getY()], this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+        setY : function(y, Ap){
+            if(!Ap || !A){
+                D.setY(this.dom, y);
+            }else {
+                this.setXY([this.getX(), y], this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+        setLeft : function(Aq){
+            this.setStyle("left", this.addUnits(Aq));
+            return  this;
+        },
+
+        
+
+        setTop : function(Ar){
+            this.setStyle("top", this.addUnits(Ar));
+            return  this;
+        },
+
+        
+
+        setRight : function(As){
+            this.setStyle("right", this.addUnits(As));
+            return  this;
+        },
+
+        
+
+        setBottom : function(At){
+            this.setStyle("bottom", this.addUnits(At));
+            return  this;
+        },
+
+        
+
+        setXY : function(Au, Av){
+            if(!Av || !A){
+                D.setXY(this.dom, Au);
+            }else {
+                this.anim({points: {to: Au}}, this.preanim(arguments, 1), 'motion');
+            }
+            return  this;
+        },
+
+        
+
+        setLocation : function(x, y, Aw){
+            this.setXY([x, y], this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+        moveTo : function(x, y, Ax){
+            this.setXY([x, y], this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+        getRegion : function(){
+            return  D.getRegion(this.dom);
+        },
+
+        
+
+        getHeight : function(Ay){
+            var  h = this.dom.offsetHeight || 0;
+            return  Ay !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
+        },
+
+        
+
+        getWidth : function(Az){
+            var  w = this.dom.offsetWidth || 0;
+            return  Az !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
+        },
+
+        
+
+        getComputedHeight : function(){
+            var  h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
+            if(!h){
+                h = parseInt(this.getStyle('height'), 10) || 0;
+                if(!this.isBorderBox()){
+                    h += this.getFrameWidth('tb');
+                }
+            }
+            return  h;
+        },
+
+        
+
+        getComputedWidth : function(){
+            var  w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
+            if(!w){
+                w = parseInt(this.getStyle('width'), 10) || 0;
+                if(!this.isBorderBox()){
+                    w += this.getFrameWidth('lr');
+                }
+            }
+            return  w;
+        },
+
+        
+
+        getSize : function(A0){
+            return  {width: this.getWidth(A0), height: this.getHeight(A0)};
+        },
+
+        
+
+        getViewSize : function(){
+            var  d = this.dom, A1 = document, aw = 0, ah = 0;
+            if(d == A1 || d == A1.body){
+                return  {width : D.getViewWidth(), height: D.getViewHeight()};
+            }else {
+                return  {
+                    width : d.clientWidth,
+                    height: d.clientHeight
+                };
+            }
+        },
+
+        
+
+        getValue : function(A2){
+            return  A2 ? parseInt(this.dom.value, 10) : this.dom.value;
+        },
+
+        
+        adjustWidth : function(A3){
+            if(typeof  A3 == "number"){
+                if(this.autoBoxAdjust && !this.isBorderBox()){
+                   A3 -= (this.getBorderWidth("lr") + this.getPadding("lr"));
+                }
+                if(A3 < 0){
+                    A3 = 0;
+                }
+            }
+            return  A3;
+        },
+
+        
+        adjustHeight : function(A4){
+            if(typeof  A4 == "number"){
+               if(this.autoBoxAdjust && !this.isBorderBox()){
+                   A4 -= (this.getBorderWidth("tb") + this.getPadding("tb"));
+               }
+               if(A4 < 0){
+                   A4 = 0;
+               }
+            }
+            return  A4;
+        },
+
+        
+
+        setWidth : function(A5, A6){
+            A5 = this.adjustWidth(A5);
+            if(!A6 || !A){
+                this.dom.style.width = this.addUnits(A5);
+            }else {
+                this.anim({width: {to: A5}}, this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+         setHeight : function(A7, A8){
+            A7 = this.adjustHeight(A7);
+            if(!A8 || !A){
+                this.dom.style.height = this.addUnits(A7);
+            }else {
+                this.anim({height: {to: A7}}, this.preanim(arguments, 1));
+            }
+            return  this;
+        },
+
+        
+
+         setSize : function(A9, BA, BB){
+            if(typeof  A9 == "object"){ 
+                BA = A9.height; A9 = A9.width;
+            }
+
+            A9 = this.adjustWidth(A9); BA = this.adjustHeight(BA);
+            if(!BB || !A){
+                this.dom.style.width = this.addUnits(A9);
+                this.dom.style.height = this.addUnits(BA);
+            }else {
+                this.anim({width: {to: A9}, height: {to: BA}}, this.preanim(arguments, 2));
+            }
+            return  this;
+        },
+
+        
+
+        setBounds : function(x, y, BC, BD, BE){
+            if(!BE || !A){
+                this.setSize(BC, BD);
+                this.setLocation(x, y);
+            }else {
+                BC = this.adjustWidth(BC); BD = this.adjustHeight(BD);
+                this.anim({points: {to: [x, y]}, width: {to: BC}, height: {to: BD}},
+                              this.preanim(arguments, 4), 'motion');
+            }
+            return  this;
+        },
+
+        
+
+        setRegion : function(BF, BG){
+            this.setBounds(BF.left, BF.top, BF.right-BF.left, BF.bottom-BF.top, this.preanim(arguments, 1));
+            return  this;
+        },
+
+        
+
+        addListener : function(BH, fn, BI, BJ){
+            Roo.EventManager.on(this.dom,  BH, fn, BI || this, BJ);
+        },
+
+        
+
+        removeListener : function(BK, fn){
+            Roo.EventManager.removeListener(this.dom,  BK, fn);
+            return  this;
+        },
+
+        
+
+        removeAllListeners : function(){
+            E.purgeElement(this.dom);
+            return  this;
+        },
+
+        relayEvent : function(BL, BM){
+            this.on(BL, function(e){
+                BM.fireEvent(BL, e);
+            });
+        },
+
+        
+
+         setOpacity : function(BN, BO){
+            if(!BO || !A){
+                var  s = this.dom.style;
+                if(Roo.isIE){
+                    s.zoom = 1;
+                    s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
+                               (BN == 1 ? "" : "alpha(opacity=" + BN * 100 + ")");
+                }else {
+                    s.opacity = BN;
+                }
+            }else {
+                this.anim({opacity: {to: BN}}, this.preanim(arguments, 1), null, .35, 'easeIn');
+            }
+            return  this;
+        },
+
+        
+
+        getLeft : function(BP){
+            if(!BP){
+                return  this.getX();
+            }else {
+                return  parseInt(this.getStyle("left"), 10) || 0;
+            }
+        },
+
+        
+
+        getRight : function(BQ){
+            if(!BQ){
+                return  this.getX() + this.getWidth();
+            }else {
+                return  (this.getLeft(true) + this.getWidth()) || 0;
+            }
+        },
+
+        
+
+        getTop : function(BR) {
+            if(!BR){
+                return  this.getY();
+            }else {
+                return  parseInt(this.getStyle("top"), 10) || 0;
+            }
+        },
+
+        
+
+        getBottom : function(BS){
+            if(!BS){
+                return  this.getY() + this.getHeight();
+            }else {
+                return  (this.getTop(true) + this.getHeight()) || 0;
+            }
+        },
+
+        
+
+        position : function(BT, BU, x, y){
+            if(!BT){
+               if(this.getStyle('position') == 'static'){
+                   this.setStyle('position', 'relative');
+               }
+            }else {
+                this.setStyle("position", BT);
+            }
+            if(BU){
+                this.setStyle("z-index", BU);
+            }
+            if(x !== undefined && y !== undefined){
+                this.setXY([x, y]);
+            }else  if(x !== undefined){
+                this.setX(x);
+            }else  if(y !== undefined){
+                this.setY(y);
+            }
+        },
+
+        
+
+        clearPositioning : function(BV){
+            BV = BV ||'';
+            this.setStyle({
+                "left": BV,
+                "right": BV,
+                "top": BV,
+                "bottom": BV,
+                "z-index": "",
+                "position" : "static"
+            });
+            return  this;
+        },
+
+        
+
+        getPositioning : function(){
+            var  l = this.getStyle("left");
+            var  t = this.getStyle("top");
+            return  {
+                "position" : this.getStyle("position"),
+                "left" : l,
+                "right" : l ? "" : this.getStyle("right"),
+                "top" : t,
+                "bottom" : t ? "" : this.getStyle("bottom"),
+                "z-index" : this.getStyle("z-index")
+            };
+        },
+
+        
+
+        getBorderWidth : function(BW){
+            return  this.addStyles(BW, El.borders);
+        },
+
+        
+
+        getPadding : function(BX){
+            return  this.addStyles(BX, El.paddings);
+        },
+
+        
+
+        setPositioning : function(pc){
+            this.applyStyles(pc);
+            if(pc.right == "auto"){
+                this.dom.style.right = "";
+            }
+            if(pc.bottom == "auto"){
+                this.dom.style.bottom = "";
+            }
+            return  this;
+        },
+
+        
+        fixDisplay : function(){
+            if(this.getStyle("display") == "none"){
+                this.setStyle("visibility", "hidden");
+                this.setStyle("display", this.originalDisplay); 
+                if(this.getStyle("display") == "none"){ 
+                    this.setStyle("display", "block");
+                }
+            }
+        },
+
+        
+
+         setLeftTop : function(BY, BZ){
+            this.dom.style.left = this.addUnits(BY);
+            this.dom.style.top = this.addUnits(BZ);
+            return  this;
+        },
+
+        
+
+         move : function(Ba, Bb, Bc){
+            var  xy = this.getXY();
+            Ba = Ba.toLowerCase();
+            switch(Ba){
+                case  "l":
+                case  "left":
+                    this.moveTo(xy[0]-Bb, xy[1], this.preanim(arguments, 2));
+                    break;
+               case  "r":
+               case  "right":
+                    this.moveTo(xy[0]+Bb, xy[1], this.preanim(arguments, 2));
+                    break;
+               case  "t":
+               case  "top":
+               case  "up":
+                    this.moveTo(xy[0], xy[1]-Bb, this.preanim(arguments, 2));
+                    break;
+               case  "b":
+               case  "bottom":
+               case  "down":
+                    this.moveTo(xy[0], xy[1]+Bb, this.preanim(arguments, 2));
+                    break;
+            }
+            return  this;
+        },
+
+        
+
+        clip : function(){
+            if(!this.isClipped){
+               this.isClipped = true;
+               this.originalClip = {
+                   "o": this.getStyle("overflow"),
+                   "x": this.getStyle("overflow-x"),
+                   "y": this.getStyle("overflow-y")
+               };
+               this.setStyle("overflow", "hidden");
+               this.setStyle("overflow-x", "hidden");
+               this.setStyle("overflow-y", "hidden");
+            }
+            return  this;
+        },
+
+        
+
+        unclip : function(){
+            if(this.isClipped){
+                this.isClipped = false;
+                var  o = this.originalClip;
+                if(o.o){this.setStyle("overflow", o.o);}
+                if(o.x){this.setStyle("overflow-x", o.x);}
+                if(o.y){this.setStyle("overflow-y", o.y);}
+            }
+            return  this;
+        },
+
+
+        
+
+        getAnchorXY : function(Bd, Be, s){
+            
+            
+
+            var  w, h, vp = false;
+            if(!s){
+                var  d = this.dom;
+                if(d == document.body || d == document){
+                    vp = true;
+                    w = D.getViewWidth(); h = D.getViewHeight();
+                }else {
+                    w = this.getWidth(); h = this.getHeight();
+                }
+            }else {
+                w = s.width;  h = s.height;
+            }
+            var  x = 0, y = 0, r = Math.round;
+            switch((Bd || "tl").toLowerCase()){
+                case  "c":
+                    x = r(w*.5);
+                    y = r(h*.5);
+                break;
+                case  "t":
+                    x = r(w*.5);
+                    y = 0;
+                break;
+                case  "l":
+                    x = 0;
+                    y = r(h*.5);
+                break;
+                case  "r":
+                    x = w;
+                    y = r(h*.5);
+                break;
+                case  "b":
+                    x = r(w*.5);
+                    y = h;
+                break;
+                case  "tl":
+                    x = 0;
+                    y = 0;
+                break;
+                case  "bl":
+                    x = 0;
+                    y = h;
+                break;
+                case  "br":
+                    x = w;
+                    y = h;
+                break;
+                case  "tr":
+                    x = w;
+                    y = 0;
+                break;
+            }
+            if(Be === true){
+                return  [x, y];
+            }
+            if(vp){
+                var  sc = this.getScroll();
+                return  [x + sc.left, y + sc.top];
+            }
+            
+            var  o = this.getXY();
+            return  [x+o[0], y+o[1]];
+        },
+
+        
+
+        getAlignToXY : function(el, p, o){
+            el = Roo.get(el);
+            var  d = this.dom;
+            if(!el.dom){
+                throw  "Element.alignTo with an element that doesn't exist";
+            }
+            var  c = false; 
+            var  p1 = "", p2 = "";
+            o = o || [0,0];
+
+            if(!p){
+                p = "tl-bl";
+            }else  if(p == "?"){
+                p = "tl-bl?";
+            }else  if(p.indexOf("-") == -1){
+                p = "tl-" + p;
+            }
+
+            p = p.toLowerCase();
+            var  m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
+            if(!m){
+               throw  "Element.alignTo with an invalid alignment " + p;
+            }
+
+            p1 = m[1]; p2 = m[2]; c = !!m[3];
+
+            
+            
+            var  a1 = this.getAnchorXY(p1, true);
+            var  a2 = el.getAnchorXY(p2, false);
+            var  x = a2[0] - a1[0] + o[0];
+            var  y = a2[1] - a1[1] + o[1];
+            if(c){
+                
+                var  w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
+                
+                var  dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
+
+                
+                
+                
+                var  p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
+               var  p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
+               var  swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
+               var  swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
+
+               var  A1 = document;
+               var  scrollX = (A1.documentElement.scrollLeft || A1.body.scrollLeft || 0)+5;
+               var  scrollY = (A1.documentElement.scrollTop || A1.body.scrollTop || 0)+5;
+
+               if((x+w) > dw + scrollX){
+                    x = swapX ? r.left-w : dw+scrollX-w;
+                }
+               if(x < scrollX){
+                   x = swapX ? r.right : scrollX;
+               }
+               if((y+h) > dh + scrollY){
+                    y = swapY ? r.top-h : dh+scrollY-h;
+                }
+               if (y < scrollY){
+                   y = swapY ? r.bottom : scrollY;
+               }
+            }
+            return  [x,y];
+        },
+
+        
+        getConstrainToXY : function(){
+            var  os = {top:0, left:0, bottom:0, right: 0};
+
+            return  function(el, Bf, Bg, Bh){
+                el = Roo.get(el);
+                Bg = Bg ? Roo.applyIf(Bg, os) : os;
+
+                var  vw, vh, vx = 0, vy = 0;
+                if(el.dom == document.body || el.dom == document){
+                    vw = Roo.lib.Dom.getViewWidth();
+                    vh = Roo.lib.Dom.getViewHeight();
+                }else {
+                    vw = el.dom.clientWidth;
+                    vh = el.dom.clientHeight;
+                    if(!Bf){
+                        var  vxy = el.getXY();
+                        vx = vxy[0];
+                        vy = vxy[1];
+                    }
+                }
+
+                var  s = el.getScroll();
+
+                vx += Bg.left + s.left;
+                vy += Bg.top + s.top;
+
+                vw -= Bg.right;
+                vh -= Bg.bottom;
+
+                var  vr = vx+vw;
+                var  vb = vy+vh;
+
+                var  xy = Bh || (!Bf ? this.getXY() : [this.getLeft(true), this.getTop(true)]);
+                var  x = xy[0], y = xy[1];
+                var  w = this.dom.offsetWidth, h = this.dom.offsetHeight;
+
+                
+                var  Bi = false;
+
+                
+                if((x + w) > vr){
+                    x = vr - w;
+                    Bi = true;
+                }
+                if((y + h) > vb){
+                    y = vb - h;
+                    Bi = true;
+                }
+                
+                if(x < vx){
+                    x = vx;
+                    Bi = true;
+                }
+                if(y < vy){
+                    y = vy;
+                    Bi = true;
+                }
+                return  Bi ? [x, y] : false;
+            };
+        }(),
+
+        
+        adjustForConstraints : function(xy, Bf, Bg){
+            return  this.getConstrainToXY(Bf || document, false, Bg, xy) ||  xy;
+        },
+
+        
+
+        alignTo : function(Bh, Bi, Bj, Bk){
+            var  xy = this.getAlignToXY(Bh, Bi, Bj);
+            this.setXY(xy, this.preanim(arguments, 3));
+            return  this;
+        },
+
+        
+
+        anchorTo : function(el, Bl, Bm, Bn, Bo, Bp){
+            var  Bq = function(){
+                this.alignTo(el, Bl, Bm, Bn);
+                Roo.callback(Bp, this);
+            };
+            Roo.EventManager.onWindowResize(Bq, this);
+            var  tm = typeof  Bo;
+            if(tm != 'undefined'){
+                Roo.EventManager.on(window, 'scroll', Bq, this,
+                    {buffer: tm == 'number' ? Bo : 50});
+            }
+
+            Bq.call(this); 
+            return  this;
+        },
+        
+
+        clearOpacity : function(){
+            if (window.ActiveXObject) {
+                if(typeof  this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
+                    this.dom.style.filter = "";
+                }
+            } else  {
+                this.dom.style.opacity = "";
+                this.dom.style["-moz-opacity"] = "";
+                this.dom.style["-khtml-opacity"] = "";
+            }
+            return  this;
+        },
+
+        
+
+        hide : function(Br){
+            this.setVisible(false, this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        show : function(Bs){
+            this.setVisible(true, this.preanim(arguments, 0));
+            return  this;
+        },
+
+        
+
+        addUnits : function(Bt){
+            return  Roo.Element.addUnits(Bt, this.defaultUnit);
+        },
+
+        
+
+        beginMeasure : function(){
+            var  el = this.dom;
+            if(el.offsetWidth || el.offsetHeight){
+                return  this; 
+            }
+            var  Bu = [];
+            var  p = this.dom, b = document.body; 
+            while((!el.offsetWidth && !el.offsetHeight) && p && p.tagName && p != b){
+                var  pe = Roo.get(p);
+                if(pe.getStyle('display') == 'none'){
+                    Bu.push({el: p, visibility: pe.getStyle("visibility")});
+                    p.style.visibility = "hidden";
+                    p.style.display = "block";
+                }
+
+                p = p.parentNode;
+            }
+
+            this._measureChanged = Bu;
+            return  this;
+
+        },
+
+        
+
+        endMeasure : function(){
+            var  Bv = this._measureChanged;
+            if(Bv){
+                for(var  i = 0, Ak = Bv.length; i < Ak; i++) {
+                    var  r = Bv[i];
+                    r.el.style.visibility = r.visibility;
+                    r.el.style.display = "none";
+                }
+
+                this._measureChanged = null;
+            }
+            return  this;
+        },
+
+        
+
+        update : function(Bw, Bx, By){
+            if(typeof  Bw == "undefined"){
+                Bw = "";
+            }
+            if(Bx !== true){
+                this.dom.innerHTML = Bw;
+                if(typeof  By == "function"){
+                    By();
+                }
+                return  this;
+            }
+            var  id = Roo.id();
+            var  Bz = this.dom;
+
+            Bw += '<span id="' + id + '"></span>';
+
+            E.onAvailable(id, function(){
+                var  hd = document.getElementsByTagName("head")[0];
+                var  re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
+                var  B0 = /\ssrc=([\'\"])(.*?)\1/i;
+                var  B1 = /\stype=([\'\"])(.*?)\1/i;
+
+                var  B2;
+                while(B2 = re.exec(Bw)){
+                    var  attrs = B2[1];
+                    var  srcMatch = attrs ? attrs.match(B0) : false;
+                    if(srcMatch && srcMatch[2]){
+                       var  s = document.createElement("script");
+                       s.src = srcMatch[2];
+                       var  typeMatch = attrs.match(B1);
+                       if(typeMatch && typeMatch[2]){
+                           s.type = typeMatch[2];
+                       }
+
+                       hd.appendChild(s);
+                    }else  if(B2[2] && B2[2].length > 0){
+                        if(window.execScript) {
+                           window.execScript(B2[2]);
+                        } else  {
+                            
+
+                           window.eval(B2[2]);
+                        }
+                    }
+                }
+                var  el = document.getElementById(id);
+                if(el){el.parentNode.removeChild(el);}
+                if(typeof  By == "function"){
+                    By();
+                }
+            });
+            Bz.innerHTML = Bw.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
+            return  this;
+        },
+
+        
+
+        load : function(){
+            var  um = this.getUpdateManager();
+            um.update.apply(um, arguments);
+            return  this;
+        },
+
+        
+
+        getUpdateManager : function(){
+            if(!this.updateManager){
+                this.updateManager = new  Roo.UpdateManager(this);
+            }
+            return  this.updateManager;
+        },
+
+        
+
+        unselectable : function(){
+            this.dom.unselectable = "on";
+            this.swallowEvent("selectstart", true);
+            this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
+            this.addClass("x-unselectable");
+            return  this;
+        },
+
+        
+
+        getCenterXY : function(){
+            return  this.getAlignToXY(document, 'c-c');
+        },
+
+        
+
+        center : function(B0){
+            this.alignTo(B0 || document, 'c-c');
+            return  this;
+        },
+
+        
+
+        isBorderBox : function(){
+            return  I[this.dom.tagName.toLowerCase()] || Roo.isBorderBox;
+        },
+
+        
+
+        getBox : function(B1, B2){
+            var  xy;
+            if(!B2){
+                xy = this.getXY();
+            }else {
+                var  BY = parseInt(this.getStyle("left"), 10) || 0;
+                var  BZ = parseInt(this.getStyle("top"), 10) || 0;
+                xy = [BY, BZ];
+            }
+            var  el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
+            if(!B1){
+                bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
+            }else {
+                var  l = this.getBorderWidth("l")+this.getPadding("l");
+                var  r = this.getBorderWidth("r")+this.getPadding("r");
+                var  t = this.getBorderWidth("t")+this.getPadding("t");
+                var  b = this.getBorderWidth("b")+this.getPadding("b");
+                bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
+            }
+
+            bx.right = bx.x + bx.width;
+            bx.bottom = bx.y + bx.height;
+            return  bx;
+        },
+
+        
+
+        getFrameWidth : function(B3, B4){
+            return  B4 && Roo.isBorderBox ? 0 : (this.getPadding(B3) + this.getBorderWidth(B3));
+        },
+
+        
+
+        setBox : function(B5, B6, B7){
+            var  w = B5.width, h = B5.height;
+            if((B6 && !this.autoBoxAdjust) && !this.isBorderBox()){
+               w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
+               h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
+            }
+
+            this.setBounds(B5.x, B5.y, w, h, this.preanim(arguments, 2));
+            return  this;
+        },
+
+        
+
+         repaint : function(){
+            var  B8 = this.dom;
+            this.addClass("x-repaint");
+            setTimeout(function(){
+                Roo.get(B8).removeClass("x-repaint");
+            }, 1);
+            return  this;
+        },
+
+        
+
+        getMargins : function(B9){
+            if(!B9){
+                return  {
+                    top: parseInt(this.getStyle("margin-top"), 10) || 0,
+                    left: parseInt(this.getStyle("margin-left"), 10) || 0,
+                    bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
+                    right: parseInt(this.getStyle("margin-right"), 10) || 0
+                };
+            }else {
+                return  this.addStyles(B9, El.margins);
+             }
+        },
+
+        
+        addStyles : function(CA, CB){
+            var  CC = 0, v, w;
+            for(var  i = 0, Ak = CA.length; i < Ak; i++){
+                v = this.getStyle(CB[CA.charAt(i)]);
+                if(v){
+                     w = parseInt(v, 10);
+                     if(w){ CC += w; }
+                }
+            }
+            return  CC;
+        },
+
+        
+
+        createProxy : function(CD, CE, CF){
+            if(CE){
+                CE = Roo.getDom(CE);
+            }else {
+                CE = document.body;
+            }
+
+            CD = typeof  CD == "object" ?
+                CD : {tag : "div", cls: CD};
+            var  CG = Roo.DomHelper.append(CE, CD, true);
+            if(CF){
+               CG.setBox(this.getBox());
+            }
+            return  CG;
+        },
+
+        
+
+        mask : function(CH, CI){
+            if(this.getStyle("position") == "static"){
+                this.setStyle("position", "relative");
+            }
+            if(!this._mask){
+                this._mask = Roo.DomHelper.append(this.dom, {cls:"roo-el-mask"}, true);
+            }
+
+            this.addClass("x-masked");
+            this._mask.setDisplayed(true);
+            if(typeof  CH == 'string'){
+                if(!this._maskMsg){
+                    this._maskMsg = Roo.DomHelper.append(this.dom, {cls:"roo-el-mask-msg", cn:{tag:'div'}}, true);
+                }
+                var  mm = this._maskMsg;
+                mm.dom.className = CI ? "roo-el-mask-msg " + CI : "roo-el-mask-msg";
+                mm.dom.firstChild.innerHTML = CH;
+                mm.setDisplayed(true);
+                mm.center(this);
+            }
+            if(Roo.isIE && !(Roo.isIE7 && Roo.isStrict) && this.getStyle('height') == 'auto'){ 
+                this._mask.setHeight(this.getHeight());
+            }
+            return  this._mask;
+        },
+
+        
+
+        unmask : function(CJ){
+            if(this._mask){
+                if(CJ === true){
+                    this._mask.remove();
+                    delete  this._mask;
+                    if(this._maskMsg){
+                        this._maskMsg.remove();
+                        delete  this._maskMsg;
+                    }
+                }else {
+                    this._mask.setDisplayed(false);
+                    if(this._maskMsg){
+                        this._maskMsg.setDisplayed(false);
+                    }
+                }
+            }
+
+            this.removeClass("x-masked");
+        },
+
+        
+
+        isMasked : function(){
+            return  this._mask && this._mask.isVisible();
+        },
+
+        
+
+        createShim : function(){
+            var  el = document.createElement('iframe');
+            el.frameBorder = 'no';
+            el.className = 'roo-shim';
+            if(Roo.isIE && Roo.isSecure){
+                el.src = Roo.SSL_SECURE_URL;
+            }
+            var  CK = Roo.get(this.dom.parentNode.insertBefore(el, this.dom));
+            CK.autoBoxAdjust = false;
+            return  CK;
+        },
+
+        
+
+        remove : function(){
+            if(this.dom.parentNode){
+                this.dom.parentNode.removeChild(this.dom);
+            }
+            delete  El.cache[this.dom.id];
+        },
+
+        
+
+        addClassOnOver : function(CL, CM){
+            this.on("mouseover", function(){
+                Roo.fly(this, '_internal').addClass(CL);
+            }, this.dom);
+            var  CN = function(e){
+                if(CM !== true || !e.within(this, true)){
+                    Roo.fly(this, '_internal').removeClass(CL);
+                }
+            };
+            this.on("mouseout", CN, this.dom);
+            return  this;
+        },
+
+        
+
+        addClassOnFocus : function(CO){
+            this.on("focus", function(){
+                Roo.fly(this, '_internal').addClass(CO);
+            }, this.dom);
+            this.on("blur", function(){
+                Roo.fly(this, '_internal').removeClass(CO);
+            }, this.dom);
+            return  this;
+        },
+        
+
+        addClassOnClick : function(CP){
+            var  CQ = this.dom;
+            this.on("mousedown", function(){
+                Roo.fly(CQ, '_internal').addClass(CP);
+                var  d = Roo.get(document);
+                var  fn = function(){
+                    Roo.fly(CQ, '_internal').removeClass(CP);
+                    d.removeListener("mouseup", fn);
+                };
+                d.on("mouseup", fn);
+            });
+            return  this;
+        },
+
+        
+
+        swallowEvent : function(CR, CS){
+            var  fn = function(e){
+                e.stopPropagation();
+                if(CS){
+                    e.preventDefault();
+                }
+            };
+            if(CR  instanceof  Array){
+                for(var  i = 0, Ak = CR.length; i < Ak; i++){
+                     this.on(CR[i], fn);
+                }
+                return  this;
+            }
+
+            this.on(CR, fn);
+            return  this;
+        },
+
+        
+
+      fitToParentDelegate : Roo.emptyFn, 
+
+        
+
+        fitToParent : function(CT, CU) {
+          Roo.EventManager.removeResizeListener(this.fitToParentDelegate); 
+          this.fitToParentDelegate = Roo.emptyFn; 
+          if (CT === true && !this.dom.parentNode) { 
+            return;
+          }
+          var  p = Roo.get(CU || this.dom.parentNode);
+          this.setSize(p.getComputedWidth() - p.getFrameWidth('lr'), p.getComputedHeight() - p.getFrameWidth('tb'));
+          if (CT === true) {
+            this.fitToParentDelegate = this.fitToParent.createDelegate(this, [true, CU]);
+            Roo.EventManager.onWindowResize(this.fitToParentDelegate);
+          }
+          return  this;
+        },
+
+        
+
+        getNextSibling : function(){
+            var  n = this.dom.nextSibling;
+            while(n && n.nodeType != 1){
+                n = n.nextSibling;
+            }
+            return  n;
+        },
+
+        
+
+        getPrevSibling : function(){
+            var  n = this.dom.previousSibling;
+            while(n && n.nodeType != 1){
+                n = n.previousSibling;
+            }
+            return  n;
+        },
+
+
+        
+
+        appendChild: function(el){
+            el = Roo.get(el);
+            el.appendTo(this);
+            return  this;
+        },
+
+        
+
+        createChild: function(CV, CW, CX){
+            CV = CV || {tag:'div'};
+            if(CW){
+                return  Roo.DomHelper.insertBefore(CW, CV, CX !== true);
+            }
+            return  Roo.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, CV,  CX !== true);
+        },
+
+        
+
+        appendTo: function(el){
+            el = Roo.getDom(el);
+            el.appendChild(this.dom);
+            return  this;
+        },
+
+        
+
+        insertBefore: function(el){
+            el = Roo.getDom(el);
+            el.parentNode.insertBefore(this.dom, el);
+            return  this;
+        },
+
+        
+
+        insertAfter: function(el){
+            el = Roo.getDom(el);
+            el.parentNode.insertBefore(this.dom, el.nextSibling);
+            return  this;
+        },
+
+        
+
+        insertFirst: function(el, CY){
+            el = el || {};
+            if(typeof  el == 'object' && !el.nodeType){ 
+                return  this.createChild(el, this.dom.firstChild, CY);
+            }else {
+                el = Roo.getDom(el);
+                this.dom.insertBefore(el, this.dom.firstChild);
+                return  !CY ? Roo.get(el) : el;
+            }
+        },
+
+        
+
+        insertSibling: function(el, CZ, Ca){
+            CZ = CZ ? CZ.toLowerCase() : 'before';
+            el = el || {};
+            var  rt, Cb = CZ == 'before' ? this.dom : this.dom.nextSibling;
+
+            if(typeof  el == 'object' && !el.nodeType){ 
+                if(CZ == 'after' && !this.dom.nextSibling){
+                    rt = Roo.DomHelper.append(this.dom.parentNode, el, !Ca);
+                }else {
+                    rt = Roo.DomHelper[CZ == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !Ca);
+                }
+
+            }else {
+                rt = this.dom.parentNode.insertBefore(Roo.getDom(el),
+                            CZ == 'before' ? this.dom : this.dom.nextSibling);
+                if(!Ca){
+                    rt = Roo.get(rt);
+                }
+            }
+            return  rt;
+        },
+
+        
+
+        wrap: function(Cc, Cd){
+            if(!Cc){
+                Cc = {tag: "div"};
+            }
+            var  Ce = Roo.DomHelper.insertBefore(this.dom, Cc, !Cd);
+            Ce.dom ? Ce.dom.appendChild(this.dom) : Ce.appendChild(this.dom);
+            return  Ce;
+        },
+
+        
+
+        replace: function(el){
+            el = Roo.get(el);
+            this.insertBefore(el);
+            el.remove();
+            return  this;
+        },
+
+        
+
+        insertHtml : function(Cf, Cg, Ch){
+            var  el = Roo.DomHelper.insertHtml(Cf, this.dom, Cg);
+            return  Ch ? Roo.get(el) : el;
+        },
+
+        
+
+        set : function(o, Ci){
+            var  el = this.dom;
+            Ci = typeof  Ci == 'undefined' ? (el.setAttribute ? true : false) : Ci;
+            for(var  attr  in  o){
+                if(attr == "style" || typeof  o[attr] == "function") continue;
+                if(attr=="cls"){
+                    el.className = o["cls"];
+                }else {
+                    if(Ci) el.setAttribute(attr, o[attr]);
+                    else  el[attr] = o[attr];
+                }
+            }
+            if(o.style){
+                Roo.DomHelper.applyStyles(el, o.style);
+            }
+            return  this;
+        },
+
+        
+
+        addKeyListener : function(Cj, fn, Ck){
+            var  Cl;
+            if(typeof  Cj != "object" || Cj  instanceof  Array){
+                Cl = {
+                    key: Cj,
+                    fn: fn,
+                    scope: Ck
+                };
+            }else {
+                Cl = {
+                    key : Cj.key,
+                    shift : Cj.shift,
+                    ctrl : Cj.ctrl,
+                    alt : Cj.alt,
+                    fn: fn,
+                    scope: Ck
+                };
+            }
+            return  new  Roo.KeyMap(this, Cl);
+        },
+
+        
+
+        addKeyMap : function(Cm){
+            return  new  Roo.KeyMap(this, Cm);
+        },
+
+        
+
+         isScrollable : function(){
+            var  Cn = this.dom;
+            return  Cn.scrollHeight > Cn.clientHeight || Cn.scrollWidth > Cn.clientWidth;
+        },
+
+        
+
+
+        scrollTo : function(Co, Cp, Cq){
+            var  Cr = Co.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
+            if(!Cq || !A){
+                this.dom[Cr] = Cp;
+            }else {
+                var  to = Cr == "scrollLeft" ? [Cp, this.dom.scrollTop] : [this.dom.scrollLeft, Cp];
+                this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
+            }
+            return  this;
+        },
+
+        
+
+         scroll : function(Cs, Ct, Cu){
+             if(!this.isScrollable()){
+                 return;
+             }
+             var  el = this.dom;
+             var  l = el.scrollLeft, t = el.scrollTop;
+             var  w = el.scrollWidth, h = el.scrollHeight;
+             var  cw = el.clientWidth, ch = el.clientHeight;
+             Cs = Cs.toLowerCase();
+             var  Cv = false;
+             var  a = this.preanim(arguments, 2);
+             switch(Cs){
+                 case  "l":
+                 case  "left":
+                     if(w - l > cw){
+                         var  v = Math.min(l + Ct, w-cw);
+                         this.scrollTo("left", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "r":
+                case  "right":
+                     if(l > 0){
+                         var  v = Math.max(l - Ct, 0);
+                         this.scrollTo("left", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "t":
+                case  "top":
+                case  "up":
+                     if(t > 0){
+                         var  v = Math.max(t - Ct, 0);
+                         this.scrollTo("top", v, a);
+                         Cv = true;
+                     }
+                     break;
+                case  "b":
+                case  "bottom":
+                case  "down":
+                     if(h - t > ch){
+                         var  v = Math.min(t + Ct, h-ch);
+                         this.scrollTo("top", v, a);
+                         Cv = true;
+                     }
+                     break;
+             }
+             return  Cv;
+        },
+
+        
+
+        translatePoints : function(x, y){
+            if(typeof  x == 'object' || x  instanceof  Array){
+                y = x[1]; x = x[0];
+            }
+            var  p = this.getStyle('position');
+            var  o = this.getXY();
+
+            var  l = parseInt(this.getStyle('left'), 10);
+            var  t = parseInt(this.getStyle('top'), 10);
+
+            if(isNaN(l)){
+                l = (p == "relative") ? 0 : this.dom.offsetLeft;
+            }
+            if(isNaN(t)){
+                t = (p == "relative") ? 0 : this.dom.offsetTop;
+            }
+
+            return  {left: (x - o[0] + l), top: (y - o[1] + t)};
+        },
+
+        
+
+        getScroll : function(){
+            var  d = this.dom, Cw = document;
+            if(d == Cw || d == Cw.body){
+                var  l = window.pageXOffset || Cw.documentElement.scrollLeft || Cw.body.scrollLeft || 0;
+                var  t = window.pageYOffset || Cw.documentElement.scrollTop || Cw.body.scrollTop || 0;
+                return  {left: l, top: t};
+            }else {
+                return  {left: d.scrollLeft, top: d.scrollTop};
+            }
+        },
+
+        
+
+        getColor : function(Cx, Cy, Cz){
+            var  v = this.getStyle(Cx);
+            if(!v || v == "transparent" || v == "inherit") {
+                return  Cy;
+            }
+            var  C0 = typeof  Cz == "undefined" ? "#" : Cz;
+            if(v.substr(0, 4) == "rgb("){
+                var  rvs = v.slice(4, v.length -1).split(",");
+                for(var  i = 0; i < 3; i++){
+                    var  h = parseInt(rvs[i]).toString(16);
+                    if(h < 16){
+                        h = "0" + h;
+                    }
+
+                    C0 += h;
+                }
+            } else  {
+                if(v.substr(0, 1) == "#"){
+                    if(v.length == 4) {
+                        for(var  i = 1; i < 4; i++){
+                            var  c = v.charAt(i);
+                            C0 +=  c + c;
+                        }
+                    }else  if(v.length == 7){
+                        C0 += v.substr(1);
+                    }
+                }
+            }
+            return (C0.length > 5 ? C0.toLowerCase() : Cy);
+        },
+
+        
+
+        boxWrap : function(C1){
+            C1 = C1 || 'x-box';
+            var  el = Roo.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', C1)));
+            el.child('.'+C1+'-mc').dom.appendChild(this.dom);
+            return  el;
+        },
+
+        
+
+        getAttributeNS : Roo.isIE ? function(ns, C2){
+            var  d = this.dom;
+            var  C3 = typeof  d[ns+":"+C2];
+            if(C3 != 'undefined' && C3 != 'unknown'){
+                return  d[ns+":"+C2];
+            }
+            return  d[C2];
+        } : function(ns, C4){
+            var  d = this.dom;
+            return  d.getAttributeNS(ns, C4) || d.getAttribute(ns+":"+C4) || d.getAttribute(C4) || d[C4];
+        }
+    };
+
+    var  ep = El.prototype;
+
+    
+
+    ep.on = ep.addListener;
+        
+    ep.mon = ep.addListener;
+
+    
+
+    ep.un = ep.removeListener;
+
+    
+
+    ep.autoBoxAdjust = true;
+
+    
+    El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
+
+    
+    El.addUnits = function(v, J){
+        if(v === "" || v == "auto"){
+            return  v;
+        }
+        if(v === undefined){
+            return  '';
+        }
+        if(typeof  v == "number" || !El.unitPattern.test(v)){
+            return  v + (J || 'px');
+        }
+        return  v;
+    };
+
+    
+    El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
+    
+
+    El.VISIBILITY = 1;
+    
+
+    El.DISPLAY = 2;
+
+    El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
+    El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
+    El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
+
+
+
+    
+
+    El.cache = {};
+
+    var  H;
+
+    
+
+    El.get = function(el){
+        var  ex, J, id;
+        if(!el){ return  null; }
+        if(typeof  el == "string"){ 
+            if(!(J = document.getElementById(el))){
+                return  null;
+            }
+            if(ex = El.cache[el]){
+                ex.dom = J;
+            }else {
+                ex = El.cache[el] = new  El(J);
+            }
+            return  ex;
+        }else  if(el.tagName){ 
+            if(!(id = el.id)){
+                id = Roo.id(el);
+            }
+            if(ex = El.cache[id]){
+                ex.dom = el;
+            }else {
+                ex = El.cache[id] = new  El(el);
+            }
+            return  ex;
+        }else  if(el  instanceof  El){
+            if(el != H){
+                el.dom = document.getElementById(el.id) || el.dom; 
+                                                              
+                El.cache[el.id] = el; 
+            }
+            return  el;
+        }else  if(el.isComposite){
+            return  el;
+        }else  if(el  instanceof  Array){
+            return  El.select(el);
+        }else  if(el == document){
+            
+            if(!H){
+                var  f = function(){};
+                f.prototype = El.prototype;
+                H = new  f();
+                H.dom = document;
+            }
+            return  H;
+        }
+        return  null;
+    };
+
+    
+    El.uncache = function(el){
+        for(var  i = 0, a = arguments, len = a.length; i < len; i++) {
+            if(a[i]){
+                delete  El.cache[a[i].id || a[i]];
+            }
+        }
+    };
+
+    
+    
+    
+    El.garbageCollect = function(){
+        if(!Roo.enableGarbageCollector){
+            clearInterval(El.collectorThread);
+            return;
+        }
+        for(var  eid  in  El.cache){
+            var  el = El.cache[eid], d = el.dom;
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
+                delete  El.cache[eid];
+                if(d && Roo.enableListenerCollection){
+                    E.purgeElement(d);
+                }
+            }
+        }
+    }
+
+    El.collectorThreadId = setInterval(El.garbageCollect, 30000);
+
+
+    
+    El.Flyweight = function(J){
+        this.dom = J;
+    };
+    El.Flyweight.prototype = El.prototype;
+
+    El._flyweights = {};
+    
+
+    El.fly = function(el, J){
+        J = J || '_global';
+        el = Roo.getDom(el);
+        if(!el){
+            return  null;
+        }
+        if(!El._flyweights[J]){
+            El._flyweights[J] = new  El.Flyweight();
+        }
+
+        El._flyweights[J].dom = el;
+        return  El._flyweights[J];
+    };
+
+    
+
+    Roo.get = El.get;
+    
+
+    Roo.fly = El.fly;
+
+    
+    var  I = Roo.isStrict ? {
+        select:1
+    } : {
+        input:1, select:1, textarea:1
+    };
+    if(Roo.isIE || Roo.isGecko){
+        I['button'] = 1;
+    }
+
+
+
+    Roo.EventManager.on(window, 'unload', function(){
+        delete  El.cache;
+        delete  El._flyweights;
+    });
+})();
+
+
+
+
+if(Roo.DomQuery){
+    Roo.Element.selectorFunction = Roo.DomQuery.select;
+}
+
+
+Roo.Element.select = function(J, K, L){
+    var  M;
+    if(typeof  J == "string"){
+        M = Roo.Element.selectorFunction(J, L);
+    }else  if(J.length !== undefined){
+        M = J;
+    }else {
+        throw  "Invalid selector";
+    }
+    if(K === true){
+        return  new  Roo.CompositeElement(M);
+    }else {
+        return  new  Roo.CompositeElementLite(M);
+    }
+};
+
+
+Roo.select = Roo.Element.select;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Roo.enableFx = true;
+
+
+
+Roo.Fx = {
+       
+
+    slideIn : function(A, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+
+            A = A || "t";
+
+            
+            this.fixDisplay();
+
+            
+            var  r = this.getFxRestore();
+            var  b = this.getBox();
+            
+            this.setSize(b);
+
+            
+            var  B = this.fxWrap(r.pos, o, "hidden");
+
+            var  st = this.dom.style;
+            st.visibility = "visible";
+            st.position = "absolute";
+
+            
+            var  C = function(){
+                el.fxUnwrap(B, r.pos, o);
+                st.width = r.width;
+                st.height = r.height;
+                el.afterFx(o);
+            };
+            
+            var  a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
+
+            switch(A.toLowerCase()){
+                case  "t":
+                    B.setSize(b.width, 0);
+                    st.left = st.bottom = "0";
+                    a = {height: bh};
+                break;
+                case  "l":
+                    B.setSize(0, b.height);
+                    st.right = st.top = "0";
+                    a = {width: bw};
+                break;
+                case  "r":
+                    B.setSize(0, b.height);
+                    B.setX(b.right);
+                    st.left = st.top = "0";
+                    a = {width: bw, points: pt};
+                break;
+                case  "b":
+                    B.setSize(b.width, 0);
+                    B.setY(b.bottom);
+                    st.left = st.top = "0";
+                    a = {height: bh, points: pt};
+                break;
+                case  "tl":
+                    B.setSize(0, 0);
+                    st.right = st.bottom = "0";
+                    a = {width: bw, height: bh};
+                break;
+                case  "bl":
+                    B.setSize(0, 0);
+                    B.setY(b.y+b.height);
+                    st.right = st.top = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+                case  "br":
+                    B.setSize(0, 0);
+                    B.setXY([b.right, b.bottom]);
+                    st.left = st.top = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+                case  "tr":
+                    B.setSize(0, 0);
+                    B.setX(b.x+b.width);
+                    st.left = st.bottom = "0";
+                    a = {width: bw, height: bh, points: pt};
+                break;
+            }
+
+            this.dom.style.visibility = "visible";
+            B.show();
+
+            arguments.callee.anim = B.fxanim(a,
+                o,
+                'motion',
+                .5,
+                'easeOut', C);
+        });
+        return  this;
+    },
+    
+       
+
+    slideOut : function(B, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+
+            B = B || "t";
+
+            
+            var  r = this.getFxRestore();
+            
+            var  b = this.getBox();
+            
+            this.setSize(b);
+
+            
+            var  C = this.fxWrap(r.pos, o, "visible");
+
+            var  st = this.dom.style;
+            st.visibility = "visible";
+            st.position = "absolute";
+
+            C.setSize(b);
+
+            var  D = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.fxUnwrap(C, r.pos, o);
+
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            var  a, E = {to: 0};
+            switch(B.toLowerCase()){
+                case  "t":
+                    st.left = st.bottom = "0";
+                    a = {height: E};
+                break;
+                case  "l":
+                    st.right = st.top = "0";
+                    a = {width: E};
+                break;
+                case  "r":
+                    st.left = st.top = "0";
+                    a = {width: E, points: {to:[b.right, b.y]}};
+                break;
+                case  "b":
+                    st.left = st.top = "0";
+                    a = {height: E, points: {to:[b.x, b.bottom]}};
+                break;
+                case  "tl":
+                    st.right = st.bottom = "0";
+                    a = {width: E, height: E};
+                break;
+                case  "bl":
+                    st.right = st.top = "0";
+                    a = {width: E, height: E, points: {to:[b.x, b.bottom]}};
+                break;
+                case  "br":
+                    st.left = st.top = "0";
+                    a = {width: E, height: E, points: {to:[b.x+b.width, b.bottom]}};
+                break;
+                case  "tr":
+                    st.left = st.bottom = "0";
+                    a = {width: E, height: E, points: {to:[b.right, b.y]}};
+                break;
+            }
+
+
+            arguments.callee.anim = C.fxanim(a,
+                o,
+                'motion',
+                .5,
+                "easeOut", D);
+        });
+        return  this;
+    },
+
+       
+
+    puff : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            this.clearOpacity();
+            this.show();
+
+            
+            var  r = this.getFxRestore();
+            var  st = this.dom.style;
+
+            var  C = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+                st.fontSize = '';
+                el.afterFx(o);
+            };
+
+            var  D = this.getWidth();
+            var  E = this.getHeight();
+
+            arguments.callee.anim = this.fxanim({
+                    width : {to: this.adjustWidth(D * 2)},
+                    height : {to: this.adjustHeight(E * 2)},
+                    points : {by: [-(D * .5), -(E * .5)]},
+                    opacity : {to: 0},
+                    fontSize: {to:200, unit: "%"}
+                },
+                o,
+                'motion',
+                .5,
+                "easeOut", C);
+        });
+        return  this;
+    },
+
+       
+
+    switchOff : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            this.clearOpacity();
+            this.clip();
+
+            
+            var  r = this.getFxRestore();
+            var  st = this.dom.style;
+
+            var  C = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
+                this.clearOpacity();
+                (function(){
+                    this.fxanim({
+                        height:{to:1},
+                        points:{by:[0, this.getHeight() * .5]}
+                    }, o, 'motion', 0.3, 'easeIn', C);
+                }).defer(100, this);
+            });
+        });
+        return  this;
+    },
+
+    
+       
+    highlight : function(C, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            C = C || "ffff9c";
+            attr = o.attr || "backgroundColor";
+
+            this.clearOpacity();
+            this.show();
+
+            var  D = this.getColor(attr);
+            var  E = this.dom.style[attr];
+            endColor = (o.endColor || D) || "ffffff";
+
+            var  F = function(){
+                el.dom.style[attr] = E;
+                el.afterFx(o);
+            };
+
+            var  a = {};
+            a[attr] = {from: C, to: endColor};
+            arguments.callee.anim = this.fxanim(a,
+                o,
+                'color',
+                1,
+                'easeIn', F);
+        });
+        return  this;
+    },
+
+   
+
+    frame : function(D, E, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            D = D || "#C3DAF9";
+            if(D.length == 6){
+                D = "#" + D;
+            }
+
+            E = E || 1;
+            duration = o.duration || 1;
+            this.show();
+
+            var  b = this.getBox();
+            var  F = function(){
+                var  G = this.createProxy({
+
+                     style:{
+                        visbility:"hidden",
+                        position:"absolute",
+                        "z-index":"35000", 
+                        border:"0px solid " + D
+                     }
+                  });
+                var  H = Roo.isBorderBox ? 2 : 1;
+                G.animate({
+                    top:{from:b.y, to:b.y - 20},
+                    left:{from:b.x, to:b.x - 20},
+                    borderWidth:{from:0, to:10},
+                    opacity:{from:1, to:0},
+                    height:{from:b.height, to:(b.height + (20*H))},
+                    width:{from:b.width, to:(b.width + (20*H))}
+                }, duration, function(){
+                    G.remove();
+                });
+                if(--E > 0){
+                     F.defer((duration/2)*1000, this);
+                }else {
+                    el.afterFx(o);
+                }
+            };
+            F.call(this);
+        });
+        return  this;
+    },
+
+   
+
+    pause : function(F){
+        var  el = this.getFxEl();
+        var  o = {};
+
+        el.queueFx(o, function(){
+            setTimeout(function(){
+                el.afterFx(o);
+            }, F * 1000);
+        });
+        return  this;
+    },
+
+   
+
+    fadeIn : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            this.setOpacity(0);
+            this.fixDisplay();
+            this.dom.style.visibility = 'visible';
+            var  to = o.endOpacity || 1;
+            arguments.callee.anim = this.fxanim({opacity:{to:to}},
+                o, null, .5, "easeOut", function(){
+                if(to == 1){
+                    this.clearOpacity();
+                }
+
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+   
+
+    fadeOut : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
+                o, null, .5, "easeOut", function(){
+                if(this.visibilityMode == Roo.Element.DISPLAY || o.useDisplay){
+                     this.dom.style.display = "none";
+                }else {
+                     this.dom.style.visibility = "hidden";
+                }
+
+                this.clearOpacity();
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+   
+
+    scale : function(w, h, o){
+        this.shift(Roo.apply({}, o, {
+            width: w,
+            height: h
+        }));
+        return  this;
+    },
+
+   
+
+    shift : function(o){
+        var  el = this.getFxEl();
+        o = o || {};
+        el.queueFx(o, function(){
+            var  a = {}, w = o.width, h = o.height, x = o.x, y = o.y,  op = o.opacity;
+            if(w !== undefined){
+                a.width = {to: this.adjustWidth(w)};
+            }
+            if(h !== undefined){
+                a.height = {to: this.adjustHeight(h)};
+            }
+            if(x !== undefined || y !== undefined){
+                a.points = {to: [
+                    x !== undefined ? x : this.getX(),
+                    y !== undefined ? y : this.getY()
+                ]};
+            }
+            if(op !== undefined){
+                a.opacity = {to: op};
+            }
+            if(o.xy !== undefined){
+                a.points = {to: o.xy};
+            }
+
+            arguments.callee.anim = this.fxanim(a,
+                o, 'motion', .35, "easeOut", function(){
+                el.afterFx(o);
+            });
+        });
+        return  this;
+    },
+
+       
+
+    ghost : function(G, o){
+        var  el = this.getFxEl();
+        o = o || {};
+
+        el.queueFx(o, function(){
+            G = G || "b";
+
+            
+            var  r = this.getFxRestore();
+            var  w = this.getWidth(),
+                h = this.getHeight();
+
+            var  st = this.dom.style;
+
+            var  H = function(){
+                if(o.useDisplay){
+                    el.setDisplayed(false);
+                }else {
+                    el.hide();
+                }
+
+
+                el.clearOpacity();
+                el.setPositioning(r.pos);
+                st.width = r.width;
+                st.height = r.height;
+
+                el.afterFx(o);
+            };
+
+            var  a = {opacity: {to: 0}, points: {}}, pt = a.points;
+            switch(G.toLowerCase()){
+                case  "t":
+                    pt.by = [0, -h];
+                break;
+                case  "l":
+                    pt.by = [-w, 0];
+                break;
+                case  "r":
+                    pt.by = [w, 0];
+                break;
+                case  "b":
+                    pt.by = [0, h];
+                break;
+                case  "tl":
+                    pt.by = [-w, -h];
+                break;
+                case  "bl":
+                    pt.by = [-w, h];
+                break;
+                case  "br":
+                    pt.by = [w, h];
+                break;
+                case  "tr":
+                    pt.by = [w, -h];
+                break;
+            }
+
+
+            arguments.callee.anim = this.fxanim(a,
+                o,
+                'motion',
+                .5,
+                "easeOut", H);
+        });
+        return  this;
+    },
+
+       
+
+    syncFx : function(){
+        this.fxDefaults = Roo.apply(this.fxDefaults || {}, {
+            block : false,
+            concurrent : true,
+            stopFx : false
+        });
+        return  this;
+    },
+
+       
+
+    sequenceFx : function(){
+        this.fxDefaults = Roo.apply(this.fxDefaults || {}, {
+            block : false,
+            concurrent : false,
+            stopFx : false
+        });
+        return  this;
+    },
+
+       
+
+    nextFx : function(){
+        var  ef = this.fxQueue[0];
+        if(ef){
+            ef.call(this);
+        }
+    },
+
+       
+
+    hasActiveFx : function(){
+        return  this.fxQueue && this.fxQueue[0];
+    },
+
+       
+
+    stopFx : function(){
+        if(this.hasActiveFx()){
+            var  cur = this.fxQueue[0];
+            if(cur && cur.anim && cur.anim.isAnimated()){
+                this.fxQueue = [cur]; 
+                cur.anim.stop(true);
+            }
+        }
+        return  this;
+    },
+
+       
+
+    beforeFx : function(o){
+        if(this.hasActiveFx() && !o.concurrent){
+           if(o.stopFx){
+               this.stopFx();
+               return  true;
+           }
+           return  false;
+        }
+        return  true;
+    },
+
+       
+
+    hasFxBlock : function(){
+        var  q = this.fxQueue;
+        return  q && q[0] && q[0].block;
+    },
+
+       
+
+    queueFx : function(o, fn){
+        if(!this.fxQueue){
+            this.fxQueue = [];
+        }
+        if(!this.hasFxBlock()){
+            Roo.applyIf(o, this.fxDefaults);
+            if(!o.concurrent){
+                var  run = this.beforeFx(o);
+                fn.block = o.block;
+                this.fxQueue.push(fn);
+                if(run){
+                    this.nextFx();
+                }
+            }else {
+                fn.call(this);
+            }
+        }
+        return  this;
+    },
+
+       
+
+    fxWrap : function(H, o, I){
+        var  J;
+        if(!o.wrap || !(J = Roo.get(o.wrap))){
+            var  wrapXY;
+            if(o.fixPosition){
+                wrapXY = this.getXY();
+            }
+            var  div = document.createElement("div");
+            div.style.visibility = I;
+            J = Roo.get(this.dom.parentNode.insertBefore(div, this.dom));
+            J.setPositioning(H);
+            if(J.getStyle("position") == "static"){
+                J.position("relative");
+            }
+
+            this.clearPositioning('auto');
+            J.clip();
+            J.dom.appendChild(this.dom);
+            if(wrapXY){
+                J.setXY(wrapXY);
+            }
+        }
+        return  J;
+    },
+
+       
+
+    fxUnwrap : function(K, L, o){
+        this.clearPositioning();
+        this.setPositioning(L);
+        if(!o.wrap){
+            K.dom.parentNode.insertBefore(this.dom, K.dom);
+            K.remove();
+        }
+    },
+
+       
+
+    getFxRestore : function(){
+        var  st = this.dom.style;
+        return  {pos: this.getPositioning(), width: st.width, height : st.height};
+    },
+
+       
+
+    afterFx : function(o){
+        if(o.afterStyle){
+            this.applyStyles(o.afterStyle);
+        }
+        if(o.afterCls){
+            this.addClass(o.afterCls);
+        }
+        if(o.remove === true){
+            this.remove();
+        }
+
+        Roo.callback(o.callback, o.scope, [this]);
+        if(!o.concurrent){
+            this.fxQueue.shift();
+            this.nextFx();
+        }
+    },
+
+       
+
+    getFxEl : function(){ 
+        return  Roo.get(this.dom);
+    },
+
+       
+
+    fxanim : function(M, N, O, P, Q, cb){
+        O = O || 'run';
+        N = N || {};
+        var  R = Roo.lib.Anim[O](
+            this.dom, M,
+            (N.duration || P) || .35,
+            (N.easing || Q) || 'easeOut',
+            function(){
+                Roo.callback(cb, this);
+            },
+            this
+        );
+        N.anim = R;
+        return  R;
+    }
+};
+
+
+Roo.Fx.resize = Roo.Fx.scale;
+
+
+
+Roo.apply(Roo.Element.prototype, Roo.Fx);
+
+
+
+
+
+
+Roo.CompositeElement = function(A){
+    this.elements = [];
+    this.addElements(A);
+};
+Roo.CompositeElement.prototype = {
+    isComposite: true,
+    addElements : function(B){
+        if(!B) return  this;
+        if(typeof  B == "string"){
+            B = Roo.Element.selectorFunction(B);
+        }
+        var  C = this.elements;
+        var  D = C.length-1;
+        for(var  i = 0, len = B.length; i < len; i++) {
+               C[++D] = Roo.get(B[i]);
+        }
+        return  this;
+    },
+
+    
+
+    fill : function(E){
+        this.elements = [];
+        this.add(E);
+        return  this;
+    },
+
+    
+
+    filter : function(F){
+        var  G = [];
+        this.each(function(el){
+            if(el.is(F)){
+                G[G.length] = el.dom;
+            }
+        });
+        this.fill(G);
+        return  this;
+    },
+
+    invoke : function(fn, H){
+        var  I = this.elements;
+        for(var  i = 0, len = I.length; i < len; i++) {
+               Roo.Element.prototype[fn].apply(I[i], H);
+        }
+        return  this;
+    },
+    
+
+    add : function(J){
+        if(typeof  J == "string"){
+            this.addElements(Roo.Element.selectorFunction(J));
+        }else  if(J.length !== undefined){
+            this.addElements(J);
+        }else {
+            this.addElements([J]);
+        }
+        return  this;
+    },
+    
+
+    each : function(fn, K){
+        var  L = this.elements;
+        for(var  i = 0, len = L.length; i < len; i++){
+            if(fn.call(K || L[i], L[i], this, i) === false) {
+                break;
+            }
+        }
+        return  this;
+    },
+
+    
+
+    item : function(M){
+        return  this.elements[M] || null;
+    },
+
+    
+
+    first : function(){
+        return  this.item(0);
+    },
+
+    
+
+    last : function(){
+        return  this.item(this.elements.length-1);
+    },
+
+    
+
+    getCount : function(){
+        return  this.elements.length;
+    },
+
+    
+
+    contains : function(el){
+        return  this.indexOf(el) !== -1;
+    },
+
+    
+
+    indexOf : function(el){
+        return  this.elements.indexOf(Roo.get(el));
+    },
+
+
+    
+
+    removeElement : function(el, N){
+        if(el  instanceof  Array){
+            for(var  i = 0, len = el.length; i < len; i++){
+                this.removeElement(el[i]);
+            }
+            return  this;
+        }
+        var  O = typeof  el == 'number' ? el : this.indexOf(el);
+        if(O !== -1){
+            if(N){
+                var  d = this.elements[O];
+                if(d.dom){
+                    d.remove();
+                }else {
+                    d.parentNode.removeChild(d);
+                }
+            }
+
+            this.elements.splice(O, 1);
+        }
+        return  this;
+    },
+
+    
+
+    replaceElement : function(el, P, Q){
+        var  R = typeof  el == 'number' ? el : this.indexOf(el);
+        if(R !== -1){
+            if(Q){
+                this.elements[R].replaceWith(P);
+            }else {
+                this.elements.splice(R, 1, Roo.get(P))
+            }
+        }
+        return  this;
+    },
+
+    
+
+    clear : function(){
+        this.elements = [];
+    }
+};
+(function(){
+    Roo.CompositeElement.createCall = function(S, T){
+        if(!S[T]){
+            S[T] = function(){
+                return  this.invoke(T, arguments);
+            };
+        }
+    };
+    for(var  fnName  in  Roo.Element.prototype){
+        if(typeof  Roo.Element.prototype[fnName] == "function"){
+            Roo.CompositeElement.createCall(Roo.CompositeElement.prototype, fnName);
+        }
+    };
+})();
+
+
+
+
+
+
+Roo.CompositeElementLite = function(A){
+    Roo.CompositeElementLite.superclass.constructor.call(this, A);
+    this.el = new  Roo.Element.Flyweight();
+};
+Roo.extend(Roo.CompositeElementLite, Roo.CompositeElement, {
+    addElements : function(B){
+        if(B){
+            if(B  instanceof  Array){
+                this.elements = this.elements.concat(B);
+            }else {
+                var  yels = this.elements;
+                var  index = yels.length-1;
+                for(var  i = 0, len = B.length; i < len; i++) {
+                    yels[++index] = B[i];
+                }
+            }
+        }
+        return  this;
+    },
+    invoke : function(fn, C){
+        var  D = this.elements;
+        var  el = this.el;
+        for(var  i = 0, len = D.length; i < len; i++) {
+            el.dom = D[i];
+               Roo.Element.prototype[fn].apply(el, C);
+        }
+        return  this;
+    },
+    
+
+    item : function(E){
+        if(!this.elements[E]){
+            return  null;
+        }
+
+        this.el.dom = this.elements[E];
+        return  this.el;
+    },
+
+    
+    addListener : function(F, G, H, I){
+        var  J = this.elements;
+        for(var  i = 0, len = J.length; i < len; i++) {
+            Roo.EventManager.on(J[i], F, G, H || J[i], I);
+        }
+        return  this;
+    },
+
+    
+
+    each : function(fn, K){
+        var  L = this.elements;
+        var  el = this.el;
+        for(var  i = 0, len = L.length; i < len; i++){
+            el.dom = L[i];
+               if(fn.call(K || el, el, this, i) === false){
+                break;
+            }
+        }
+        return  this;
+    },
+
+    indexOf : function(el){
+        return  this.elements.indexOf(Roo.getDom(el));
+    },
+
+    replaceElement : function(el, M, N){
+        var  O = typeof  el == 'number' ? el : this.indexOf(el);
+        if(O !== -1){
+            M = Roo.getDom(M);
+            if(N){
+                var  d = this.elements[O];
+                d.parentNode.insertBefore(M, d);
+                d.parentNode.removeChild(d);
+            }
+
+            this.elements.splice(O, 1, M);
+        }
+        return  this;
+    }
+});
+Roo.CompositeElementLite.prototype.on = Roo.CompositeElementLite.prototype.addListener;
+
+
+
+
+
+
+
+
+Roo.data.Connection = function(A){
+    Roo.apply(this, A);
+    this.addEvents({
+        
+
+        "beforerequest" : true,
+        
+
+        "requestcomplete" : true,
+        
+
+        "requestexception" : true
+    });
+    Roo.data.Connection.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.data.Connection, Roo.util.Observable, {
+    
+
+    
+
+    
+
+    
+
+    
+
+    timeout : 30000,
+    
+
+    autoAbort:false,
+
+    
+
+    disableCaching: true,
+
+    
+
+    request : function(o){
+        if(this.fireEvent("beforerequest", this, o) !== false){
+            var  p = o.params;
+
+            if(typeof  p == "function"){
+                p = p.call(o.scope||window, o);
+            }
+            if(typeof  p == "object"){
+                p = Roo.urlEncode(o.params);
+            }
+            if(this.extraParams){
+                var  extras = Roo.urlEncode(this.extraParams);
+                p = p ? (p + '&' + extras) : extras;
+            }
+
+            var  url = o.url || this.url;
+            if(typeof  url == 'function'){
+                url = url.call(o.scope||window, o);
+            }
+
+            if(o.form){
+                var  form = Roo.getDom(o.form);
+                url = url || form.action;
+
+                var  enctype = form.getAttribute("enctype");
+                if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){
+                    return  this.doFormUpload(o, p, url);
+                }
+                var  f = Roo.lib.Ajax.serializeForm(form);
+                p = p ? (p + '&' + f) : f;
+            }
+
+            var  hs = o.headers;
+            if(this.defaultHeaders){
+                hs = Roo.apply(hs || {}, this.defaultHeaders);
+                if(!o.headers){
+                    o.headers = hs;
+                }
+            }
+
+            var  cb = {
+                success: this.handleResponse,
+                failure: this.handleFailure,
+                scope: this,
+                argument: {options: o},
+                timeout : this.timeout
+            };
+
+            var  method = o.method||this.method||(p ? "POST" : "GET");
+
+            if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){
+                url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new  Date().getTime());
+            }
+
+            if(typeof  o.autoAbort == 'boolean'){ 
+                if(o.autoAbort){
+                    this.abort();
+                }
+            }else  if(this.autoAbort !== false){
+                this.abort();
+            }
+
+            if((method == 'GET' && p) || o.xmlData){
+                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
+                p = '';
+            }
+
+            this.transId = Roo.lib.Ajax.request(method, url, cb, p, o);
+            return  this.transId;
+        }else {
+            Roo.callback(o.callback, o.scope, [o, null, null]);
+            return  null;
+        }
+    },
+
+    
+
+    isLoading : function(B){
+        if(B){
+            return  Roo.lib.Ajax.isCallInProgress(B);
+        }else {
+            return  this.transId ? true : false;
+        }
+    },
+
+    
+
+    abort : function(C){
+        if(C || this.isLoading()){
+            Roo.lib.Ajax.abort(C || this.transId);
+        }
+    },
+
+    
+    handleResponse : function(D){
+        this.transId = false;
+        var  E = D.argument.options;
+        D.argument = E ? E.argument : null;
+        this.fireEvent("requestcomplete", this, D, E);
+        Roo.callback(E.success, E.scope, [D, E]);
+        Roo.callback(E.callback, E.scope, [E, true, D]);
+    },
+
+    
+    handleFailure : function(F, e){
+        this.transId = false;
+        var  G = F.argument.options;
+        F.argument = G ? G.argument : null;
+        this.fireEvent("requestexception", this, F, G, e);
+        Roo.callback(G.failure, G.scope, [F, G]);
+        Roo.callback(G.callback, G.scope, [G, false, F]);
+    },
+
+    
+    doFormUpload : function(o, ps, H){
+        var  id = Roo.id();
+        var  I = document.createElement('iframe');
+        I.id = id;
+        I.name = id;
+        I.className = 'x-hidden';
+        if(Roo.isIE){
+            I.src = Roo.SSL_SECURE_URL;
+        }
+
+        document.body.appendChild(I);
+
+        if(Roo.isIE){
+           document.frames[id].name = id;
+        }
+
+        var  J = Roo.getDom(o.form);
+        J.target = id;
+        J.method = 'POST';
+        J.enctype = J.encoding = 'multipart/form-data';
+        if(H){
+            J.action = H;
+        }
+
+        var  K, hd;
+        if(ps){ 
+            K = [];
+            ps = Roo.urlDecode(ps, false);
+            for(var  k  in  ps){
+                if(ps.hasOwnProperty(k)){
+                    hd = document.createElement('input');
+                    hd.type = 'hidden';
+                    hd.name = k;
+                    hd.value = ps[k];
+                    J.appendChild(hd);
+                    K.push(hd);
+                }
+            }
+        }
+
+        function  cb(){
+            var  r = {  
+                responseText : '',
+                responseXML : null
+            };
+
+            r.argument = o ? o.argument : null;
+
+            try { 
+                var  doc;
+                if(Roo.isIE){
+                    doc = I.contentWindow.document;
+                }else  {
+                    doc = (I.contentDocument || window.frames[id].document);
+                }
+                if(doc && doc.body){
+                    r.responseText = doc.body.innerHTML;
+                }
+                if(doc && doc.XMLDocument){
+                    r.responseXML = doc.XMLDocument;
+                }else  {
+                    r.responseXML = doc;
+                }
+            }
+            catch(e) {
+                
+            }
+
+
+            Roo.EventManager.removeListener(I, 'load', cb, this);
+
+            this.fireEvent("requestcomplete", this, r, o);
+            Roo.callback(o.success, o.scope, [r, o]);
+            Roo.callback(o.callback, o.scope, [o, true, r]);
+
+            setTimeout(function(){document.body.removeChild(I);}, 100);
+        }
+
+
+        Roo.EventManager.on(I, 'load', cb, this);
+        J.submit();
+
+        if(K){ 
+            for(var  i = 0, len = K.length; i < len; i++){
+                J.removeChild(K[i]);
+            }
+        }
+    }
+});
+
+
+
+Roo.Ajax = new  Roo.data.Connection({
+    
+   
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+    autoAbort : false,
+
+    
+
+    serializeForm : function(L){
+        return  Roo.lib.Ajax.serializeForm(L);
+    }
+});
+
+
+
+
+Roo.Ajax = new  Roo.data.Connection({
+    
+    
+    
+
+    
+   
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+    autoAbort : false,
+
+    
+
+    serializeForm : function(A){
+        return  Roo.lib.Ajax.serializeForm(A);
+    }
+});
+
+
+
+
+
+Roo.UpdateManager = function(el, A){
+    el = Roo.get(el);
+    if(!A && el.updateManager){
+        return  el.updateManager;
+    }
+
+    
+
+    this.el = el;
+    
+
+    this.defaultUrl = null;
+
+    this.addEvents({
+        
+
+        "beforeupdate": true,
+        
+
+        "update": true,
+        
+
+        "failure": true
+    });
+    var  d = Roo.UpdateManager.defaults;
+    
+
+    this.sslBlankUrl = d.sslBlankUrl;
+    
+
+    this.disableCaching = d.disableCaching;
+    
+
+    this.indicatorText = d.indicatorText;
+    
+
+    this.showLoadIndicator = d.showLoadIndicator;
+    
+
+    this.timeout = d.timeout;
+
+    
+
+    this.loadScripts = d.loadScripts;
+
+    
+
+    this.transaction = null;
+
+    
+
+    this.autoRefreshProcId = null;
+    
+
+    this.refreshDelegate = this.refresh.createDelegate(this);
+    
+
+    this.updateDelegate = this.update.createDelegate(this);
+    
+
+    this.formUpdateDelegate = this.formUpdate.createDelegate(this);
+    
+
+    this.successDelegate = this.processSuccess.createDelegate(this);
+    
+
+    this.failureDelegate = this.processFailure.createDelegate(this);
+
+    if(!this.renderer){
+     
+
+    this.renderer = new  Roo.UpdateManager.BasicRenderer();
+    }
+
+    
+    Roo.UpdateManager.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.UpdateManager, Roo.util.Observable, {
+    
+
+    getEl : function(){
+        return  this.el;
+    },
+    
+
+    update : function(B, C, D, E){
+        if(this.fireEvent("beforeupdate", this.el, B, C) !== false){
+            var  method = this.method, cfg;
+            if(typeof  B == "object"){ 
+                cfg = B;
+                B = cfg.url;
+                C = C || cfg.params;
+                D = D || cfg.callback;
+                E = E || cfg.discardUrl;
+                if(D && cfg.scope){
+                    D = D.createDelegate(cfg.scope);
+                }
+                if(typeof  cfg.method != "undefined"){method = cfg.method;};
+                if(typeof  cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
+                if(typeof  cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
+                if(typeof  cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
+                if(typeof  cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
+            }
+
+            this.showLoading();
+            if(!E){
+                this.defaultUrl = B;
+            }
+            if(typeof  B == "function"){
+                B = B.call(this);
+            }
+
+
+            method = method || (C ? "POST" : "GET");
+            if(method == "GET"){
+                B = this.prepareUrl(B);
+            }
+
+            var  o = Roo.apply(cfg ||{}, {
+                url : B,
+                params: C,
+                success: this.successDelegate,
+                failure: this.failureDelegate,
+                callback: undefined,
+                timeout: (this.timeout*1000),
+                argument: {"url": B, "form": null, "callback": D, "params": C}
+            });
+
+            this.transaction = Roo.Ajax.request(o);
+        }
+    },
+
+    
+
+    formUpdate : function(F, G, H, I){
+        if(this.fireEvent("beforeupdate", this.el, F, G) !== false){
+            if(typeof  G == "function"){
+                G = G.call(this);
+            }
+
+            F = Roo.getDom(F);
+            this.transaction = Roo.Ajax.request({
+                form: F,
+                url:G,
+                success: this.successDelegate,
+                failure: this.failureDelegate,
+                timeout: (this.timeout*1000),
+                argument: {"url": G, "form": F, "callback": I, "reset": H}
+            });
+            this.showLoading.defer(1, this);
+        }
+    },
+
+    
+
+    refresh : function(J){
+        if(this.defaultUrl == null){
+            return;
+        }
+
+        this.update(this.defaultUrl, null, J, true);
+    },
+
+    
+
+    startAutoRefresh : function(K, L, M, N, O){
+        if(O){
+            this.update(L || this.defaultUrl, M, N, true);
+        }
+        if(this.autoRefreshProcId){
+            clearInterval(this.autoRefreshProcId);
+        }
+
+        this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [L || this.defaultUrl, M, N, true]), K*1000);
+    },
+
+    
+
+     stopAutoRefresh : function(){
+        if(this.autoRefreshProcId){
+            clearInterval(this.autoRefreshProcId);
+            delete  this.autoRefreshProcId;
+        }
+    },
+
+    isAutoRefreshing : function(){
+       return  this.autoRefreshProcId ? true : false;
+    },
+    
+
+    showLoading : function(){
+        if(this.showLoadIndicator){
+            this.el.update(this.indicatorText);
+        }
+    },
+
+    
+
+    prepareUrl : function(P){
+        if(this.disableCaching){
+            var  append = "_dc=" + (new  Date().getTime());
+            if(P.indexOf("?") !== -1){
+                P += "&" + append;
+            }else {
+                P += "?" + append;
+            }
+        }
+        return  P;
+    },
+
+    
+
+    processSuccess : function(Q){
+        this.transaction = null;
+        if(Q.argument.form && Q.argument.reset){
+            try{ 
+                Q.argument.form.reset();
+            }catch(e){}
+        }
+        if(this.loadScripts){
+            this.renderer.render(this.el, Q, this,
+                this.updateComplete.createDelegate(this, [Q]));
+        }else {
+            this.renderer.render(this.el, Q, this);
+            this.updateComplete(Q);
+        }
+    },
+
+    updateComplete : function(R){
+        this.fireEvent("update", this.el, R);
+        if(typeof  R.argument.callback == "function"){
+            R.argument.callback(this.el, true, R);
+        }
+    },
+
+    
+
+    processFailure : function(S){
+        this.transaction = null;
+        this.fireEvent("failure", this.el, S);
+        if(typeof  S.argument.callback == "function"){
+            S.argument.callback(this.el, false, S);
+        }
+    },
+
+    
+
+    setRenderer : function(T){
+        this.renderer = T;
+    },
+
+    getRenderer : function(){
+       return  this.renderer;
+    },
+
+    
+
+    setDefaultUrl : function(U){
+        this.defaultUrl = U;
+    },
+
+    
+
+    abort : function(){
+        if(this.transaction){
+            Roo.Ajax.abort(this.transaction);
+        }
+    },
+
+    
+
+    isUpdating : function(){
+        if(this.transaction){
+            return  Roo.Ajax.isLoading(this.transaction);
+        }
+        return  false;
+    }
+});
+
+
+
+   Roo.UpdateManager.defaults = {
+       
+
+         timeout : 30,
+
+         
+
+        loadScripts : false,
+
+        
+
+        sslBlankUrl : (Roo.SSL_SECURE_URL || "javascript:false"),
+        
+
+        disableCaching : false,
+        
+
+        showLoadIndicator : true,
+        
+
+        indicatorText : '<div class="loading-indicator">Loading...</div>'
+   };
+
+
+
+Roo.UpdateManager.updateElement = function(el, V, W, X){
+    var  um = Roo.get(el, true).getUpdateManager();
+    Roo.apply(um, X);
+    um.update(V, W, X ? X.callback : null);
+};
+
+Roo.UpdateManager.update = Roo.UpdateManager.updateElement;
+
+
+Roo.UpdateManager.BasicRenderer = function(){};
+
+Roo.UpdateManager.BasicRenderer.prototype = {
+    
+
+     render : function(el, Y, Z, a){
+        el.update(Y.responseText, Z.loadScripts, a);
+    }
+};
+
+
+
+
+
+
+Roo.util.DelayedTask = function(fn, A, B){
+    var  id = null, d, t;
+
+    var  C = function(){
+        var  D = new  Date().getTime();
+        if(D - t >= d){
+            clearInterval(id);
+            id = null;
+            fn.apply(A, B || []);
+        }
+    };
+    
+
+    this.delay = function(D, E, F, G){
+        if(id && D != d){
+            this.cancel();
+        }
+
+        d = D;
+        t = new  Date().getTime();
+        fn = E || fn;
+        A = F || A;
+        B = G || B;
+        if(!id){
+            id = setInterval(C, d);
+        }
+    };
+
+    
+
+    this.cancel = function(){
+        if(id){
+            clearInterval(id);
+            id = null;
+        }
+    };
+};
+
+
+Roo.util.TaskRunner = function(A){
+    A = A || 10;
+    var  B = [], C = [];
+    var  id = 0;
+    var  D = false;
+
+    var  E = function(){
+        D = false;
+        clearInterval(id);
+        id = 0;
+    };
+
+    var  F = function(){
+        if(!D){
+            D = true;
+            id = setInterval(H, A);
+        }
+    };
+
+    var  G = function(I){
+        C.push(I);
+        if(I.onStop){
+            I.onStop();
+        }
+    };
+
+    var  H = function(){
+        if(C.length > 0){
+            for(var  i = 0, len = C.length; i < len; i++){
+                B.remove(C[i]);
+            }
+
+            C = [];
+            if(B.length < 1){
+                E();
+                return;
+            }
+        }
+        var  I = new  Date().getTime();
+        for(var  i = 0, len = B.length; i < len; ++i){
+            var  t = B[i];
+            var  itime = I - t.taskRunTime;
+            if(t.interval <= itime){
+                var  rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
+                t.taskRunTime = I;
+                if(rt === false || t.taskRunCount === t.repeat){
+                    G(t);
+                    return;
+                }
+            }
+            if(t.duration && t.duration <= (I - t.taskStartTime)){
+                G(t);
+            }
+        }
+    };
+
+    
+
+    this.start = function(I){
+        B.push(I);
+        I.taskStartTime = new  Date().getTime();
+        I.taskRunTime = 0;
+        I.taskRunCount = 0;
+        F();
+        return  I;
+    };
+
+    this.stop = function(I){
+        G(I);
+        return  I;
+    };
+
+    this.stopAll = function(){
+        E();
+        for(var  i = 0, len = B.length; i < len; i++){
+            if(B[i].onStop){
+                B[i].onStop();
+            }
+        }
+
+        B = [];
+        C = [];
+    };
+};
+
+Roo.TaskMgr = new  Roo.util.TaskRunner();
+
+
+
+
+
+Roo.util.MixedCollection = function(A, B){
+    this.items = [];
+    this.map = {};
+    this.keys = [];
+    this.length = 0;
+    this.addEvents({
+        
+
+        "clear" : true,
+        
+
+        "add" : true,
+        
+
+        "replace" : true,
+        
+
+        "remove" : true,
+        "sort" : true
+    });
+    this.allowFunctions = A === true;
+    if(B){
+        this.getKey = B;
+    }
+
+    Roo.util.MixedCollection.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.util.MixedCollection, Roo.util.Observable, {
+    allowFunctions : false,
+    
+
+
+    add : function(C, o){
+        if(arguments.length == 1){
+            o = arguments[0];
+            C = this.getKey(o);
+        }
+        if(typeof  C == "undefined" || C === null){
+            this.length++;
+            this.items.push(o);
+            this.keys.push(null);
+        }else {
+            var  old = this.map[C];
+            if(old){
+                return  this.replace(C, o);
+            }
+
+            this.length++;
+            this.items.push(o);
+            this.map[C] = o;
+            this.keys.push(C);
+        }
+
+        this.fireEvent("add", this.length-1, o, C);
+        return  o;
+    },
+   
+
+
+    getKey : function(o){
+         return  o.id; 
+    },
+   
+
+
+    replace : function(D, o){
+        if(arguments.length == 1){
+            o = arguments[0];
+            D = this.getKey(o);
+        }
+        var  E = this.item(D);
+        if(typeof  D == "undefined" || D === null || typeof  E == "undefined"){
+             return  this.add(D, o);
+        }
+        var  F = this.indexOfKey(D);
+        this.items[F] = o;
+        this.map[D] = o;
+        this.fireEvent("replace", D, E, o);
+        return  o;
+    },
+   
+
+
+    addAll : function(G){
+        if(arguments.length > 1 || G  instanceof  Array){
+            var  args = arguments.length > 1 ? arguments : G;
+            for(var  i = 0, len = args.length; i < len; i++){
+                this.add(args[i]);
+            }
+        }else {
+            for(var  D  in  G){
+                if(this.allowFunctions || typeof  G[D] != "function"){
+                    this.add(D, G[D]);
+                }
+            }
+        }
+    },
+   
+
+
+    each : function(fn, H){
+        var  I = [].concat(this.items); 
+        for(var  i = 0, len = I.length; i < len; i++){
+            if(fn.call(H || I[i], I[i], i, len) === false){
+                break;
+            }
+        }
+    },
+   
+
+
+    eachKey : function(fn, J){
+        for(var  i = 0, len = this.keys.length; i < len; i++){
+            fn.call(J || window, this.keys[i], this.items[i], i, len);
+        }
+    },
+   
+
+
+    find : function(fn, K){
+        for(var  i = 0, len = this.items.length; i < len; i++){
+            if(fn.call(K || window, this.items[i], this.keys[i])){
+                return  this.items[i];
+            }
+        }
+        return  null;
+    },
+   
+
+
+    insert : function(L, M, o){
+        if(arguments.length == 2){
+            o = arguments[1];
+            M = this.getKey(o);
+        }
+        if(L >= this.length){
+            return  this.add(M, o);
+        }
+
+        this.length++;
+        this.items.splice(L, 0, o);
+        if(typeof  M != "undefined" && M != null){
+            this.map[M] = o;
+        }
+
+        this.keys.splice(L, 0, M);
+        this.fireEvent("add", L, o, M);
+        return  o;
+    },
+   
+
+
+    remove : function(o){
+        return  this.removeAt(this.indexOf(o));
+    },
+   
+
+
+    removeAt : function(N){
+        if(N < this.length && N >= 0){
+            this.length--;
+            var  o = this.items[N];
+            this.items.splice(N, 1);
+            var  M = this.keys[N];
+            if(typeof  M != "undefined"){
+                delete  this.map[M];
+            }
+
+            this.keys.splice(N, 1);
+            this.fireEvent("remove", o, M);
+        }
+    },
+   
+
+
+    removeKey : function(O){
+        return  this.removeAt(this.indexOfKey(O));
+    },
+   
+
+
+    getCount : function(){
+        return  this.length; 
+    },
+   
+
+
+    indexOf : function(o){
+        if(!this.items.indexOf){
+            for(var  i = 0, len = this.items.length; i < len; i++){
+                if(this.items[i] == o) return  i;
+            }
+            return  -1;
+        }else {
+            return  this.items.indexOf(o);
+        }
+    },
+   
+
+
+    indexOfKey : function(P){
+        if(!this.keys.indexOf){
+            for(var  i = 0, len = this.keys.length; i < len; i++){
+                if(this.keys[i] == P) return  i;
+            }
+            return  -1;
+        }else {
+            return  this.keys.indexOf(P);
+        }
+    },
+   
+
+
+    item : function(Q){
+        var  R = typeof  this.map[Q] != "undefined" ? this.map[Q] : this.items[Q];
+        return  typeof  R != 'function' || this.allowFunctions ? R : null; 
+    },
+    
+
+
+    itemAt : function(S){
+        return  this.items[S];
+    },
+    
+
+
+    key : function(T){
+        return  this.map[T];
+    },
+   
+
+
+    contains : function(o){
+        return  this.indexOf(o) != -1;
+    },
+   
+
+
+    containsKey : function(U){
+        return  typeof  this.map[U] != "undefined";
+    },
+   
+
+
+    clear : function(){
+        this.length = 0;
+        this.items = [];
+        this.keys = [];
+        this.map = {};
+        this.fireEvent("clear");
+    },
+   
+
+
+    first : function(){
+        return  this.items[0]; 
+    },
+   
+
+
+    last : function(){
+        return  this.items[this.length-1];   
+    },
+    
+    _sort : function(V, W, fn){
+        var  X = String(W).toUpperCase() == "DESC" ? -1 : 1;
+        fn = fn || function(a, b){
+            return  a-b;
+        };
+        var  c = [], k = this.keys, Y = this.items;
+        for(var  i = 0, len = Y.length; i < len; i++){
+            c[c.length] = {key: k[i], value: Y[i], index: i};
+        }
+
+        c.sort(function(a, b){
+            var  v = fn(a[V], b[V]) * X;
+            if(v == 0){
+                v = (a.index < b.index ? -1 : 1);
+            }
+            return  v;
+        });
+        for(var  i = 0, len = c.length; i < len; i++){
+            Y[i] = c[i].value;
+            k[i] = c[i].key;
+        }
+
+        this.fireEvent("sort", this);
+    },
+    
+    
+
+    sort : function(Z, fn){
+        this._sort("value", Z, fn);
+    },
+    
+    
+
+    keySort : function(a, fn){
+        this._sort("key", a, fn || function(a, b){
+            return  String(a).toUpperCase()-String(b).toUpperCase();
+        });
+    },
+    
+    
+
+    getRange : function(b, d){
+        var  e = this.items;
+        if(e.length < 1){
+            return  [];
+        }
+
+        b = b || 0;
+        d = Math.min(typeof  d == "undefined" ? this.length-1 : d, this.length-1);
+        var  r = [];
+        if(b <= d){
+            for(var  i = b; i <= d; i++) {
+                   r[r.length] = e[i];
+            }
+        }else {
+            for(var  i = b; i >= d; i--) {
+                   r[r.length] = e[i];
+            }
+        }
+        return  r;
+    },
+        
+    
+
+    filter : function(f, g){
+        if(!g.exec){ 
+            g = String(g);
+            if(g.length == 0){
+                return  this.clone();
+            }
+
+            g = new  RegExp("^" + Roo.escapeRe(g), "i");
+        }
+        return  this.filterBy(function(o){
+            return  o && g.test(o[f]);
+        });
+       },
+    
+    
+
+    filterBy : function(fn, h){
+        var  r = new  Roo.util.MixedCollection();
+        r.getKey = this.getKey;
+        var  k = this.keys, it = this.items;
+        for(var  i = 0, len = it.length; i < len; i++){
+            if(fn.call(h||this, it[i], k[i])){
+                               r.add(k[i], it[i]);
+                       }
+        }
+        return  r;
+    },
+    
+    
+
+    clone : function(){
+        var  r = new  Roo.util.MixedCollection();
+        var  k = this.keys, it = this.items;
+        for(var  i = 0, len = it.length; i < len; i++){
+            r.add(k[i], it[i]);
+        }
+
+        r.getKey = this.getKey;
+        return  r;
+    }
+});
+
+
+Roo.util.MixedCollection.prototype.get = Roo.util.MixedCollection.prototype.item;
+
+
+
+
+Roo.util.JSON = new  (function(){
+    var  useHasOwn = {}.hasOwnProperty ? true : false;
+    
+    
+    
+    
+    var  pad = function(n) {
+        return  n < 10 ? "0" + n : n;
+    };
+    
+    var  m = {
+        "\b": '\\b',
+        "\t": '\\t',
+        "\n": '\\n',
+        "\f": '\\f',
+        "\r": '\\r',
+        '"' : '\\"',
+        "\\": '\\\\'
+    };
+
+    var  encodeString = function(s){
+        if (/["\\\x00-\x1f]/.test(s)) {
+            return  '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
+                var  c = m[b];
+                if(c){
+                    return  c;
+                }
+
+                c = b.charCodeAt();
+                return  "\\u00" +
+                    Math.floor(c / 16).toString(16) +
+                    (c % 16).toString(16);
+            }) + '"';
+        }
+        return  '"' + s + '"';
+    };
+    
+    var  encodeArray = function(o){
+        var  a = ["["], b, i, l = o.length, v;
+            for (i = 0; i < l; i += 1) {
+                v = o[i];
+                switch (typeof  v) {
+                    case  "undefined":
+                    case  "function":
+                    case  "unknown":
+                        break;
+                    default:
+                        if (b) {
+                            a.push(',');
+                        }
+
+                        a.push(v === null ? "null" : Roo.util.JSON.encode(v));
+                        b = true;
+                }
+            }
+
+            a.push("]");
+            return  a.join("");
+    };
+    
+    var  encodeDate = function(o){
+        return  '"' + o.getFullYear() + "-" +
+                pad(o.getMonth() + 1) + "-" +
+                pad(o.getDate()) + "T" +
+                pad(o.getHours()) + ":" +
+                pad(o.getMinutes()) + ":" +
+                pad(o.getSeconds()) + '"';
+    };
+    
+    
+
+    this.encode = function(o){
+        if(typeof  o == "undefined" || o === null){
+            return  "null";
+        }else  if(o  instanceof  Array){
+            return  encodeArray(o);
+        }else  if(o  instanceof  Date){
+            return  encodeDate(o);
+        }else  if(typeof  o == "string"){
+            return  encodeString(o);
+        }else  if(typeof  o == "number"){
+            return  isFinite(o) ? String(o) : "null";
+        }else  if(typeof  o == "boolean"){
+            return  String(o);
+        }else  {
+            var  a = ["{"], b, i, v;
+            for (i  in  o) {
+                if(!useHasOwn || o.hasOwnProperty(i)) {
+                    v = o[i];
+                    switch (typeof  v) {
+                    case  "undefined":
+                    case  "function":
+                    case  "unknown":
+                        break;
+                    default:
+                        if(b){
+                            a.push(',');
+                        }
+
+                        a.push(this.encode(i), ":",
+                                v === null ? "null" : this.encode(v));
+                        b = true;
+                    }
+                }
+            }
+
+            a.push("}");
+            return  a.join("");
+        }
+    };
+    
+    
+
+    this.decode = function(json){
+        
+
+        return  eval("(" + json + ')');
+    };
+})();
+
+
+Roo.encode = Roo.util.JSON.encode;
+
+
+Roo.decode = Roo.util.JSON.decode;
+
+
+
+
+
+Roo.util.Format = function(){
+    var  A = /^\s+|\s+$/g;
+    return  {
+        
+
+        ellipsis : function(R, S){
+            if(R && R.length > S){
+                return  R.substr(0, S-3)+"...";
+            }
+            return  R;
+        },
+
+        
+
+        undef : function(T){
+            return  typeof  T != "undefined" ? T : "";
+        },
+
+        
+
+        htmlEncode : function(U){
+            return  !U ? U : String(U).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
+        },
+
+        
+
+        htmlDecode : function(V){
+            return  !V ? V : String(V).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"');
+        },
+
+        
+
+        trim : function(W){
+            return  String(W).replace(A, "");
+        },
+
+        
+
+        substr : function(X, Y, Z){
+            return  String(X).substr(Y, Z);
+        },
+
+        
+
+        lowercase : function(a){
+            return  String(a).toLowerCase();
+        },
+
+        
+
+        uppercase : function(b){
+            return  String(b).toUpperCase();
+        },
+
+        
+
+        capitalize : function(c){
+            return  !c ? c : c.charAt(0).toUpperCase() + c.substr(1).toLowerCase();
+        },
+
+        
+        call : function(value, fn){
+            if(arguments.length > 2){
+                var  args = Array.prototype.slice.call(arguments, 2);
+                args.unshift(value);
+                 
+                return  
+  eval(fn).apply(window, args);
+            }else {
+                
+
+                return  
+ eval(fn).call(window, value);
+            }
+        },
+
+        
+
+        usMoney : function(v){
+            v = (Math.round((v-0)*100))/100;
+            v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
+            v = String(v);
+            var  ps = v.split('.');
+            var  d = ps[0];
+            var  e = ps[1] ? '.'+ ps[1] : '.00';
+            var  r = /(\d+)(\d{3})/;
+            while (r.test(d)) {
+                d = d.replace(r, '$1' + ',' + '$2');
+            }
+            return  "$" + d + e ;
+        },
+
+        
+
+        date : function(v, f){
+            if(!v){
+                return  "";
+            }
+            if(!(v  instanceof  Date)){
+                v = new  Date(Date.parse(v));
+            }
+            return  v.dateFormat(f || "m/d/Y");
+        },
+
+        
+
+        dateRenderer : function(g){
+            return  function(v){
+                return  Roo.util.Format.date(v, g);  
+            };
+        },
+
+        
+        stripTagsRE : /<\/?[^>]+>/gi,
+        
+        
+
+        stripTags : function(v){
+            return  !v ? v : String(v).replace(this.stripTagsRE, "");
+        }
+    };
+}();
+
+
+
+
+
+
+
+Roo.MasterTemplate = function(){
+    Roo.MasterTemplate.superclass.constructor.apply(this, arguments);
+    this.originalHtml = this.html;
+    var  st = {};
+    var  m, re = this.subTemplateRe;
+    re.lastIndex = 0;
+    var  A = 0;
+    while(m = re.exec(this.html)){
+        var  name = m[1], content = m[2];
+        st[A] = {
+            name: name,
+            index: A,
+            buffer: [],
+            tpl : new  Roo.Template(content)
+        };
+        if(name){
+            st[name] = st[A];
+        }
+
+        st[A].tpl.compile();
+        st[A].tpl.call = this.call.createDelegate(this);
+        A++;
+    }
+
+    this.subCount = A;
+    this.subs = st;
+};
+Roo.extend(Roo.MasterTemplate, Roo.Template, {
+    
+
+    subTemplateRe : /<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,
+
+    
+
+     add : function(B, C){
+        if(arguments.length == 1){
+            C = arguments[0];
+            B = 0;
+        }
+        var  s = this.subs[B];
+        s.buffer[s.buffer.length] = s.tpl.apply(C);
+        return  this;
+    },
+
+    
+
+    fill : function(D, E, F){
+        var  a = arguments;
+        if(a.length == 1 || (a.length == 2 && typeof  a[1] == "boolean")){
+            E = a[0];
+            D = 0;
+            F = a[1];
+        }
+        if(F){
+            this.reset();
+        }
+        for(var  i = 0, len = E.length; i < len; i++){
+            this.add(D, E[i]);
+        }
+        return  this;
+    },
+
+    
+
+     reset : function(){
+        var  s = this.subs;
+        for(var  i = 0; i < this.subCount; i++){
+            s[i].buffer = [];
+        }
+        return  this;
+    },
+
+    applyTemplate : function(G){
+        var  s = this.subs;
+        var  H = -1;
+        this.html = this.originalHtml.replace(this.subTemplateRe, function(m, I){
+            return  s[++H].buffer.join("");
+        });
+        return  Roo.MasterTemplate.superclass.applyTemplate.call(this, G);
+    },
+
+    apply : function(){
+        return  this.applyTemplate.apply(this, arguments);
+    },
+
+    compile : function(){return  this;}
+});
+
+
+
+Roo.MasterTemplate.prototype.addAll = Roo.MasterTemplate.prototype.fill;
+
+Roo.MasterTemplate.from = function(el, I){
+    el = Roo.getDom(el);
+    return  new  Roo.MasterTemplate(el.value || el.innerHTML, I || '');
+};
+
+
+
+
+
+Roo.util.CSS = function(){
+       var  A = null;
+       var  B = document;
+
+    var  C = /(-[a-z])/gi;
+    var  D = function(m, a){ return  a.charAt(1).toUpperCase(); };
+
+   return  {
+   
+
+   createStyleSheet : function(P, id){
+       var  ss;
+       var  Q = B.getElementsByTagName("head")[0];
+       var  R = B.createElement("style");
+       R.setAttribute("type", "text/css");
+       if(id){
+           R.setAttribute("id", id);
+       }
+       if(Roo.isIE){
+           Q.appendChild(R);
+           ss = R.styleSheet;
+           ss.cssText = P;
+       }else {
+           try{
+                R.appendChild(B.createTextNode(P));
+           }catch(e){
+               R.cssText = P; 
+           }
+
+           Q.appendChild(R);
+           ss = R.styleSheet ? R.styleSheet : (R.sheet || B.styleSheets[B.styleSheets.length-1]);
+       }
+
+       this.cacheStyleSheet(ss);
+       return  ss;
+   },
+
+   
+
+   removeStyleSheet : function(id){
+       var  S = B.getElementById(id);
+       if(S){
+           S.parentNode.removeChild(S);
+       }
+   },
+
+   
+
+   swapStyleSheet : function(id, T){
+       this.removeStyleSheet(id);
+       var  ss = B.createElement("link");
+       ss.setAttribute("rel", "stylesheet");
+       ss.setAttribute("type", "text/css");
+       ss.setAttribute("id", id);
+       ss.setAttribute("href", T);
+       B.getElementsByTagName("head")[0].appendChild(ss);
+   },
+   
+   
+
+   refreshCache : function(){
+       return  this.getRules(true);
+   },
+
+   
+   cacheStyleSheet : function(ss){
+       if(!R){
+           R = {};
+       }
+       try{
+           var  ssRules = ss.cssRules || ss.rules;
+           for(var  j = ssRules.length-1; j >= 0; --j){
+               R[ssRules[j].selectorText] = ssRules[j];
+           }
+       }catch(e){}
+   },
+   
+   
+
+   getRules : function(U){
+               if(R == null || U){
+                       R = {};
+                       var  ds = B.styleSheets;
+                       for(var  i =0, len = ds.length; i < len; i++){
+                           try{
+                       this.cacheStyleSheet(ds[i]);
+                   }catch(e){} 
+               }
+               }
+               return  R;
+       },
+       
+       
+
+   getRule : function(V, W){
+               var  rs = this.getRules(W);
+               if(!(V  instanceof  Array)){
+                   return  rs[V];
+               }
+               for(var  i = 0; i < V.length; i++){
+                       if(rs[V[i]]){
+                               return  rs[V[i]];
+                       }
+               }
+               return  null;
+       },
+       
+       
+       
+
+   updateRule : function(X, Y, Z){
+               if(!(X  instanceof  Array)){
+                       var  rule = this.getRule(X);
+                       if(rule){
+                               rule.style[Y.replace(C, D)] = Z;
+                               return  true;
+                       }
+               }else {
+                       for(var  i = 0; i < X.length; i++){
+                               if(this.updateRule(X[i], Y, Z)){
+                                       return  true;
+                               }
+                       }
+               }
+               return  false;
+       }
+   };  
+}();
+
+
+
+
+
+
+Roo.util.ClickRepeater = function(el, A)
+{
+    this.el = Roo.get(el);
+    this.el.unselectable();
+
+    Roo.apply(this, A);
+
+    this.addEvents({
+    
+
+        "mousedown" : true,
+    
+
+        "click" : true,
+    
+
+        "mouseup" : true
+    });
+
+    this.el.on("mousedown", this.handleMouseDown, this);
+    if(this.preventDefault || this.stopDefault){
+        this.el.on("click", function(e){
+            if(this.preventDefault){
+                e.preventDefault();
+            }
+            if(this.stopDefault){
+                e.stopEvent();
+            }
+        }, this);
+    }
+
+    
+    if(this.handler){
+        this.on("click", this.handler,  this.scope || this);
+    }
+
+
+    Roo.util.ClickRepeater.superclass.constructor.call(this);
+};
+
+Roo.extend(Roo.util.ClickRepeater, Roo.util.Observable, {
+    interval : 20,
+    delay: 250,
+    preventDefault : true,
+    stopDefault : false,
+    timer : 0,
+
+    
+    handleMouseDown : function(){
+        clearTimeout(this.timer);
+        this.el.blur();
+        if(this.pressClass){
+            this.el.addClass(this.pressClass);
+        }
+
+        this.mousedownTime = new  Date();
+
+        Roo.get(document).on("mouseup", this.handleMouseUp, this);
+        this.el.on("mouseout", this.handleMouseOut, this);
+
+        this.fireEvent("mousedown", this);
+        this.fireEvent("click", this);
+        
+        this.timer = this.click.defer(this.delay || this.interval, this);
+    },
+
+    
+    click : function(){
+        this.fireEvent("click", this);
+        this.timer = this.click.defer(this.getInterval(), this);
+    },
+
+    
+    getInterval: function(){
+        if(!this.accelerate){
+            return  this.interval;
+        }
+        var  B = this.mousedownTime.getElapsed();
+        if(B < 500){
+            return  400;
+        }else  if(B < 1700){
+            return  320;
+        }else  if(B < 2600){
+            return  250;
+        }else  if(B < 3500){
+            return  180;
+        }else  if(B < 4400){
+            return  140;
+        }else  if(B < 5300){
+            return  80;
+        }else  if(B < 6200){
+            return  50;
+        }else {
+            return  10;
+        }
+    },
+
+    
+    handleMouseOut : function(){
+        clearTimeout(this.timer);
+        if(this.pressClass){
+            this.el.removeClass(this.pressClass);
+        }
+
+        this.el.on("mouseover", this.handleMouseReturn, this);
+    },
+
+    
+    handleMouseReturn : function(){
+        this.el.un("mouseover", this.handleMouseReturn);
+        if(this.pressClass){
+            this.el.addClass(this.pressClass);
+        }
+
+        this.click();
+    },
+
+    
+    handleMouseUp : function(){
+        clearTimeout(this.timer);
+        this.el.un("mouseover", this.handleMouseReturn);
+        this.el.un("mouseout", this.handleMouseOut);
+        Roo.get(document).un("mouseup", this.handleMouseUp);
+        this.el.removeClass(this.pressClass);
+        this.fireEvent("mouseup", this);
+    }
+});
+
+
+
+
+
+Roo.KeyNav = function(el, A){
+    this.el = Roo.get(el);
+    Roo.apply(this, A);
+    if(!this.disabled){
+        this.disabled = true;
+        this.enable();
+    }
+};
+
+Roo.KeyNav.prototype = {
+    
+
+    disabled : false,
+    
+
+    defaultEventAction: "stopEvent",
+    
+
+    forceKeyDown : false,
+
+    
+    prepareEvent : function(e){
+        var  k = e.getKey();
+        var  h = this.keyToHandler[k];
+        
+        
+        
+        if(Roo.isSafari && h && k >= 37 && k <= 40){
+            e.stopEvent();
+        }
+    },
+
+    
+    relay : function(e){
+        var  k = e.getKey();
+        var  h = this.keyToHandler[k];
+        if(h && this[h]){
+            if(this.doRelay(e, this[h], h) !== true){
+                e[this.defaultEventAction]();
+            }
+        }
+    },
+
+    
+    doRelay : function(e, h, B){
+        return  h.call(this.scope || this, e);
+    },
+
+    
+    enter : false,
+    left : false,
+    right : false,
+    up : false,
+    down : false,
+    tab : false,
+    esc : false,
+    pageUp : false,
+    pageDown : false,
+    del : false,
+    home : false,
+    end : false,
+
+    
+    keyToHandler : {
+        37 : "left",
+        39 : "right",
+        38 : "up",
+        40 : "down",
+        33 : "pageUp",
+        34 : "pageDown",
+        46 : "del",
+        36 : "home",
+        35 : "end",
+        13 : "enter",
+        27 : "esc",
+        9  : "tab"
+    },
+
+       
+
+       enable: function(){
+               if(this.disabled){
+            
+            
+            if(this.forceKeyDown || Roo.isIE || Roo.isAir){
+                this.el.on("keydown", this.relay,  this);
+            }else {
+                this.el.on("keydown", this.prepareEvent,  this);
+                this.el.on("keypress", this.relay,  this);
+            }
+
+                   this.disabled = false;
+               }
+       },
+
+       
+
+       disable: function(){
+               if(!this.disabled){
+                   if(this.forceKeyDown || Roo.isIE || Roo.isAir){
+                this.el.un("keydown", this.relay);
+            }else {
+                this.el.un("keydown", this.prepareEvent);
+                this.el.un("keypress", this.relay);
+            }
+
+                   this.disabled = true;
+               }
+       }
+};
+
+
+
+
+
+Roo.KeyMap = function(el, A, B){
+    this.el  = Roo.get(el);
+    this.eventName = B || "keydown";
+    this.bindings = [];
+    if(A){
+        this.addBinding(A);
+    }
+
+    this.enable();
+};
+
+Roo.KeyMap.prototype = {
+    
+
+    stopEvent : false,
+
+    
+
+       addBinding : function(C){
+        if(C  instanceof  Array){
+            for(var  i = 0, len = C.length; i < len; i++){
+                this.addBinding(C[i]);
+            }
+            return;
+        }
+        var  D = C.key,
+            E = C.shift, 
+            F = C.ctrl, 
+            G = C.alt,
+            fn = C.fn,
+            H = C.scope;
+        if(typeof  D == "string"){
+            var  ks = [];
+            var  keyString = D.toUpperCase();
+            for(var  j = 0, len = keyString.length; j < len; j++){
+                ks.push(keyString.charCodeAt(j));
+            }
+
+            D = ks;
+        }
+        var  I = D  instanceof  Array;
+        var  J = function(e){
+            if((!E || e.shiftKey) && (!F || e.ctrlKey) &&  (!G || e.altKey)){
+                var  k = e.getKey();
+                if(I){
+                    for(var  i = 0, len = D.length; i < len; i++){
+                        if(D[i] == k){
+                          if(this.stopEvent){
+                              e.stopEvent();
+                          }
+
+                          fn.call(H || window, k, e);
+                          return;
+                        }
+                    }
+                }else {
+                    if(k == D){
+                        if(this.stopEvent){
+                           e.stopEvent();
+                        }
+
+                        fn.call(H || window, k, e);
+                    }
+                }
+            }
+        };
+        this.bindings.push(J);  
+       },
+
+    
+
+    on : function(K, fn, L){
+        var  M, N, O, P;
+        if(typeof  K == "object" && !(K  instanceof  Array)){
+            M = K.key;
+            N = K.shift;
+            O = K.ctrl;
+            P = K.alt;
+        }else {
+            M = K;
+        }
+
+        this.addBinding({
+            key: M,
+            shift: N,
+            ctrl: O,
+            alt: P,
+            fn: fn,
+            scope: L
+        })
+    },
+
+    
+    handleKeyDown : function(e){
+           if(this.enabled){ 
+           var  b = this.bindings;
+           for(var  i = 0, len = b.length; i < len; i++){
+               b[i].call(this, e);
+           }
+           }
+       },
+       
+       
+
+       isEnabled : function(){
+           return  this.enabled;  
+       },
+       
+       
+
+       enable: function(){
+               if(!this.enabled){
+                   this.el.on(this.eventName, this.handleKeyDown, this);
+                   this.enabled = true;
+               }
+       },
+
+       
+
+       disable: function(){
+               if(this.enabled){
+                   this.el.removeListener(this.eventName, this.handleKeyDown, this);
+                   this.enabled = false;
+               }
+       }
+};
+
+
+
+
+
+Roo.util.TextMetrics = function(){
+    var  A;
+    return  {
+        
+
+        measure : function(el, E, F){
+            if(!A){
+                A = Roo.util.TextMetrics.Instance(el, F);
+            }
+
+            A.bind(el);
+            A.setFixedWidth(F || 'auto');
+            return  A.getSize(E);
+        },
+
+        
+
+        createInstance : function(el, G){
+            return  Roo.util.TextMetrics.Instance(el, G);
+        }
+    };
+}();
+
+
+Roo.util.TextMetrics.Instance = function(B, C){
+    var  ml = new  Roo.Element(document.createElement('div'));
+    document.body.appendChild(ml.dom);
+    ml.position('absolute');
+    ml.setLeftTop(-1000, -1000);
+    ml.hide();
+
+    if(C){
+        ml.setWidth(C);
+    }
+     
+    var  D = {
+        
+
+        getSize : function(E){
+            ml.update(E);
+            var  s = ml.getSize();
+            ml.update('');
+            return  s;
+        },
+
+        
+
+        bind : function(el){
+            ml.setStyle(
+                Roo.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height')
+            );
+        },
+
+        
+
+        setFixedWidth : function(F){
+            ml.setWidth(F);
+        },
+
+        
+
+        getWidth : function(G){
+            ml.dom.style.width = 'auto';
+            return  this.getSize(G).width;
+        },
+
+        
+
+        getHeight : function(H){
+            return  this.getSize(H).height;
+        }
+    };
+
+    D.bind(B);
+
+    return  D;
+};
+
+
+Roo.Element.measureText = Roo.util.TextMetrics.measure;
+
+
+
+
+
+Roo.state.Provider = function(){
+    
+
+    this.addEvents({
+        "statechange": true
+    });
+    this.state = {};
+    Roo.state.Provider.superclass.constructor.call(this);
+};
+Roo.extend(Roo.state.Provider, Roo.util.Observable, {
+    
+
+    get : function(A, B){
+        return  typeof  this.state[A] == "undefined" ?
+            B : this.state[A];
+    },
+    
+    
+
+    clear : function(C){
+        delete  this.state[C];
+        this.fireEvent("statechange", this, C, null);
+    },
+    
+    
+
+    set : function(D, E){
+        this.state[D] = E;
+        this.fireEvent("statechange", this, D, E);
+    },
+    
+    
+
+    decodeValue : function(F){
+        var  re = /^(a|n|d|b|s|o)\:(.*)$/;
+        var  G = re.exec(unescape(F));
+        if(!G || !G[1]) return; 
+        var  H = G[1];
+        var  v = G[2];
+        switch(H){
+            case  "n":
+                return  parseFloat(v);
+            case  "d":
+                return  new  Date(Date.parse(v));
+            case  "b":
+                return  (v == "1");
+            case  "a":
+                var  all = [];
+                var  values = v.split("^");
+                for(var  i = 0, len = values.length; i < len; i++){
+                    all.push(this.decodeValue(values[i]));
+                }
+                return  all;
+           case  "o":
+                var  all = {};
+                var  values = v.split("^");
+                for(var  i = 0, len = values.length; i < len; i++){
+                    var  kv = values[i].split("=");
+                    all[kv[0]] = this.decodeValue(kv[1]);
+                }
+                return  all;
+           default:
+                return  v;
+        }
+    },
+    
+    
+
+    encodeValue : function(v){
+        var  I;
+        if(typeof  v == "number"){
+            I = "n:" + v;
+        }else  if(typeof  v == "boolean"){
+            I = "b:" + (v ? "1" : "0");
+        }else  if(v  instanceof  Date){
+            I = "d:" + v.toGMTString();
+        }else  if(v  instanceof  Array){
+            var  flat = "";
+            for(var  i = 0, len = v.length; i < len; i++){
+                flat += this.encodeValue(v[i]);
+                if(i != len-1) flat += "^";
+            }
+
+            I = "a:" + flat;
+        }else  if(typeof  v == "object"){
+            var  flat = "";
+            for(var  key  in  v){
+                if(typeof  v[key] != "function"){
+                    flat += key + "=" + this.encodeValue(v[key]) + "^";
+                }
+            }
+
+            I = "o:" + flat.substring(0, flat.length-1);
+        }else {
+            I = "s:" + v;
+        }
+        return  escape(I);        
+    }
+});
+
+
+
+
+
+
+Roo.state.Manager = function(){
+    var  A = new  Roo.state.Provider();
+    
+    return  {
+        
+
+        setProvider : function(H){
+            A = H;
+        },
+        
+        
+
+        get : function(I, J){
+            return  A.get(I, J);
+        },
+        
+        
+
+         set : function(K, L){
+            A.set(K, L);
+        },
+        
+        
+
+        clear : function(M){
+            A.clear(M);
+        },
+        
+        
+
+        getProvider : function(){
+            return  A;
+        }
+    };
+}();
+
+
+
+
+
+Roo.state.CookieProvider = function(A){
+    Roo.state.CookieProvider.superclass.constructor.call(this);
+    this.path = "/";
+    this.expires = new  Date(new  Date().getTime()+(1000*60*60*24*7)); 
+    this.domain = null;
+    this.secure = false;
+    Roo.apply(this, A);
+    this.state = this.readCookies();
+};
+
+Roo.extend(Roo.state.CookieProvider, Roo.state.Provider, {
+    
+    set : function(B, C){
+        if(typeof  C == "undefined" || C === null){
+            this.clear(B);
+            return;
+        }
+
+        this.setCookie(B, C);
+        Roo.state.CookieProvider.superclass.set.call(this, B, C);
+    },
+
+    
+    clear : function(D){
+        this.clearCookie(D);
+        Roo.state.CookieProvider.superclass.clear.call(this, D);
+    },
+
+    
+    readCookies : function(){
+        var  E = {};
+        var  c = document.cookie + ";";
+        var  re = /\s?(.*?)=(.*?);/g;
+       var  F;
+       while((F = re.exec(c)) != null){
+            var  D = F[1];
+            var  C = F[2];
+            if(D && D.substring(0,3) == "ys-"){
+                E[D.substr(3)] = this.decodeValue(C);
+            }
+        }
+        return  E;
+    },
+
+    
+    setCookie : function(G, H){
+        document.cookie = "ys-"+ G + "=" + this.encodeValue(H) +
+           ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
+           ((this.path == null) ? "" : ("; path=" + this.path)) +
+           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
+           ((this.secure == true) ? "; secure" : "");
+    },
+
+    
+    clearCookie : function(I){
+        document.cookie = "ys-" + I + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
+           ((this.path == null) ? "" : ("; path=" + this.path)) +
+           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
+           ((this.secure == true) ? "; secure" : "");
+    }
+});
index bd74343..65b662d 100644 (file)
@@ -4400,28 +4400,44 @@ Roo.DomHelper = function(){
 * For a list of available format functions, see {@link Roo.util.Format}.<br />
 * Usage:
 <pre><code>
-var t = new Roo.Template(
-    '&lt;div name="{id}"&gt;',
-        '&lt;span class="{cls}"&gt;{name:trim} {value:ellipsis(10)}&lt;/span&gt;',
-    '&lt;/div&gt;'
-);
+var t = new Roo.Template({
+    html :  '&lt;div name="{id}"&gt;' + 
+        '&lt;span class="{cls}"&gt;{name:trim} {someval:this.myformat}{value:ellipsis(10)}&lt;/span&gt;' +
+        '&lt;/div&gt;',
+    myformat: function (value, allValues) {
+        return 'XX' + value;
+    }
+});
 t.append('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'});
 </code></pre>
 * For more information see this blog post with examples: <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">DomHelper - Create Elements using DOM, HTML fragments and Templates</a>. 
 * @constructor
-* @param {String/Array} html The HTML fragment or an array of fragments to join("") or multiple arguments to join("")
+* @param {Object} cfg - Configuration object.
 */
-Roo.Template = function(html){
-    if(html instanceof Array){
-        html = html.join("");
+Roo.Template = function(cfg){
+    // BC!
+    if(cfg instanceof Array){
+        cfg = cfg.join("");
     }else if(arguments.length > 1){
-        html = Array.prototype.join.call(arguments, "");
+        cfg = Array.prototype.join.call(arguments, "");
     }
-    /**@private*/
-    this.html = html;
+    
+    
+    if (typeof(cfg) == 'object') {
+        Roo.apply(this,cfg)
+    } else {
+        // bc
+        this.html = cfg;
+    }
+    
     
 };
 Roo.Template.prototype = {
+    
+    /**
+     * @cfg {String} html  The HTML fragment or an array of fragments to join("") or multiple arguments to join("")
+     */
+    html : '',
     /**
      * Returns an HTML fragment of this template with the specified values applied.
      * @param {Object} values The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})